【时间】2026 年 9 月 25 号晚上,Moonlight 弹窗
Flatpak 版 Moonlight 启动时弹一个对话框,解析 .qm 翻译文件后确认原文是:“Moonlight 未检测到有效的硬件加速视频解码器。在此配置中,你的流性能可能会严重下降。”
日志里有两条关键信息:
Vulkan rendering device chosen: Intel(R) Arc(tm) A380 Graphics (DG2)— 渲染器选到了 A380Failed setup for format vulkan: hwaccel initialisation returned error— FFmpeg 的 Vulkan 硬件解码初始化失败,回退到yuv420p软解
问题很明确:客户端硬件解码没跑起来。
坑:三层叠加
第一层:libva 找错路径。 沙箱内 libva 在 Debian 路径 /usr/lib/x86_64-linux-gnu/dri/ 找 VAAPI 驱动,但 Fedora 的 GL extra runtime 把驱动放在 /usr/lib64/dri/。路径不匹配 → Failed to initialize VAAPI。
第二层:libva ABI 版本不匹配。 把宿主 iHD 驱动指向沙箱后,报 __vaDriverInit_1_0 符号缺失。对比两边导出符号:宿主 iHD 导出 __vaDriverInit_1_23(libva 2.23 构建),沙箱内 libva 是 2.22。ABI 不匹配。
第三层:Fedora 默认 iHD 是阉割版。 沙箱内 vainfo 显示驱动版本 26.2.4,但 H264/HEVC 解码 profile 全部缺失。宿主有两个 iHD:/usr/lib64/dri/iHD_drv_video.so 是 Fedora 阉割版 26.2.4(无 H264/HEVC 解码),完整版 26.1.5 在 /usr/lib64/dri-nonfree/。
修复
打包宿主 libva 2.23 + 完整版 iHD 26.1.5 + libigdgmm 到 app 数据目录,写 flatpak override 让沙箱加载 bundle 里的驱动而不是宿主阉割版。验证:沙箱内 vainfo 显示完整 profile(H264/HEVC/AV1 解码都在),Moonlight 流媒体走 VAAPI 成功。
# override 核心:把 bundle 里的驱动路径指向沙箱可见位置
flatpak override --user com.moonlight-stream.moonlight \
--env=VA_DRIVERS_PATH=/app/lib/dri \
--filesystem=~/.local/share/flatpak/app/com.moonlight-stream.moonlight经验
- Flatpak 沙箱里 libva 只认 Debian 路径,Fedora 的 GL extra runtime 是 Debian 布局但驱动在 Fedora 路径——两层路径都找不到。
- 宿主 iHD 和沙箱 libva 的版本必须匹配(2.22 和 2.23 的 ABI 不兼容),不能只指驱动文件。
- Fedora 的
/usr/lib64/dri/iHD_drv_video.so是阉割版,完整版在/usr/lib64/dri-nonfree/。做 bundle 时必须指向非 free 版本。
🎵 Listening companion