Fragments of verbose memory

冗長な記憶の断片 - Web技術のメモをほぼ毎日更新

Feb 7, 2026 - 日記

リモートtmuxでコピーできない原因はmoshだった件

リモートtmuxでコピーできない原因はmoshだった件 cover image

先日、リモートサーバのtmux セッションでコピーしたテキストが、Mac側のクリップボードに反映されない問題に遭遇しました。

tmux側の設定は正しいはずなのに、なぜかコピーが効かない。

結論から言うと、原因は mosh でした。

本記事では、mosh経由でOSC 52クリップボード連携が不安定になる理由と、実際に検証した結果、そして実用的な対策をまとめます。

環境

  • クライアント: macOS
  • 端末: Alacritty 0.16.1
  • サーバ: Linux (tmuxあり)
  • tmux: 3.4
  • mosh: client/server ともに 1.4.0

症状

tmux側はOSC 52連携想定の設定が入っていたが、mosh経由だと以下の状態になりました。

  • tmux内のコピーバッファには入る
  • しかしMac側クリップボードへ反映されない

OSC 52とは?

OSC 52 は、端末エミュレータとアプリケーション間でクリップボードを共有するためのエスケープシーケンスです。

リモートサーバ上のtmuxやvimから、ローカルマシンのクリップボードへ直接コピーできる仕組みで、SSH経由でも動作します。

検証: mosh経由でのOSC 52テスト

mosh経由でtmux内から、以下のOSC 52テストを実行しました。

✅ 通る(Mac側クリップボードに入る)

A. ペイロード直書き + BEL終端(最小)

1
printf '\033]52;c;SGVsbG8=\a'
  • Hello がMac側のクリップボードに入る。

❌ 通らない(Mac側クリップボードに入らない)

B. base64をコマンド置換で作って送る(元々のテスト)

1
printf "\033]52;c;$(printf %s Hello | base64)\a"
  • 私の環境では入らなかった。

改善版(推奨)

base64の末尾改行(および環境によっては折返し)が混ざると壊れやすいので、改行を除去して送ります。

1
printf "\033]52;c;$(printf %s Hello | base64 | tr -d '\n')\a"

推定原因

mosh 1.4.0 でOSC 52対応は追加されています(リリースノート にも明記)。

ただし、私の環境では「受理できるOSC 52の形式」がかなりシビアに見えました。以下のような条件が絡むと、mosh側がOSC 52として扱わず(もしくは途中で破棄)、クライアント端末へ転送されない可能性があります。

  • base64の出力に改行が混ざる
  • base64が折返しする(環境差)
  • 終端がBEL (\a) 以外
  • オプション/形式の差

特に $(... | base64) の形は、多くの環境で末尾に改行が含まれるため、OSC 52のペイロードとして壊れるパターンがあります。

対策案

案1: moshを捨てる(推奨)

SSH + tmux に寄せる。

  • クリップボード(OSC 52)が素直に通りやすい。
  • 切れてもtmuxが生きていれば復帰が楽。

SSH側は ControlMaster と keepalive を入れると体感が良くなります。

~/.ssh/config 設定例:

Host myserver
  HostName example.com
  ControlMaster auto
  ControlPath ~/.ssh/sockets/%r@%h-%p
  ControlPersist 10m
  ServerAliveInterval 60
  ServerAliveCountMax 3

案2: mosh継続 + “通る形式” に寄せる(妥協案)

  • tmuxの set-clipboard on に任せず、tmuxバッファを自前で \033]52;c;<base64>\a(BEL終端)形式で吐く
  • base64は必ず改行除去 (tr -d '\n') を入れる。
  • tmux側のクリップボード設定は公式Wiki(tmux Wiki: Clipboard )を一度確認しておく。

ただし、moshはUDP 1パケット相当のサイズ制限で長文が切れる可能性があります(実装/議論上の既知制限)。

現時点の結論

  • 「mosh経由でもOSC 52は一応通る」が、形式依存で壊れやすく運用が不安定
  • クリップボード重視のワークフローでは、moshを捨ててSSHを強化するのが最短。

まとめ

moshは不安定なネットワーク環境で威力を発揮しますが、OSC 52クリップボード連携に関しては「形式依存で壊れやすい」という弱点があります。

個人的には、クリップボード連携を重視するなら、moshを諦めてSSH + tmuxの組み合わせに寄せる方が安定すると思います。

同じ問題でハマっている方の参考になれば幸いです。

参考リンク