linux - trafico - Cómo ejecutar un programa X desde fuera de la sesión X(por ejemplo, desde la consola o SSH)
ssh interfaz grafica ubuntu (2)
El resultado es que debe conocer la pantalla X (colocada en la variable de entorno DISPLAY
) y la cookie mágica (colocada en un archivo, con el nombre de archivo en la variable de entorno XAUTHORITY
).
La manera rápida y sucia
En el sistema que ejecuta X, si es root o si es el mismo usuario que inició sesión en X, simplemente asuma los archivos de pantalla y cookies más comunes (funciona en casi cualquier instalación de escritorio estándar de cualquier distribución).
env DISPLAY=:0 XAUTHORITY=/home/whoever/.Xauthority /path/to/my/X/program
La manera más segura
Encuéntrelos en el entorno de un programa X ya en ejecución. Nuevamente, si es usuario root o el mismo usuario que inició sesión, esto le indicará (si el usuario está usando GNOME):
cat /proc/`pgrep -f ^x-session-manager`/environ /
| ruby -ne ''puts $_.split("/0").select { |e| e =~ /^(DISPLAY|XAUTHORITY)=/ }''
Sin ser la persona que inició sesión en la consola, ¿cómo ejecuto una aplicación X y la visualizo en esa sesión X? Supongamos que soy root, o que soy el mismo usuario que inicié sesión, por lo tanto, en principio tengo permiso para hacerlo. ¿Pero cómo convenzo a X de esto?
Algunos ejemplos de situaciones como esta:
- Inicie sesión con SSH y ejecute un programa que se muestra en la pantalla de la computadora remota ( no en túnel a través de SSH, eso es totalmente diferente)
- Un trabajo de cron para tomar una captura de pantalla de la sesión X a través del comando de
import
de ImageMagick - Ejecución de un registrador de pulsaciones de teclas para fines de auditoría
Esta es una versión más simple de la aplicación Launch OpenGL directamente desde un terminal Linux sin ventanas
La respuesta corta es que debe establecer la variable de entorno DISPLAY
y luego se ejecutará la aplicación.
La respuesta larga es que tenemos Xauth, ya menos que esté ejecutando como el mismo usuario en la misma máquina que probablemente no vaya a funcionar a menos que exporte la credencial Xauth de la cuenta que ejecuta el servidor X a la cuenta que ejecuta la X cliente. ssh -X
maneja esto para usted, por lo que es increíble, pero el procedimiento manual implica ejecutar xauth extract - $DISPLAY
en la cuenta del servidor X y alimentar esos datos en xauth merge -
en la cuenta del cliente. (Advertencia: los datos son binarios)
En los sistemas Linux modernos, hay una sesión X en: 0 y el archivo de datos de autoridad X11 siempre es $HOME/.Xauthority
para que pueda establecer con más frecuencia dos variables de entorno, por ejemplo, en Bash:
export XAUTHORITY=/home/$your_username/.Xauthority
export DISPLAY='':0''