Se eu abrir o terminal e executar w
o comando, ele mostrará:
user tty7 :0 12:04 39:56 36.87s 0.06s /sbin/upstart -
Agora, se abrir terminator
ou xterm
executar w
o comando, ele mostrará sua entrada na saída do w
comando como
user tty7 :0 12:04 39:56 36.87s 0.06s
/sbin/upstart -
user pts/2 :0.0 12:50 1.00s 0.02s 0.00s w
mas não mostrará uma nova entrada quando eu abrir gnome-terminal
ou xfce4-terminal
. Por que está mostrando nova sessão para terminador e não para xfce4-terminal?
w
exibe as informações armazenadas emutmp
(/var/run/utmp
normalmente em sistemas Linux). Isso geralmente é atualizado apenas por sessões de “login”, ou sejalogin
(para logins em consoles virtuais ou conexões seriais), o gerenciador de exibição (para sessões gráficas), o servidor SSH (para conexões SSH) e alguns (a maioria?) emuladores de terminal. No último caso, a atualização ou nãoutmp
depende do suporte e da configuração integrados; por exemploxterm
, tem out
sinalizador para isso (-ut
desabilitautmp
as atualizações,+ut
habilita-as) e o Terminal GNOME não atualiza maisutmp
diretamente .Então você está vendo as entradas que foram adicionadas
utmp
no seu caso: uma adicionada pelo seu gerenciador de exibição (emtty7
) e outras adicionadas por alguns dos emuladores de terminal que você está usando.Deve ser possível agrupar comandos para adicionar
utmp
logs a qualquer coisa que você quiser, usando, por exemplolibutempter
, , mas isso aparentemente não é tão direto quanto se poderia esperar .w
não mostra sessões de terminal. O banco de dados de login , que ow
programa relata, não é um banco de dados de terminal . (Formalmente, é um banco de dados de contabilidade do usuário , mas a Especificação Unix Única está incompleta neste ponto.)Se fosse um banco de dados de terminal, ele registraria todos os pseudo terminais que os programas usam, como NeoVIM, emacs,
tmux
,screen
,ptybandage
,ptyrun
e até mesmoscript
. Mas não, e não é.(Pode-se fazer um argumento semelhante, que requer um conhecimento um pouco maior da história, sobre não registrar o uso do terminal "call out" e sessões de terminal como BBS, FidoNet e UUCP.)
Como um banco de dados de login , ele registra sessões de login , tanto textuais quanto gráficas. O pessoal da libvte argumenta que gravar nesse banco de dados está dentro do alcance dos subsistemas de login , gráfico e textual, não dentro do alcance de um emulador de terminal que é executado em sessões de login. Este é um ponto justo, reforçado pelo fato de que torna absurda a segurança da contabilidade de login para permitir que programas fora da Trusted Computing Base gravem/atualizem o banco de dados de login.
Como tal, você não deve esperar que cada sessão do emulador de terminal apareça como uma sessão de login no banco de dados de login — ou mesmo qualquer sessão de emulador de terminal. Mesmo os emuladores de terminal que estão invocando shells de login não estão fazendo nenhum logon real no sistema e estão agindo inteiramente dentro de uma sessão já conectada. Os escritores do emulador de terminal tentaram fazer com que o banco de dados de login registrasse as sessões do emulador de terminal, mas o esforço levou a uma série de problemas, reconhecidos há muito tempo.
Por outro lado, você deve esperar ver um único registro para sua sessão de login da GUI . (Embora, conforme explicado em um artigo em leituras adicionais, na prática isso seja uma bagunça.)
Leitura adicional
pututxline
. Especificações básicas . IEEE 1003.1:2017. O Grupo Aberto.