Windows Subsystem for Linuxを設定する

# 前書き
Windows Subsystem for Linux(WSL)はとてもありがたい。Bush on Ubuntu on Windowsが発表されたときから、Windows(というよりMicrosoft office)で仕事せざるを得ない私にとっては衝撃的なシステムだった。[WSL2](https://forest.watch.impress.co.jp/docs/news/1183013.html)のニュースも出ており、積極的な姿勢に期待している。WSLの初期設定に関する記事は山のようにあるが、それぞれの目的にあわせて作業が異なるので、自分むけのメモを残しておく。

WSLが最初に出たときから、X Windows Systemが使えたらな、と思っていた。自分は昔からLinuxのEmacs+YaTeXで文章を書くことに慣れており、Windows環境に移らなければならない事情ができてからずっと困っていた。WindowsのEmacsはどうも使いづらい。AtomやVS Codeでなんかで誤魔化してきた。LaTeXの執筆+コンパイルはCLI環境でもできるが、最終的なPDFなんかはX上のビューアーで見たい。というわけでとりあえずWSLでX Window Systemを動かす。最終ゴールはEmacsでLaTeX執筆環境を整えること。


## 前提
Windows 10 version 1709以降？WSLが公式にサポートされているバージョン。Linuxの操作に関しては、CLIをそれなりに使えるぐらい。コマンドやオプションを覚えてないけどググれば解決できるぐらい。[ArchWiki](https://wiki.archlinux.jp)を読んで必要な設定やコマンドがわかるぐらい。

# WSLの導入
これは簡単だし紹介記事もたくさんある。例えば[Windows 10でLinuxプログラムを利用可能にするWSLをインストールする（バージョン1803以降対応版）](https://www.atmarkit.co.jp/ait/articles/1608/08/news039.html)などがわかりやすい。
1. 「設定」の「アプリと機能」、関連設定の「プログラムと機能」からコントロールパネルに飛ぶ。コントロールパネルにすぐアクセスできるなら少し楽。
2. 「Windows機能の有効化または無効化」から「Windows Subsystem for Linux」にチェックを入れてOKをクリック。
3. 再起動する。
4. Microsoft Storeで「wsl」なり「linux」なりで検索すればWSLに対応したディストリビューションが見つかるので好みのものを入れる。Ubuntuの場合、複数のLTSが提供されていることがあるが、バージョンアップしても使いたいので標準の「Ubuntu」を選択することをお勧めする。
5. インストールが済めば、あとは通常のアプリケーションと同様にスタートメニューから選択するだけ。コンソールが現われるのでユーザー名などを設定すれば使えるようになる。
6. ``sudo apt update && sudo apt upgrade``で最新版にアップデートしておく。

## LTSのアップグレードをしたい場合
記事執筆時のLTSは18.04。WSLのUbuntuを選んでインストールした場合も18.04がインストールされる。自分は以前WSLをインストールしたまま放置していた時期があり、16.04が入っているPCもあったので18.04にアップグレードした。また、将来新しいバージョンへ移りたいかもしれないのでメモしておく。
``apt upgrade``で最新版になっているとして``update-manager-core``をインストールし、``/etc/update-manager/release-upgrades``を開いて``Prompt=lts``とする。下記の参照先によると標準でここまでできているようだし、実際そうだった。

```
sudo do-release-upgrade -d
```

を実行して待つ。sshdについて聞かれたり古いパッケージを削除したりと1時間程度時間がかかる。最後にWSLを一旦終了する。
#### 参照
[WSL版Ubuntuのアップグレード～16.04から18.04へ～](https://qiita.com/sik103/items/16203172d3535c0fc329)

## ホームディレクトリはどこに
WSLは
``%AppDataLocal%\Packages\CanonicalGroupLimited.UbuntuonWindows_[適当な文字列？]\LocalState\rootfs``
にrootディレクトリ、その下``.\home\[username]``にhomeディレクトリがある。また、WindowsのCドライブ以下はWSLから見ると
``/mnt/c/``
にあるため、ユーザーのホームは
``/mnt/c/Users/[username]``
にある。これは不便だが、WindowsとLinuxのファイルパーミッションの扱いや今後のアップデートでどうなるかわからないことを考えると、これをいじるのは賢明ではない。なので、頻繁にアクセスしたいフォルダにはシンボリックリンクを貼るのがよい。例えばユーザーホームのドキュメントなら
``ln -s /mnt/c/Users/[username]/Documents ~/Documents``
などしておく。

### パーミッションの設定
2020.04.22追記
``/mnt/c``以下のディレクトリ(シンボリックリンクを貼ったディレクトリ)のパーミッションは一定のルールがあって、WSL側で``chmod``しても反映されない。ツールによっては適切にパーミッションを設定しておかないといけない場合があり、シンボリックリンクのディレクトリ下のファイルが扱えなくなるかもしれない。マウントしているファイルのパーミッションをWindows側ではメタ情報として保持させる方法がある。WSL側で``/etc/wsl.conf``というファイルをつくり

```
[automount]
options = "metadata,umask=22,fmask=111"
```

と書く。この設定後は、WSLを閉じる。Windowsも再起動。あるいは再起動しなくてもWindowsサービス一覧からLxssManagerを再起動でもいいらしい。

### .sshの共有
2020.04.22追記
Windows 10は2018年の春のアップデートからOpenSSHを組み込んでいるので、Windowsのホームユーザーのディレクトリに``.ssh``をつくってsshしてもいい。WSLでもこの``.ssh``を共有できると嬉しいので、
``ln -s /mnt/c/Users/[username]/.ssh ~/.ssh``
としておいた。パーミッションの設定は``.ssh``ディレクトリを``700``、ディレクトリ以下のconfigや秘密鍵は``600``にしておく。

#### 参照
[Windows 10のWindows Subsystem for Linux（WSL）を日常的に活用する](https://www.clear-code.com/blog/2017/11/8.html)


# ビープ音を止める
デフォルトではシェルからビープ音が鳴るので止める
``/etc/inputrc``を開き、``set bell-style none``のコメントを無効にする。
#### 参照
[azukipochette's weblog: Ubuntu (Ubuntu 18.04 with WSL) でビープ音を止める](https://azukipochette.hatenablog.com/entry/2018/06/20/012641)

# shellをfishにする
fishをインストールするだけなら簡単。[fish - ArchWiki](https://wiki.archlinux.jp/index.php/Fish)によると、Arch Linuxではデフォルトのシェルをfishにすることは推奨されていない。Ubuntuでも同じような状況だと思うので、ArchWikiに従って``.bashrc``に``exec fish``を追記する。
fishのプロンプトや色設定は``fish_config``でウェブブラウザをつかって対話的に可能だし、様々なプラグインがあるので便利にカスタマイズできる。後でX windows systemが使えるようにしてからブラウザでカスタマイズしようと思っているので今は何もしない。
#### 参照
将来予定のカスタマイズも含め
[fish shellが結構良かった話](https://qiita.com/hennin/items/33758226a0de8c963ddf)
[WSLでお手軽にオシャレfish環境構築](https://qiita.com/sugimount/items/ff80f9ba481ec81b5600)
[Windows10で快適なfishシェル環境構築](https://qiita.com/ysks/items/6c9d751d9a3b3b1b8020)
[fish - ArchWiki](https://wiki.archlinux.jp/index.php/Fish)

## bashとの違い
fishだと``&&``や``||``といったコマンドが使えず、それぞれ``; and``、``; or``を使う。また少し調べた範囲では``$_``に相当するコマンドはないらしい。fish 3.0からは``&&``や``||``にも対応(どちらの表記も可)だそうだが、現時点のUbutuntu 18.04は2.7.1だった。
### 参照
[全訳！fishシェル普及計画](http://fish.rubikitch.com)
[全訳！fishシェル普及計画: and:他シェルの「&&」相当！直前コマンドが正常終了時に実行](http://fish.rubikitch.com/and/)
[全訳！fishシェル普及計画: or:【要注意】fishでは「||」じゃなくて「or」を使うんよ](http://fish.rubikitch.com/or/)
[fishシェルでmkdir hoge && cd $_したかったけど面倒だった](https://tech-1natsu.hatenablog.com/entry/2018/10/17/213129)


## fish 3を入れる
2020.03.26
しばらくubuntu 18.04が提供するfishを使っていたが、やっぱり新しいバージョンが使いたくなった。
リポジトリを追加してインストールするだけ

```
sudo apt-add-repository ppa:fish-shell/release-3
sudo apt update
sudo apt install fish
```
これで上で書いた``&&``なんかも使える。

fishermanなど、カスタマイズに関することは別記事にしよう。

### 参照
[“Fish shell maintainers” team](https://launchpad.net/~fish-shell/+archive/ubuntu/release-3)
[fish 3.0がやってきた](https://qiita.com/s417-lama/items/421562458989a0fedbd5)


# 日本のリポジトリを追加
Ubuntuの日本語環境を整えるために、Japanese Teamのリポジトリを追加する。
LTS 18.04の場合

```
wget -q https://www.ubuntulinux.jp/ubuntu-ja-archive-keyring.gpg -O- | sudo apt-key add -
wget -q https://www.ubuntulinux.jp/ubuntu-jp-ppa-keyring.gpg -O- | sudo apt-key add -
sudo wget https://www.ubuntulinux.jp/sources.list.d/bionic.list -O /etc/apt/sources.list.d/ubuntu-ja.list
sudo apt update
```

また、パッケージリポジトリのミラーサーバーも国内のものに換えておくとメンテナンス時間が減るかもしれない。
Ubuntu Japanese Teamがメンテナンスしているのは富山大学のサーバーらしい(http://ubuntutym.u-toyama.ac.jp/ubuntu/)。
[Ubuntu: 日本国内のダウンロードサイト](https://www.ubuntulinux.jp/ubuntu/mirrors)
更新したらもちろん``apt update``と``apt upgrade``を実行しておく。
### メモ
今回は手で更新したが、sedを使って変更すると楽。作業の前にバックアップはとっておく。
[Windows Subsystem for LinuxでUbuntu](https://qiita.com/serlys/items/30f1b43deba257033342)によると、``jp.archive.ubuntu.com``が上記富山大学のエイリアスだそうなので、このサイトにあるsedをそのまま実行してもいい。将来富山大学のサーバーじゃなくなってもこのエイリアスは活きてそうなので、こっちのほうがいいかもしれない。


```
sudo sed -i.bak 's/\/archive\.ubuntu/\/jp\.archive\.ubuntu/' /etc/apt/sources.list
```

#### 参照
[Ubuntuの日本語環境](https://www.ubuntulinux.jp/japanese)
[Windows Subsystem for LinuxでUbuntu](https://qiita.com/serlys/items/30f1b43deba257033342)
[apt-getの利用リポジトリを日本サーバーに変更する](https://qiita.com/fkshom/items/53de3a9b9278cd524099)

# 日本語環境設定(メモ)
自分の場合は英語環境のまま(``LANG=en_US.UTF8``)のままでもいいのでやらなかったが、日本語環境のほうがよい場合もあるのでメモを残しておく。
日本語パッケージをインストール

```
sudo apt install language-pack-ja
```

日本語ロケールにする。

```
sudo update-locale LANG=ja_JP.UTF-8
```

WSLを再起動して、日本語になったことを確認。

```
echo $LANG
```

あるいは

```
locale
LANG=ja_JP.UTF-8
LANGUAGE=
LC_CTYPE="ja_JP.UTF-8"
LC_NUMERIC="ja_JP.UTF-8"
LC_TIME="ja_JP.UTF-8"
LC_COLLATE="ja_JP.UTF-8"
LC_MONETARY="ja_JP.UTF-8"
LC_MESSAGES="ja_JP.UTF-8"
LC_PAPER="ja_JP.UTF-8"
LC_NAME="ja_JP.UTF-8"
LC_ADDRESS="ja_JP.UTF-8"
LC_TELEPHONE="ja_JP.UTF-8"
LC_MEASUREMENT="ja_JP.UTF-8"
LC_IDENTIFICATION="ja_JP.UTF-8"
```

ちなみに、英語環境に戻したい場合は以下

```
sudo update-locale LANG=en_US.UTF8
```

タイムゾーンを変更

```
sudo dpkg-reconfigure tzdata
```

から``アジア -> 東京``を選択。

``man``コマンドを日本語化したい場合は以下

```
sudo apt install manpages-ja manpages-ja-dev
```

#### 参照
[WSLのUbuntu環境を日本語化する](https://www.atmarkit.co.jp/ait/articles/1806/28/news043.html)
[【Windows10/WSL Ubuntu】日本語のロケールとタイムゾーンの変更](https://www.yokoweb.net/2018/03/07/windows10-wsl-japane-locale-timezone/)
[Windows Subsystem for Linux(WSL)に「Ubuntu 18.04 TLS」を入れたときに最初にしたこと](https://qiita.com/nandymak/items/88e060a3f39bd50b2331)
[Windows Subsystem for LinuxでUbuntu](https://qiita.com/serlys/items/30f1b43deba257033342)

# X Windows Systemを導入する

Windows上で動くXのクライアントは有料・無料でいくつかある。現時点の無料ソフトではVcXsrvがお勧めらしいので使ってみた。
1. [VcXsrv公式サイト](https://sourceforge.net/projects/vcxsrv/)に行って最新版をダウンロード&インストール。
2. 初回起動時はWindowsのファイアウォールに関する注意が出る。外部と通信しないので、「キャンセル」でいい。
2. Multiple Window、no clientで起動する。ここは個人の好みでもいい。

起動はスタートメニューの[VcXsrv] -> [XLanch]。ショートカットをつくる、タスクバーにピン留めするなどご自由に。

### WSL側の設定
1. X window Sytemを揃える。テスト用に``x11-apps``をインストールするぐらいでもいいし、GnomeやLXDEなど好きなデスクトップ環境をインストールしておいてもいい。
3. WSLコンソールで``export DISPLAY=:0.0``でVcXsrvに接続する。
4. ``xeyes``のような簡単なソフトを起動してテストする。もちろん``lxpanel``などでもいい。
5. 恒久的に使うには、``.bashrc``に設定を書いておいた方が楽。fishを起動する前がいいのかな。

#### 参照
[WSL上にXサーバをインストールしてGUIを実現する（VcXsrv編）](https://www.atmarkit.co.jp/ait/articles/1812/06/news040.html)
[WSLでwindows上にLinuxのGUI環境を作る[メモ]](https://qiita.com/MERIK/items/ef4ecf7a51f89c403e94)
[Ubuntu 18.04のWSL上へのインストールと初期設定](http://www.aise.ics.saitama-u.ac.jp/~gotoh/HowToInstallUbuntu1804OnWSL.html)
[X Window on WSL (Ubuntu) on Windows 10 Pro](https://estuarine.jp/2017/11/wsl-x-window/)
[Windows Subsystem for Linux + X Windowを1.024倍くらい使いこなすための方法](https://qiita.com/nishemon/items/bb3aca972404f68bfcd6)

# 必要なソフトウェアインストール
## 最新のEmacs
Ubuntu公式が配布するよりも新しいバージョン(執筆時は26)がほしい場合はレポジトリを追加してインストールする。

```
sudo add-apt-repository ppa:kelleyk/emacs
sudo apt update
sudo apt install emacs26
```

## TeX Live

Ubuntu公式が配布するTeX関連パッケージでもよいのだが、やはりTeX Liveのほうが最新の技術が反映されている。例えばTeX Live 2020からは[原ノ味フォント](https://github.com/trueroad/HaranoAjiFonts)がデフォルトになったり、LuaTeXやXeTeXなど最近のTeX業界は動きがあるようなので注意が必要になる。新しいから良いとも古い方が安心するとも言い切れないので好みだと思う。

というわけで、TeX Liveを公式からインストールする。wgetでネットベースのインストーラーを取得して解凍、ディレクトリへ移動。

```
wget http://mirror.ctan.org/systems/texlive/tlnet/install-tl-unx.tar.gz
tar xvf install-tl-unx.tar.gz
cd install-tl-*
```

X Windowを動かしていればオプション``-gui``、動かしていなければオプション``-no-gui``でやる。リポジトリも国内のものに変える。

```
sudo ./intall-tl -no-gui -repository http://ftp.jaist.ac.jp/pub/CTAN/systems/texlive/tlnet/
```
インストール時の設定オプションがでてくるので適当に選ぶ。特別な理由がなければデフォルトのままでいいと思う。``I``を入力してインストール開始。

あとは待つだけ。アップデートが必要な場合は

```
sudo tlmgr update --self --all
```
アップデートによるトラブルは``sudo tlmgr restore （パッケージ名） （リビジョン番号）``で戻せる。``/usr/local/texlive/????/tlpkg/backups``にバックアップが保存されている。


なお、TeX Liveは毎年のリリースごとに新しくインストールフォルダをつくるため、毎年インストールが必要になる。また、不要になった過去のパッケージも自分で消す必要がある。

#### 参照
[TeX Live: TeX Wiki](https://texwiki.texjp.org/?TeX%20Live)
[Installing TeX Live over the Internet: TeX Live](https://www.tug.org/texlive/acquire-netinstall.html)

### Ubuntu公式配布のバージョンを使う場合

余計なことはせずに``apt install``する。

```
sudo apt install texlive-lang-japanese texlive-latex-extra texlive-latex-recommended texlive-luatex
```

## それ以外のソフトウェア導入

個々のソフトウェアについては各人の必要に応じて入れればよい。細かい話は次の記事に書くが、最後に備忘録として少し残す。
EmacsでLaTeXを執筆すること前提にすると、スペルチェックが欲しい。

```
sudo apt install cmigemo aspell
```

X Windows System 導入後ならばブラウザなどあるかもしれない。Google Chromeを入れたい場合は少し作業が必要。

```
wget -q -O - https://dl-ssl.google.com/linux/linux_signing_key.pub | sudo apt-key add -
sudo sh -c 'echo "deb [arch=amd64] http://dl.google.com/linux/chrome/deb/ stable main" >> /etc/apt/sources.list.d/google.list'
sudo apt update
sudo apt install google-chrome-stable
```

#### 参照
[How to Install GNU Emacs 26.1 in Ubuntu 18.04, 16.04, 18.10 - UbuntuHandbook](http://ubuntuhandbook.org/index.php/2019/02/install-gnu-emacs-26-1-ubuntu-18-04-16-04-18-10/)
[Ubuntu Linux 18.04 LTSで、Google Chromeをapt repositoryからインストールする](https://kazuhira-r.hatenablog.com/entry/20180728/1532770315)

# 続く

まだまだ日本語入力関係やEmacsの設定などやることがあるが長くなってきたのでここで一旦終わり。

***
続き(2019.09.15)
[Windows Subsystem for Linuxを設定する 2 - Qiita](https://qiita.com/ShotaroImai/items/3aa8699ab69d2e40ae80)