光标不可见、窗口黑屏、分辨率异常排查
问题一:光标不可见
现象
QEMU 窗口里 Guest 正常显示内容,但鼠标光标看不到,或光标移动错位。
原因
QEMU 的 virtio-gpu 默认不绘制动光标,把光标合成交给 Guest。某些 Guest OS 上(特别是老 Linux、某些定制系统)光标合成不工作。
修复
方案一:让 QEMU 自己绘光标
# 加 show-cursor 参数
qemu-system-x86_64 \
-display default,show-cursor=on \
...
方案二:用 qxl 显卡
qemu-system-x86_64 \
-vga qxl \
-device qxl-vga \
...
qxl 比 virtio-gpu 更传统但在老 Guest 上兼容性更好。
方案三:加 USB 平板设备
qemu-system-x86_64 \
-usb -device usb-tablet \
...
USB 平板设备让 Guest 把鼠标当绝对坐标输入,光标定位更准。
问题二:窗口黑屏或花屏
现象
窗口全黑、只有鼠标光标、或显示花屏/马赛克。
可能原因与修复
| 原因 | 修复 |
|---|---|
| Guest 显示驱动和显卡不匹配 | 换显卡:virtio-gpu → qxl → cirrus 逐个试 |
| Guest 分辨率超出 QEMU 窗口限制 | 在 Guest 里降低分辨率 |
| GPU 内存不足 | -device virtio-gpu-pci,virgl=on,max_outputs=4 |
| Host GPU 驱动问题 | 更新宿主显卡驱动,特别是 NVIDIA |
| Wayland 桌面环境 | QEMU 在 Wayland 上有时有显示问题,改用 X11 |
推荐配置组合
# 通用稳定配置(virtio + tablet + 多显示器)
qemu-system-x86_64 \
-device virtio-gpu-pci,max_outputs=2 \
-device virtio-tablet-pci \
-vga none \
...
# 传统兼容配置
qemu-system-x86_64 \
-vga qxl \
-device qxl-vga \
-device virtio-tablet-pci \
...
# 最小化配置(兼容性最好)
qemu-system-x86_64 \
-vga cirrus \
-usb -device usb-tablet \
...
问题三:分辨率太低或不能调高
现象
Guest 里最高只有 800x600 或 1024x768。
修复
Linux Guest
# 查看可用分辨率
xrandr
# 设定分辨率(需要显示驱动支持)
xrandr --output Virtual-0 --mode 1920x1080
如果 xrandr 里没有高分辨率选项,说明显卡驱动没装好。virtio-gpu 需要 Guest Linux 内核有 CONFIG_DRM_VIRTIO_GPU。
Windows Guest
安装 virtio-win 驱动后,在设备管理器里更新显卡驱动为 VirtIO GPU 驱动。安装后分辨率选项自动增加。
QEMU 侧指定初始分辨率
qemu-system-x86_64 \
-device virtio-gpu-pci,edid=on,xres=1920,yres=1080 \
-vga none \
...
问题四:窗口太小或太大
调整 QEMU 窗口尺寸:
- 拖动窗口边缘:QEMU 支持窗口 resize(如果 Guest 显卡驱动支持)
- Ctrl+Alt++:放大
- Ctrl+Alt+-:缩小
- Ctrl+Alt+F:全屏切换
问题五:SPICE vs VNC vs 本地窗口
QEMU 默认弹出本地 GTK/Cocoa 窗口。也可以用 SPICE 或 VNC 协议远程访问:
SPICE(推荐,Linux 上最好)
# 启动时开 SPICE server
qemu-system-x86_64 \
-spice port=5930,addr=0.0.0.0,disable-ticketing=on \
-device qxl-vga \
...
# 远程用 virt-viewer 连
virt-viewer spice://host:5930
SPICE 支持剪贴板、音频、USB 重定向、多显示器。比 VNC 好得多。
VNC
qemu-system-x86_64 -vnc :1 ...
# 端口是 5900 + 编号,这里是 5901
# 远程用任意 VNC client 连
nographic 模式
服务器场景常用 -nographic,所有输出走串口终端:
qemu-system-x86_64 \
-nographic \
-append "console=ttyS0" \
...
适合无 GUI 的 Linux Guest。
问题六:Ctrl+Alt+Del 怎么发
在 QEMU 图形窗口里按 Ctrl+Alt 会被 QEMU 自己拦截(组合键给 QEMU)。发送 Ctrl+Alt+Del 给 Guest:
- 在 QEMU 窗口的菜单里找「Send Keys → Ctrl+Alt+Del」
- 或用
Ctrl+Alt+1切到 Monitor,输入:
sendkey ctrl-alt-delete
下一步
显示问题搞定了?去 网络不通 / SSH 连不上 看看网络相关的问题。