我需要获取任何登录用户的活动 DISPLAY,以便如果他们通过 SSH 进入,他们就可以查询它。
在 Ubuntu 12.04 下,我使用了一个脚本,该脚本使用 consolekit dbus 接口遍历活动会话,匹配用户 UID。有点复杂,但这会给我所需的显示。
这是我使用的代码:
function obtener_display(){
_UID=$1
SESIONES_RAW=$(dbus-send --system --dest=org.freedesktop.ConsoleKit --print-reply /org/freedesktop/ConsoleKit/Manager org.freedesktop.ConsoleKit.Manager.GetSessions)
SESIONES=$(echo "$SESIONES_RAW" | grep "object path" | sed -r 's/^.*"(.*)".*$/\1/')
for SESION in $SESIONES ; do
USUARIOS_RAW=$(dbus-send --system --dest=org.freedesktop.ConsoleKit --print-reply $SESION org.freedesktop.ConsoleKit.Session.GetUnixUser)
USUARIOS=$(echo "$USUARIOS_RAW" | grep "uint32" | sed -r 's/^.*uint32 (.*)$/\1/')
for USUARIO in $USUARIOS ; do
if [ $_UID -eq $USUARIO ] ; then
X11DISPLAY_RAW=$(dbus-send --system --dest=org.freedesktop.ConsoleKit --print-reply $SESION org.freedesktop.ConsoleKit.Session.GetX11Display)
X11DISPLAY=$(echo "$X11DISPLAY_RAW" | grep "string" | sed -r 's/^.*string "(.*)"$/\1/')
if [ ! -z "$X11DISPLAY" ] ; then
DISPLAY_VALIDO="$X11DISPLAY"
fi
fi
done
done
if [ ! -z "$DISPLAY_VALIDO" ] ; then
echo "$DISPLAY_VALIDO"
else
echo "FALSE"
fi
}
而且它运行得非常好!嗯,有点。至少它似乎运行正常,从未听说有什么不好的。无论如何,它在 14.04 下不起作用。我用来获取 ConsoleKit 会话的第一个方法返回一个空数组。并且 Manager 中的每个方法也都返回空数组。
有什么方法可以修复此问题吗?修复此方法应该可以解决问题,但任何其他获取任何登录用户的活动 DISPLAY 的方法也应该有效。
答案1
该命令who
立即向我提供了有关当前登录用户及其 VT 和显示的信息。我所需要做的就是找到我想要的用户并解析输出。
who | grep $USER | grep -v tty | grep -v pts/ | cut -d' ' -f2
这将输出:0
,这就是我所需要的。