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

Я должен добраться, активный дисплей для любого вошел в систему пользователь, поэтому если они входят через 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, возвращает пустой массив. И каждый метод от менеджера также возвращает пустые массивы.

Есть ли какой-либо способ, которым я могу зафиксировать это? Исправьте этот метод, должен сделать это, но любой другой способ получить активный дисплей для любого вошел в систему, пользователь должен также работать.

1
задан 15 June 2017 в 15:54

1 ответ

Команда who дает мне, информация о токе вошла в систему пользователи, и их VTs и дисплеи сразу же. Все, что я должен сделать, является находкой пользователь, я хочу и анализирую вывод.

who | grep $USER | grep -v tty | grep -v pts/ | cut -d' ' -f2

Это произведет :0, это - то, в чем я нуждался.

1
ответ дан 7 December 2019 в 16:28

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

Похожие вопросы: