ターミナルエミュレータはサーバーを処理しますか? [コピー]

ターミナルエミュレータはサーバーを処理しますか? [コピー]

ターミナルエミュレータはサーバーを処理しますか?

もしそうなら、顧客は誰ですか?顧客をどのように見つけることができますか?ありがとうございます。

  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
    
  2. サーバーは常に(または通常は?)デーモン化されているため、制御端末はありません。 (?)なしのlxターミナル:

    $ ps aux | grep -i lxterminal
    t         1480  0.1  0.3 473204 28232 ?        Sl   Nov21  22:39 lxterminal
    

答え1

AX サーバーはアプリケーションにディスプレイおよび入力デバイスを提供するため、サーバーです。

たとえば、アプリケーションはlxterminalXサーバーに接続して特定のサービスを要求します。たとえば、

  • こんな形と大きさの窓を描いてください
  • ユーザーがどのキーを押して放したかを教えてください。

UNIXドメインまたはABSTRACTまたはTCPソケットを介してXサーバーに接続します。

同様に、ターミナルエミュレータはターミナルアプリケーション用のサーバーと考えることができます。

を使用すると、echo test > /dev/pts/12アプリケーションechoを次のように表示できます。つながる端末エミュレータへ(ここではネットワークソケットではなく擬似端末を介して)つながるこれは代わりにシェルリダイレクトを介して行われ、echoサービスを要求します。テストを表示してカーソルを下に移動します。

gnome-terminalやlxterminalを含む一部のターミナルエミュレータには、初めて呼び出すときにデーモンを起動して新しいターミナルウィンドウを開くための将来の要求を処理する(迷惑IMO)機能があります。

/run/user/1000/.lxterminal-socket-:0これは後でそのサーバーに接続して(あなたの場合はUNIXドメインソケットを使用して)新しいターミナルウィンドウを要求するために呼び出され、おそらくリソースを節約したり、ターミナルウィンドウ間でいくつかの情報を共有したりできます。

これを行うとき:

cd /tmp && lxterminal -e vim

すでに1つがlxterminal実行されている間、2番目の呼び出しは、サーバー上の新しいウィンドウで実行し、lxterminal現在のディレクトリを 。vim/tmp

より伝統的な方法で動作するターミナルエミュレータを参照してくださいxtermrxvt

実際には、次のようにすることもできます。

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

これは、最初の呼び出しだけが呼び出し元の環境(umask、、cwdenv vars ...を含むグローバルな意味の環境)を継承し、後続の呼び出しはcwdのみを取得することを意味するため、これは迷惑だと思います。

@JdeBPの素晴らしい回答の詳細netstat出力のlxterminal

関連情報