One more follow-up since @Trotsky mentioned intel_gpu_top and vainfo.
I would not treat intel_gpu_top as the source of truth for the B50 right now. On my setup, intel_gpu_top sees the card as card1, but engine monitoring is not reliable with the B50/xe path yet. That is why I was validating the actual workload through DRM clients instead.
For me, the better checks were:
ls -l /dev/dri
Confirm which render node is the B50. In my case:
Intel UHD 770 iGPU -> /dev/dri/renderD128
Intel Arc Pro B50 / xe -> /dev/dri/renderD129
Then test the B50 directly instead of letting tools auto-pick the wrong device:
vainfo --display drm --device /dev/dri/renderD129
The XDG_RUNTIME_DIR is invalid or not set and can't connect to X server messages are not necessarily fatal by themselves on a headless server. The important part is whether it successfully falls through to DRM and loads the driver for the render node. If it never gets a valid DRM result, then it is a real problem.
For FFmpeg/QSV testing, the key for me was explicitly pinning the B50:
ffmpeg \
-qsv_device /dev/dri/renderD129 \
-hwaccel qsv \
-hwaccel_output_format qsv \
-i input.mkv \
-c:v hevc_qsv \
-global_quality 23 \
-look_ahead 1 \
-c:a copy \
output.mkv
While that is running, I checked the kernel DRM client list:
cat /sys/kernel/debug/dri/1/clients
On my system, dri/1 corresponds to the B50. If the running ffmpeg process shows up there, that is much better evidence than intel_gpu_top right now.
For Jellyfin specifically, I suspect the issue is that Jellyfin is either:
- not being given the right render node,
- defaulting to the iGPU,
- trying VAAPI first instead of QSV,
- or using bundled FFmpeg/libva behavior that does not line up cleanly with the B50/xe path yet.
If Jellyfin exposes a QSV device field, I would try setting it explicitly to:
/dev/dri/renderD129
If it only works through VAAPI, then I would test VAAPI separately with:
vainfo --display drm --device /dev/dri/renderD129
But for my Tdarr testing, QSV/oneVPL was the winning path, not VAAPI. The main lesson from my setup is: do not trust auto-detection with both an Intel iGPU and a B50 installed. Pin the render node directly and then validate by checking which DRM device the active process is attached to.