原始问题

原始问题

当我尝试与write登录到 X 会话的用户交谈时,结果因他们使用的终端而异。 Gnome 终端可以拾取writes,但 lxterminal 和 terminator 都不能。原因是 lxterminal 和 terminator 没有关联的 pts 设备:

当 lxterminal 运行时:

$ who
tshaw    tty7         2013-01-27 21:34

当 Gnome 终端运行时:

$ who
tshaw    tty7         2013-01-27 21:34
tshaw    pts/1        2013-01-27 22:25 (:0)

(上面的tty7条目是X会话)

有没有办法配置其他终端来获取 pts 设备,或者必须在源代码中完成?

答案1

原始问题

所有提到的程序都有一个pts。问题不在于您指定的终端没有 pts 设备,而是未记录信息。

为什么 lxterminal 或其他终端没有出现在who

who从a检索它的信息utmp文件,通常/var/run/utmp由程序本身写入。为了编写utmp入口程序必须能够访问正常的标准应用程序(如 lxterm 或 urxvt)所没有的文件。

/var/run/utmp允许应用程序访问

通常/var/run/utmp对于普通用户来说是不可写的,即程序无法创建新条目,因为恶意用户可能会覆盖文件或写入虚假条目。

在我的系统上/var/run/utmp具有以下权限:

$ ls -l /var/run/utmp 
-rw-rw-r-- 1 root utmp 3072 Jan 28 08:26 /var/run/utmp

这意味着为了写入文件,您必须至少属于该组。

授予程序更新权限的最佳解决方案/var/run/utmp是更改程序的权限,以便它可以更新文件。您可以通过将可执行文件的组设置为utmp并设置setgid标志来完成此操作,这意味着它将根据文件权限设置组 ID,即:

chgrp utmp /usr/bin/urxvt
chmod g+s /usr/bin/urxvt

相关内容