Há outra solução possível, se você deseja que ele funcione independentemente do nome de usuário, encontrando o usuário ativo da tela X, usando o ConsoleKit (o comando ck-list-sessions
). Supondo que o script abaixo seja executado como root, ele mostrará uma mensagem de zenity para o usuário ativo atual no seu computador:
#!/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!'"
O pequeno script awk é apenas para analisar ck-list-sessions e emitir o nome de usuário e a exibição do usuário que está ativo (também pode exigir que seja uma conexão local se você quiser excluir usuários do ssh -X, se desejar).
(Eu uso isso em um script de backup que é executado ao conectar uma unidade USB.)