Como descobrir quem está usando o console físico?

9

Eu gostaria de usar um script para descobrir o nome de usuário - do usuário que está atualmente no console físico (quem tem o comando do teclado, mouse e exibição gráfica)?

Eu não quero apenas saber quem executa o X (como o console atual pode ser alternado para outro terminal e outro usuário).

Para esclarecer:
Comandos como w , who etc. mostram quem está logado em qual terminal. Isso é simples. Eu gostaria de saber, no entanto, quem é o dono do console físico (display, teclado etc.). Por exemplo, se dois usuários executam displays: 0 e: 1, e eu posso alternar entre os displays com ctrl + alt + 7 e < kbd> ctrl + alt + 8 , gostaria de saber qual usuário atualmente tem a conexão entre a tela dele e a tela física real. / p>

Mais um esclarecimento:
 Não estou interessado em conhecer o meu próprio nome de usuário. Eu tenho um script, executado como outro usuário ou raiz, que precisa saber quem usa a exibição física . Pode haver várias sessões X sendo executadas por diferentes usuários, alguns deles virtualizados, alguns deles conectados a um servidor X remoto, mas estou interessado apenas no que está realmente exibindo a saída no monitor.

Ainda outro esclarecimento:
 Seja qual for o comando, a saída deve ser diferente depois de pressionar Ctrl + Alt + F1 (alternando para outro console virtual).

    
por January 29.09.2012 / 13:21

4 respostas

5

Eu tenho medo de não dar uma resposta específica (porque eu não conheço bem a tecnologia), mas acredito que você pode descobrir isso usando o D-Bus e o ConsoleKit.

Por exemplo, quando eu alterno de X para um VT e vice-versa, fico ouvindo isso em dbus-monitor :

$ dbus-monitor --system | grep ConsoleKit
signal sender=:1.16 -> dest=(null destination) serial=19039 path=/org/freedesktop/ConsoleKit/Session2; interface=org.freedesktop.ConsoleKit.Session; member=ActiveChanged
signal sender=:1.16 -> dest=(null destination) serial=19040 path=/org/freedesktop/ConsoleKit/Seat1; interface=org.freedesktop.ConsoleKit.Seat; member=ActiveSessionChanged
signal sender=:1.16 -> dest=(null destination) serial=19041 path=/org/freedesktop/ConsoleKit/Session2; interface=org.freedesktop.ConsoleKit.Session; member=ActiveChanged
signal sender=:1.16 -> dest=(null destination) serial=19042 path=/org/freedesktop/ConsoleKit/Seat1; interface=org.freedesktop.ConsoleKit.Seat; member=ActiveSessionChanged
   string "/org/freedesktop/ConsoleKit/Session2"

Especificamente, você pode usar o método GetActiveSession . Veja como com dbus-send (pode exigir sudo ):

$ dbus-send --system --type=method_call --print-reply --dest=org.freedesktop.ConsoleKit /org/freedesktop/ConsoleKit/Seat1 org.freedesktop.ConsoleKit.Seat.GetActiveSession

Em seguida, dependendo da sua aplicação, você vai querer verificar as propriedades do objeto retornado, que deve ser um caminho de objeto para um Session .

    
por nfirvine 02.10.2012 / 21:22
5
[geek@atremis ~]$ w

 20:02:02 up 2 days,  8:37,  3 users,  load average: 0.00, 0.01, 0.00

USER     TTY      FROM              LOGIN@   IDLE   JCPU   PCPU WHAT

geek     tty1     :0               Thu11    2days 35.11s  0.18s pam: gdm-passwo

geek     pts/0    athena           Fri22   21:04m  0.03s  0.03s -bash

geek     pts/1    blackbeauty      20:02    0.00s  0.14s  0.10s w

[geek@atremis ~]$

Você pode usar o comando w para ver quem está conectado. O tempo ocioso e o que deve lhe dizer o que está sendo executado - neste caso, o gdm indica um login ativo, e o tempo ocioso indica que o usuário não esteve no sistema em dois dias. Compare isso com o login da blackbeauty, que tem um tempo ocioso de 0.00, que indica seu uso atual.

    
por Journeyman Geek 29.09.2012 / 14:03
1

Existem muitas maneiras:

  • whoami
  • w
  • echo $USER
  • logname
por hytromo 29.09.2012 / 14:21
0

Outro comando é

whoami

Mostra o nome de usuário logado atual

    
por Ketankumar Patel 29.09.2012 / 14:12