ターミナルエミュレータはサーバーを処理しますか?
もしそうなら、顧客は誰ですか?顧客をどのように見つけることができますか?ありがとうございます。
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
サーバーは常に(または通常は?)デーモン化されているため、制御端末はありません。 (
?
)なしのlxターミナル:$ ps aux | grep -i lxterminal t 1480 0.1 0.3 473204 28232 ? Sl Nov21 22:39 lxterminal
答え1
AX サーバーはアプリケーションにディスプレイおよび入力デバイスを提供するため、サーバーです。
たとえば、アプリケーションはlxterminal
Xサーバーに接続して特定のサービスを要求します。たとえば、
- こんな形と大きさの窓を描いてください
- ユーザーがどのキーを押して放したかを教えてください。
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
より伝統的な方法で動作するターミナルエミュレータを参照してくださいxterm
。rxvt
実際には、次のようにすることもできます。
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