작은 모니터를 큰 모니터로 전환 할 때 tmux 창을 다시 그릴 수있는 방법이 있습니까?


399

Terminal.app을 사용하여 ssh를 통해 원격 서버에 연결한다고 가정 해 봅시다. 이전에 tmux를 시작한 작은 모니터에서 더 큰 해상도의 모니터로 "tmux 연결"을하면 콘솔 주위에 점이 그려집니다. 새 창 크기에 맞지 않습니다. 창을 다시 그리고 정리하는 방법이 있습니까? CTRL+ L또는 CTRL- B+ R는 도움이되지 않습니다. 나는 사람에 대한 적절한 명령을 찾지 못했습니다.

% tmux -V
tmux 1.5

7
모든 세션을 분리하지 않고 모든 세션을 다시 그리는 방법을 알고 싶습니다.
PJ Brunet

3
모두 방금 detach어요 ... 방법을 찾았나요?
Patoshi パ ト シ


그래, 나는 여전히 질문에 대한 답을 알고 싶다. "창을 다시 그리고 정리할 방법이 있습니까?"
jaydel

답변:


579

tmux 는 윈도우의 크기를 윈도우가 연결된 모든 세션에서 각 차원의 최소 크기로 제한합니다. 이를 수행하지 않으면 연결된 모든 클라이언트에 대해 전체 창 영역을 표시하는 현명한 방법이 없습니다.

가장 쉬운 방법은 연결할 때 다른 클라이언트를 세션에서 분리하는 것입니다.

tmux attach -d

또는 세션에 연결하기 전에 다른 클라이언트를 다른 세션으로 이동할 수 있습니다.

takeover() {
    # create a temporary session that displays the "how to go back" message
    tmp='takeover temp session'
    if ! tmux has-session -t "$tmp"; then
        tmux new-session -d -s "$tmp"
        tmux set-option -t "$tmp" set-remain-on-exit on
        tmux new-window -kt "$tmp":0 \
            'echo "Use Prefix + L (i.e. ^B L) to return to session."'
    fi

    # switch any clients attached to the target session to the temp session
    session="$1"
    for client in $(tmux list-clients -t "$session" | cut -f 1 -d :); do
        tmux switch-client -c "$client" -t "$tmp"
    done

    # attach to the target session
    tmux attach -t "$session"
}
takeover 'original session' # or the session number if you do not name sessions

더 작은 클라이언트가 세션으로 전환하면 화면이 다시 축소됩니다.

윈도우를 "인계"하는 것 (윈도우를 새 세션에 연결하고 설정 aggressive-resize하고 해당 윈도우가 활성화 된 다른 세션을 다른 윈도우로 전환)의 변형이 있지만 일반적으로 스크립트하기가 더 어렵습니다. case (및 세션에서 분리하는 대신 창을 연결 해제하거나 세션을 종료하려고하기 때문에“종료”와 다릅니다).


을 사용하여 현재 세션을 얻을 수 있습니다 ( superuser.com/questions/410017/…$(tmux display-message -p '#S') 참조) .
GManNickG

3
이 답변은 세부 사항과 지식 기반에 대한 소품을 얻습니다. 그러나 Ctrl-b + D사용하기 쉽고 기억하기 쉬운 Shi B.의 답변 을 참조하십시오 .
fbicknel

"tmux detach -a"는 저에게 효과적이었습니다. "tmux attach -d"가 없습니다.
mahemoff

(1) 최신 TMux 오류 set-option... set-remain-on-exit on. tmux # 787을 참조하십시오 . 이제 다음을 사용하십시오 tmux set-hook -t "$tmp" window-linked 'set remain-on-exit on..
user1902689

1
(2) 최신 tmux에서는 new-window마지막 인수 를 사용해야 'echo "Use Prefix + L (i.e. ^B L) to return to session.'; while(true); do read; done"합니다. 그렇지 않으면 메시지가 표시되지 않습니다. (일부 상황에서는 위로 스크롤하거나 터미널이 더 길면 표시됩니다.) 이것을 사용하면 내 의견 "(1)"또는 다른 설정이없는 것이 좋습니다 remain-on-exit.
user1902689

