WSL2でmikutter

[2020-07-13追記] 解説として書いたわけではないので、そういったものをお求めの場合は↓の記事がおすすめです。

osak.hatenablog.jp [追記ここまで]

作業ログを前後関係調整したもの。この順で実行したわけではない。

必要なコンポーネントを有効にする

前バージョンから大幅に性能向上した新Linux環境「WSL 2」の実力を探る:Windows 10 The Latest - @ITによれば

 まず、必要なWindows 10の機能をインストールする。それには、[コントロールパネル]-[プログラムと機能]を開き、左ペインで[Windowsの機能の有効化または無効化]を選択し、[Windowsの機能]で表示されるリストから「LinuxWindowsサブシステム」を有効にする。

 WSL 2を使うなら、このリストの一番下にある「仮想マシンプラットフォーム」も有効にする(Windows 10 Homeでもサポートされている)。

とのことだったがうちの環境では既にチェックが入っていた。前者はWSL1のときに有効にしたものと思われるが、後者は何故有効になっていたのかよくわからない。利用しているのはHomeなので、Hyper-V関連の機能が有効になったのは今回からではないのかと思うけど……

WSL1に適当なディストロをインストールする

せっかくなのでUbuntu20.04を選択。ストア経由でインストールし、(Cドライブは嫌だったので)別ドライブにコピーしてから、同梱されていた ubuntu2004.exe を実行。そのディレクトリで install.tar.gz から rootfs が展開され、必要なレジストリ登録などが実行された。 ユーザー名とパスワードを聞かれるので、設定する。それが終わるとWSLのシェルが開くので、ひとまずパッケージを更新しておく。

$ for i in update full-upgrade autoremove autoclean; do sudo apt $i -y; done

管理者権限のコマンドプロンプトを開いて

wsl -l -v

を実行すると、今まで使っていたUbuntu(WSL1)とともに、新しいものが表示される。

C:\WINDOWS\system32>wsl -l -v
  NAME            STATE           VERSION
* Ubuntu          Stopped         1
  Ubuntu-20.04    Stopped         1

WSL2に変換

次にUbuntu-20.04をWSL2に変換する。

C:\WINDOWS\system32>wsl --set-version Ubuntu-20.04 2
変換中です。この処理には数分かかることがあります...
WSL 2 を実行するには、カーネル コンポーネントの更新が必要です。詳細については https://aka.ms/wsl2kernel を参照してください

とのことで、さっそく指定のURLを開くと説明があり、 wsl_update_x64.msi をダウンロードして実行するように促される。 実行するとウィザード形式のインストーラが開くが、次へ次へと普通に進めれば良い。 その後、改めてWSL2への変換コマンドを再実行する。

C:\WINDOWS\system32>wsl --set-version Ubuntu-20.04 2
変換中です。この処理には数分かかることがあります...
WSL 2 との主な違いについては、https://aka.ms/wsl2 を参照してください
仮想ディスク システムの制限により、要求された操作を完了できませんでした。仮想ハード ディスク ファイルの圧縮と暗号化が解除されている必要があります。また、仮想ハード ディスク ファイルをスパースに設定することはできません。

アッハイ。 Ubuntu20.04が入っているフォルダのプロパティを開いて「内容を圧縮してディスク領域を節約する」のチェックを外し、以下すべてのファイル・フォルダに適用するようにしておく。メッセージから受ける印象とは反してディスク全体の設定を変える必要はない。 仮想ハードディスクを一体どのように作っているのだろう。てっきり空の仮想ディスクファイルを用意して、そこにコピーしていくのかと思ったが、NTFSからダイレクトに変換をかけているのかな。 圧縮設定の変更が完了したあと、三度目の変換を試みる。

C:\WINDOWS\system32>wsl --set-version Ubuntu-20.04 2
変換中です。この処理には数分かかることがあります...
WSL 2 との主な違いについては、https://aka.ms/wsl2 を参照してください
変換が完了しました。

C:\WINDOWS\system32>wsl -l -v
  NAME            STATE           VERSION
* Ubuntu          Stopped         1
  Ubuntu-20.04    Stopped         2

今度はうまく行った模様。

