Voici d'autres questions que je pense avoir besoin de savoir :
-
D'une session non X ? (ce qui signifie que root n'est pas connecté à X)
-
Si plusieurs personnes étaient connectées sur X, pourrais-je détecter automatiquement qui était sur quel écran, et ainsi détecter par programmation sur quel écran je dois lancer l'application ?
-
Puis-je lancer l'application en tant qu'utilisateur ? (ok, je suis sûr à 99,999 % que c'est un oui)
-
Puis-je détecter si les utilisateurs du groupe X sont connectés à X ?
Réponse acceptée :
Pour lancer un programme graphique sur le bureau d'un utilisateur, vous devez trouver deux éléments :sur quel écran se trouve le bureau de l'utilisateur (l'adresse) et quel cookie d'autorisation utiliser (le mot de passe).
La commande suivante doit répertorier les affichages locaux auxquels l'utilisateur est connecté (un par ligne) sur la plupart des unix :
who | awk -v user="$target_user" '$1 == user && $2 ~ "^:" {print $2}'
Trouver le cookie d'autorisation est un peu plus difficile. Vous devez rechercher le fichier cookie de l'utilisateur, qui est ~/.Xauthority
par défaut (tout ce dont vous avez besoin est l'emplacement du fichier cookie, vous n'avez pas besoin d'en extraire le cookie). Cela fonctionne sur de nombreux systèmes, mais pas sur tous; cela dépend du gestionnaire d'affichage et de la façon dont il est configuré, et en particulier Gdm (la valeur par défaut sur Ubuntu) n'a pas utilisé l'emplacement par défaut la dernière fois que j'ai regardé. Je ne peux pas penser à un moyen portable de trouver le fichier de cookie X réel. Le moyen le plus précis de le savoir est de trouver le pid du processus X et de rechercher l'argument de -auth
option. Une autre façon est de trouver un processus en cours d'exécution sur ce serveur X et de récupérer son XAUTHORITY
variable d'environnement. Si vous ne parvenez pas à trouver le fichier cookie, consultez Ouvrir une fenêtre sur un affichage X distant (pourquoi "Impossible d'ouvrir l'affichage") ?
Une fois que vous avez les deux informations, mettez l'affichage choisi dans le DISPLAY
variable d'environnement, le fichier de cookie d'autorité X choisi dans XAUTHORITY
variable d'environnement, et vous êtes défini. Peu importe l'utilisateur sous lequel le programme s'exécute ; combiner avec su
si vous le souhaitez.