tmux의 bind-key 를 특정 세션에만 적용할 수 있을까요?

조회수 2257회

발생하는 문제 및 실행환경

https://rm-rf.work/f/topic/70/tmux와-ssh-로-다수의-서버-모니터링-하기 의 모니터링 스크립트를 사용하다가 q 를 누르면 한번에 세션이 다 종료되면 좋을 것 같아서

tmux bind -n q kill-session -t mon

이라고 했더니.. bind-key 가 모든 세션에 적용되어서 다른 tmux 세션에서 q 를 누르면 모니터링 세션이 종료되네요.

 tmux -f monitor.conf new-session   -s $tname -n $twin -d ssh -t a1 "$com" \;  bind -n q kill-session -t mon

이렇게 해도 마찬가지입니다.

전에 몰랐는데, -f 옵션을 이용해서 다른 conf 파일을 로드해도 이 파일의 내용이 tmux 서버의 전체 세션에 적용되더군요.

bind-key 를 전체 tmux 세션들이 아닌 특정 세션이나 윈도우에 에 한정하는 방법이 있을까요?

서버를 따로 띄우는 수 밖에 없을까요?

  • (•́ ✖ •̀)
    알 수 없는 사용자

2 답변

  • 설정을 따로가져가는 방법은 아닙니다만,

    tmux bind-key -n q command-prompt "kill-session"
    

    세션의 커맨드로 문제를 해결해 보시면 어떨까합니다.

    • 답변 감사합니다. 특수한 경우(예르 들어 특수키를 쓴다던가)에는 괜찮은 해결책이 될 수 있겠네요. 제 경우에 이 해법의 가장 큰 문제는 다른 tmux 세션에서 더 이상 타이핑을 목적으로 `q` 키를 사용할 수 없다는 것입니다. 알 수 없는 사용자 2016.4.4 19:45
  • https://rm-rf.work/f/topic/72/tmux의-bind-key-를-특정-세션에만-적용할-수-있을까요/2 의 답변입니다.

    완벽한 답은 아니지만, 소켓/서버를 분리해서 비슷한 효과를 낼 수 있습니다.

    #!/bin/bash
    com=${1:-"htop"}
    tname=mon
    twin=mon
    tnw=$tname:$twin
    tsocket="-L tmux_monitor_socket"
    TMUX="tmux $tsocket"
    
    $TMUX has-session -t $tname
    if [ $? != 0 ]
    then
      $TMUX new -s $tname -n $twin -d ssh -t a1 "$com" \; \
        bind -n d detach 
      $TMUX bind-key -n q command-prompt "kill-session"
      $TMUX split-window  -t $tnw.0 -h ssh -t v1 "$com"
      $TMUX split-window  -t $tnw.0 -v ssh -t v2 "$com"
      $TMUX split-window  -t $tnw.1 -v ssh -t vr "$com"
      $TMUX select-pane   -t $tnw.0
    fi
    $TMUX attach -t $tname
    

    이런 식으로 -L 옵션을 이용해서 소켓을 따로 만들면 소켓이 다른 tmux 세션은 다른 tmux 서버에 속하기 때문에 영향을 주지 않습니다. 단점은 tmux ls 같은 명령도 소켓 별로 따로 작동해서 소켓을 기억해야하고, 불편하다는 점입니다.

    하나의 tmux 서버내에서 세션별로 명령/설정을 적용할 방법이 있으면 더 좋겠습니다.

    • (•́ ✖ •̀)
      알 수 없는 사용자

답변을 하려면 로그인이 필요합니다.

프로그래머스 커뮤니티는 개발자들을 위한 Q&A 서비스입니다. 로그인해야 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)