w comando não mostra todas as sessões de pseudo-terminal

0

Se eu abrir o terminal e executar o comando w , ele mostrará:

user   tty7     :0               12:04   39:56  36.87s  0.06s /sbin/upstart -

Agora, se o comando terminator or xterm e execute w for aberto, ele mostrará sua entrada na saída do comando w , 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 o terminador e não para o xfce4-terminal?

    
por Debian_yadav 04.05.2018 / 09:25

2 respostas

4

w exibe as informações armazenadas em utmp ( /var/run/utmp normalmente nos sistemas Linux). Isso geralmente só é atualizado por sessões de "login", ie login (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 (em sua maioria?) emuladores de terminal. No último caso, o fato de atualizar ou não o utmp depende do suporte e da configuração incorporados; por exemplo, xterm tem o sinal ut para isso ( -ut desativa utmp updates, +ut habilita-os) e o Terminal GNOME não atualiza mais utmp diretamente em tudo .

Então, você está vendo as entradas que foram adicionadas a utmp no seu caso: uma adicionada pelo seu gerenciador de exibição (em tty7 ) e outras adicionadas por alguns dos emuladores de terminal que você está usando. / p>

Deve ser possível encapsular comandos para adicionar utmp logging a qualquer coisa que você goste, usando por exemplo libutempter , mas isso é aparentemente não tão simples quanto se poderia esperar .

    
por 04.05.2018 / 14:29
2

w não mostra sessões de terminal. O banco de dados login , que o programa w relata, não é um banco de dados terminal . (Formalmente, é um banco de dados contabilidade do usuário , mas a Especificação Unix Única está incompleta neste ponto.)

Se fosse um banco de dados terminal, ele registraria todos os terminais pseudo que os programas usam, dos tipos NeoVIM, emacs, tmux , screen , ptybandage , ptyrun e até script . Mas isso não acontece e não é.

(Pode-se argumentar de forma semelhante, que precisa de um conhecimento um pouco maior da história, sobre não registrar o uso do terminal e os gostos das sessões de terminal BBS, FidoNet e UUCP.)

Como um banco de dados login , ele registra sessões de login , tanto textuais quanto gráficas. As pessoas do libvte argumentam que escrever para este banco de dados está dentro do alcance dos subsistemas login , gráficos e textuais, não dentro do alcance de um emulador terminal que roda > dentro de sessões de login. Este é um ponto justo, reforçado pelo fato de que faz um absurdo da segurança da contabilidade de login permitir que os programas externos à Trusted Computing Base gravem / atualizem o banco de dados de login.

Como tal, você não deve esperar que cada sessão de 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 logging real no sistema , e estão agindo inteiramente dentro de uma sessão já registrada. Os criadores de emuladores de terminal tentaram fazer com que o banco de dados de login registrasse as sessões de emulador de terminal, mas o esforço levou a vários problemas, reconhecidos há muito tempo.

Por outro lado, você deve esperar ver um único registro para sua sessão de login GUI . (Embora, como explicado em um artigo em outras leituras, na prática isso seja uma bagunça).

Leitura adicional

por 04.05.2018 / 18:26