当我尝试与write
登录到 X 会话的用户交谈时,结果因他们使用的终端而异。 Gnome 终端可以拾取write
s,但 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