Terminal-Emulator
終端仿真器程序是伺服器嗎?
終端模擬器程序是伺服器嗎?
如果是,它的客戶是什麼?我怎樣才能找到它的客戶?謝謝。
netstat
輸出包含 lxterminal 程序。這是否意味著終端仿真器程序是基於 unix 域套接字的伺服器?$ sudo netstat -ap | grep -i lxterminal [sudo] password for t: unix 2 [ ACC ] STREAM LISTENING 28665 1480/lxterminal /run/user/1000/.lxterminal-socket-:0 unix 3 [ ] STREAM CONNECTED 28663 1480/lxterminal unix 3 [ ] STREAM CONNECTED 28661 1480/lxterminal unix 3 [ ] STREAM CONNECTED 28666 1480/lxterminal
- 伺服器總是(或通常?)一個守護程序,所以它沒有控制終端。lxterminal 沒有(
?
):$ ps aux | grep -i lxterminal t 1480 0.1 0.3 473204 28232 ? Sl Nov21 22:39 lxterminal
AX 伺服器是伺服器,因為它為應用程序提供顯示和輸入設備。
諸如
lxterminal
連接到該 X 伺服器以請求某些服務之類的應用程序。例如:
- 請畫一個那個形狀和大小的視窗
- 請告訴我使用者按下和釋放的鍵
它們通過 UNIX 域或 ABSTRACT 或 TCP 套接字連接到 X 伺服器。
類似地,終端仿真器可以被視為終端應用程序的伺服器。
使用
echo test > /dev/pts/12
,echo
應用程序可以被視為連接到終端仿真器(通過偽終端而不是網路套接字,雖然這裡連接是通過 shell 重定向完成的,而不是echo
)並請求服務:請顯示 test and move游標向下。現在,包括 gnome-terminal 和 lxterminal 在內的一些終端模擬器具有(煩人的 IMO)功能,在第一次呼叫時它們會啟動一個守護程序來處理未來打開新終端視窗的請求。
稍後呼叫那些連接到該伺服器(
/run/user/1000/.lxterminal-socket-:0
在您的情況下使用該 UNIX 域套接字)以請求一個新的終端視窗,大概是為了節省資源或者可以在終端視窗之間共享一些資訊。當你這樣做時:
cd /tmp && lxterminal -e vim
雖然已經有一個
lxterminal
執行,但第二次呼叫只是告訴lxterminal
伺服器vim
在一個新視窗中執行,目前目錄更改為/tmp
.請參閱
xterm
或rxvt
了解以更傳統方式工作的終端仿真器。您實際上可以這樣做:
printf '%s\0' /tmp lxterminal -e vim | socat -u - 'unix-connect:"/run/user/1000/.lxterminal-socket-:0"'
我覺得這很煩人,因為這意味著只有第一次呼叫會繼承呼叫者的環境(全域意義上的環境,包括
umask
,cwd
, env vars …),以後的呼叫只會得到 cwd。