Я хочу знать, если кто-то вошел в локальную X-сессию. В прошлом я смотрел на вывод ck-list-session. Выходные данные выглядели примерно так:
Session12:
unix-user = '[redacted]'
realname = '[redacted]'
seat = 'Seat1'
session-type = ''
active = TRUE
x11-display = ':0'
x11-display-device = '/dev/tty8'
display-device = ''
remote-host-name = ''
is-local = TRUE
on-since = '2012-10-22T18:17:55.553236Z'
login-session-id = '4294967295'
Если никто не вошел в систему, выходных данных не было. Я проверил, если кто-то вошел в систему с помощью
ck_result" string => execresult("/usr/bin/ck-list-sessions | /bin/grep x11 | /usr/bin/cut --delimiter=\\' -f 2 | /usr/bin/wc -w
Это больше не работает, потому что lightdm greeter выглядит как вошедший в систему пользователь
Session12:
unix-user = '[redacted]'
realname = 'Light Display Manager'
seat = 'Seat1'
session-type = 'LoginWindow'
active = TRUE
x11-display = ':0'
x11-display-device = '/dev/tty8'
display-device = ''
remote-host-name = ''
is-local = TRUE
on-since = '2012-10-22T22:17:55.553236Z'
login-session-id = '4294967295'
Я думаю, я мог проверить тип сеанса, но Я не знаю, как это сделать и проверить x11-дисплей в одну строку. Затем мне нужно написать свой собственный сценарий, но в тот момент я подумал, что проверю, выполнил ли кто-нибудь еще работу или есть ли способ заставить ConsoleKit сказать мне, что я хочу (или я должен использовать другой инструмент)?
См. Ответ на на этот вопрос . Возможно, вы в конечном итоге будете использовать D-Bus и ConsoleKit.
Как это происходит, я просто должен был решить это - но лучшим, которым я управлял, является 'противный взлом '-esque код:
dbus-send --system --type=method_call --print-reply=literal --dest=org.freedesktop.ConsoleKit `dbus-send --system --type=method_call --print-reply=literal --dest=org.freedesktop.ConsoleKit /org/freedesktop/ConsoleKit/Seat1 org.freedesktop.ConsoleKit.Seat.GetActiveSession` org.freedesktop.ConsoleKit.Session.GetX11Display | grep ":" && dbus-send --system --type=method_call --print-reply=literal --dest=org.freedesktop.ConsoleKit `dbus-send --system --type=method_call --print-reply=literal --dest=org.freedesktop.ConsoleKit /org/freedesktop/ConsoleKit/Seat1 org.freedesktop.ConsoleKit.Seat.GetActiveSession` org.freedesktop.ConsoleKit.Session.GetUnixUser | grep -v "uint32 122$" && echo "Active User"
Я полагаю, что uid lightdm последователен через установки Ubuntu, но этому была бы нужна корректировка к другим менеджерам по оформлению.
Проверки кода:
echo "Active User"
.