qemu 中文文档 下载 App

光标不可见、窗口黑屏、分辨率异常排查

问题一:光标不可见

现象

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 窗口尺寸:

问题五: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:

  1. 在 QEMU 窗口的菜单里找「Send Keys → Ctrl+Alt+Del」
  2. 或用 Ctrl+Alt+1 切到 Monitor,输入:
sendkey ctrl-alt-delete

下一步

显示问题搞定了?去 网络不通 / SSH 连不上 看看网络相关的问题。