Esto nos permitiría abrir una aplicación "mágicamente" en el escritorio del usuario desde una conexión ssh remota o desde un script lanzado desde crontab.
El truco está en que antes de ejecutar el comando que lanza la aplicación asignamos a las variables XAUTHORITY y DISPLAY los valores adecuados para entrometerse en la sesión abierta por el usuario que ha iniciado sesión físicamente en la máquina.
Una primera aproximación, muy burda, sería ejecutar, con el usuario root, estos comandos desde consola:
# export XAUTHORITY=/run/lightdm/root/:0
# DISPLAY=:0 zenity --info --text "Ola ke ase"
Esto conecta con la sesión X iniciada con lightdm (el gestor de inicios de sesión) y muestra la ventana. El peligro que tiene esta forma es que el comando (zenity en este caso) se ejecuta como root, con los riegos que esto conlleva. En el caso de zenity en principio no hay mucho peligro, pero un programa como geany o un explorador de archivos abiertos como root en una sesión de usuario raso es bastante mas arriesgado.
La ventaja que tiene esté metodo es que permite mostrar la aplicación incluso si ningún usuario ha iniciado sesión, en la pantalla de login. Por ejemplo, puede ser util para mostrar mensajes en el escritorio haya o no sesión iniciada.
La otra aproximación, más ortodoxa, pasa por averiguar que usuario ha iniciado sesión en el escritorio y conectarnos con su sesión X en concreto. Los pasos son:
# comando='zenity --info --text "Ola ke ase"' # Programa a ejecutar
# user=$(who | grep "(:0)" | awk '{print $1}')) # Averiguamos que usuario ha iniciado sesión en el ordenador,
# home_user=$(su usuario -c 'echo $HOME') # Averiguamos cual es su directorio home. Otra forma: home_user=$(getent passwd usuario | cut -d":" -f6)
# export XAUTHORITY="$home_user/.Xauthority" # Accedemos a su fichero .Xauthority
# DISPLAY=:0 su $user -c $comando # Lanzamos el programa con la identidad del usuario
Todo este código anterior lo podemos meter un script que lancemos desde nuestra conexión ssh o desde un crontab u otro sistema de ejecución en background y con ello lograremos nuestro objetivo, para desconcierto del usuario que verá como se abren cosas de forma inesperada.
No hay comentarios:
Publicar un comentario