それマグで!

知識はカップより、マグでゆっくり頂きます。 takuya_1stのブログ

習慣に早くから配慮した者は、 おそらく人生の実りも大きい。

wsl で xming(vcxsrv) 経由で mpv を起動する。

wsl からXwindowのウインドウアプリを起動するには

WSLでウインドウを使うアプリ起動するには、WSLからX Window サーバーに接続すれば良い。

https://takuya-1st.hatenablog.jp/entry/2020/11/08/135059

殆どの場合は、これで動く

mpv は動かない

mpvopenGLが必要なのでそのままだとエラーになる。

大きく分けて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 を起動するときに、WindowsOpenGLを使うように指定しておく

"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

Windows

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 で起動する方法を追加。