Có một giải pháp khả thi khác nếu bạn muốn nó hoạt động bất kể tên người dùng, bằng cách tìm người dùng hoạt động của màn hình X, sử dụng ConsoleKit (lệnh ck-list-sessions
). Giả sử tập lệnh bên dưới được chạy dưới quyền root, nó sẽ hiển thị thông báo tiện ích cho người dùng đang hoạt động hiện tại trên máy tính của bạn:
#!/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!'"
Tập lệnh awk nhỏ chỉ để phân tích các phiên ck-list và xuất tên người dùng và hiển thị của người dùng đang hoạt động (cũng có thể yêu cầu đó là kết nối cục bộ nếu bạn muốn loại trừ người dùng ssh -X, nếu bạn muốn).
(Tôi sử dụng điều này trong một tập lệnh sao lưu chạy bằng cách cắm vào ổ USB.)