Como devo determinar se um usuário está logado graficamente enquanto o lightdm está rodando?

2

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)?

    
por Jack 23.10.2012 / 16:25

2 respostas

0

Veja a resposta para esta pergunta . Você provavelmente acabará usando o D-Bus e o ConsoleKit.

    
por January 23.10.2012 / 16:42
0

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:

  1. O assento físico ativo tem uma exibição em X?
  2. Em caso afirmativo, seu uid corresponde a 122 (lightdm)?
  3. Você acaba com a saída da exibição X, os usuários uid, e pode executar um script de código de sucesso arbitrário de echo "Active User" .
por danznz 26.05.2014 / 23:46