リモートデバイスのtmux-sessionにコマンドを送信する方法(sshを使用)

リモートデバイスのtmux-sessionにコマンドを送信する方法(sshを使用)

私のVanila Arch Linuxシステムでは、次のコマンドを使用してローカルtmux-session(セッション)に送信できます。main

$ tmux send -t main.0 'echo asdf' ENTER

sshlocalhostまた、以下を使用してリモートコンピュータにコマンドを送信することもできます。 (単にデモに使用します):

$ ssh garid@localhost "ls /home"

私の端末からコマンドを送信したいと思いますtmux-sessionremote-machine以下のように)。

$ ssh -t garid@localhost "tmux send -t main.0 'echo asdf' ENTER"

ただし、次のエラーが出力されます。

error connecting to /tmp/tmux-1000/default (No such file or directory)
Connection to localhost closed.

私がここで何を間違っているのか?

答え1

コメントに私たちは確認しました予想されるコマンド、

ssh remote "tmux send -t main.0 'echo asdf' ENTER"

... remotelocalhostではない場合に動作します。

私たちはまだ確認済み接続時にコマンドが失敗する理由は、SSHセッションで変数が設定されていないlocalhostためです。この環境変数は、制御ソケットを含むディレクトリを作成する場所を決定するTMUX_TMPDIRために使用されます。tmuxこの変数が設定されていない場合、ユーティリティはを使用します/tmp

tmuxsshviaを実行すると、セッションは非対話型の非ログインセッションであるため、変数は設定解除されます。したがって、変数をに~/.config/shell/profile設定しません。ファイルをインポートします。TMUX_TMPDIR/tmpラルブス、あなたはそれを使用しますが、私はそれについて何も知りません。

今、いくつかの可能な方法があります。

  1. 何もしません。ssh+コマンドの意図されたターゲットtmuxは決してlocalhostではありません。

  2. TMUX_TMPDIRコマンドを呼び出すときに変数が正しく設定されていることを確認してくださいlocalhost

    ssh localhost "env TMUX_TMPDIR='$TMUX_TMPDIR' tmux send -t main.0 'echo asdf' ENTER"
    

    ...しかし、ローカル変数の値が他のホストの正しい値であると仮定するので、普遍的な解決策になる可能性はありません。とにかくsshtoにつながるlocalhostのは珍しいことだから、そうする代わりに最初のポイントにループバックして何もしないか…

  3. 値をTMUX_TMPDIR変更して(変数を設定するか、割り当て全体をコメントアウトして)、ローカルのデフォルト値にリセットします。しかし、LARBSがこれをどのように使用しているのかわかりません。/tmp~/.config/shell/profile/tmp

関連情報