Ubuntu on Windows Subsystem for Linux 移行備忘録

Environment
Photo by hyt.

はじめに

10年以上使ってきた Windows + Cygwin 環境から,Windows System for Linux (WSL) に移行した私的備忘録です.設定の概要は以下の通り.

  • Windows 10 April Update 2018 環境です.
  • ターミナルとして mintty (wsltty) を利用します.
  • cygstart に相当するコマンドを導入します.
  • X11 環境は導入しません.CUI なものだけです.
  • TeXLive を導入します.

なお,cygstart は MacOS の open と同様のコマンドです.詳しくは

Cygwin使いならば絶対に身につけておきたいコマンド5選+apt-cyg
Windows上で開発をするならばCygiwinは必須ツールですが、今日はそんなCygwin独自コマンドを紹介します。 この本を読みました。C

辺りをご覧ください.

1. WSL の有効化

Windows の設定 ⇒ アプリ ⇒ 関連設定:プログラムと機能 ⇒ Windows 機能の有効化または無効化 と辿り,Windows Subsystem for Linux にチェックを入れて導入します.インストール後に再起動を要求されます.

画面イメージ等は

「Windows Subsystem for Linux(WSL)」セットアップガイド【スクリーンショットつき解説】
10月17日に提供が始まった「Windows 10 Fall Creators Update」で、Windows 10に正式版の「Windows Subsystem for Linux(WSL)」が搭載されました。これに伴い、「Window

の前半部分を参照してください.なお,本導入記録の前半部分はほぼ上のページそのままです.

2. Ubuntu の導入

Microsoft Store の検索で「WSL」と指定することで,

C:\ Linux on Windows? 本当です。

って出てくるので「アプリを入手する」をクリックすると,いまのところ,

  • Ubuntu
  • openSUSE Leap 42
  • SUSE Linux Enterprise Server
  • Debian GNU/Linux
  • Kali Linux

が出てきます.あれ,Fedora はまだなんですね.RedHat 系の方が好きなんですが…….シェアが最も高いのはたぶん Ubuntu なんだろうなぁ……,クライアントとしての利用だしなぁ……と諦めて,今回は Ubuntu を使うことにします.

Ubuntu を選択して「入手」を選ぶと,あっという間にスタートに Ubuntu が現れます.

3. Ubuntu の起動

スタートメニューから Ubuntu を起動すると,コマンドプロンプトが起動し,初期設定が始まるのですが,これがしばらくかかります.終了後ユーザー名とIDを効かれるので,適当にこれを入力すると,プロンプトが表示され,準備完了です.

う~ん.楽ですねぇ…….

4. TimeZone の変更

初期状態だと(たぶん)UTC なので,TimeZone を Tokyo に変更します.Ubuntu のお作法だと,

$ sudo dpkg-reconfigure tzdata

でいけるみたいですね.

5. アップデート

$ sudo apt update
$ sudo apt upgrade -y
$ sudo apt autoremove

のようにして,Ubuntu に導入されている各パッケージを最新のものに更新します.かなり大量にアップデートがかかるので,結構時間がかかります.コーヒーでも飲みながら待つことにします.

6. Ubuntu.ja リポジトリの追加

$ 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/xenial.list -O /etc/apt/sources.list.d/ubuntu-ja.list
$ sudo apt update
$ sudo apt upgrade
$ sudo apt autoremove

Ubuntu を日本語環境で使うには Ubuntu Japanese Team の成果物に頼る方が簡単そうなので,そのリポジトリを導入しておきます.なお,Ubuntu Japanese Team のページは以下の通りです.

Homepage | Ubuntu Japanese Team

6. Zsh のインストール

Zsh は初期状態だと入ってない(tmux は入ってるのに……)ので,別にインストールしないといけません.

$ sudo apt install zsh -y

また,Zsh の便利な設定をまとめて導入できる Prezto ど導入します.WSL への導入は初めてなので,色々個人的なカスタマイズをしたものをいきなり導入せず,まずはオリジナルのものを入れてみました.

