- tmuxを使っていると、範囲選択がXfce Terminal本来のコピペ機能ではなく、tmuxのマウスモードに奪われることがあります。
- 原因は、tmuxがマウスモードでマウスイベントを横取りしてしまうことです。
- Shiftキーを押しながら選択すると、その瞬間だけターミナル本来の操作を取り戻せます。
- マウスモード自体をオフにする設定もあり、用途によって使い分けられます。
1. tmuxのマウスモードがコピペを奪う
最近、Linux MintのXfce Terminalでtmuxを使っていて、コピー&ペーストができなくなる場面に出会いました。 範囲選択のためにマウスをドラッグしても、何も選択されない。 右クリックしてコピーを試しても、反応がない。
原因は、tmuxの「マウスモード(Mouse Mode)」という機能に集約されます。 tmuxはマウスモードがオンのとき、マウスの動きやクリックをtmux自身が受け取り、ペインの切り替えやスクロール、ペイン境界のリサイズに使ってしまいます。 その結果、Xfce Terminal側に本来届くはずのドラッグ操作が、tmuxに横取りされる形になる。 ターミナルエミュレータのコピペ機能は、範囲選択のイベントを受け取れて初めて動くので、そこが奪われると機能ごと止まってしまうわけです。
厄介なのは、マウスモードがペインの切り替えやスクロールには便利だという点です。 なくしてしまうのも惜しい。 ただコピペだけ取り戻したい、というのが今回の出発点でした。
2. Shiftキーでターミナルを一時的に取り戻す
Shiftキーを押しながらマウスで範囲選択すると、その間だけtmuxのマウスモードが黙ります。 tmuxは、Shiftが押されている間のマウスイベントを自分の処理対象から外し、ターミナルエミュレータ側にそのまま渡す仕様になっているのです1。 選択できたら、Ctrl+Shift+Cでコピー、貼り付けたい場所でCtrl+Shift+Vを押せば完了です。
キーの組み合わせがXfce Terminal寄りなのは偶然ではありません。 多くのターミナルエミュレータは、Ctrl+CやCtrl+Vをシェルの制御コードに譲っているため、コピペ用に別のショートカットを用意しています。 Xfce TerminalはCtrl+Shift+C、Ctrl+Shift+Vという組み合わせを採用していて、これは他の主要なターミナルエミュレータとも共通しています2。
2.1. Chrome Remote Desktop越しだとキーが通りにくい
今回はChrome Remote Desktop経由でLinux Mintを操作していました。 リモートデスクトップ越しの操作では、キーの組み合わせがローカルのブラウザやOSに先に拾われてしまい、リモート側まで届かないことがあります3。 Shiftドラッグとの組み合わせも、Ctrl+Shift+C、Ctrl+Shift+Vも、いずれもリモート越しに問題なく通り、無事にコピペができました。 遠隔操作の環境ほど、キーの組み合わせが単純な方が事故が少ないのだと思います。
3. マウスモード自体を切るという選択肢
コピペのたびにShiftキーを挟むのが面倒なら、マウスモードそのものをオフにする手もあります。 tmuxの中でCtrl+Bに続けてコロンを押し、コマンドラインにset -g mouse offと打ち込めば、その場で切り替わる4。 毎回の設定が面倒であれば、~/.tmux.confに同じ行を書いておくと起動時から反映されます。
ただし、マウスモードを切ると、マウスでのペイン切り替えやスクロール、ペイン境界のドラッグ操作も一緒に使えなくなります。 スクロールはコピーモードをキーボードで呼び出せば代替できますが、マウス操作に慣れていると一手間増える。 どちらを選ぶかは、tmuxをマウスでどれだけ操作しているか次第だと感じます。
キーひとつでツール同士の縄張りが切り替わる、というのは地味に面白い発見でした。 コピペという当たり前の操作の裏に、tmuxとターミナルエミュレータの取り合いがあったわけです。 次に同じ症状に出会っても、もう慌てずに済みそうです。
- tmuxのマウスモードが有効な状態でも、選択中にShiftキーを押しておくとtmuxを経由せず、ターミナルエミュレータ本来の選択機能に切り替わると紹介されている。 – Mastering Tmux Mouse Mode: A Productivity Manifest
- xfce4-terminalの既定のキーボードショートカット一覧でも、コピーはCtrl+Shift+C、貼り付けはCtrl+Shift+Vと整理されている。 – MX Linux, xfce4-terminal, and Bash keyboard shortcut references
- Chrome Remote Desktopでは、一部のキーボードショートカットがリモート側ではなくローカル側のOSで先に処理されてしまう場合があると説明されている。 – 3 Ways to Use Chrome Remote Desktop Keyboard Shortcuts
- set -g mouseはコマンドモードから実行すればその場で反映されるが、tmuxサーバーを終了すると設定は失われるため、恒久的に使うにはtmux.confへの記述が必要になる。 – How to use the tmux set command?