Terminal-Emulator

終端仿真器程序是伺服器嗎?

  • January 5, 2019

終端模擬器程序是伺服器嗎?

如果是,它的客戶是什麼?我怎樣才能找到它的客戶?謝謝。

  1. 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
  1. 伺服器總是(或通常?)一個守護程序,所以它沒有控制終端。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/12echo應用程序可以被視為連接到終端仿真器(通過偽終端而不是網路套接字,雖然這裡連接是通過 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.

請參閱xtermrxvt了解以更傳統方式工作的終端仿真器。

您實際上可以這樣做:

printf '%s\0' /tmp lxterminal -e vim |
 socat -u - 'unix-connect:"/run/user/1000/.lxterminal-socket-:0"'

我覺得這很煩人,因為這意味著只有第一次呼叫會繼承呼叫者的環境(全域意義上的環境,包括umask, cwd, env vars …),以後的呼叫只會得到 cwd。

更多關於@JdeBP 在 netstat 輸出中 lxterminal 的精彩回答

引用自:https://unix.stackexchange.com/questions/486062