WSLとVcXsrvでLinuxのGUIをWin10で表示する

そもそも

Windows、Macのマシンを所有しており、自分の趣味とソフトウェア開発などやるためにどんな環境が自分にとってベストなのかを模索しています。

ソフトウェア開発をやるにあたって当初はMac(OSX)が最適じゃないかと思っていました。一応Linuxであり、VM入れればWindowsも動くし、なによりiOSアプリはMacでしかモジュールが作成できないので。

ところがどうしてもダメだったいくつかの理由があり、結局メインはWindowsに戻っています。

何がダメだったか

  • Finder(Windowsのエクスプローラーのようなもの)が恐ろしく使いづらい。有料アプリを入れないとまともに使えないレベル。
  • ライフサイクルが短い。スペックはともかくとして、どんどん足切りされてしまう。定期的に本体を買わなないとという衝動に駆られ、部品交換で延命できない。(それがAppleの狙いではある)
  • 値段が高すぎるのと、最近のハード仕様が理解できない(USBコネクタが1個しかないなど)
  • 魔改造したLinux機のようなものだが、素直に普及しているLinuxディストリビューションを使いたい。
  • iPhoneはiOSのアップデートで露骨に遅くなったのと、ダウングレードができないというトラップで頭にきてAndroidに乗り換えてしまった。iOSの自作アプリも公開するつもりもなかったので、デバッグ用証明書で使っていたが、ルール変更で1週間ほどで更新しないとダメで利便性が悪い。(Androidのように公開しないなら無料で無期限で使えても良いと思う)

結局はiPhoneもそうですが、Macはコンピュータ界のブランド品なんです。機能性を求めてはダメなんでしょう。

Linuxをどうやってインストールするのか?

Windowsメインで良いのですが、サブでLinux環境がほしくなります。

  1. PCを別途用意してLinuxインストールする方法。一番無駄が多いので却下。
  2. VMWareなどのVM上にLinuxインストールする方法。リソースの無駄が結構多いのが気になる。
  3. Win10にWSLを入れて使う。最も無駄がないが、一部動かないアプリがあるのとGUI表示できない。
  4. RaspberryPi+Raspbianを稼働させる。1番よりスリムだが、処理能力が低いので普段使いには向かない。

WindowsとLinuxをなるべくシームレスに行き来して使えるのと、Windowsマシンはわりとハイスペックなので有効利用したいと考えると、3番のWSLになる。2番もパフォーマンスではもうほとんど問題にならないが、シームレスというわけにもいかずやっぱりWSLに戻ってきてしまった。

WSLだとGUI表示できない

そんなにケースがあるわけではないが、GUI表示したくてもできないと諦めていたが、色々調べるとX-Serverのエミュレータ?のようなものがあって、WSLと組み合わせて使用する事例があったので試してみた。

VcXsrvの導入

いろいろあるみたいだが、VcXsrvが一番使われていそうなので導入してみることにした。

VcXsrv Windows X Server

ダウンロードしてWinマシンにインストールする。

wlsgui001

VcXsrvがインストールできたら、WSL側でDISPLAY環境変数を設定します。仕組みはよく知らないけど、X-Serverというだけあって、描画もサーバーで処理するイメージかと思います。ここではLocalhostとDisplay Idとして0番を指定します。(本当は後述するXLaunchのIdを設定するがおそらく0番なので)

> vi ~/.bashrc

export DISPLAY=localhost:0.0
export "LIBGL_ALWAYS_INDIRECT=1"

> source ~/.bashrc

まずは、簡単なGUIアプリが表示できるか確認するため、xclockというアナログ時計アプリをウィンドウで表示してみます。WSLの場合、デフォルトではインストールされてないのでインストールします。

インストールできたらまず実行してみますが、エラーになって起動しないと思います。

> sudo apt install x11-apps
Error: Can't open display: localhost:0.0

今度はWin10側で、VcXsrvをインストールするとXLaunchというアプリがインストールされるので、これを実行します。

実行すると、設定ウィザードが表示されます。全部デフォルトでとりあえず良いです。

wlsgui008

wlsgui009

wlsgui005

wlsgui010

タスクトレイにアプリが常駐した状態になります。

wlsgui007

ここで、WSL側で先ほど失敗したxclockをもう一度実行してみます。今度は簡素な時計アプリが表示されるはずです。表示できれば、設定はOKだと思います。

> xclock

wlsgui011

-->