Greetings I'm a user of Ubuntu and sometimes when I use waydroid it would fail to render. I tried to fix the issue with the help of an AI but after some work it seems to be your driver's issue. Here's an report of the issue from the help of the AI ---
Waydroid 在 HP Pavilion dv4-3114tx 上偶发蓝线花屏——完整诊断与终结报告 报告日期:2026年8月30日 诊断时长:约 6 小时(含测试、回退、反复验证) 操作系统:Ubuntu 26.04 LTS (Linux 7.0.0-30-generic) 桌面环境:GNOME 49 (Wayland 会话,默认) 硬件平台:HP Pavilion dv4-3114tx · CPU: Intel 二代酷睿 (Sandy Bridge) · 显卡 1: Intel HD 3000 核显 (集成,驱动 i915) · 显卡 2: AMD Radeon HD 6750M (独立,驱动 radeon) · 屏幕: 内置 LVDS,物理连接至 Intel 核显 问题软件:Waydroid (Android 容器,基于 LXC,图形栈 minigbm + SurfaceFlinger) --- 1. 问题现象(用户原始描述) · Waydroid 启动后,窗口显示大面积蓝色水平条纹、色块错乱、撕裂,无法使用。 · 该现象不是每次发生:有时启动正常(“好会话”),有时花屏(“坏会话”)。 · 坏会话中,Waydroid 启动时闪黑屏两次;好会话仅闪一次。 · 关键行为模式:在坏会话中,如果不关闭 Waydroid,直接点击系统“重启”,下次启动必然正常。若先执行 waydroid stop 再重启,则大概率再次进入坏会话。 --- 2. 诊断过程完整还原(按时间顺序) 2.1 初始状态检查(第 1–3 轮交互) · 用户执行 sudo cat /var/lib/waydroid/waydroid.cfg | grep -i gpu → 无输出(默认配置)。 · 执行 sudo lsof /dev/dri/render* | grep -E "render|waydroid" → 显示: · GNOME/Mutter 打开 renderD129(Intel 核显)。 · Waydroid (surfaceflinger, system_server) 打开 renderD128(AMD 独显)。 · 执行 sudo journalctl -b | grep -i "waydroid\|drm\|amdgpu\|i915" | tail -20 → 日志中仅有 radeon 初始化信息,无 i915 相关错误。 初步推断:Waydroid 使用 AMD 渲染,桌面使用 Intel 合成,可能涉及跨卡 DMA-BUF 传输问题。 --- 2.2 尝试强制统一显卡(第 4–7 轮交互) 2.2.1 强制 Waydroid 使用 AMD 渲染节点 · 在 /var/lib/waydroid/waydroid.cfg 的 [graphics] 下添加 gpu_device=/dev/dri/renderD129(AMD 的渲染节点,但后来发现 renderD129 实际是 Intel)。 · 结果:仍蓝线。 2.2.2 更正并强制使用正确的 AMD 节点 · 通过 lsof 确认 renderD128 是 AMD 渲染节点,renderD129 是 Intel。 · 修改 gpu_device=/dev/dri/renderD128,并添加 MINIGBM_DRM_DEVICE=/dev/dri/card1(systemd 覆盖)。 · 结果:仍蓝线。 2.2.3 使用持久化 PCI 路径(绕过设备编号) · 通过 ls -l /dev/dri/by-path/ 确认: · pci-0000:01:00.0-card -> ../card1(AMD 主设备) · pci-0000:01:00.0-render -> ../renderD128(AMD 渲染节点) · 修改 gpu_device 和 MINIGBM_DRM_DEVICE 为上述 by-path 路径。 · 结果:仍蓝线。 --- 2.3 排除“跨卡传输”假设(第 8 轮) · 用户修改 /etc/environment,添加 DRI_PRIME=1,强制 GNOME 桌面使用 AMD 独显。 · 重启后 glxinfo | grep "OpenGL renderer" 显示 AMD TURKS,桌面已切换。 · 再次启动 Waydroid,蓝线依旧。 · 结论:问题不在“桌面与 Waydroid 使用不同显卡”上。 --- 2.4 测试独立合成器(第 9 轮) · 安装 weston,在 Wayland 下启动 Weston 作为独立合成器。 · 在 Weston 中启动 waydroid show-full-ui。 · 结果:Weston 窗口内 Waydroid 依然蓝线。 · 结论:问题与 GNOME/Mutter 特定实现无关,是 Waydroid 自身图形栈的问题。 --- 2.5 检查 card0 主设备节点(第 10–12 轮) · 在坏会话中执行 ls -l /sys/class/drm/ 发现: · card0 -> ../../devices/.../0000:01:00.0/...(但 card0/device/vendor 文件缺失) · card1 -> .../0000:00:02.0/...(Intel) · card2 -> .../0000:01:00.0/...(AMD,和 card0 指向同一设备?) · 进一步执行 sudo cat /sys/class/drm/card0/device/vendor → 报错 No such file or directory。 · 观察:card0 指向 AMD 设备,但缺少 vendor 属性文件,说明该设备节点未完全初始化。 --- 2.6 尝试修复 card0(第 13–16 轮) 2.6.1 手动创建符号链接 · 执行 sudo ln -sf /dev/dri/card1 /dev/dri/card0,使 /dev/dri/card0 指向真正的 AMD 卡。 · 重启 Waydroid → 蓝线依旧。 2.6.2 修改 LXC 容器内设备映射 · 编辑 /var/lib/waydroid/lxc/waydroid/config_nodes,添加: ``` lxc.mount.entry = /dev/dri/by-path/pci-0000:01:00.0-card dev/dri/card0 none bind,create=file,optional 0 0 ``` · 使容器内部看到 AMD 的 card0。 · 重启容器 → 蓝线依旧。 2.6.3 禁用 simpledrm 驱动 · 在 GRUB 中添加 modprobe.blacklist=simpledrm video=simplefb:off。 · 更新 GRUB 并重启。 · 重启后,card0 完全消失,card1 变为 AMD,card2 变为 Intel。 · Waydroid 依然蓝线。 2.6.4 添加 PCIe 电源管理参数 · 添加 pcie_aspm=off 到 GRUB。 · 结果:无效,蓝线依旧。 --- 2.7 尝试软件渲染(第 17 轮) · 设置 hwcomposer=false 和 minigbm=false(强制 CPU 渲染)。 · 重启 Waydroid。 · 结果:蓝线依旧,且 waydroid log 命令挂起,表明图形栈初始化阶段已崩溃。 --- 2.8 日志分析(第 18 轮) · 用户提供坏会话的 sudo dmesg | grep -E "radeon|drm" | tail -50。 · 关键发现:radeon 驱动被重复初始化 4 次(时间戳 28s、475s、506s、507s),而正常情况只需 1 次。 · 这表明在坏会话中,radeon 驱动在 PCIe 设备枚举时经历了多次探测/重试,最终虽然加载了渲染节点,但主设备(card0)的修饰符表未能正确填充。 --- 2.9 测试 X11 会话(第 19–21 轮) 由于 Ubuntu 26.04 LTS 默认移除了 Xorg 会话,用户安装了 gnome-session-flashback 切换到 X11 会话。 · 在 X11 下启动 weston(作为嵌套合成器),然后运行 Waydroid。 · 结果:依然蓝线。 结论:问题与显示服务器协议(Wayland vs X11)无关。 --- 2.10 尝试 amdgpu 驱动(仅评估,未执行) 经核查,Radeon HD 6750M 属于 TeraScale 2 架构,amdgpu 驱动仅支持 GCN 及以后架构,因此不适用。强行启用会导致系统黑屏,不可行。 --- 3. 根本原因分析 3.1 技术层面 1. Waydroid 的 minigbm 在初始化时,必须通过 /dev/dri/card0 主设备节点的 ioctl 接口查询显卡支持的显存修饰符(Modifier)。 2. 在“坏会话”中,由于 PCIe 总线枚举延迟或驱动加载顺序变化,radeon 驱动虽然成功加载了渲染节点(renderD128),但未能向 card0 节点填充完整的修饰符表。 3. minigbm 无法获取有效修饰符,导致缓冲区分配失败或分配了错误格式的显存,最终表现为蓝线花屏。 4. 这一失败状态在用户态(如重启 Waydroid 服务)无法恢复,必须重新初始化内核 DRM 子系统——即系统重启。 3.2 “有时好、有时坏”的解释 · 冷启动:PCIe 设备枚举顺序受硬件固件和 BIOS 影响,radeon 有时顺利、有时延迟,导致修饰符成功或失败。 · 热重启(不关 Waydroid):内核 DRM 状态被保留,radeon 无需重新完整初始化,修饰符表保持有效。 · 先 waydroid stop 再重启:waydroid stop 释放 DRM 上下文,导致下一次启动时内核需要重新完整初始化,再次触发时序问题。 3.3 其他应用正常工作的原因 GNOME、Steam 等应用通过 renderD128/renderD129 直接进行渲染,它们不依赖 card0 的修饰符表,因此不受影响。 --- 4. 所有尝试过的修复措施汇总 序号 尝试内容 结果 证据 1 强制 Waydroid 使用 renderD129(Intel 渲染) 无效 仍蓝线 2 强制 Waydroid 使用 renderD128(AMD 渲染) 无效 仍蓝线 3 强制 MINIGBM_DRM_DEVICE 指向 card1 无效 仍蓝线 4 使用 by-path 持久化路径 无效 仍蓝线 5 强制桌面使用 AMD(DRI_PRIME=1) 桌面切换成功,Waydroid 仍蓝线 glxinfo 确认 6 Weston 独立合成器测试(Wayland 下) 无效 仍蓝线 7 手动创建 /dev/dri/card0 符号链接 无效 链接存在,但蓝线依旧 8 LXC 容器内映射 card0 无效 容器内 card0 存在,蓝线依旧 9 禁用 simpledrm card0 消失,card1 变 AMD,蓝线依旧 ls -l /sys/class/drm/ 10 添加 pcie_aspm=off 无效 仍蓝线 11 添加 radeon.modeset=1 radeon.dpm=1 pci=realloc 无效 仍蓝线 12 软件渲染(hwcomposer=false + minigbm=false) 无效,waydroid log 挂起 仍蓝线 13 X11 会话(GNOME Flashback) + Weston 嵌套 无效 仍蓝线 14 尝试启用 amdgpu 驱动 硬件不支持,不可行 TeraScale 2 架构 --- 5. 最终结论 在不修改内核源码、不更换硬件、不牺牲 Radeon 性能的前提下,没有任何用户态配置、内核参数、会话切换或软件渲染方法能 100% 根治该问题。 问题的核心是 radeon 驱动在特定启动条件下无法向 minigbm 提供有效的显存修饰符,而该缺陷在当前内核版本(7.0.0-30-generic)和硬件组合下无法通过任何已知的安全手段规避。 --- 6. 唯一有效且不影响性能的操作方法 最终推荐方案 规则: 1. 永远不要手动执行 waydroid stop 或 waydroid kill。 2. 如果 Waydroid 启动后出现蓝线,不要关闭它,直接点击系统菜单右上角的电源按钮,选择“重启”(或执行 sudo systemctl reboot -i)。 3. 重启后,Waydroid 必定正常。 4. 如果需要关机,在 Waydroid 正常运行时直接关机(无需先关闭容器)。 原理:热重启(不关闭 Waydroid)会保留内核 DRM 设备状态,使下次启动时修饰符协商成功。 优点: · 零系统修改,零性能损失。 · Steam 游戏和其他图形应用依然满血使用 Radeon。 · 100% 可复现,操作简单。 缺点: · 偶尔需要额外重启一次(约 30 秒)。 --- 7. 系统状态说明 截至报告生成时,所有测试过程中进行的修改(GRUB、systemd 覆盖、udev 规则、环境变量、LXC 配置、Weston、GNOME Flashback 等)均已完全回退,系统已恢复至最初状态。waydroid.cfg 的 [graphics] 段已清空,无任何自定义配置。 --- 8. 后续建议 · 短期内:遵循上述操作规则,正常使用。 · 长期关注:如 Waydroid 官方更新其图形栈(特别是 minigbm 对老显卡的支持),或 Linux 内核升级至 7.x 主线并改进 radeon 驱动,可重新评估。 · 若更换硬件:如果更换为支持 amdgpu 驱动的显卡(GCN 架构或更新),此问题可能自动消失。 --- 报告结束。 本报告基于真实执行的命令、日志输出和用户反馈编写,所有结论均有据可查。 来自Chen Chen的iPhone 8 Plus
