Eu gostaria de usar um script para descobrir o nome de usuário - do usuário que está atualmente no console físico (que possui o comando do teclado, mouse e tela gráfica)?
Não quero apenas saber quem executa o X (já que o console atual pode ser alternado para outro terminal e outro usuário).
Para esclarecer:
Comandos como w
, who
etc. mostram quem está conectado em qual terminal. Isto é simples. Gostaria de saber, no entanto, quem possui atualmente o console físico (tela, teclado etc.). Por exemplo, se dois usuários executam exibições: 0 e: 1, e eu posso alternar entre as exibições com ctrl+ alt+ 7e ctrl+ alt+ 8, gostaria de saber qual usuário atualmente tem a conexão entre a exibição e a tela física real .
Mais um esclarecimento:
não estou interessado em saber meu próprio nome de usuário. Eu tenho um script, executando como outro usuário ou raiz, que precisa saber quem usa a exibição física . Pode haver várias sessões X em execução por usuários diferentes, algumas virtualizadas, algumas conectadas a um servidor X remoto, mas estou interessado apenas na que está exibindo a saída no monitor.
Mais um esclarecimento:
seja qual for o comando, a saída deve ser diferente após pressionar Ctrl+ Alt+ F1(alternar para outro console virtual).
Respostas:
Receio não poder dar uma resposta específica (porque não conheço bem a tecnologia), mas acredito que você pode descobrir isso usando o D-Bus e o ConsoleKit.
Por exemplo, quando mudo de X para um VT e volto, ouço isso
dbus-monitor
:Especificamente, você pode usar o método GetActiveSession . Veja como com
dbus-send
(pode exigirsudo
):Então, dependendo do seu aplicativo, você deverá verificar as propriedades do objeto retornado, que deve ser o caminho do objeto para uma Sessão .
fonte
dbus-send --system --type=method_call --print-reply --dest=org.freedesktop.ConsoleKit /org/freedesktop/ConsoleKit/Session2 org.freedesktop.ConsoleKit.Session.GetUser
que responde com o ID do usuário atual. A partir daí, a função da biblioteca getpwuid pode obter o nome de usuário.Você pode usar o comando w para ver quem está conectado. O tempo ocioso e o que deve dizer o que está sendo executado - nesse caso, o gdm indica um logon ativo e o tempo ocioso indica que o usuário não está no sistema há 2 dias. Compare isso com o login do blackbeauty, que possui um tempo de inatividade de 0,00, indicando o uso em uso no momento.
fonte
Existem muitos caminhos:
whoami
w
echo $USER
logname
fonte
Outro comando é
Mostra o nome de usuário atual do logeed
fonte