先日配信開始されたWindows 10 Creators Updateにより、Bashでも「Ubuntu 16.04」がサポートされると共に日本語表示やネットワーク周りのコマンドが強化されてかなりまともに使える様になりました。
今までホストとのクリップボードの共有が出来ずにCygwinからの完全乗り換えに二の足を踏んでいましたが、Windowsのプログラムの実行も可能となった事でほぼ満足の行く環境が構築出来たので忘備録的に記して行きたいと思います。Creators Updateの方法自体は他の記事を参照してください。
現状のBashを削除する
Anniversary UpdateでインストールされたBashはそのままではアップグレードされませんので、一旦アンイストールして新規インストールを行います。コマンドプロンプトを起動しlxrun /uninstall -y
でアンインストールです。/fullオプションを付けなければホームディレクトリはそのまま残ります。
新しいBashをインストール
lxrun /install -y
で新しいバージョンをインストールします。
ホームディレクトリの変更
デフォルトのホームディレクトリの場所はC:\Users\USERNAME\AppData\Local\lxss\home\username
ですが、何かと不便なのでここで変更しておきます。私はDドライブに作ったhomeディレクトリに変えました。
まずはコマンドプロンプト上で一旦デフォルトユーザーをrootにします。lxrun /setdefaultuser root
このままrootユーザーでBashを起動し、下記の手順で設定します。「username」は自分のユーザー名で置き換えてください。# vi /etc/passwd
username:x:1000:1000:"",,,:/home/username:/bin/bash
の行をusername:x:1000:1000:"",,,:/mnt/d/home:/bin/bash
に変更して保存。
自分のユーザ名にパスワードを設定します。# passwd username
続けてコマンドプロンプトでデフォルトユーザを自分に戻します。lxrun /setdefaultuser username /y
終わったら一旦Bashのウィンドウを閉じます。
日本語環境の設定
再度Bashのコンソールを起動し、/etc/apt/sourses.listを以下の様に編集します。
deb http://ftp.jaist.ac.jp/pub/Linux/ubuntu xenial main restricted universe multiverse
deb-src http://ftp.jaist.ac.jp/pub/Linux/ubuntu xenial main restricted universe multiverse
deb http://ftp.jaist.ac.jp/pub/Linux/ubuntu xenial-updates main restricted universe multiverse
deb http://ftp.jaist.ac.jp/pub/Linux/ubuntu xenial-security main restricted universe multiverse
下記コマンドを入力し一気に日本語化しましょう。
$ sudo apt-get update
$ sudo apt-get install language-pack-ja
$ sudo update-locale LANGUAGE=ja_JP.UTF-8 LC_ALL=ja_JP.UTF-8 LANG=ja_JP.UTF-8
$ sudo ln -sf /usr/share/zoneinfo/Asia/Tokyo /etc/localtime
win32yankでクリップボード共有
win32yank - https://github.com/equalsraf/win32yank/releases
win32yank.exeは、X Window System上のxselコマンドの様にWindowsのクリップボードを読み書き出来る便利なツールです。上記URLからダウンロードさせて頂いて解凍後Windows側でパスの通ったディレクトリに配置します。これだけでBashのコンソール上でwin32yank.exe -o
でクリップボードの中身が見れてecho "hello world!" | win32yank.exe -i
等の様にしてクリップボードに書き込みが出来ます(.exeは省略できません)。
tmuxの設定
下記の手順で最新のtmuxをインストールします。
$ sudo apt-get build-dep tmux
$ git clone https://github.com/tmux/tmux.git
$ cd tmux
$ sudo ./autogen.sh
$ sudo ./configure
$ sudo make
$ sudo make install
.tmux.confには下記を追記します。vimモードでの設定例です。
# <prefix> [でコピーモードに入った時に、vで選択を開始しyもしくはEnterで選択範囲をコピー
# コピーモードでvimキーバインドを使う
setw -gmode-keys vi
# 'v'で選択を始める
bind-key-T copy-mode-viv send -X begin-selection
# 'y'と'Enter'でcopy-pipeを使う
bind-key-T copy-mode-viy send -X copy-pipe "win32yank.exe -i"
unbind -T copy-mode-vi Enter
bind-key-T copy-mode-vi Enter send -X copy-pipe "win32yank.exe -i"
# マウス選択でcopy-pipe-and-cancel
bind-key-T copy-mode-vi MouseDragEnd1Pane send-keys -X copy-pipe-and-cancel "win32yank.exe -i"
# <prefix>pでクリップボードからペースト
unbind-key-T prefix p
bind-keyp run "win32yank.exe -o | tmux load-buffer - && tmux paste-buffer"
Vimの設定
fakeclipというプラグインがBash on Windowsでも使える筈なのですが、何故か私の環境で上手く動かなかったのでとりあえず下記の設定を行いました。
nnoremap<silent><Space>y :.w!win32yank.exe -i<CR><CR>vnoremap<silent><Space>y :w!win32yank.exe -i<CR><CR>nnoremap<silent><Space>p :r!win32yank.exe -o<CR>vnoremap<silent><Space>p :r!win32yank.exe -o<CR>
これでとりあえず[Space]+[y]
でクリップボードにヤンク、[Space]+[p]
でペースト出来る様になります。
Vimの設定が少々惜しい感じですが、とりあえずかなり便利に使える様になりました!