Ada solusi lain yang mungkin jika Anda ingin berfungsi terlepas dari nama pengguna, dengan menemukan pengguna aktif layar X, menggunakan ConsoleKit (perintah ck-list-sessions
). Dengan asumsi skrip di bawah ini dijalankan sebagai root, ia akan menampilkan pesan zenity kepada pengguna aktif saat ini di komputer Anda:
#!/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!'"
Skrip awk kecil hanya untuk mem-parsing daftar-ck-sesi dan mengeluarkan nama pengguna dan tampilan pengguna yang aktif (juga bisa mengharuskan itu koneksi lokal jika Anda ingin mengecualikan ssh -X pengguna, jika Anda mau).
(Saya menggunakan ini dalam skrip cadangan yang berjalan saat mencolokkan drive USB.)