Twitterをぼけーっと見てたとき、こういう処理についてどうやって実現するかって内容を見かけたので、ちょっと調べてみた。

ローカルのWSLで処理を完結するならclip.exeとかを使えば良さそうなのだけど、sshでリモートに接続してたりするとこの方法は使えない。 じゃどうするかというと、ローカルでX Window Serverを立ち上げて、ssh接続先でxclipからクリップボードにコピーすればいいようだ。 リモートマシンにパッケージ入れないといけないのがちょっと抵抗ありそうだけど、調べた限りこれが一番シンプルそう。

以下、ざっくりとした流れ

1. クライアント側でX Window Serverの立ち上げ

まず、クライアントであるWindows側でX Window Serverを立ち上げする。 とりあえずよく使われてるXmingあたりを入れておけばいいだろう。

X Window Serverを立ち上げたら、WSL側でX Windowに接続できるよう以下のコマンドを実行する。 (もしよく利用するのであれば、.bashrcなどにも記述しておくといいかもしれない)

export DISPLAY=localhost:0.0

2. ssh接続、xclipでのクリップボードへのコピー

クライアント側でX Window Serverを立ち上げたら、X11 forwardingしてssh接続する。

ssh -X hoge@fuga ...

ssh接続後、xclipを使ってやる。

echo hogehoge | xclip

これで、Windows側のクリップボードにhogehogeがコピーされているはずだ。

ちなみに今まで知らなかったのだけど、こういうときにMacやLinuxだったらOSCエスケープの52でクリップボードにアクセスしてコピーができるらしい。 (おそらくWSLでもできているのだろうけど、WSLとWindowsでクリップボードが共有できてないので機能していない様子)

Macとかだと、(iTerm2でやった場合、クリップボードにアクセスできるよう設定にチェックが必要だけど)以下のようにすれば出力をクリップボードにコピーできる。 iTerm2でのOSC Escape 52については こちら が詳しい。

printf hogehoge123 | base64 | echo -ne "\033]52;c;$(cat)\a" # クリップボードにコピー

OSCエスケープって便利なのね…(´・ω・`)。

ターミナルの背景色や文字色も指定できるし、今回の件で調べるまで知らなかったよ。