Di seguito sono riportate altre domande che penso di dover sapere:
-
Da una sessione non X? (significa che root non è connesso a X)
-
Se più persone hanno effettuato l'accesso su X, posso rilevare automaticamente chi si trova su quale schermo e quindi rilevare in modo programmatico su quale schermo ho bisogno per avviare l'app?
-
Posso avviare l'app come utente? (ok, sono sicuro al 99,999% che questo sia un sì)
-
Posso rilevare se gli utenti del gruppo X hanno effettuato l'accesso a X?
Risposta accettata:
Per avviare un programma grafico sul desktop di un utente, devi trovare due cose:su quale display si trova il desktop dell'utente (l'indirizzo) e quale cookie di autorizzazione utilizzare (la password).
Il comando seguente dovrebbe elencare i display locali a cui l'utente ha effettuato l'accesso (uno per riga) sulla maggior parte degli unice:
who | awk -v user="$target_user" '$1 == user && $2 ~ "^:" {print $2}'
Trovare il cookie di autorizzazione è un po' più difficile. Devi cercare il file cookie dell'utente, che è ~/.Xauthority
per impostazione predefinita (tutto ciò che serve è la posizione del file cookie, non è necessario estrarre il cookie da esso). Funziona su molti sistemi, ma non su tutti; dipende dal display manager e da come è impostato, e in particolare Gdm (l'impostazione predefinita su Ubuntu) non ha utilizzato la posizione predefinita l'ultima volta che ho guardato. Non riesco a pensare a un modo portatile per scoprire il vero file cookie X. Il modo più accurato per scoprirlo è scoprire il pid del processo X e cercare l'argomento per -auth
opzione. Un altro modo è trovare un processo in esecuzione su quel server X e prendere il suo XAUTHORITY
variabile d'ambiente. Se hai problemi a trovare il file cookie, consulta Aprire una finestra su un display X remoto (perché "Impossibile aprire il display")?
Una volta che hai entrambe le informazioni, inserisci il display scelto nel DISPLAY
variabile di ambiente, il file cookie di autorità X scelto nel XAUTHORITY
variabile di ambiente e sei a posto. Non importa quale utente viene eseguito dal programma; combinare con su
se ti va.