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.