$ zsh
This is the Z Shell configuration function for new users,
zsh-newuser-install.
You are seeing this message because you have no zsh startup files
(the files .zshenv, .zprofile, .zshrc, .zlogin in the directory
~).  This function can help you with a few settings that should
make your use of the shell easier.

You can:

(q)  Quit and do nothing.  The function will be run again next time.

(0)  Exit, creating the file ~/.zshrc containing just a comment.
     That will prevent this function being run again.

(1)  Continue to the main menu.

(2)  Populate your ~/.zshrc with the configuration recommended
     by the system administrator and exit (you will need to edit
     the file by hand, if so desired).

--- Type one of the keys in parentheses ---q

$ git clone --recursive https://github.com/sorin-ionescu/prezto.git "${ZDOTDIR:-$HOME}/.zprezto"
$ setopt EXTENDED_GLOB
for rcfile in "${ZDOTDIR:-$HOME}"/.zprezto/runcoms/^README.md(.N); do
  ln -s "$rcfile" "${ZDOTDIR:-$HOME}/.${rcfile:t}"
done
$ exit
$ zsh

とすると,きちんと動いてくれているみたい.でも,コマンドプロンプトのままだと使いにくいので,次は mintty を WSL 向けにパッケージングした wsltty を導入します.

7. wsltty の導入

配布元は

Releases · mintty/wsltty
Mintty as a terminal for Bash on Ubuntu on Windows / WSL - mintty/wsltty

です.現在の最新は wsltty-1.8.5.2-install.exe みたいですね.ダウンロードして,ダブルクリックするだけでインストールが終わります.インストール先は,

C:\Users\(username)\AppData\Local\wsltty

で,設定関係は

C:\Users\(username)\AppData\Roaming\wsltty

みたい.デスクトップとスタートメニューに起動用のアイコンができますが,このまま起動するとログインシェルが Bash のままなので,Zsh をログインシェルにするために,スタートメニューの

WSL Terminal 右クリック ⇒ その他 ⇒ ファイルの場所を開く ⇒ WSL Termial ショートカットを右クリック ⇒ プロパティ ⇒ リンク先

を以下の様に変更します(/bin/zsh -l を後ろに追加するだけ.wsltty の Git ページを参照).

%LOCALAPPDATA%\wsltty\bin\mintty.exe --WSL= --configdir="%APPDATA%\wsltty" -~ /bin/zsh -l

これで Zsh が WSL Terminal から起動してくれますが,念のため(今のところ意味はなさそうですが),Unix の古来からのお作法に従い,

$ chsh
Password:
Changing the login shell for (username)
Enter the new value, or press ENTER for the default
        Login Shell [/bin/bash]:/bin/zsh

としておきます.

なお,Ubuntu 再インストールのときは,Powershell から

$ wslconfig /setdefault Ubuntu

のようにしないと,wsltty から Ubuntu につながらないことに注意が必要です.また,フォントの設定等は以下をご覧ください.

Prezto を mintty で使うためのフォント設定備忘録
シェル zsh の便利な設定をまとめて導入可能な prezto を Cygwin の mintty で使うときに,綺麗なフォントが使えるようにするための備忘録です.これ以外の prezto 関係の備忘録は, からどうぞ.なお,以下の不具合は...

8. mintty のタイトルバー表示の改善

上記の通りで mintty 自体はまぁ問題なく使えるのですが,タイトルバーの表示が

