Есть и другое возможное решение, если вы хотите, чтобы оно работало независимо от имени пользователя, путем поиска активного пользователя дисплея X с помощью ConsoleKit (команда ck-list-sessions
). Предполагая, что приведенный ниже скрипт запущен от имени пользователя root, он покажет сообщение zenity текущему активному пользователю на вашем компьютере:
#!/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!'"
Небольшой скрипт awk предназначен только для анализа ck-list-session и вывода имени пользователя и отображения активного пользователя (может также потребоваться, чтобы это было локальное соединение, если вы хотите исключить пользователей ssh -X, если хотите).
(Я использую это в сценарии резервного копирования, который запускается при подключении USB-накопителя.)