터미널 에뮬레이터가 서버를 처리합니까? [복사]

터미널 에뮬레이터가 서버를 처리합니까? [복사]

터미널 에뮬레이터가 서버를 처리합니까?

그렇다면 고객은 누구입니까? 고객을 어떻게 찾을 수 있나요? 감사해요.

  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

이미 하나가 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만 가져옴을 의미하기 때문에 이것이 짜증스럽다고 생각합니다.

@JdeBP의 훌륭한 답변에 대한 추가 정보netstat 출력의 lxterminal

관련 정보