进一步阅读

进一步阅读

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

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

现在,如果打开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

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

答案1

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

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

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

答案2

w不显示终端会话。这登录该程序报告的数据库w不是一个终端数据库。 (从形式上来说,它是一个用户计费数据库,但是单一 Unix 规范在这一点上是不完整的。)

如果它是一个终端数据库,它会记录所有的程序使用的终端,例如 NeoVIM、emacs、tmuxscreenptybandageptyrun、 甚至script.但事实并非如此,也并非如此。

(人们可以提出类似的论点,这需要对历史有更多的了解,关于它不记录“呼叫”终端使用情况以及 BBS、FidoNet 和 UUCP 终端会话之类的内容。)

作为一个登录数据库,它记录登录会话,文本和图形。 libvte 的人认为写入这个数据库是在权限范围内的登录子系统,图形和文本,不在终端的权限之内模拟器运行的之内登录会话。这是一个公平的观点,因为它允许可信计算基础之外的程序写入/更新登录数据库,这对登录记帐的安全性来说是无稽之谈。

因此,您不应期望每个终端模拟器会话都在登录数据库中显示为登录会话 - 或者实际上任何终端模拟器会话。甚至调用登录 shell 的终端模拟器没有对系统进行任何实际登录,并且完全在已登录的会话中进行操作。终端仿真器作者试图让登录数据库记录终端仿真器会话,但这种努力导致了许多早已认识到的问题。

相反,你应该期望看到您的单个记录图形用户界面登录会话。 (尽管,正如进一步阅读中的一篇文章所解释的,实际上这相当混乱。)

进一步阅读

相关内容