Existe outra solução possível se você quiser que ela funcione, independentemente de
nome de usuário, encontrando o usuário ativo do display X, usando
ConsoleKit (o comando ck-list-sessions
). Assumindo o script abaixo
é executado como root, ele mostrará uma mensagem zenity para o ativo atual
usuário no seu computador:
#!/bin/bash
ACTIVE=$(ck-list-sessions | awk -F' = ' '
function f(){if(A=="TRUE"){P=U"\t"D;gsub("'"'"'","",P);print P}}
=="\tunix-user"{U=}
=="\tx11-display"{D=}
=="\tactive"{A=}
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!'"
O pequeno script awk é apenas para analisar sessões ck-list e
saída do nome de usuário e exibição do usuário que está ativo (poderia
também requer que seja uma conexão local se você quiser excluir ssh
-X usuários, se você quiser).
(Eu uso isso em um script backup executado ao conectar um dispositivo USB
drive.)