たいちょーの雑記

ぼくが3日に一度くらい雑記をかくところ

お前らのWSLはそれじゃダメだ

OIT Advent Calendar 2017!!!

この記事は、 OIT Advent Calendar 2017の1日目の記事です
adventar.org

わーいあどべんとだー

OIT Advent Calendar が今年もやってきた!
募集を観測してから1秒でアクセスし1秒1日目に予約してやったぜ

因みに去年も1日目だったんですよ~
adventar.org

ていうかもう12月?はやくない?

本題

Bash on Windowsが2016年の4月に来たときめちゃくちゃ嬉しかったことを覚えています

それからしばらく経った2017年の10月末にWindows10のFall Creators Updateがきました。BoWの名称はWindows Subsystem for Linux(WSL)へと変わり、正式版になったことでWindows上でシェル芸をするときの選択肢が増えましたね。非常に嬉しいです

自分はSurface3を持ち運び用にしてますが容量の都合とかでデュアルブートするのしんどいし、なによりWSLは破壊してもすぐなおせるところがいいですよね!最高!

でも

ターミナルエミュレータがイケてない

BoWだった時も思ってたんですけどぉ…Windows環境ってぇ…
ほんッとターミナルがイケてない!

イケてない

  • イケてないお前らのWSL
    omaerawls

僕は違いますよ! - イケてるぼくのWSL
bokunowls
やった~~~~~かっこいい~~~~~WSLしゅき~~~~!

もうひとつ mate-on-wsl
Ubuntu MATE on WSL
同じやり方でmate-sessionだって起動する

DEほどの機能がいらなければawesomeみたいなウインドウマネージャーを起動すればいいね awesome-on-wsl

これで楽しいWSL生活!

環境構築

材料

  • Fall Updateした後のWindows10
    • めっちゃじかんかかった
  • Windows向けX server
    • 今回はVcXsrvを使用。Xmingがいいならそっちでもいいけど解説はないよ
  • WSL
    • ストアから落とそう
  • ggる力
    • 目の前の箱はおもちゃか?

VcXsrvのインストール

sourceforge.net
特にインストールするときにggった覚えがないのでポチポチでインストールできるハズ・・・

WSLの用意

OpenSUSEとかもあるけど今回は普通にUbuntuを使う
Microsoft StoreでUbuntuと検索すればすぐ出てくるからインストールする

終わればスタートの最近追加されたものの項目にUbuntuが出てくるだろうからそれをクリック。みつからないならCortanaにUbuntuどこですかって聞こう
whereisubuntu

クリックしたらインストールの続きが始まるので少し待つ、それが終わるとユーザー名とパスワードを聞かれるので入力。好きなのでいいと思うよ

少し上のお前らのWSLになったら 定番のアップデートをする

sudo apt update && sudo apt upgrade -y

思ったより時間はかからないと思うぜ!

この先は自分の好きなように選んでほしい、DEやWMはいらんから端末だけほしい!とかDEごとほしい!とか自分のニーズに合わせてインストールしよう。全部やると時間かかるよ

日本語化

WSLになってからデフォだとえいごだからJP語にする。したい人はしたらいいぼくはする

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

端末だけ使う

インストール

好きな端末を選べばいいと思うけど、ここではgnome-teminalをインストールする

sudo apt install -y gnome-terminal uim-fep uim-anthy dbus-x11

(2017/12/07 誤字ってたので修正)

gnome-terminalと一緒にuimをインストールして日本語入力できるようにする
日本語入力する予定がないならuim系はインストールしなくてもOK
dbus-x11は・・・知らん・・・ないと動かなかった
ここが結構時間かかるので気長に待ちましょう

終わったらuimの設定を書く

