X Server on Windows

WSL2が正式配布されたので,調子にのってXサーバもWindowsに上げて接続してみるので あった. AMDでもできるよ.

前書き

WSL2はHyper-vを使った仮想マシンと仮想NWでLinuxを運用する. Hyper-vとはいえ,Windows 10 Homeでも使えるのが嬉しい. ただ,Win 10 homeでは,Hyper-vのマネージャは使えないはずなので,凝った使い方を したい方はProを買って運用すべきだし,その時に必要な知識(仮想NWの構築管理など)は 他の記事を参照されたい.

この記事ではWin 10 homeでWSL2を使ってUbuntuを動かすための自分メモを公開するが, WSLとは接続形態が異なるためUbuntuとの接続には仮想NWが使われていることを理解して もらうため,この前書きを用意した.

参考文献

基本的に,参考文献を全部読めば,この記事はそのサブセットなので,この記事は 読まなくて良い. ただ,参考文献には選択肢の意味がはしょられているところがあるので,気になったら 読むと良い.

WSL2 導入

Windowsをアップデート

  • winver.exe を実行して,バージョンを確認
  • バージョンがが2004以上になってなかったら更新する.

仮想化を有効にする

BIOS/UEFIの仮想化機能はONにする. 機種依存なので省略.

Windowsの機能を有効化

  • appwiz.cpl (コントロールパネル→プログラムと機能,と開くのと同じ)
  • Windowsの機能の有効化または無効化
  • Linux用Windowsサブシステムをチェック
  • 仮想マシンプラットフォームをチェック
  • 再起動

WSL2をデフォで選択するように設定

  • powershellを管理者権限で実行
wsl --set-default-version 2

なんか,この時に「カーネル コンポーネントの更新」が必要とかエラーの出る人がいるらしいが,うちでは出なかったのでわからん.

ちなみに,今動いているWSLの一覧とバージョンを確認するには

wsl -l --verbose

新規ディストリのインストール

WSL時代にインストールしたディストリはVersion 1のままなんで,新たに入れるか入れなおす. 新しいディストリをデフォにするには,

wslconfig /setdefault <distribution name>

X Window サーバをWindowsに導入

どのXサーバを使うかは好み.この辺の記事を参照してみると良い. WSL上にXサーバをインストールしてGUIを実現する(VcXsrv編):Tech TIPS - @IT インストールはソフト依存なのではしょるが,多分,ハマりポイントはない.

使う上では,以下のことをちゃんと把握しておくこと.

X server
Windowsマシン(画面描画する側)
X client
Xサーバへ描画して欲しいウィンドウを転送するLinux側

xlaunchの設定

Xサーバを起動する設定を保存したものがxlaunchファイルというもの. 少なくとも,XmingとVcXsrvには付属している. で,こいつでのポイントはいくつかある.

  1. 起動形態
    • Multiplewindows: 各ウィンドウアプリケーションをWindows側でも独立したウィンドウとして描画する場合に利用する. 利点はWindowsのAlt+TabでX Windowアプリも切り替えできること. 欠点はXのデスクトップマネージャを丸ごと起動しようとすると動作が変になること.
    • Fullscreen: Xのデスクトップ(ルートウィンドウと言うらしい)をフルスクリーンで起動し, 各アプリはルートウィンドウ内に描画する場合に利用する. 利点はデスクトップを丸ごと持ってこれること. 欠点はXのアプリがWindows側からは区別されない(ルートウィンドウ1つのアプリとして見える)こと.
    • One window/One window without titlebar: ルートウィンドウをWindowsのウィンドウとして表示する.使いたい場面がないのでよくわからん.
  2. display number
    • 後工程で,WSL2のディストリ内でDISPLAY変数で指定するものなので,-1 (自動設定)ではなく,0以上の整数で指定する.こだわりがなければ0で.
  3. select how to start clients
    • Start no client: 自分でLinuxに接続しXを飛ばすコマンドを打つ場合はこれ. WSL2を使うと普通にインストールしただけではsshが通らないので,これを使うのが楽. てことで,下2つを選ぶ場合の設定は解説しない.
    • Start a program: サーバがリモートにある場合などに,ログインターミナルを自動で起こしたい場合はこれ
    • Open session via XDMCP: ログインウィンドウを飛ばしたい場合はこれ. Xクライアント(Linuxマシン)側のログインマネージャの設定が面倒くさいので,あまりオススメはしないが,普段使いのLinuxサーバがあって同じように使いたい時にはこれを使ったりする.
  4. Disable Access Control
    • 今回,これでアクセスコントロールをしないようにする (他の端末からのアクセスを受け付けられるようにする) xhostとかでクライアントのIPアドレスを指定する方がセキュアだと思うが,うまくいかないという記事も多くあるので,とりあえずこれを使ってみる. Xサーバのバージョンによっては付属のxlaunchにこのオプションがない場合があり,その時は-acをAdditional option for Xserverにつける

Save Configurationで,設定を保存したxlaunchファイルを保存. 完了を押すと,その設定でXがいきなし起動するので,既にXを起動してないか確認して から完了すること.

ディストリ内の設定

上の作業でXサーバを設定して起動しておくこと.

ディスプレイを指定する

WSL2の仮想マシンからは,ホストのXサーバの,仮想NW内のアドレスは,以下のコマンドで抜けるらしい. nameserverになってるのね.

export DISPLAY=$(cat /etc/resolv.conf | grep nameserver | awk '{print $2}'):0.0

GUIアプリをインストールして動作させてみる

ディストリ内のX環境の構築は,最小(xeyesだけ動かすお試し版)の場合は

sudo apt install x11-apps

デスクトップ環境を入れたい場合は,ubuntu-hogehoge-desktopを入れるのが簡単. 私はubuntu-mate-desktopをよく使う

で,実行.

sudo service x11-common start
sudo service dbus start
xeyes

こんなエラーが出ると思うので,

libGL error: No matching fbConfigs or visuals found
libGL error: failed to load driver: swrast

この設定で回避.

export LIBGL_ALWAYS_INDIRECT=1

ディスプレイ設定と合わせて,使っているshellの設定ファイルに書き込んでおくのが良いのでは. 私の場合はzshなんで,.zshenvに設定した. .profileは,(.zprofileも) zshなためか読み込んでくれなかった. この辺りの最初だけ読み込まれるスクリプトは,WSLの場合最初のログインがどのタイミングかよく分からないので,あまり期待しない方が良いかも. (powershellでwsl -l -vすればわかるが,ウィンドウを全て閉じてもubuntuは動いている)

comments powered by Disqus