如何通过 SSH 获取本地登录用户的活动 DISPLAY?

如何通过 SSH 获取本地登录用户的活动 DISPLAY?

我需要获取任何登录用户的活动 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,这就是我所需要的。

相关内容