tmux의 "제어 모드"란 무엇입니까?

tmux의 "제어 모드"란 무엇입니까?

다음에서 시작 옵션을 확인하세요 man tmux.

-C: 제어 모드에서 시작합니다(제어 모드 섹션 참조). (-CC)를 두 번 지정하면 에코가 비활성화됩니다.

그런 다음 제어 모드 섹션에는 man tmux다음과 같은 설명이 있습니다.

CONTROL MODE
     tmux offers a textual interface called control mode.  This allows
     applications to communicate with tmux using a simple text-only protocol.

     In control mode, a client sends tmux commands or command sequences
     terminated by newlines on standard input.  Each command will produce one
     block of output on standard output.  An output block consists of a %begin
     line followed by the output (which may be empty).  The output block ends
     with a %end or %error.  %begin and matching %end or %error have two
     arguments: an integer time (as seconds from epoch) and command number.
     For example:

           %begin 1363006971 2
           0: ksh* (1 panes) [80x24] [layout b25f,80x24,0,0,2] @2 (active)
           %end 1363006971 2

     The refresh-client -C command may be used to set the size of a client in
     control mode.

     In control mode, tmux outputs notifications.  A notification will never
     occur inside an output block.

이것이 무엇을 의미하는지 잘 모르겠지만 적어도 몇 가지 명령을 시도하고 tmux -CC()를 통해 어떻게 보이고 느껴지는지 확인하려고 하면 를 통해 시작할 때와 동일하게 보입니다 tmux new-session.

그렇다면 "제어 모드"란 무엇이며 일반 모드와 어떻게 다른가요?


편집하다

-CC제어 모드( )를 통해 시작된 세션과 창은 tmux 명령에 대한 키보드 단축키(예: 창 분할)에 반응하지 않는 것으로 나타났습니다 . 그렇다면 애초에 제어 모드를 사용하는 이유는 무엇입니까?

답변1

저는 Mac을 사용하고 있으며 iTerm2를 사용하고 있습니다. 내가 아는 한, tmux 통합 기능을 갖춘 유일한 터미널 에뮬레이터입니다. 실행부터 시작 tmux -CC하면 iTerm이 tmux 세션을 제어합니다. 이는 평소와 같이 iTerm2를 정상적으로 사용할 수 있음을 의미합니다(창을 수직으로 분할하려면 CMDD, 수평으로 분할하려면 CMD-SHIFT-D). 대신 마우스를 사용하여 창 위치를 변경할 수 있습니다 C-b {. 접두사를 전혀 사용할 필요가 없습니다. 창에서 작업하는 동안 복사하고 붙여넣는 데에도 문제가 없습니다.

tl;dr 사용법을 사용하면 tmux -CCtmux를 지원하는 터미널에서 "기본적으로" 사용할 수 있습니다. 지금까지 이를 지원하는 Linux 터미널은 본 적이 없으며 Mac에서는 iTerm2만 보입니다.

답변2

제어 모드의 흥미로운 점은 실제 tmux 프로세스를 수신하는 백그라운드 프로세스를 작성할 수 있다는 것입니다. 실제 tmux에서 무슨 일이 일어나고 있는지 알림을 받은 다음 명령을 보낼 수 있습니다. 2개의 터미널을 사용하고 하나의 터미널에서 일반 세션을 실행하는 경우

tmux new -s mysession

그리고 다른 곳에서는

tmux -C attach -t mysession

그런 다음 창을 분할하거나 새 창을 추가하거나 일반 tmux에서 닫으면 다음과 같은 줄이 표시됩니다.

%layout-change @2 91a8,80x23,0,0[80x11,0,0,5,80x11,0,12,7]
%window-add @3
%window-close @1

tmux를 제어하면서 이에 반응하는 프로그램을 작성할 수 있습니다. 도움을 드리기 위해파이썬 라이브러리이 메커니즘을 활용하기 위해서입니다. 거기에서 예제를 참조하세요.

답변3

tmux제어 모드는 직접 사용할 수 없습니다. 동작을 대화형에서 tmux"에이전트"와 유사한 동작으로 변경합니다. 이 기능을 지원하는 터미널 에뮬레이터(예: iTerm2)에서 호출하여 사용됩니다. 안타깝게도 현재 제어 모드를 지원하는 Linux 터미널은 없습니다. (하지만터미네이터진전이 이루어지고 있는 것으로 보입니다. )

이것은 킬러 기능입니다.

이를 사용하는 방법의 예로 ssh원격 서버와 관련된 작업 흐름을 고려하십시오. 해당 서버에서 작업하는 동안 다른 세션을 시작하려면 새 연결을 만들어야 합니다 ssh(어렵지는 않지만 번거롭고 사소한 컨텍스트 전환이 필요함).

입력하다 tmux.

tmux단일 연결에서 여러 원격 세션(따라서 이름에 "멀티플렉서"가 있음)을 생성하고 이를 여러 탭과 분할 창에 표시할 수 있습니다. 이것은 확실히 작동하지만 탐색하는 데 필요한 키 조합이 tmux너무 번거롭고 더 나은 것을 원하게 만들었습니다. 원격에서 탭과 분할 창을 기본 터미널 에뮬레이터만큼 부드럽고 자연스럽게 만드는 방법이 있었다면...

입력하다 tmux -CC.

tmux제어 모드를 사용하면 이를 지원하는 터미널 에뮬레이터가 tmux세션에 직접 명령을 실행하여 세션을 제어할 수 있습니다(meuh의 답변 참조). 예를 들어 원격 세션에서 새 창/탭을 열 수 있지만 로컬 창/탭을 여는 것과 동일한 키 입력/명령을 사용하면로컬 창/탭이지만 원격 세션에 연결되어 있습니다.

답변4

내가 아는 한, 제어 모드는 일반 클라이언트와 같습니다. 차이점은 제어 모드에 있습니다. tmux클라이언트는 표준 입력에서 명령을 읽고 이를 tmux서버로 보냅니다. 대신 제어 모드의 클라이언트는 일반 클라이언트처럼 터미널에 그리는 대신 서버로부터 메시지를 받아 표준 출력으로 인쇄합니다.

관련 정보