cat << EOF > ~/.uim
(define default-im-name 'anthy)
(define-key generic-on-key? '("<Control> "))
(define-key generic-off-key? '("<Control> "))
EOF

これでgnome-terminalを使っているときに、Ctrl+Spaceで日本語入力の切り替えができるようになった
もしここを変えたいとかなら<Control>の部分を書き換えればOK!
一応情報置いときますね
github.com

もしかしたらXMODIFIRESを設定しないとダメかもしれない

export XMODIFIRES=@im=uim

自分の場合はしなくもOKだった。これってxtermとかだといるのかな?

起動テスト

とりあえず起動するか確かめる

  • VcXsrvの起動
    • CortanaにVcXsrvどこですかって聞いて起動する
    • タスクトレイに下図赤丸のアイコンがあればOK!
      • vcxsrv
  • gnome-terminalの設定
    • 下のようなコマンドを入力する
export DISPLAY=:0.0
gnome-terminal -e uim-fep
#上がダメなら
dbus-launch gnome-terminal -e uim-fep
#それでもだめなら
sudo service dbus start && dbus-launch gnome-terminal -e uim-fep

たいていの場合1つ目で起動する・・・dbusを感覚で使っているので細かいことは解らないけどserviceの起動まではしなくていいはず

ちょっと待つと起動すると思う

起動したら

毎回起動時にexportするのはだるいので少しVBとPSスクリプトを書くと楽になると思う

  • wsl-terminal.vbs
Set ws = CreateObject("Wscript.Shell")
ws.run "powershell -NoProfile -ExecutionPolicy Unrestricted .\launch.ps1",0,false
  • launch.ps1
ubuntu.exe -c "gnome-terminal --display=:0.0 -e uim-fep"

ファイル名なんかは適当でいいけど 「同じ場所に置くこと」「vbsの方に書いてあるps1ファイルの名前」 だけは気を付けること
二つ作るのはめんどい!って人はVBの方に纏めちゃってもいいんじゃないかなpowershell -c 'command'みたいな感じに

作ったら vbsの ショートカットを作る
vbsshortcuts

これをWindowsC:\Users\USER\AppData\Roaming\Microsoft\Windows\スタートメニュー\プログラムに置く! これでスタートメニューに登録されるので、ピン止めするなりすれば起動が簡単になるよ

後はショートカットのアイコンをIconfinderなんなりから探してきて
www.iconfinder.com

ショートカットのプロパティのアイコンの変更から好きなアイコンを選べば素敵な環境の出来上がり!やったね
term-icon

ここでショートカットにショートカットキーを割り当てておけばいつものようにCtrl+Alt+Tで起動できてワクワクドキドキ

あとは好みで配色を変えて楽しんでね
github.com

同じやり方で別の端末をインストールすれば、↑のコマンド群のgnome-terminalの部分を置き換えると同じように起動すると思う
因みに自分はTilixが好き
gnunn1.github.io

DEを起動したい

DEってのはDesktop EnvironmentのことつまりUnityとかKDEみたいなデスクトップ環境。どうでもいいけどenvironmentってスペル難しい

先に行っておくとDEはちょっと不安定で、フルパワーで使えなかったりTabBackSpaceを押すとたまに爆発(後述)したりするから注意。とはいえVMじゃない?のにVM感?が味わえて楽しいのでオヌヌメ
当然DE内ならGTKとかのテーマも使えるから
Windowsの見た目、嫌いじゃないけど飽きたよ」
という人にもオヌヌメ

それじゃあ自分の好きなDEを選んでやってみよう。今回はMATEデスクトップをインストールする
ubuntu-mate.org

インストール
sudo apt install mate-desktop-environment-extras ubuntu-mate-core ubuntu-mate-desktop -y

さすがにDEともなるとインストールに時間がかかる。それを見越して軽量なMATEにしたけどうむむという感じ
もしかすると単純にmase-sessionを起動するだけならmate-desktopをインストールするだけでいいの・・・・かなあ?
上のコマンドだけしか試したことがないので是非いろいろ試して教えてほしい

起動テスト
  • VcXsrvの起動
    • CortanaにXLaunchどこですかって聞いて起動する。アイコンがVcXsrvと同じなのでちょいとややこしい
    • 下図3枚のように設定して
    • xlaunch-1
    • xlaunch-2
    • xlaunch-3
    • 完了を押す。ここでコンフィグを保存しておけばこの設定でVcXsrvを起動するショートカットみたいなのが作れるので毎回設定しなくてよくなる。
      • ぼくは保存してるけど毎回設定して起動してる・・・もうだめかもしれない
    • タスクトレイに下図赤丸のアイコンがあればOK!
      • vcxsrv
  • mate-sessionの起動
export DISPLAY=:0.0
mate-session

めっちゃログが流れた後VcXsrvにMATEデスクトップが表示される。エラーも表示される
mate-error

きみはほうこくしてもほうこくしなくてもいいぞ。ぼくはしない

起動したら

terminalだけのときと同じように起動スクリプトを作っておけば楽になる
ほぼおんなじで二度手間だけど

  • mate-on-wsl.vbs
Set ws = CreateObject("Wscript.Shell")
ws.run "powershell -NoProfile -ExecutionPolicy Unrestricted .\launch-mate.ps1",0,false
  • launch-mate.ps1
ubuntu.exe -c "mate-session --display=:0.0"

後の手順はterminalのときと同じ、DEの方はテーマを変えたりするだけ、どこまでできるかわからないけど大抵のことはできると思う

備考
  • 日本語入力
    • 日本語環境に設定しててもMozcが最初からないので自力でMozcを入れるかuim-fepで代用するといいよ。僕は後者
  • ターミナルTabBackSpaceを押すと画面がちらつく
    • どんまいです。ぼくもよくわからないけど何度かVcXsrvごと再起動するとなおる
    • タイミング的に音の鳴るときな気がするからターミナルのベルを切ると発生しないかもしれない。自分はこうしてからあんまり遭遇してない

ウィンドウマネージャーを起動する

WMだけを起動する場合もDEとほぼ同じ・・・というか同じ手順をすればいいよ
これは結構安定しているのかも

ここではawesomeをインストールする

awesome wm

github.com
いわゆるウインドウマネージャーってやつ。Archとか使ってる人がよくこういうのを色々試してる印象

awesome は設定範囲が広い、X の次世代型ウィンドウマネージャです。非常に高速に動作で、拡張性があり、GNU GPLv2 でライセンスされています。 Arch Wiki

らしい。次世代型かぁ・・・!惹かれますね

インストール

もちろんaptでインストールできるんですが、このUbuntuは16.04なのでawesomeのバージョンがちょっとふるい(v3.5.9)
最新はv4.2なのでそっちをインストールしたいなあ・・・
github.com
というかこれが使いたい

ビルドしてもいいんですが面倒なのでaptにまかせたいな~~とlaunchpad探してたら
launchpad.net

ありました
手順は書いてあるので二度手間ですがコピペ用にどうぞ?

sudo add-apt-repository ppa:klaus-vormweg/awesome  &&  sudo apt update  && sudo apt install -y awesome

インストールが終わったらDEのときと同じ設定でVcXsrvを起動してから

export DISPLAY=:0.0
awesome
#もしくは
awesome --display=:0.0

で起動します

GTK Themeを適用したい

これは主にターミナルだけのやつ
ここまで僕のやることを素直に受け入れてきた人はおそらくウインドウのタイトルバーがWindowsのままだったり、Defaultの色が白背景だったりでちょっとイケてない(白背景をDisってるわけじゃない)
じつはVcXsrvみたいなXserverを使った場合でも有志が作ったGTK Themeを適用出来たりできなかったりする
GTK2.0なのかGTK3.0なのか、タイトルバーを上書きしてるのかとかで適用範囲は変わる・・・と思う
この辺の難しいことは解らないので誰か教えてほしいかも

自分の場合は先述のようにTilixを使ってるのでGTK+ 3のテーマなら使える
Tilixはタイトルバーを上書きしてるのでそこもThemeの適用範囲になる。やったね

というわけで目指すのはこれ
gtkthemetilix

好きなテーマを探す

たぶんgnome-lookで探すのがいい。というかここしかしらない
www.gnome-look.orghttps://www.gnome-look.org/browse/cat/135

ぼくはこれ
github.com
別にOSXが好きとかじゃないけど、黒系ならカッコいいし、人気だし、使いたくなるからこれを使ってる。後インストールが楽

テーマをインストールする

基本的にはダウンロードしてきたやつを/usr/share/themes/に置けばOKのはずなんだけど上手くいったためしがないんだ・・・ごめんよ
OSX-Arcのように丁寧にパッケージが用意されてるならそれ展開すればいいでしょう
以下はその手順

mkdir ~/tmp && cd tmp
wget https://github.com/LinxGem33/OSX-Arc-Darker/releases/download/v1.4.5/osx-arc-collection_1.4.5_amd64.deb
sudo dpkg --install ./osx-arc-collection_1.4.5_amd64.deb && rm ./osx-arc-collection_1.4.5_amd64.deb

テーマを適用してアプリケーションを起動する

developer.gnome.orghttps://developer.gnome.org/gtk3/stable/gtk-running.html
ここみたらどうやらGTK+3だとGTK_THEMEに適用したいテーマ名を書くだけで良しなにしてくれるらしきことが書いてあった
なので

GTK_THEME=OSX-Arc-Shadow tilix

とすればテーマが適用されてTilixが起動する
テーマの名前は/usr/share/themes/lsすればわかるよ

GTK2だと~/.gtkrc-2.0を書く必要がある
テーマだけをあてるなら

echo 'gtk-theme-name="BlackMATE"' > ~/.gtkrc-2.0 #BlackMATEのところに好きなテーマの名前を書く

としたあと

mate-terminal

すればOK、たぶんタイトルバーはWindowsのままだと思うけどドロップダウンメニューとかはテーマが適用されてるはず
gtkthemetilix
こんな感じになってるんじゃないかな?

タイトルバーに関しては適用される方がいいのかは正直解らない、Tilixはタイトルバーが上書きされて見た目はハッピーだけど最大化ボタンが死ぬので大きくするときが面倒になる

それと一応.gtkrc-2.0でフォントの設定とかもできるけどその辺はここでは書かない・・・(ggって)

解像度とか

なんか少しぼやけるときは下記を参考にDPI設定をするといいかもしれない
qiita.com
surface3ではぼやけてたからDPI設定したら綺麗になった(というより見た目が小さくなった)

WindowsLinuxを同時に使いたいなら

WindowsLinuxを同じPCで共存させる方法ってのは、マシンスペックに余裕のある人はVM、HDDに余裕のある人ならデュアルブートとかだったけど、そのどちらもないSurface3だとこのWSLはすごくありがたい、ubuntu側からならwindows見えるし

他にもwubiuefiを使って簡単にデュアルブートしたりとか、X2GoつかったりDockerコンテナにSSHしてX11フォワーディングするとかいろいろあるので試したいなあって思ってます
github.com
www.youtube.com
qiita.com

まとめ

正直なところライトな使い方をするならcmdとかpowershellから使うだけでいい。けどtmuxとかマルチバイトでずれたりするしイケてないよねってことでこれをしばらく試していた(Fall Update以降はcmdでもずれなくなった・・・?)

参考になる記事が沢山あったので色々試してたらDEまで起動してちょっとびっくりしたし、いかに自分がLinuxを雰囲気で使ってるのかっていうのも解った。雰囲気じゃなくて完璧に使えるようになるのはむり・・・あきらめたくないけどむり

自分はgnome-terminalが起動した時点で「勝った!」と思ったのでこれ以上のことをあんまり調べていないんですが・・・
win
飛び跳ねながらいろいろ設定してたらだんだん重くなってきてsurfaceではpowerline-daemon起動してても重いという状況なのでちょっと整理したいな~なんて

自分はこういう設定で運用してるよ!とかGoodな情報があればぜひ教えてもらいたいです

それではよいWSLライフを

参考

mjhd.hatenablog.com
www.hiroom2.com
Arch Linux JP Project
qiita.com