/bin/wslbridge --distro-grid (5591cbfe-f246-4ccb-aac5-......

みたいな感じになってあまりうれしくありません.それで,これを今いるフォルダ名になるように改変することにしました.いろいろ考えた結果,~/.zshrc に以下を付け加えることにしました.項番6で導入した prezto 前提であることに御注意下さい.

# Customize to your needs...

if [[ $(uname -a) == Linux*Microsoft* ]]; then
  # Display Current Directory in WSL Terminal Titlebar.
  # added by hyt on March 19, 2018

  #echo -ne "\e]0;  $(prompt-pwd)\007"
  #chpwd(){echo -ne "\e]0; $(prompt-pwd)\007"}

  echo -ne "\e]0;  $PWD\007"
  chpwd(){echo -ne "\e]0; $PWD\007"}
fi

幾つか備忘録として記しておくと,

  • \e]0; ***\007 でタイトルバーの表示が *** に変わる.
  • prezto だと,chpwd(){***} はカレントディレクトリが変更されたら実行される関数です.⇒ precmd とか preexec でも良いのですが,これだとコマンド実行されるごとに実行されます(時間とか表示させたければこっちの方がよい).
  • chpwd だと起動したてのときにタイトルバーの表示が変わらないので前に echo ***
  • prompt-pwd は zprezto がコマンドプロンプト用のカレントディレクトリ文字列を得るために内部で使う関数です.コマンドプロンプトに表示されるものと同じものが欲しければこれにすればよいみたい.

でしょうか.

9. 日本語ロケールの導入

この日本語ロケールは Ubuntu.ja リポジトリを追加してないと導入できません.

$ sudo apt install -y language-pack-ja
$ sudo update-locale LANG=ja_JP.UTF-8

10. 細かなもののインストール

日常的に使いそうな小さなコマンドを入れていきます.何と!

peco が動くようになってます!

確か Windows 10 1709 だと以下の通り peco は動かなかった記憶があるのですが……,1803 では動いています.嬉しい誤算です.

$ sudo apt install jpegoptim
$ sudo apt install kpcli
$ sudo apt install nkf
$ sudo apt install make
$ sudo apt install lv
$ sudo apt install unzip
$ cd /usr/local/src
$ sudo git clone https://github.com/jarun/googler
$ sudo chown hyt.hyt googler
$ cd googler
$ sudo make install
$ wget https://github.com/monochromegane/the_platinum_searcher/releases/download/v2.1.5/pt_linux_amd64.tar.gz
$ tar -zxvf pt_linux_amd64.tar.gz
$ cd pt_linux_amd64
$ wget https://github.com/peco/peco/releases/download/v0.5.3/peco_linux_amd64.tar.gz
$ tar -zxvf peco_linux_amd64.tar.gz
$ sudo cp peco_linux_amd64/peco /usr/local/bin/.
$ sudo cp pt /usr/local/bin/.
$ cd /usr/local/bin;sudo ln -s peco percol
$ sudo apt install python3-pip
$ sudo python3 -m pip install --upgrade pip
$ sudo apt install imagemagick
$ sudo -H pip3 install youtube-dl

11. .tmux.conf の準備

ターミナル・マルチプレクサ tmux を自分好みのものになるよう編集します.詳しくは

tmux の status line とマウス切り替えの備忘録
tmux の status line とマウスを使う設定の備忘録.gnu screeen と同様のターミナルを便利にするコマンドですが,詳しくは tmux 元ページ をご覧ください.今回の設定は以下のページを参考にしています. 出来るように...

辺りをご覧ください.なお,tmux の元サイトは,

Home
tmux source code. Contribute to tmux/tmux development by creating an account on GitHub.

です.

$ vi ~/.tmux.conf
set-window-option -g mode-keys vi
set-window-option -g window-status-format " #I: #W "

set-option -g default-shell /bin/zsh
set-option -g status off
set-option -g status-bg "colour238"
set-option -g status-fg "colour255"
set-option -g status-right " | %m/%d %H:%M:%S"

bind b split-window\
   "tmux lsw | percol --initial-index $(tmux lsw | awk '/active.$/\
     {print NR-1}') | cut -d':' -f 1 | tr -d '\n' |\
     xargs -0 tmux select-window -t"

