私は普段は Windows マシンから自宅サーバの Linux に ssh で接続して作業しており、端末内で作業が完結している間はいいのだけど、Web ブラウザはローカル側なので、URL を開いたりクリップボードのやりとりなどが面倒。
そこで便利なのが lemonade!
ssh 越しから URL を飛ばしてローカルでブラウザを開いたり、リモート側からローカルのクリップボードの読み書きができる。便利。 lemonade を使う上であれこれやったのでメモ。
port forwarding
lemonade 作者の pocke さんはローカルマシン内で動いている仮想環境とのやりとりを想定していたようで、お互いのマシンが直接やりとりすることを想定していたようだけど、私の場合は外部マシンなのでそうは行かない。
これは SSH Remote Forwarding を使えば問題なく利用できる。
接続→SSH→トンネル にて、
源ポート: 2489
送り先: localhost:2489
リモート
として、「追加」ボタンを押す。
以下の設定ファイルを作成する(ホスト名は環境に合わせる)。
# ~/.ssh/config Host your.hostname RemoteForward 2489 localhost:2489
このようにするとリモートに ssh でログインした際に、リモート側は 2489 番ポートで LISTEN を始める。ここに通信すると、ローカルマシンの localhost:2489 にフォワードしてくれる。
なのでリモート側では、lemonade はリモート側の localhost に接続すれば OK。以下のように設定しておく。
# ~/.config/lemonade.toml host = 127.0.0.1
注意点として、同じリモートマシンに複数の場所から ssh しちゃうと当然ながらうまく動かない。何度 URL を開こうとしても開かれず、実は別のクライアントマシン上でガンガン開かれていた、ということが起きる。
Windows で lemonade をバックグラウンドで動かす
ローカル側のマシンでは、lemonade はサーバとして常駐する。普通にコマンドプロンプトから実行すると、コマンドプロンプトが常駐してしまう。不便。
というわけでこの件について mattn さん(@mattn_jp)に相談したところ、以下のようにして lemonade.exe
を生成することで、プログラムが端末から切り離されて裏で動作するようになるらしい…!
# 2023-09-25 更新。旧コマンド: go get -u -ldflags="-H windowsgui" github.com/pocke/lemonade go install -ldflags="-H windowsgui" github.com/lemonade-command/lemonade@latest
端末から切り離されるので標準入出力などは使えなくなっちゃう(=ログが消える)けど、まあそこまで困らない。mattn さんありがとうございます!
というわけでこれをマシン起動時に起動するようにショートカットを作成。
%APPDATA%\Microsoft\Windows\Start Menu\Programs\Startup
以下にショートカットを作成しておけばログイン時に実行される。
最初は nssm でサービス化を試したのだけど、なぜかうまく動かず…。この方法でなんとか動いたので良かった。
tmux のバッファと lemonade を連携する
tmux で範囲選択をしてコピーしたり、tmux のバッファから貼り付けを行う際に、lemonade 経由でローカルのクリップボードが使えると便利。私は tmux を vi mode で使っているので、以下のような感じ。lemonade コマンドがある場合だけ実行。
if-shell '[[ -x ~/.go/bin/lemonade ]]' \ 'bind-key ] run-shell "~/.go/bin/lemonade paste | tmux load-buffer -" \; paste-buffer ; \ bind-key -t vi-copy y copy-pipe "~/.go/bin/lemonade copy"'
私の環境が若干アレで、.tmux.conf
が読み込まれるタイミングで ~/.go/bin
が PATH に入っていなかったので微妙になってる。これは事前に PATH に入ってる環境ならマシにできると思うので、今後やっていきたい。
emacs mode の人は別途調べてみてください。
Vim のクリップボード操作と lemonade を連携する
Vim では "+y
や "+p
でクリップボードからコピー、ペーストができる。当然ここでも lemonade が使いたい。
というわけで fakeclip.vim。…と言いたいところなのだけど、fakeclip.vim は特に lemonade をサポートしていない。仕方ないので fork してサポート足してみた。
追記: PR はすでにマージされているので本家を使えばOK
使う場合は以下のような感じ(dein.vim の場合):
call dein#add('kana/vim-fakeclip')
これで、環境にクリップボードサポートがない場合は lemonade が使われるようになる。
一応 PR も出したのだけど、そもそも微妙な変更なせいかスルーされ中。実際、やるならこういうやっつけ実装ではなくて内部構造を整理すべきな感じはする…。
以上
lemonade の便利設定の紹介でした。ssh で暮らしている人は便利なので使おう。