Terminal
為什麼只有部分終端有pts
當我嘗試與
write
登錄到 X 會話的使用者交談時,結果會因他們使用的終端而異。Gnome 終端可以接write
s,但 lxterminal 和 terminator 都不能。原因是 lxterminal 和 terminator 沒有關聯的 pts 設備:隨著 lxterminal(s) 執行:
$ 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 設備或者必須在原始碼中完成?
原始問題
所有提到的程序都有一個
pts
. 問題不在於您指定的終端沒有 pts 設備,而是沒有記錄資訊。為什麼 lxterminal 或其他終端不顯示
who
who
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