Edited at

WSLでwindows上にLinuxのGUI環境を作る[メモ]


0. 前提


  • 64-bit Windows 10で、OSビルドが14393より後ろであること(詳しくは参考のURL)


1. GUI環境を起動できるようにする手順


Windows Subsystem for Linuxを入れる


Windows Power shell に以下を入力する。自動的に再起動が始まる。

Enable-WindowsOptionalFeature -Online -FeatureName Microsoft-Windows-Subsystem-Linux


再起動後Ubuntu をmicrosoft.comからインストールする。

https://www.microsoft.com/ja-jp/p/ubuntu/9nblggh4msv6?rtc=1


VcXsrvを入れる


VcXsrvをsourceforgeから入手しインストールする。

https://sourceforge.net/projects/vcxsrv/


xfceをUbuntuに入れる


ubuntuを起動してアカウントを作る。


xfceをインストールする

sudo apt-get update

sudo apt-get upgrade
sudo apt-get install xfce4-terminal
sudo apt-get install xfce4

もしapt-get install xfce4がうまく行かなければsudo apt-get install xfce4 --fix-missingをする。

sudo apt-get clean をしてやり直すと直るかも? 0.5GB程度、< 1時間くらいかかった。

ちゃんと入っていれば、sudo apt-get install xfce4を行うと更新の必要がないよと言ってくれる。


ubuntuの環境変数の設定をする

必要ならエディタを導入する。たとえばsudo apt install emacsなど。nanoやvimも入っている。


.bashrc

export DISPLAY=:0.0

export LIBGL_ALWAYS_INDIRECT=1

を.bashrcに書き込み、ubuntuを立ち上げなおすかsource .bashrcをする。

もしcygwinなどで0.0を使っている場合かちあってしまうので、適当に1.0や2.0などにする。


Xlaunchを起動する

VcXsrvをインストールできていればwindowsキーを押してxlaunchと打てば起動できる。

cygwinなどを入れていると違うxlaunchが起動するかもしれないが、そっちでも問題はなさげ。

'One Window'を選択し、Display numberは0とする。もしDISPLAY=:1.0にしている場合は1にする。

後は「次へ」を押していき、最後の「完了」の所でsave configurationをしておく。

黒い画面がでればOK


xfceを起動する

Ubuntuに戻り、startxfce4をするとさっきの黒い画面にGUI環境が現れる。


2. ubuntu起動時に設定したXを行う方法

~/.bashrcに、すでに起動しているかどうかを判定して、何らかの方法でXを起動し、startxfce4をすればよい。


Xlaunchを使う方法


windowsのシステム環境変数の変更



windowsのユーザー名が2バイト文字の人は、保存したconfig.xlaunchをダブルクリックで開こうとすると"fatal error cannot open a log file"などというエラーがでてxlaunchを起動できないことがある。



システム環境変数のTMPとTEMPに入っているusernameを処理できないのが問題のようである。"環境変数を編集"から、TMPとTEMPの変数値を2バイト文字の入っていないディレクトリに設定する(TEMPだけでよい?)。良い方法が分からないので自己責任になるが、ディレクトリを作ったうえでC:\TEMPORAL\TMPと設定した。



うまくできていればダブルクリックで開くことが出来る。なお"cannot establish listening socket"のエラーは既にそのソケット使って開いているから開けませんよというエラーなので問題はない。


ubuntuからwindowsのアプリケーションを開く方法



cmd.exe /C start <filename>

で開くことが出来る。このとき¥マークはエスケープ文字\になるので<filename>の記述は適宜修正する必要がある。

例えばC:\foo\bar\config.xlaunchを開きたいときは次のようになる。

NG cmd.exe /C start  C:\foo\bar\config.xlaunch

OK cmd.exe /C start 'C:\foo\bar\config.xlaunch'
OK cmd.exe /C start C:\\foo\\bar\\config.xlaunch



これを.bashrcに書いて自動化すれば表題は達成するが、XLaunchを使わない方法をとることにする。



XLaunchを使わないで自動化する方法

上の方法ではubuntu側から起動しているかどうかの判定がしづらい。

それにubuntuからcmd.exe /C startってなんかいけてない感ある。

そこでコンフィグファイルは使わず、

インストールしたVcXsrvディレクトリ内にあるvcxsrv.exeをオプション付きで起動することにした。


