Answers:
如果您希望它不管用户名如何工作,还有另一种可能的解决方案,方法是使用ConsoleKit(命令ck-list-sessions
)查找X显示器的活动用户。假设以下脚本以root身份运行,它将向您计算机上的当前活动用户显示一条消息:
#!/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-sessions并输出活动用户的用户名和显示(如果需要,还可以要求它是本地连接,如果要排除ssh -X用户,则可以)。
(我将其用于在插入USB驱动器时运行的备份脚本中。)