Veja a resposta para esta pergunta . Você provavelmente acabará usando o D-Bus e o ConsoleKit.
Eu quero saber se alguém está logado em uma sessão X local. No passado, olhei para a saída de ck-list-sessions. A saída parecia algo assim:
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'
Se ninguém estava logado, não houve saída. Eu verifiquei se alguém estava logado com
ck_result" string => execresult("/usr/bin/ck-list-sessions | /bin/grep x11 | /usr/bin/cut --delimiter=\' -f 2 | /usr/bin/wc -w
Isso não funciona mais, porque o greeter lightdm parece um usuário logado
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'
Eu acho que eu poderia verificar o tipo de sessão, mas eu não sei como fazer isso e verificar o x11-display no one-liner. Eu então preciso escrever meu próprio script, mas naquele momento eu pensei em verificar se alguém já fez o trabalho ou se há uma maneira de fazer com que o ConsoleKit me diga o que eu quero (ou se eu deveria estar usando um diferente ferramenta)?
Veja a resposta para esta pergunta . Você provavelmente acabará usando o D-Bus e o ConsoleKit.
Por acaso, eu só precisava resolver isso - mas o melhor que eu consegui foi um código "hack'-esque" desagradável:
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"
Eu acredito que o uid do lightdm é consistente nas instalações do Ubuntu, mas isso precisaria de ajustes para outros gerenciadores de exibição.
O código verifica:
echo "Active User"
.