Las siguientes son otras preguntas que creo que necesito saber:
-
¿De una sesión no X? (lo que significa que root no ha iniciado sesión en X)
-
Si varias personas iniciaron sesión en X, ¿podría detectar automáticamente quién estaba en qué pantalla y, por lo tanto, detectar mediante programación en qué pantalla necesito iniciar la aplicación?
-
¿Puedo iniciar la aplicación como usuario? (está bien, estoy 99,999 % seguro de que es un sí)
-
¿Puedo detectar si los usuarios del grupo X están conectados a X?
Respuesta aceptada:
Para iniciar un programa gráfico en el escritorio de un usuario, debe encontrar dos cosas:en qué pantalla se encuentra el escritorio del usuario (la dirección) y qué cookie de autorización usar (la contraseña).
El siguiente comando debe enumerar las pantallas locales en las que el usuario ha iniciado sesión (una por línea) en la mayoría de los dispositivos:
who | awk -v user="$target_user" '$1 == user && $2 ~ "^:" {print $2}'
Encontrar la cookie de autorización es un poco más difícil. Tienes que buscar el archivo de cookies del usuario, que es ~/.Xauthority
de forma predeterminada (todo lo que necesita es la ubicación del archivo de cookies, no necesita extraer la cookie de él). Eso funciona en muchos sistemas, pero no en todos; depende del administrador de pantalla y de cómo esté configurado, y en particular, Gdm (el predeterminado en Ubuntu) no usó la ubicación predeterminada la última vez que miré. No puedo pensar en una forma portátil de averiguar el archivo de cookie X real. La forma más precisa de averiguarlo es averiguar el pid del proceso X y buscar el argumento para -auth
opción. Otra forma es encontrar un proceso que se esté ejecutando en ese servidor X y tomar su XAUTHORITY
variable del entorno. Si tiene problemas para encontrar el archivo de cookies, consulte Abrir una ventana en una pantalla X remota (¿por qué "No se puede abrir la pantalla")?
Una vez que tenga ambas piezas de información, coloque la pantalla elegida en el DISPLAY
variable de entorno, el archivo de cookies de autoridad X elegido en XAUTHORITY
variable de entorno, y listo. No importa con qué usuario se ejecute el programa; combinar con su
si quieres.