bind B split-window\
  "tmux ls | percol --initial-index\
    $(tmux ls | awk \"/^$(tmux display-message -p '#{session_name}'):/\
    {print NR-1}\") | cut -d':' -f 1 | tr -d '\n' |\
    xargs -0 tmux switch-client -t"

bind-key M-s \
  if-shell "tmux show-options -g status | grep off"\
    "set-option -g status on" "set-option -g status off"

bind-key M-m \
  if-shell "tmux show-options -g mouse | grep off"\
    "set-option -g mouse on" "set-option -g mouse off"

12. Windows フォントの導入

Ubuntu から Windows のフォントを利用できるようリンクを張ります.私の場合は Ghostscript から利用できるようにすることが目的です.

# sudo ln -s /mnt/c/Windows/Fonts /usr/share/fonts/windows
# sudo fc-cache -fv

13. texlive の導入

本当は Ubuntu のパッケージから導入したかったのですが,実際に入れてみると,何と!

TeX Live インストール備忘録
いつも使っている環境は Windows + Cygwin 環境で,少し前まで W32TeX,1年くらい前か ら TeX Live for Windows を使っていたのですが,補助的に導入されるコマンドが Cygwin とかち合って使いづら...

に記したバグもちバージョンです.仕方ないので TexLive を通常のやり方でインストールしました.

$ wget http://mirror.ctan.org/systems/texlive/tlnet/install-tl-unx.tar.gz
$ tar xvf install-tl-unx.tar.gz
$ cd install-tl-20180303
$ sudo ./install-tl
$ sudo /usr/local/texlive/????/bin/*/tlmgr path add
$ sudo ln -s /mnt/c/Windows/Fonts /usr/local/texlive/texmf-local/fonts/truetype
$ sudo mktexlsr

14. ls の色

WSL の場合も cygwin と同様に Windows と Linux のパーミッションの両立に気を遣う必要があります.WSL 管理下のファイルは問題ないのですが,Windows 管理下のファイルを WSL から ls すると標準状態だととても見辛いです.この問題を緩和するために,ls の色を solarized color theme に変更します.

 

$ cd /usr/local/src
$ sudo git clone https://github.com/seebi/dircolors-solarized
$ sudo chown -R hyt.hyt dircolors-solarized
$ ln -s /usr/local/src/dircolors-solarized/dircolors.ansi-dark ~/.dircolors

まぁ,完全に満足とは言いませんが,これだけでもだいぶ違和感がなくなります.

15. Open コマンドの追加

Cygwin の cygstart (MacOS だと open)コマンドは私の場合手放せないので,似たようなコマンドを探してみたところ,作っておられる方がおられました.

GitHub - smzht/wsl-utils: WSL Utilities
WSL Utilities. Contribute to smzht/wsl-utils development by creating an account on GitHub.

有り難く利用させてもらうことにします.

$ cd /usr/local/src
$ sudo git clone https://github.com/smzht/wsl-utils
$ sudo chown -R hyt.hyt wsl-utils
$ cd wsl-utils
$ sudo cp sglstart wslcommon wslinit wslln wslpath wslsc wslstart /usr/local/bin/.
$ cd /usr/local/bin
$ sudo chmod +x sglstart wslinit wslpath wslstart wslcommon wslln wslsc

おわりに

その他,チョコチョコと設定を変更したところや,追加したパッケージ等ありますが,大枠はこんな感じです.私の場合は,ここまでの設定で,Windows + Cygwin 環境だったときとほぼ違和感のない形になりました.

Cygwin では使えていた /dev/audio 辺り(多分.mpg123 とかコンパイルして使えてた)が使えないのだけが大きな違いですが,これは Windows 版の mpg123 を使えば良いだけですから,大した問題ではありません.それよりもほとんどのものを標準的なインターフェースでアップデート可能であること,さらに,Windows 環境が全く汚れないなどのメリットが大きく,多分もう Cygwin に戻ることはないと思います.

それにしても peco が使えるようになっているとは…….嬉しい誤算でした!

以上!

タイトルとURLをコピーしました