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導入|WinアップデートからWSL2を既定にするまでのスクショ - Qiita
- WSL2にUbuntu Desktop環境をインストールしてみた | AsTechLog
- WSL2+Ubuntu 20.04でGUIアプリを動かす | AsTechLog
- WSL上にXサーバをインストールしてGUIを実現する(VcXsrv編):Tech TIPS - @IT
↑このタイトルはおかしい(XサーバはWindowsにインストールする)
WSL2 導入
Windowsをアップデート
- winver.exe を実行して,バージョンを確認
- バージョンがが2004以上になってなかったら更新する.
- Windows 10 のダウンロード
- 「今すぐアップデート」で落ちてきた実行ファイルを実行する
仮想化を有効にする
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には付属している. で,こいつでのポイントはいくつかある.
- 起動形態
- Multiplewindows: 各ウィンドウアプリケーションをWindows側でも独立したウィンドウとして描画する場合に利用する. 利点はWindowsのAlt+TabでX Windowアプリも切り替えできること. 欠点はXのデスクトップマネージャを丸ごと起動しようとすると動作が変になること.
- Fullscreen: Xのデスクトップ(ルートウィンドウと言うらしい)をフルスクリーンで起動し, 各アプリはルートウィンドウ内に描画する場合に利用する. 利点はデスクトップを丸ごと持ってこれること. 欠点はXのアプリがWindows側からは区別されない(ルートウィンドウ1つのアプリとして見える)こと.
- One window/One window without titlebar: ルートウィンドウをWindowsのウィンドウとして表示する.使いたい場面がないのでよくわからん.
- display number
- 後工程で,WSL2のディストリ内でDISPLAY変数で指定するものなので,-1 (自動設定)ではなく,0以上の整数で指定する.こだわりがなければ0で.
- select how to start clients
- Start no client: 自分でLinuxに接続しXを飛ばすコマンドを打つ場合はこれ. WSL2を使うと普通にインストールしただけではsshが通らないので,これを使うのが楽. てことで,下2つを選ぶ場合の設定は解説しない.
- Start a program: サーバがリモートにある場合などに,ログインターミナルを自動で起こしたい場合はこれ
- Open session via XDMCP: ログインウィンドウを飛ばしたい場合はこれ. Xクライアント(Linuxマシン)側のログインマネージャの設定が面倒くさいので,あまりオススメはしないが,普段使いのLinuxサーバがあって同じように使いたい時にはこれを使ったりする.
- Disable Access Control
- 今回,これでアクセスコントロールをしないようにする (他の端末からのアクセスを受け付けられるようにする)
xhostとかでクライアントのIPアドレスを指定する方がセキュアだと思うが,うまくいかないという記事も多くあるので,とりあえずこれを使ってみる.
Xサーバのバージョンによっては付属のxlaunchにこのオプションがない場合があり,その時は
-ac
をAdditional option for Xserverにつける
- 今回,これでアクセスコントロールをしないようにする (他の端末からのアクセスを受け付けられるようにする)
xhostとかでクライアントのIPアドレスを指定する方がセキュアだと思うが,うまくいかないという記事も多くあるので,とりあえずこれを使ってみる.
Xサーバのバージョンによっては付属のxlaunchにこのオプションがない場合があり,その時は
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は動いている)