wsl からXwindowのウインドウアプリを起動するには
WSLでウインドウを使うアプリ起動するには、WSLからX Window サーバーに接続すれば良い。
https://takuya-1st.hatenablog.jp/entry/2020/11/08/135059
殆どの場合は、これで動く
mpv は動かない
mpv は openGLが必要なのでそのままだとエラーになる。
大きく分けて2つのエラーが出てくる
error: XDG_RUNTIME_DIR is invalid or not set in the environment. X Error of failed request: GLXUnsupportedPrivateRequest
- XDG_RUNTIME_DIR がない
- GLX が使えない
いかにエラーメッセージを残しておく。
[vo/gpu/x11] X11 error: BadRequest (invalid request code or no such operation) [vo/gpu/x11] Type: 0, display: 0x7fe33c003f80, resourceid: 5a, serial: 10 [vo/gpu/x11] Error code: 1, request code: 92, minor code: 19 [vo/gpu/opengl] Suspected software renderer or indirect context. [vo/gpu] VT_GETMODE failed: Inappropriate ioctl for device [vo/gpu/opengl] Failed to set up VT switcher. Terminal switching will be unavailable. [vo/gpu/opengl] Listing DRM devices with drmGetDevices failed! (No such file or directory) [vo/gpu/opengl] Failed to find a usable DRM primary node! [vo/gpu/opengl] Failed to create KMS. [vo/gpu-next/x11] X11 error: BadRequest (invalid request code or no such operation) [vo/gpu-next/x11] Type: 0, display: 0x7fe33c0d0820, resourceid: 5a, serial: 10 [vo/gpu-next/x11] Error code: 1, request code: 92, minor code: 19 [vo/gpu-next/opengl] Suspected software renderer or indirect context. [vo/gpu-next] Can't handle VT release - signal already used [vo/gpu-next/opengl] Failed to set up VT switcher. Terminal switching will be unavailable. [vo/gpu-next/opengl] Listing DRM devices with drmGetDevices failed! (No such file or directory) [vo/gpu-next/opengl] Failed to find a usable DRM primary node! [vo/gpu-next/opengl] Failed to create KMS. [vo/vdpau/x11] X11 error: BadRequest (invalid request code or no such operation) [vo/vdpau/x11] Type: 0, display: 0x7fe33c0d0820, resourceid: 5a, serial: 10 [vo/vdpau/x11] Error code: 1, request code: 92, minor code: 19 Failed to open VDPAU backend libvdpau_nvidia.so: cannot open shared object file: No such file or directory [vo/vdpau] Error when calling vdp_device_create_x11: 1 [vo/xv/x11] X11 error: BadRequest (invalid request code or no such operation) [vo/xv/x11] Type: 0, display: 0x7fe33c0d0820, resourceid: 5a, serial: 10 [vo/xv/x11] Error code: 1, request code: 92, minor code: 19 Xlib: extension "XVideo" missing on display "127.0.0.1:0.0". [vo/xv] Xv not supported by this X11 version/driver X Error of failed request: GLXUnsupportedPrivateRequest Major opcode of failed request: 143 (GLX) Minor opcode of failed request: 17 (X_GLXVendorPrivateWithReply) Serial number of failed request: 124 Current serial number in output stream: 124
対応 XDG_RUNTIME_DIR
XDG_RUNTIME_DIR が無いのであれば作れば良い。
export XDG_RUNTIME_DIR=/tmp/xdg-runtime-$USER mkdir -p $XDG_RUNTIME_DIR chmod 700 $XDG_RUNTIME_DIR
対応 OpenGL (GLX) をつけて起動
VcXsrv
を起動するときに、Windows のOpenGLを使うように指定しておく
"C:\Program Files\VcXsrv\vcxsrv.exe" :0 -multiwindow -clipboard -wgl
注意事項として、VcXsrv を使うこと。Xmingの場合は GL 関連のライブラリが含まれてないことがるので、Xmingのビルドとインストールを見直す必要がある。( -wgl
オプションがなかった )めんどうだったんだよね。VcXsrvなら動いたのでこっちを使うことにした。
次のように起動した
タスクトレイに常駐している
WScript(JScript)で起動する場合は、スペースがうざいが、次のようにする。
var ws = WScript.Createobject("WScript.Shell") ws.Run('\"C:/Program Files/VcXsrv/vcxsrv.exe\" :0 -multiwindow -clipboard -wgl',0)
mpv 起動
以上のことを終わらせると、mpv を起動することができた。
サウンド再生
ただ、まだサウンドがでてこない。
X Windowサーバーにあれこれ設定しても多分徒労なので、PulseAudio をネットワーク越しに使うことにする。
C:/Users/takuya/AppData/Roaming/PulseAudio/bin/pulseaudio.exe
以上で、MPVをWSLのコンソールから使うことができた。
まとめ
wsl で mpv をインストールして動画再生
## wsl 側 sudo apt update && sudo apt install mpv export DISPLAY=localhost:0.0 export XDG_RUNTIME_DIR=/tmp/xdg-runtime-$USER mkdir -p $XDG_RUNTIME_DIR chmod 700 $XDG_RUNTIME_DIR
choco install vcxsrv "C:\Program Files\VcXsrv\vcxsrv.exe" :0 -multiwindow -clipboard -wgl
再生開始
# wsl から mpv http://127.0.0.1/example/sample.mp4
サウンドに関しては、PulseAudioのインストールを参考に設定する。
これで、mpv をコマンドから扱えるので、mpv に関する調査をするのに、Ubuntuマシンを用意せずに済む。Windowsから行える。便利。
2024-08-09
WScript で起動する方法を追加。