462

언제든지 CTRL- B+ SHIFT- D를 눌러 세션에서 분리 할 클라이언트를 선택할 수 있습니다 .

tmux는 모든 세션을 현재 차원으로 나열합니다. 그런 다음 작은 크기의 모든 세션에서 분리하면됩니다.


6
설명. 대문자 D입니다. 작은 'd'는 클라이언트를 분리합니다.
Raghuram Murthy P

2
CTRL-B그것이 당신의 접두사라면. CTRL-A화면에서 전환 한 이래로 광산이되었습니다 .
Blaskovicz

1
실제로 동일한 세션 그룹에서 더 작은 크기의 모든 세션에서 분리해야합니다. 그러나 CTRL-B + SHIFT-D는 각 세션이 어떤 그룹에 속하는지 보여주지 않습니다. tmux list-sessions세션 이름, 크기 및 그룹 정보를 표시 한 다음 tmux kill-session -t <session_name>동일한 그룹의 세션 을 종료 하는 것을 선호합니다 .
Zhichang Yu

180

최신 버전의 tmux (1.9에서 테스트)에 대한 간단한 솔루션을 이제 다음과 같이 할 수 있습니다.

tmux detach -a

-a 현재 세션을 제외한이 세션의 다른 모든 클라이언트를위한 것입니다.

. [bash | zsh] rc에서 별칭을 지정할 수 있습니다.

alias takeover="tmux detach -a"

워크 플로우 : 정상적으로 세션에 연결할 수 있으며, tmux 창 크기를 강제로 낮추는 다른 세션에 방해가되는 경우 간단히 전화하면 takeover됩니다.


13
감사합니다! 일했다. 활성 tmux 세션에서 수행하는 경우 CTRL + B (또는 사용자 정의 tmux 명령)를 누른 다음:detach -a
Iacchus

또는 tmux detach -aTmux 내의 쉘 명령 행에서 실행하십시오.
jdhao

4

다른 답변은 클라이언트를 연결했기 때문에 도움이되지 않았습니다 (이전 세션을 시작한 이전 답변은 이미 분리되었습니다).

이 문제를 해결하기 위해 여기 에 답을 따랐습니다 (xterm을 사용하지 않았습니다).

단순히 말했다 :

  1. TMUX 세션에서 분리
  2. 실행 resize리눅스 명령
  3. tmux 세션에 다시 연결

3

방금이 문제에 부딪 쳤고 다른 상황을 우연히 발견했습니다. 아마도 유니콘 일뿐이지만, 나는 그것을 배치 할 것이라고 생각했습니다.

한 세션이 더 작았고 글꼴 크기가 다른 것을 알았습니다. 세션이 작을수록 글꼴이 작습니다. 분명히 어떤 이유로 창 글꼴 크기를 변경했습니다.

OS X에서는 방금 Cmd-+더 작은 크기의 세션에서 작업을 다시 시작했습니다.


macOS 터미널에서 tmux 상태 표시 줄의 이상한 배치가 수정되었습니다. 터미널 탭을 열면 tmux 상태 표시 줄 위치가 엉망이됩니다. 확대 / 축소로 재생 cmd-+하거나 -수정합니다.
Paul

0
ps ax | grep tmux
17685 pts/22   S+     0:00 tmux a -t 13g2
17920 pts/11   S+     0:00 tmux a -t 13g2
18065 pts/19   S+     0:00 grep tmux

다른 사람을 죽여라.


8
더 나은 답변이 있지만 제목 질문에 대한 올바른 답변 인 것 같습니다. 왜 망각에 빠졌는지 이해할 수 없습니다.
JoL

yessss, 이것은 나를 위해 일한 유일한 대답은
시르 Hantoush


0

내가 사용 Ctrl- b+ q는 길을 다시 그릴, 각 창에 대한 수를 플래시합니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.