← 返回首页

NVIDIA Blackwell + Wayland 上 Linux Android 模拟器全部踩雷:AVD/Waydroid/scrcpy/Genymotion 的根因报告

2026-05-27 · LinuxNVIDIAWaylandAndroidBlackwellUbuntu 26.04

环境: Ubuntu 26.04 Resolute Raccoon,GNOME 50 Wayland session,kernel 7.0.0-15-generic,NVIDIA RTX Pro 6000 Blackwell Workstation Edition + AMD Ryzen 9 9950X(集成 Granite Ridge iGPU),nvidia-driver-595-open,显示器 1.67x 分数缩放,167% scale。

本来只是想在工作站上装个全民 K 歌(选 Android 平板版界面大、伴奏库全)。一天下来试了主流的四种 Android-on-Linux 路径——AVD、Waydroid、scrcpy、Genymotion——全部失败,中间 5 次硬重启。问题不是任一工具写得烂,而是底下 NVIDIA Blackwell + Wayland 这条路目前整体不稳。这篇把各条路怎么死的、上游 bug 报告链接、以及最终能用的退路都记下来,避免后来人重蹈。

TL;DR

方案失败模式关键症状
Android Studio AVD(独立 chrome)Qt 工具栏按钮无反应鼠标点击有动画但 sendKey 不触发,扩展控制变灰
Waydroid启动后无任何窗口出现HWC hwcomposer.waydroid.sohwc_wayland_thread() 主动 abort
scrcpy(USB/UHID/AOA)锁死内核两次镜像窗口正常,运行几分钟整机失去响应,只能按 reset
Genymotion 3.10(自带 QEMU)黑屏 + 锁死内核一次Player 窗口出来但全黑,VM 内 audio 正常,几分钟后整机挂

共同根因:NVIDIA Blackwell 桌面 Linux 驱动栈 + Wayland 整套生态目前处在过渡期——开源内核模块(nvidia-open)+ 闭源用户态 EGL + 比较新的 kernel 7.0 + 分数缩放,任何持续运行 GPU 的桌面应用都可能踩到 NVIDIA 自己也承认的回归 bug。

避坑:真要跑 Android 的事直接用真手机或者云手机。本机这条路目前不可达。


路径 1:Android Studio AVD chrome 按钮失灵

正常装 SDK + cmdline-tools + sdkmanager + 创建 AVD 都顺利(KVM 用得上,Android 15 系统镜像 boot 也快),问题是 emulator 那个 Qt chrome 窗口出来后:

抓 verbose 日志能看到一行很关键的 warning:

The emulator now requires a signed jwt token for gRPC access!
Use the -grpc flag if you really want an open unprotected grpc port

