실행 중인 tmux 세션(예: screen -X)에 명령을 보냅니다.

실행 중인 tmux 세션(예: screen -X)에 명령을 보냅니다.

터미널 멀티플렉싱 요구를 위해 screen에서 tmux로 전환하고 싶었지만 screen의 한 기능을 tmux에 복제해야 했습니다. 즉, 기존 screen 세션 내에서 임의의 screen 명령을 실행할 수 있도록 하는 -X 옵션이었습니다. 내 스크린 세션이 X11 로그인보다 오래 지속되는 경향이 있기 때문에 이를 통해 실행 중인 스크린 세션의 환경을 수정하여 새로운 X 서버를 가리키도록 할 수 있습니다. 예를 들어 screen -X setenv DISPLAY $DISPLAYX11 시작 스크립트에 무언가를 추가할 수 있습니다.

어쨌든, tmux가 실행 중인 tmux 세션에 임의의 명령을 보내는 방법이 있습니까? 또는 실행 중인 tmux 내에서 환경 변수를 업데이트하는 것도 허용됩니다.

답변1

이는 단순히 세션( 화면에 해당) 을 선택하는 tmux옵션 입니다.-t-S

tmux set-environment DISPLAY $DISPLAY

답변2

환경 업데이트에 대한 질문 섹션에 답변하려면 다음을 수행하세요.멀티플렉서기본적으로 세션을 생성하거나 다시 연결할 때 특정 변수는 클라이언트 환경에서 상속됩니다.

맨페이지에서:

환경 세션 업데이트 옵션을 사용하면 새 세션을 생성하거나 이전 세션을 다시 연결할 때 클라이언트에서 세션 환경을 업데이트할 수 있습니다.

기본값은 "DISPLAY SSH_ASKPASS SSH_AUTH_SOCK SSH_AGENT_PID SSH_CONNECTION WINDOWID XAUTHORITY"입니다.

DISPLAY따라서 세션에 다시 연결할 때 업데이트된 설정을 가져오기 위해 어떤 작업도 수행할 필요가 없습니다.

이는 다음 경우에만 해당됩니다.새로운이전 세션에서 생성했지만 창 또는 분할창아니요기존 창문.

답변3

tmux 세션의 모든 셸 프로세스에 대해 $DISPLAY가 자동으로 업데이트되도록 하려면 내 솔루션을 확인하세요. https://www.reddit.com/r/tmux/comments/cd3jqw/automatically_update_display_for_each_tmux_pane/

결론적으로:

tmux.conf에 줄 추가 set-hook -g client-attached 'run-shell /bin/update_display.sh'

script/bin/update_display.sh를 생성합니다:

# tmux will only send-keys to the following active processes
shell_grep="bash|zsh"

# Update $DISPLAY for each tmux pane that is currently running one of the $shell_grep processes
tmux list-panes -s -F "#{session_name}:#{window_index}.#{pane_index} #{pane_current_command}" | \
    grep -E $shell_grep| \
    cut -f 1 -d " " | \
    xargs -I PANE tmux send-keys -t PANE 'eval $(tmux showenv -s DISPLAY)' Enter

관련 정보