Hay otra solución posible si desea que funcione independientemente del nombre de usuario, encontrando el usuario activo de la pantalla X, usando ConsoleKit (el comando ck-list-sessions
). Suponiendo que la secuencia de comandos a continuación se ejecuta como root, mostrará un mensaje zenity al usuario activo actual en su computadora:
#!/bin/bash
ACTIVE=$(ck-list-sessions | awk -F' = ' '
function f(){if(A=="TRUE"){P=U"\t"D;gsub("'"'"'","",P);print P}}
$1=="\tunix-user"{U=$2}
$1=="\tx11-display"{D=$2}
$1=="\tactive"{A=$2}
END{f()} /^[^\t]/{f()}
')
USERID=${ACTIVE% *} # tab
USERNAME=$(getent passwd $USERID|cut -f1 -d':')
DISPLAY=${ACTIVE#* } # tab
DISPLAY="$DISPLAY" su $USERNAME -c "zenity --error --text='Something very bad has happened!'"
El pequeño script awk es solo para analizar ck-list-sessions y generar el nombre de usuario y la visualización del usuario que está activo (también podría requerir que sea una conexión local si desea excluir a los usuarios de ssh -X, si lo desea).
(Lo uso en un script de respaldo que se ejecuta al enchufar una unidad USB).