emulator 36.5.x 强制 gRPC + JWT 鉴权,而 /run/user/$UID/avd/running/.../jwks/*/active.jwk 是空的 {"keys": []}——独立模式下没人写公钥进去,所以所有 UI→qemu 的 gRPC 调用都被拒签。但加 -grpc 8554 关掉鉴权后按钮还是不响应——说明独立 UI 的工具栏 button click 根本不走 gRPC,signal/slot 在 mutter Wayland 上根本没传到 slot。

事实匹配 GNOME mutter issue #3543 (“Android emulator not responding with popup dialog on Wayland session but works perfectly on X11 session”)和 Pop!_OS Cosmic #2830 (“Android Emulator shows gray screen and detached controls”)——这是 Wayland 合成器跟 Android emulator 的多窗口模型不兼容,toolbar 在 Wayland 下变成 detached top-level window,事件路由就断了。

ArchWiki 上 xfwm4 那条工作流(改 focus model 为 follow mouse)在 mutter 上没用——mutter 没那个开关。

试了 36.5.11 stable、36.6.10 beta、37.1.1 canary 全一样。唯一已知能修的姿势是登 X11 session

路径 2:Waydroid 启动后无窗口

Ubuntu 26.04 codename resolute 在 Waydroid 官方仓库白名单里,装的是 1.6.2 + LXC 6:

curl https://repo.waydro.id  # 写入 /etc/apt/sources.list.d/waydroid.list
sudo apt install waydroid
sudo waydroid init  # 下 Lineage 20 (Android 13) system+vendor
sudo systemctl enable --now waydroid-container
waydroid session start
waydroid show-full-ui  # 这里应该弹窗口,实际什么都不出

容器、session、binderfs、网络全 OK,adb 进 container 也通,但没有任何窗口。在 alt+tab 里也找不到。

挖 logcat 看到 SF 在喷:

HWComposer: presentAndGetReleaseFences: present failed for display 0: NoResources (6)
HwcComposer: executeCommands failed because of Status(EX_TRANSACTION_FAILED): 'DEAD_OBJECT'

getprop ro.hardware.gralloc = minigbm_gbm_mesa——Android side 用 minigbm 调 Mesa 的 libgbm 来分配显示 buffer。再看 tombstone:

backtrace:
  #00 abort+191 (libc.so)
  #01 hwc_wayland_thread(void*)+95 (/vendor/lib64/hw/hwcomposer.waydroid.so)

Waydroid 自己写的 HWC 在 wayland 线程里主动 abort。这是已知的"跨 GPU dmabuf 不互通"症状:

minigbm 没有 gbm_nvidia 后端,Waydroid system.img 又把 gralloc HAL 编死成 minigbm_gbm_mesa,运行时不能改。理论上能救的 NVK + nouveau 桌面切换在 Blackwell 上还不成熟,等于死路。

更细的展开见 Waydroid 上游 issue tracker 里关于 NVIDIA proprietary driver 的若干长期 open 票。

路径 3:scrcpy 在 HyperOS 3 上的双重坑 + 锁机

apt install scrcpy 装 3.3.4,小米 17(HyperOS 3 中国 ROM,Android 16)开 USB 调试插上去,scrcpy 一启:镜像出来,音频通,但鼠标键盘任何操作都被吃掉

直接 adb shell input keyevent 也能复现:

java.lang.SecurityException: Injecting input events requires the caller
  (or the source of the instrumentation, if any) to have the INJECT_EVENTS permission.

HyperOS 在 InputManagerService 里把 ADB shell 的 INJECT_EVENTS 权限单独锁了,需要进开发者选项打开"USB 调试(安全设置)"。这条开关有几个隐含前提:

开了"USB 调试(安全设置)"+ 拔插重连后仍然 SecurityException——HyperOS 3 这条开关在中国 ROM 上行为还不一致。

scrcpy 有个不走 ADB 注入的 fallback:UHID(--keyboard=uhid --mouse=uhid),它通过 /dev/uhid 注册成虚拟 USB HID 给手机,手机当外接键鼠用,完全绕过 INJECT_EVENTS。shell uid 在 3011(uhid) 组里,这条路通。

输入工作了,但坐标偏移——1.67x 分数缩放下,scrcpy 走 SDL 在 XWayland 上拿到的窗口坐标和实际像素位置不一致,UHID 模式下绝对坐标翻译错乱。SDL_HINT_VIDEO_HIGHDPI_DISABLED=1 没用,换 --mouse=aoa 也没用——AOA 也是 SDL 拿坐标,同一层问题。

最致命的:尝试 SDL_VIDEODRIVER=wayland 让 SDL 走原生 Wayland(理论上能正确处理分数缩放)——整机锁死,必须按 reset 键。第二次试 --mouse=aoa 跑了两分钟,又锁死一次,又按 reset。

这个症状(scrcpy 一类 GL/视频解码窗口在 NVIDIA Wayland 上跑一会儿就锁机)在 NVIDIA 开发者论坛能搜到多份 ticket,见后面"根因"章节。

路径 4:Genymotion 3.10 自带 QEMU,黑屏 + 锁机

Genymotion Desktop 3.10 已经不依赖 VirtualBox,自带 QEMU 9.2 + 自己的 Qt5 player + KVM 加速。装好后选 Nexus 10 启动:

挖日志看到两个事:

第一,Genymotion 的 CPUID 解析在 Zen 5 上是坏的:

[VMTools] Chipset: "AuthenticAMD"
[VMTools] CPUID 0x80000001 (AMD): ECX= "7ed8320b"
[VMTools] VMX/SVM CPU availability: false

但实际系统侧 cpuid 工具直接读拿到的是 0x75c237ff(bit 2 = 1,SVM ✓),kvm-ok 也确认 KVM 可用,/proc/cpuinfo 里 svm flag 在。Genymotion 自己读 CPUID 拿到了一个不对的值——9950X(Zen 5)这一代 Genymotion 还没适配。

但这是性能问题(退到纯 CPU emulation 慢),不能解释黑屏——慢只会让画面更新慢,不会让画面完全不出。

第二,看 QEMU 的实际命令行:

-nographic -vga std

QEMU 起的时候用 -nographic(没有自己的显示后端),-vga std(给 VM 一个标准 VGA 设备)。Genymotion player 通过 QMP socket(-qmp tcp:localhost:23555)和 QEMU 通信,自己渲染 VM 屏幕。这条路在 NVIDIA Wayland 上画面通道断了——player 用 Qt OpenGL widget 显示帧,Qt5 在 NVIDIA Blackwell 闭源 EGL 上初始化 GL context 时静默失败,所以窗口黑。Audio 走的是独立的 PulseAudio 通道,跟显示无关,所以 click 音效照常。

跑大约几分钟后,整机又锁死一次,reset

这时已经 reset 第 5 次。停手。

共同根因:NVIDIA Blackwell + Wayland 桌面驱动栈

四个工具的失败模式表面看完全不一样,挖到底都聚到同一组上游 bug。

nvidia-driver-595-open 强制——Blackwell 没闭源内核模块

老姿势 nvidia-driver-XXX(闭源内核模块).ko + 闭源用户态从 2022 年开始分裂:NVIDIA 把 GPU 大部分管理逻辑搬进 GPU 内部 GSP 协处理器(跑闭源签名固件),内核模块退化成"传消息给 GSP"的薄壳——这一壳就能开源了。

所以 Ubuntu 的 ubuntu-drivers list 在 Blackwell 卡上只显示 -open 一个选项,不是 Canonical 限制,是 NVIDIA 上游就不做了

注意"open driver"开的是内核模块那一壳,用户态 libnvidia-egl-* / libnvidia-glcore / Vulkan / CUDA 这些 .so 依然全闭源——所以今天踩的所有 Wayland EGL 锁机,即使能装上闭源内核模块也救不了。

多份上游 ticket 验证今天的现象

NVIDIA 开发者论坛和 GitHub 上的相关 issue,都是和今天一样的 Blackwell + Wayland + 长跑 GPU 任务锁机:

也就是说:Blackwell 桌面 Linux 整个状态今天就是这个样子,跟 Ubuntu/Fedora/RHEL 哪个 distro 关系不大,跟具体型号(5060 Ti / 5090 / Pro 6000)关系不大,核心是 nvidia-open + Wayland + 长 GPU 任务这个组合现在不稳。

可行的避坑路径

按改动成本从小到大:

路径改动效果
接受现状,需要时切 X11 sessionGDM 齿轮 → “Ubuntu on Xorg”mutter 路由问题、Wayland EGL 锁机全绕开;代价:X11 上分数缩放是 global,体验差一档
降内核到 6.17apt 装 linux-generic-6.17 或 HWE 锁版至少修掉 GitHub #1117 那条 s2idle/runtime hang
桌面避免长跑 GPU 应用不开 Android 模拟器/游戏/视频解码窗短期 workaround,你已经在做
等驱动迭代NVIDIA 600/610 + Mesa 27+估计 6-12 个月,参考 Ada 成熟周期
换硬件桌面工作站换 AMD/Intel 集显主显终极方案,Blackwell 留做计算加速卡

**对今天最初的需求(跑全民 K 歌)**最实在:

  1. 直接用真手机原生屏唱——这才是 app 设计场景
  2. 云手机服务(红手指 / 多多云 / 网易 UU 云手机)——浏览器开 tab 就用,跟本地图形栈零接触,~25-50 元/月
  3. 投屏到电视/外接显示器,信号不经过 Linux 桌面

后续

NVIDIA Blackwell 在桌面 Linux 上的成熟,业内估计还要 6-12 个月——参考 Ada(RTX 40,2022)从首发到 Wayland 稳定也走了一年半。短期内这台机器的定位明确:

这一天主要的收获是把上面这张表搞清楚——以后类似需求来,直接看一眼就知道走哪条路、不要在哪条路上浪费时间。