Windows 11 + WSL2(WSLg) で X11 アプリを動かすメモ(2023/02 時点ではおすすめしない!)

2021/12/27 時点では, Windows11 通常版(Build 22000.376. Insider preview 不要)で動きます!しかし利用はおすすめしません!

~~X11 ネイティブ(?)表示は Preview 段階のようですが, gnome-terminal など動かすのができて便利です.~~

なんか 22H2 にしたりとかだと NVIDIA では seg fault したりで, 

https://github.com/microsoft/wslg/issues/917

また, sleep/suspend から復帰するとだめだったりと,

https://github.com/microsoft/WSL/issues/4992

2023/02 時点では不都合多くてまともに使えなくなっているので, おすすめしないことにしました.

以下はログ用です. また, 最後のほうに work around 考えられるのを記載しました.

WSLg という名称らしい.

## セットアップ

特に X11 用に設定は不要です.
WSL2 インストールは他にたくさん記事ありますのでそちらを参照ください.

ドライバは WSLg 用を求められますが, 少なくとも 2022/09 時点では NVIDIA では標準のドライバで対応しているようです.

```
$ sudo apt install x11-apps
```

あとは普通に x11 アプリをうごかすだけです!
(Windows 側で VcXsrv などの X11 server のインストール不要)

![Screenshot from 2021-12-27 18-03-51.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/36275/3ecc6482-0d01-26aa-30c6-1877c2e584de.png)

voila!
(なんか透過している?)

VcXsrv などの設定(e.g. `DISPLAY` 変数など)が残っているとうまくうごかないでしょう.
DISPLAY 設定は `DISPLAY=:0` にしておく必要がありました(マルチモニタだと `:1` とかも使えるんじゃろか?)

## NVIDIA だと OpenGL, Vulkan 動かない可能性高い

https://github.com/microsoft/wslg/issues/715#issuecomment-1121153737

なんだかんだで NVIDIA driver だと不安定で OpenGL, Vulkan 動かないケースがあるようです.
著者も一時期動いていましたが, いろいろアップデートしたら動かなくなりました
(segmentation fault する)

WSL で OpenGL/Vulkan 開発はあきらめたほうがいいかも.


## OpenGL

とりあえず glxgears は動きました. 一応 OpenGL 3.x 動くっぽい(Mesa の D3D12 backend 使っている?)ようです.



OpenGL 4.x はだめでした.

https://github.com/microsoft/WSL/discussions/6154

また, X11 は使わずに直で描画しているっぽいようなので, `LIBGL_ALWAYS_INDIRECT=1` を指定するとうごきませんでした.


## CUDA 

CUDA も動きます(WSL 用 CUDA インストールすれば)ので, GPGPU して X11 で GUI 表示もできるでしょう!

### OptiX

OptiX は WSL CUDA driver が対応していないためか, 動きませんでした(`optixInit() failed` になる)
 

## Vulkan

最近(as of Dec 2022) Mesa(CPU) で vulkan が動くようにはなってきているようです.

また, GPU 対応もされつつあります.

https://github.com/microsoft/WSL/issues/7790#issuecomment-1102689544

ただまだ十分ではありません.

## Window manager

デフォルトの window manager の見た目よくない... 変えたい...(Enlightenment とか, Awesome(Tiled window manager)とか...)

https://github.com/microsoft/wslg/discussions/67
 
残念ながら現状ではできませんでした. :cry:
 
## アプリ

firefox(Ubuntu snap で入るやつ)はなぜか動きませんでした.

```
mkdir: cannot create directory '/run/user/1000': Permission denied
Error: cannot open display: :0  
```

snap + systemd 関連っぽい?

google chrome(`.deb` でいれるやつ) は動きました.


## 不都合

### systemd 入れると不都合ある

https://github.com/microsoft/wslg/issues/838

少なくとも Ubuntu 20.04 だと systemd 入れると X11 アプリ動かなくなるようです...

### mono とかいれると不都合あり

binfmt(Widows 側は `msrdc.exe` ?) + systemd がらみのようです.

https://github.com/microsoft/wslg/issues/917
https://github.com/microsoft/WSL/issues/9257#issuecomment-1345550170

### その他

wslg の git repo を見ましょう. ただ, あんまりまともな解決策は得られないですね...

https://github.com/microsoft/wslg

### 2023/02 時点での回避策

* sleep/suspend しない
  * wsld である程度いけるかも? https://github.com/nbdd0121/wsld
  * もしくは Windows 側で `wsl.exe --shutdown` して WSL 再起動すればいける.
* systemd は入れない(WSL で Docker とかしない. Docker 使いたいときは non systemd なやりかたを使う)
* snap(snapd)入れない
* mono 関連(dotnet Linux も?)を入れない
* Wine 関連入れない
  * binfmt とかが入ってややこしくなるっぽい 
* NVIDA GPU 使わない(CUDA 使いたい場合は GUI 出すのを諦めるか, Mesa Software renderer を使う)
  * `LIBGL_ALWAYS_SOFTWARE=1` 環境変数をセットする.
* GL は Software rendering + VcxSrv を使う
    * https://www.aise.ics.saitama-u.ac.jp/~gotoh/TroubleShootingAboutUbuntu2004OnWSL2.html
    * 画面が出ない場合は firewall 設定で許可しているか確認する
    * ただ font cache 毎回作ったりしているのか, vcxsrv だと X11 アプリ起動が遅かったりする