Bash on Windows環境を整備してみた

Bash on Windows環境を構築してみましたので、手順をまとめてみました。
Windowsとの過度な連携を期待しなければ実用レベルだと思います。

準備

Windowsのバージョンによっては以下が必要です。
これらの制約はBetaが外れたときに無くなるかもしれません。

  • Windows Subsystem for Linux (Beta) を有効にする
  • 開発者モードをONにする

よって、本記事では説明しません。
検索すればすぐに見つかると思いますのでそちらを参照してください。

bashのインストール

Windows 10のBash on Ubuntu on Windows環境を初期化/再インストールする

環境のインストール

コマンドプロンプトを開いて lxrun コマンドを実行します。

$ lxrun /install
-- ベータ機能 --
これにより Windows に Ubuntu がインストールされます。Ubuntu は Canonical によって配布される製品であり、
次のサイトに示される条件に基づいてライセンスされています。
https://aka.ms/uowterms

続行するには、"y" を入力してください: y
Windows ストアからダウンロードしています... 100%
ファイル システムを展開しています。この処理には数分かかります...
Ubuntu のロケールを Windows のロケール (ja-JP) と一致するように設定しますか?
既定のロケールは en_US です。
続行するには、"y" を入力してください: y
^[既定の UNIX ユーザー アカウントを作成してください。ユーザー名は、Windows のユーザー名と一致する必要はありません。
詳細: https://aka.ms/wslusers を参照してください
新しい UNIX ユーザー名を入力してください: tadashi-aikawa
新しい UNIX パスワードを入力してください:
新しい UNIX パスワードを再入力してください:
passwd: password updated successfully
インストールが正常に終了しました

既にインストールされているbashを削除する場合は、以下のコマンドを先に実行します。

$ lxrun /uninstall /full 
これにより Windows 上の Ubuntu がアンインストールされます。
Ubuntu 環境およびすべての変更内容、新しいアプリケーション、およびユーザー データが削除されます。
続行するには、"y" を入力してください: y
アンインストールしています...
ホームディレクトリを残したい場合は /full を付けないで下さい。

wsl-terminalのインストール

デフォルトのターミナルでは扱いにくいため、wsl-terminalをインストールします。

ターミナルは何でも構いませんが、以後はwsl-terminalであることを前提に話を進めます。

以下のUsageに従いインストールします。

goreliu/wsl-terminalwsl-terminal – Terminal emulator for Windows Subsystem for Linux (WSL)

なお、デフォルトのターミナルを使用する場合は、以下のカスタマイズが必要になる可能性が高いことを留意しておきましょう。

  • エラー音をミュートにする
  • ペーストキーを指定する
  • 絵文字対応

テーマ

デフォルトのテーマでは文字が見えない場合があったため、以下を使用します。

mintty: A soft pastel color theme(xoria256) for minttymintty: A soft pastel color theme(xoria256) for mintty

wsl-terminal/usr/share/mintty/themes/mintty-color-xoria256-rc に配置して、設定画面のテーマから選択します。

Noto Mono フォントをインストール

必須ではありません。お好みでどうぞ。

Google Noto FontsGoogle has been developing a font family called Noto, which aims to support all languages with a harmonious look and feel. Noto is Google’s answer to tofu. The name noto is to convey the idea that Google’s goal is to see ” no more tofu”.

wsl-terminalの設定画面で設定します。

Ansibleのインストール

構成管理をAnsibleで行うため、インストールします。

Installation – Ansible DocumentationAnsible is easy to run from a checkout – root permissions are not required to use it and there is no software to actually install. No daemons or database setup are required. Because of this, many users in our community use the development version of Ansible all of the time so they can take advantage of new features when they are implemented and easily contribute to the project.

直接 apt-get install するのは以下のコマンドが最初で最後になります。

$ sudo apt-get install software-properties-common
$ sudo apt-add-repository ppa:ansible/ansible
$ sudo apt-get update
$ sudo apt-get install ansible
$ ansible --version
ansible 2.3.2.0
  config file = /etc/ansible/ansible.cfg
  configured module search path = Default w/o overrides
  python version = 2.7.12 (default, Nov 19 2016, 06:48:10) [GCC 5.4.0 20160609]

Playbook実行

後は好きなPlaybookを実行しましょう。
私はGitHubで管理している以下を使用しています。

tadashi-aikawa/owl-playbookowl-playbook – Ansible playbook for Linux

その他

起動をbash以外のシェルにする

zshにしたい場合は wsl-terminal/etc/wsl-terminal.conf を以下のように変更します。

[config]
title="        "
- shell=bash
+ shell=zsh
use_cbwin=0
use_tmux=0
attach_tmux_locally=0

起動直後のカレントディレクトリをホームディレクトリにしたい

  1. open-wsl.exe のショートカットを作成する
  2. リンク先を open-wsl.exe -l にする

Windowsコマンドを実行できるようにする

wsl-terminal/etc/wsl-terminal.conf でcbwinを使用することを明示します。

[config]
title="        "
shell=zsh
- use_cbwin=0
+ use_cbwin=1
use_tmux=0
attach_tmux_locally=0

wsl-terminalで wsl-terminal/bin/install_cbwin.sh を実行します。

[tadashi-aikawa(NTJ151228-74) /mnt/c/wsl-terminal/bin]
 $ sudo ./install_cbwin.sh

wcmd でWindowsコマンドを実行できるようになります。

 $ wcmd dir
 Volume in drive C is Windows8_OS
 Volume Serial Number is FEFF-9402

 Directory of c:\wsl-terminal\bin

2017/05/27  23:48    <DIR>          .
2017/05/27  23:48    <DIR>          ..
2017/04/15  19:03            18,451 cygwin-console-helper.exe
2017/04/15  19:03         3,315,448 cygwin1.dll
2017/04/15  19:03               154 install_cbwin.sh
2017/04/15  19:03           392,704 mintty.exe
2017/04/15  19:03           179,256 outbash.exe
2017/04/15  19:03            10,448 wcmd
2017/04/15  19:03            23,168 wrun
2017/04/15  19:03            31,336 wslbridge-backend
2017/04/15  19:03           723,456 wslbridge.exe
2017/04/15  19:03            10,448 wstart
              10 File(s)      4,704,869 bytes
               2 Dir(s)  97,074,032,640 bytes free

vimのヤンクとWindowsのクリップボードを同期させたい

以下はAnsibleを利用しない場合の手順です。実際はPlaybookで設定しています。

  1. VcXsrvのインストール
  2. 1を起動
  3. .zshrc(.bashrc)に export DISPLAY=localhost:0.0
  4. vim-gtk のインストール (:echo has('clipboard') が1じゃなければ)
  5. .vimrcset clipboard=unnamed

clipboard=autoselect はクリップボード履歴が埋まるので使用しませんでした。

以下のサイトを参考にしましたので、詳細はそちらをどうぞ。

Accessing the system clipboardWhen performing copy, cut, and paste with commands like y, d, and p, by default Vim uses its own location for this, called the unnamed register (:help quotequote). Note that this is different from what most modern graphical text editors and other applications like web browsers do; these applications interact with the system clipboard when using keybindings like CTRL-C, CTRL-X, and CTRL-V.

How to copy text from vim to system clipboard? · Issue #892 · Microsoft/BashOnWindows

I want to copy the text from vim to my windows apps(such as browser), I try to use “+y but it does not work. If there are some command can solve my problem? I know I can quit vim then cat file.txt …

How can I copy text to the system clipboard from Vim?

Is there a way to copy a block of text to the system clipboard, so I can paste it in another program?

総括

Bash on Windows環境 の構築手順をまとめました。
2017年秋にはBetaが外れるようですので、その時は本記事を修正すると思います。

最後に、せっかくなので wsl-terminal/etc/minttyrc の設定を晒しておきます。

BoldAsFont=yes
FontHeight=11
Font=Noto Mono
FontWeight=700
FontIsBold=yes
FontSmoothing=default
Locale=ja_JP
Charset=UTF-8
Transparency=low
ThemeFile=mintty-color-xoria256-rc
Term=xterm-256color
BellType=0
PgUpDnScroll=yes

コメントを残す