Как получить через SSH активный DISPLAY для локально вошедшего в систему пользователя?

Мне нужно получить активный DISPLAY для любого вошедшего в систему пользователя, поэтому, если они входят через SSH, они могут запросить его.

Под Ubuntu 12.04 я использовал скрипт, который, используя интерфейс dbus consolekit, просматривал активные сеансы, сопоставляя 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вот что мне нужно

Другие вопросы по тегам