Následují další otázky, o kterých si myslím, že potřebuji vědět:
-
Z jiné než X Session? (to znamená, že root není přihlášen do X)
-
Pokud by bylo na X přihlášeno více lidí, mohl bych automaticky zjistit, kdo byl na které obrazovce, a tak programově zjistit, na které obrazovce potřebuji aplikaci spustit?
-
Mohu aplikaci spustit jako uživatel? (dobře, jsem si na 99,999 % jistý, že je to ano)
-
Mohu zjistit, zda jsou uživatelé skupiny X přihlášeni do X?
Přijatá odpověď:
Chcete-li spustit grafický program na ploše uživatele, musíte zjistit dvě věci:na jakém displeji je pracovní plocha uživatele (adresa) a jaký autorizační soubor cookie použít (heslo).
Následující příkaz by měl vypsat seznam lokálních obrazovek, na kterých je uživatel přihlášen (jedna na řádek) na většině Unices:
who | awk -v user="$target_user" '$1 == user && $2 ~ "^:" {print $2}'
Najít autorizační cookie je trochu těžší. Musíte vyhledat soubor cookie uživatele, což je ~/.Xauthority
ve výchozím nastavení (vše, co potřebujete, je umístění souboru cookie, nemusíte z něj soubor cookie extrahovat). To funguje na mnoha systémech, ale ne na všech; záleží na správci zobrazení a na tom, jak je nastaven, a zejména Gdm (výchozí nastavení na Ubuntu) nepoužilo výchozí umístění, když jsem se naposledy díval. Nenapadá mě přenosný způsob, jak zjistit skutečný soubor cookie X. Nejpřesnější způsob, jak to zjistit, je zjistit pid procesu X a hledat argument pro -auth
volba. Dalším způsobem je najít proces běžící na tomto X serveru a uchopit jeho XAUTHORITY
proměnná prostředí. Pokud máte potíže s nalezením souboru cookie, přečtěte si část Otevření okna na vzdáleném displeji X (proč „Nelze otevřít displej“)?
Jakmile budete mít obě informace, vložte vybraný displej do DISPLAY
proměnná prostředí, vybraný soubor cookie autority X v XAUTHORITY
proměnná prostředí a máte nastaveno. Nezáleží na tom, pod jakým uživatelem program běží; kombinovat s su
pokud chcete.