はじめに
SSH先で動かしているtmuxの画面から文字列を選択し、手元のPCのクリップボードへコピーする方法を紹介する。
この方法では、tmuxが「クリップボードに保存する」というOSC 52エスケープシーケンスを端末へ送る。手元の端末がOSC 52を受け付ければ、SSH越しでもコピーできる。
動作確認環境
- SSH先
- Ubuntu 22.04 x86_64
- tmux 3.2a-4ubuntu0.2
- 接続元
- Windows 11 x86_64
- ターミナル: Windows Terminal 1.24.11911.0
- SSHクライアント: OpenSSH_for_Windows_9.5p2, LibreSSL 3.8.2
- 貼り付け先:メモ帳
事前確認
以下のコマンドは、SSH先でtmuxに接続中のペイン内で実行する。
まず、tmuxのクリップボード設定を確認する。
tmux show -s set-clipboard
次のように external と表示されれば、tmuxがコピーした内容を端末へ送る設定である。on でも送信できるが、tmux内のアプリケーションからのOSC 52も受け付けるため、通常は external のままでよい。
set-clipboard external
続いて、tmuxがOSC 52を送るための情報を持っているか確認する。
tmux info | grep 'Ms:'
次のように Ms: (string) とOSC 52の文字列が表示されれば、tmux側の準備はできている。先頭の番号は環境によって異なる。
180: Ms: (string) \033]52;%p1%s;%p2%s\a
これらはtmux側の確認である。手元の端末がOSC 52を受け付けるかどうかは、最後に実際の貼り付けで確認する。
方法
キー設定の確認
tmuxのコピーモードには、Emacs式とvi式のキー設定がある。現在の設定は、次のコマンドで確認できる。
tmux show-window-options -gv mode-keys
emacs または vi と表示される。
既定ではEmacs式だが、環境変数の VISUAL や EDITOR、またはtmuxの設定によってvi式になる場合がある。
Emacs式の場合
以下は、mode-keys が emacs の場合の操作である。Ctrl+b は押して離してから、次のキーを押す。
-
Ctrl+b、続けて[を押してコピーモードに入る。 - 矢印キーでコピー範囲の開始位置へ移動する。
-
Ctrl+Spaceで選択を開始する。 - 矢印キーでコピー範囲の終了位置まで移動する。
-
Ctrl+wでコピーし、コピーモードを終了する。 - 手元のPCでメモ帳などを開き、貼り付ける。
手元のPCの別アプリに貼り付けられれば成功である。
vi式の場合
mode-keys が vi の場合は、次のように操作する。
- Ctrl+b、続けて [ を押してコピーモードに入る。
- コピー範囲の開始位置へ移動する。
- Space で選択を開始する。
- コピー範囲の終了位置まで移動する。
- Enter でコピーし、コピーモードを終了する。
- 手元のPCのアプリケーションへ貼り付ける。
なお、Ctrl+b、続けて ] を押す操作は、tmuxのコピーバッファをtmux内のペインへ貼り付ける操作である。手元のPCのクリップボードから貼り付ける操作ではない。
補足:コピーできる行数について
コピーモードで遡れる範囲は、tmuxが保持しているペインの履歴に限られる。現在の履歴行数と上限は、次のコマンドで確認できる。
tmux display-message -p '#{history_size}/#{history_limit}'
今後作るペインでより多くの履歴を残したい場合は、例えば次のように設定する。
tmux set-option -g history-limit 50000
すでに履歴の上限を超えて消えた行は、この設定を変更しても復元できない。
まとめ
SSH先で動かしているtmuxの画面から文字列を選択し、手元のPCのクリップボードへコピーする方法を紹介した。
tmuxの set-clipboard とOSC 52に対応したターミナルを利用すると、X11転送やクリップボード用の外部コマンドを使用せず、SSH先のtmuxで選択した文字列を手元のPCのクリップボードへコピーできることを確認できた。
トラブルシューティング
コピーできない場合は、次の点を確認する。
-
set-clipboardがexternalまたはonになっているか -
tmux infoにMs: (string)が表示されるか - 手元のターミナルがOSC 52に対応し、受け付ける設定になっているか
- コピーモードのキー設定がEmacs式とvi式のどちらになっているか
参考