別のターミナルを開いて、 ubuntu2004.exe を実行してみる。通常通りbashが立ち上がる。 その状態でまた wsl -l -v を実行してみる。

C:\WINDOWS\system32>wsl -l -v
  NAME            STATE           VERSION
* Ubuntu          Stopped         1
  Ubuntu-20.04    Running         2

Runningに変化した。

ターミナルを選ぶ

cmd.exeではさすがにやってられないのでターミナルを選ぶ。 WSL1ではwslttyを使っていたが、せっかくなのでWindowsTerminalを試してみる。 ストアからインストールして起動して設定を見る。JSONをテキスト編集させるストロングスタイル。この辺はVSCodeと同じか。デフォルト設定を開くにはAltキーを押しながら開く、というのは妙な感じだがJSONファイル内に説明があるので問題ない。 フォントをCicaに変更し、デフォルトプロファイルを今インストールしたUbuntu20.04に変更。選択時にコピーするオプションを有効、コピーとペーストのショートカットキーを削除、カーソル形状を filledBox に変更。貼り付けはマウス右クリックでできる模様。

必要なソフトのインストール

vimとgitは入っていた。とりあえずzshを入れる。

sudo apt install zsh
chsh -s /usr/bin/zsh

これだけで新しいタブではzshで開いた。wslttyより便利だ。 しかし .zshrc が無いのでいつもの面倒なプロンプトが出る。自分用のdotfilesを持ってきてシェルはこれでOK。

build-essentialを入れなければ何も始まらないので入れる。

sudo apt install build-essential

続いてrbenvを入れる。

git clone https://github.com/rbenv/rbenv/ ~/.rbenv
mkdir .rbenv/plugins && git clone https://github.com/rbenv/ruby-build ~/.rbenv/plugins/ruby-build
export PATH=$HOME/.rbenv/bin:$PATH
eval "$(rbenv init -)"
rbenv install -l

rbenvがいつのまにか各マイナーバージョン系列の最新バージョンしか表示しなくなっていて非常に便利だ。 続いてrubyをインストール

apt-get install -y libssl-dev libreadline-dev zlib1g-dev
rbenv install 2.6.6
rbenv install 2.7.1
rbenv global 2.7.1

2.6.6は必要ないっちゃ必要ないんだけど……一応ね。

mikutterを入れる

mkdir ~/repos
cd repos
git clone git://mikutter.hachune.net/mikutter.git
cd mikutter
git switch develop
bundle install --path vendor/bundle
[DEPRECATED] The `--path` flag is deprecated because it relies on being remembered across bundler invocations, which bundler will no longer do in future versions. Instead please use `bundle config set path 'vendor/bundle'`, and stop using this flag

そうだったのか。まぁそれはそれとして今はまだ動く。

fcitx-mozcをインストール

sudo apt install fcitx-mozc
0 upgraded, 427 newly installed, 0 to remove and 0 not upgraded.

わお。

日本語ロケールのインストール

sudo apt install language-pack-ja

フォントのインストール

sudo apt install fonts-noto fonts-noto-cjk fonts-noto-mono ttf-ancient-fonts

環境変数の設定

export LANG=ja_JP.UTF-8
export EDITOR=vim
export DISPLAY=:0.0
export LIBGL_ALWAYS_INDIRECT=1
export GTK_IM_MODULE=fcitx
export QT_IM_MODULE=fcitx
export XMODIFIERS=@im=fcitx
export DefaultIMModule=fcitx

こんなもんかな。

mikutterの起動

ruby mikutter.rb
/home/cobodo/repos/mikutter/vendor/bundle/ruby/2.7.0/gems/gtk2-3.4.1/lib/gtk2.rb:13:in `init': Cannot open display: :0.0 (Gtk::InitError)

雑にググったら↓が出てきたのでそのようにします。

https://qiita.com/ryoi084/items/0dff11134592d0bb895c

XLaunchで -ac オプション付きの config.xlaunch を作って、それ経由でVcXsrvを起動。

DISPLAY 変数の設定方法を以下のように変更

export DISPLAY=$(cat /etc/resolv.conf | grep nameserver | awk '{print $2}'):0

おわり

fcitx-autostart
ruby ./mikutter.rb