Как я должен определить, если пользователь вошел в систему графически во время работы lightdm?

Я хочу знать, если кто-то вошел в локальную 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 сказать мне, что я хочу (или я должен использовать другой инструмент)?

2
задан 23 October 2012 в 18:26

2 ответа

См. Ответ на на этот вопрос . Возможно, вы в конечном итоге будете использовать D-Bus и ConsoleKit.

0
ответ дан 23 October 2012 в 18:26

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

Проверки кода:

  1. Активное физическое место имеет X Дисплеев?
  2. Если это делает, его uid соответствует 122 (lightdm)?
  3. Вы заканчиваете с выводом этих X дисплеев, пользователи uid, и могли выполнить произвольный сценарий кода успеха echo "Active User".
0
ответ дан 23 October 2012 в 18:26

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

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