vcxsrv.exeをubuntuから実行する。

インストールしたVcXsrvはデフォルトだと/mnt/c/Program\ Files/Vcxsrv/に入っている(パスは環境によるかも)。

/mnt/c/Program\ Files/Vcxsrv/vcxsrv.exe -helpでオプションの一覧が現れるのを確認したら、.bashrc`の最後に次を追加する。


.bashrc

if [[ $(ps -e| grep xfce4 | grep -v grep |wc -l) -eq 0 ]] ;then

/mnt/c/Program\ Files/VcXsrv/vcxsrv.exe \
:1 -screen 0 1024x768 \
-xkblayout jp \
-xkbmodel jp106 \
-silent-dup-error &
startxfce4 &
fi

これでとりあえず表題は達成するはず。


3. いくつかの問題


startxfce4 の大量のwarning

次のupgradeをすると多少減る。

sudo apt-get upgrade gtk2-engines-pixbuf

また、root権限でXを起動してしまうと設定ファイル等がroot userで作られてしまって

通常のユーザーで起動するときに様々な問題が起きる。

find ~/ -user rootをしてrootのxfce関連ファイルを見つけ、適宜削除すると解決する。


vcxsrvを起動するとキーボードが勝手に変わる

今のところ簡単には解決できないっぽい。Windowsキー+Spaceでいちいち変えている。

無料版Xmingユーザーは、バイナリをいじることで解決しているらしい。


.bashrcをミスってubuntuが起動しなくなった時

うっかり.bashrcにexitをいれてしまったりすると

ubuntuが起動直後に終了してしまい困ったことになる。

.bashrcを編集したい。

https://askubuntu.com/questions/816732/how-to-change-default-user-in-wsl-ubuntu-bash-on-windows-10

を見るとcmd.exe経由でうまいことやる方法がありそう。

例えばrootで入っていじるとか。

ちなみに.bashrcはwindowsにおけるユーザー名を<USER>、WSLにおけるユーザー名を<user>とすると下記の場所にある。

C:\Users\<USER>.000\AppData\Local\Packages

\CanonicalGroupLimited.UbuntuonWindows_79rhkp1fndgsc\LocalState\rootfs\home\<user>\.bashrc

でもこういう形でのファイルの触り方は予定されていないはずなので極力避けたい。


xfceのGUI環境下でダブルクリックしてファイルを開けない

ファイルを開こうとすると

Could not launch application failed to execute child process "xterm"(no such file or directory)

となってしまって開けない。

これはgnome-terminalを入れると直る。

sudo apt-get install gnome-terminal

xfceいれたのにgnomeもいれるの・・・という気持ちになるが

参考[2]によるとgnome-terminal.wrapperが必要らしい


google-chrome, chromium-browserが起動しない

一度起動するが、その後どうやっても起動しない。

参考[3]を見つけたのでtherealkenec氏のコメントを元に次を試した。

sudo apt install ubuntu-desktop mesa-utils gdebi

sudo apt purge pulseaudio libpulse0 && sudo apt autoremove
sudo apt-get install xfce4
wget https://dl.google.com/linux/direct/google-chrome-stable_current_amd64.deb
gdebi google-chrome-stable_current_amd64.deb
export NO_AT_BRIDGE=1
exec dbus-run-session -- bash
sudo service dbus start
google-chrome

安定して立ち上がるようになった。しかしgmailを開くとバグる。

依存関係があるといわれる下をインストールしてgoogle-chromeを入れなおしたが直らない。

sudo apt-get install libappindicator1

sudo apt-get install libgconf2-4 libnss3 libxss1

basic html形式で開くとgmailは問題なく使える。

https://mail.google.com/mail/u/0/h/1pq68r75kzvdr/?v%3Dlui

google calendarも問題ない。


GUI環境で日本語が文字化けする

本記事にいただいたコメントによると、日本語フォントをインストールすることで解決するそうです。

sudo apt install fonts-takao


4. 参考

[1]WSLとxfceの導入の参考

https://github.com/QMonkey/wsl-tutorial

[2]xfceのGUI環境下でダブルクリック

https://askubuntu.com/questions/419641/panel-apps-try-to-launch-in-xterm-even-though-it-isnt-installed

[3]google chrome

https://github.com/Microsoft/WSL/issues/648#issuecomment-324562271