以前、 VirtualBoxのゲストとホスト間でvimのクリップボードを共有 という記事を書きました。 それからしばらく使っていたのですが、少し使いづらい部分が出てきました。 我慢して使い続ける他無いと思っていたのですが、別の方法が見つかったのでその方法を記載します。
今回はlemonadeというツールを使う方法です。
環境
Host : Windows7 Virtualbox + Vagrant
Guest : CentOS 7.5
lemonadeはGoで作成されたツールで、ホストとゲストにそれぞれインストールします。 今回は、ホストのWindowsと、Virtualbox + Vagrantに構築したCentOSにインストールします。
Windows(ホスト)の設定
Goをインストール
まずGoをインストールします。 こちらから環境に合ったインストーラをダウンロードしてインストーラの指示に従ってインストールします。
今回はgo1.10.3.windows-amd64.msi
を使っています。
PATHを設定
PATH
とGOPATH
を設定します。
私の場合、ホスト側ではbashを使っていますので、~/.bashrc
に以下を追記しました。
利用しているシェルに合わせて指定してください。
export PATH="$PATH":/c/Go/bin/
export GOPATH=/c/msys64/home/tobijibu/.go/
GOPATH
はどこでも構いませんが、~/.go
を指定している人が多いと聞きます。
次に説明するgo get
等で取得したパッケージはこのディレクトリ以下に格納されます。
lemonadeの実行ファイルを生成
githubからlemonadeのソースを取得して実行ファイルを生成します。
-ldflags="-H windowsgui"
は、
実行時にコンソールウィンドウを生成せずバックグラウンドで実行するために指定します。
$ go get -u -ldflags="-H windowsgui" github.com/pocke/lemonade
実行ファイルのショートカットを作成
lemonadeはサーバとしての機能と、コマンドとしての機能の2つの使い方があります。
ホスト側ではサーバとして使いたいのでserver
オプションを渡しましょう。
実行ファイルのショートカットを作成して、リンク先のlemonade.exe
以降に、
server --allow="127.0.0.1,::1"
を設定します。
C:\msys64\home\tobijibu\.go\bin\lemonade.exe server --allow="127.0.0.1,::1"
server
と一緒に--allow
というオプションを渡しています。
これはホストのlemonadeにアクセスするゲストのIPです。今回はVagrantを使ったローカル環境間で使うので上記を指定しています。
これでホスト側の設定は完了です。
ショートカットをクリックしても何も表示されませんが、
タスクマネージャーを見るとlemonade.exe
が動いているのがわかります。
今回は-ldflags="-H windowsgui"
オプションを指定するためにソースから実行ファイルを生成しましたが、
以下のリンクから実行ファイルを直接ダウンロードすることもできます。
この場合、Goをインストールしなくても使うことができますが、
-ldflags="-H windowsgui"
が指定されていないので、
ショートカットから同じように実行するとコマンドプロンプトが表示されたままになります。
コマンドプロンプトを表示させたままにせずにlemonadeを使う方法の一つは、 コマンドラインで以下のコマンドを実行して、そのプロンプトを閉じるという方法です。 そうするとバックグラウンドで実行させておくことができます。
$ lemonade.exe server --allow="127.0.0.1,::1" &
[1] 7096
$ exit
CentOS(ゲスト)の設定
Goをインストール
ゲストにもGoをインストールします。
# cd /usr/local
# sudo wget https://dl.google.com/go/go1.10.3.linux-amd64.tar.gz
# sudo tar -C /usr/local -xzf go1.10.3.linux-amd64.tar.gz
PATHを設定
ホストと同様にPATH
とGOPATH
を設定します。
ゲストではfishを使っているので以下を追記しました。
set -x PATH $PATH /usr/local/go/bin
set -x GOPATH ~/.go
bash(~/.bashrc
)やzsh(~/.zshrc
)の場合は以下です。
export PATH=$PATH:/usr/local/go/bin
export GOPATH=~/.go
lemonadeの実行ファイルを生成
githubからlemonadeのソースを取得してインストールします。
$ go get -d github.com/pocke/lemonade
$ cd $GOPATH/src/github.com/pocke/lemonade/
$ make install
実行ファイルへのパスを通します。
~/.config/fish/config.fishset -x PATH $PATH ~/.go/bin
~/.bashrc or ~/.zshrc
export PATH=$PATH:~/.go/bin
確認
これでホストとゲスト両方にlemonadeをインストールできたので確認してみます。
$ echo "ゲスト→ホスト。" | lemonade --host="10.0.2.2" copy
--host="10.0.2.2"
にはVagrantから見たホストのIPを指定してください。
vagrant ssh
でゲストにログインした際に表示されるIPです。
$ vagrant ssh
Last login: Fri Aug 3 14:20:09 2018 from 10.0.2.2 <-- このIP
vagrant@localhost ~>
ホスト側のエディタやブラウザ等で"ゲスト→ホスト。"を貼り付けることができれば通信できています。 次にホスト側でコピーした内容をゲストのコンソールに貼り付けてみましょう。 これでコピーした内容が表示されれば正常に動作しています。
$ lemonade --host="10.0.2.2" paste
ホスト→ゲスト。
設定ファイルを作成
コピペするたびに--host
を指定するのは面倒です。
lemonadeではtoml
形式の設定ファイルを使ってデフォルト値を指定することができます。
以下は設定例です。
host = '10.0.2.2'
trans-loopback = true
trans-localfile = true
line-ending = 'crlf'
Vimとtmux
Vimやtmuxでコピペする設定です。
Vim
プラグインをインストールするだけです。
私はPlug
を利用しているので以下の指定*になりますが、
プラグインマネージャに合わせて指定してください。
Plug 'thinca/vim-fakeclip', {'branch': 'add-lemonade-support'}
コピペする度に、毎回"+y
や"+p
を打つのは億劫なので、以下のようにマッピングしました。
map ,y <Plug>(fakeclip-y)
map ,p <Plug>(fakeclip-p)
*Plug
でインストールする際にブランチを指定するとエラーが発生してしまいました。 なので、手動でブランチをadd-lemonade-support
に切り替えて対処しました。
tmux
tmuxのコピーモードでも使えるように、~/.tmux.conf
に設定を追記します。
tmux2.4未満と2.4以降では設定が異なりますので注意してください。 以下はtmux2.4以降(確認したのは2.7)での設定です。
if-shell '[[ -x ~/.go/bin/lemonade ]]' \
'bind ] run-shell "~/.go/bin/lemonade paste | tmux load-buffer -" \; paste-buffer ; \
bind -T copy-mode-vi y send -X copy-pipe-and-cancel "~/.go/bin/lemonade copy"'
これでスムーズにコピペすることが出来るようになりました。
Macでも同じように設定して試してみたところ、ゲスト→ホストのコピーはできたのですが、ホスト→ゲストでは日本語のコピペがうまくできませんでした。 ただ改めて考えてみると、Macの場合iTermを使っていればそのままコピペできるので、そもそもlemonadeは要らなかったです。
lemonadeは数年前からあったようですが、情報があまり無いので知りませんでした。 使ってみるととても便利なので、何故あまり話題にならないのか不思議です。 もしかしたらMacで使う必要が無いというのが大きいのかもしれません。Windows⇆Linuxでは快適なのでこのまま使っていこうと思います。
参考サイト
ssh 越しにクリップボード共有したり URL 開いたりする lemonade の便利設定https://thinca.hatenablog.com/entry/introduce-lemonade
Lemonade
https://github.com/pocke/lemonade
リモートのPCのブラウザやクリップボードを操作するツール Lemonade を作った
http://pocke.hatenablog.com/entry/2015/07/04/235118