Como obter via SSH o DISPLAY ativo para um usuário logado localmente?

1

Eu preciso de obter o DISPLAY ativo para qualquer usuário logado, então se eles entrarem através do SSH, eles poderão consultá-lo.

No Ubuntu 12.04, usei um script que, usando a interface dbus do consolekit, iterava pelas sessões ativas, correspondendo ao UID do usuário. Um pouco complicado, mas isso me daria o Display que eu precisava.

Este é o código que usei:

function obtener_display(){
        _UID=
        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/^.*"(.*)".*$//')
        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 (.*)$//')
                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 "(.*)"$//')
                                if [ ! -z "$X11DISPLAY" ] ; then
                                        DISPLAY_VALIDO="$X11DISPLAY"
                                fi
                        fi
                done
        done

        if [ ! -z "$DISPLAY_VALIDO" ] ; then
                echo "$DISPLAY_VALIDO"
        else
                echo "FALSE"
        fi
}

E funcionou como um encanto! Bem, tipo isso. Pelo menos, parecia funcionar corretamente, nunca ouvi nada de ruim nisso. De qualquer forma, não funciona em 14.04. O primeiro método que usei para obter as sessões do ConsoleKit retorna uma matriz vazia. E todos os métodos do Manager também retornam matrizes vazias.

Existe alguma maneira de corrigir isso? Corrigir este método deve fazê-lo, mas qualquer outra maneira de obter o visor ativo para qualquer usuário logado também deve funcionar.

    
por Jorge Suárez de Lis 10.11.2014 / 12:02

1 resposta

1

O comando who me fornece informações sobre os usuários atualmente conectados e seus VTs e exibe imediatamente. Tudo o que preciso fazer é encontrar o usuário que quero e analisar a saída.

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

Isso produzirá :0 , é disso que eu precisava.

    
por Jorge Suárez de Lis 09.01.2015 / 09:36