Как получить через 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вот что мне нужно