実行中のtmuxセッション(screen -Xなど)にコマンドを送信します。

実行中のtmuxセッション(screen -Xなど)にコマンドを送信します。

ターミナルの多重化を要求するためにscreenからtmuxに切り替えたかったのですが、screenの機能をtmuxに複製する必要がありました。つまり、既存のスクリーンセッション内で任意の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

関連情報