w 命令不显示所有伪终端会话

Prv*_*dav 2 login session xfce4-terminal w pts

如果我打开终端并执行w命令,它将显示:

user   tty7     :0               12:04   39:56  36.87s  0.06s /sbin/upstart -
Run Code Online (Sandbox Code Playgroud)

现在,如果打开terminatorxterm执行w命令,那么它将在w命令的输出中显示它的条目,例如

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
Run Code Online (Sandbox Code Playgroud)

但是当我打开gnome-terminal或时它不会显示新条目xfce4-terminal。为什么它为终结者而不是 xfce4-terminal 显示新会话?

Ste*_*itt 6

w显示存储在utmp/var/run/utmp通常在 Linux 系统上)中的信息。这通常仅由“登录”会话更新, login(用于在虚拟控制台或串行连接上登录)、显示管理器(用于图形会话)、SSH 服务器(用于 SSH 连接)和一些(大多数?)终端模拟器。在后一种情况下,它们是否更新utmp取决于它们的内置支持和配置;例如xterm具有此ut标志(-ut禁用utmp更新,+ut启用它们),并且 GNOME 终端根本不再utmp直接更新

因此,您会看到已添加到utmp您的案例中的条目:您的显示管理器添加的条目(在tty7),而其他由您正在使用的某些终端模拟器添加的。

应该可以包装命令以将utmp日志添加到您喜欢的任何内容中,例如使用libutempter,但这显然不像人们希望的那么简单