0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

SSH先のtmuxから手元のクリップボードへコピーする方法

0
Posted at

はじめに

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 は押して離してから、次のキーを押す。

  1. Ctrl+b、続けて [ を押してコピーモードに入る。
  2. 矢印キーでコピー範囲の開始位置へ移動する。
  3. Ctrl+Space で選択を開始する。
  4. 矢印キーでコピー範囲の終了位置まで移動する。
  5. Ctrl+w でコピーし、コピーモードを終了する。
  6. 手元のPCでメモ帳などを開き、貼り付ける。

手元のPCの別アプリに貼り付けられれば成功である。

vi式の場合

mode-keys が vi の場合は、次のように操作する。

  1. Ctrl+b、続けて [ を押してコピーモードに入る。
  2. コピー範囲の開始位置へ移動する。
  3. Space で選択を開始する。
  4. コピー範囲の終了位置まで移動する。
  5. Enter でコピーし、コピーモードを終了する。
  6. 手元の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式のどちらになっているか

参考

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?