WSL2でmikutter
[2020-07-13追記] 解説として書いたわけではないので、そういったものをお求めの場合は↓の記事がおすすめです。
osak.hatenablog.jp [追記ここまで]
作業ログを前後関係調整したもの。この順で実行したわけではない。
必要なコンポーネントを有効にする
前バージョンから大幅に性能向上した新Linux環境「WSL 2」の実力を探る:Windows 10 The Latest - @ITによれば
まず、必要なWindows 10の機能をインストールする。それには、[コントロールパネル]-[プログラムと機能]を開き、左ペインで[Windowsの機能の有効化または無効化]を選択し、[Windowsの機能]で表示されるリストから「Linux用Windowsサブシステム」を有効にする。
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
に変更。貼り付けはマウス右クリックでできる模様。
必要なソフトのインストール
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