You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

KVM虚拟化Fedora37中Pillow ImageGrab.grab()报错OSError: error8求助

解决Fedora KVM虚拟机中Pillow ImageGrab.grab()报OSError: error 8的问题

错误原因分析

X11错误码8对应BadMatch,通常是虚拟环境中X服务器与截图接口不兼容、权限不足,或者默认使用Wayland而非Xorg导致的。

解决方案

1. 切换到Xorg会话

Fedora 37 Workstation默认使用Wayland,而Pillow的ImageGrab仅支持X11:

  • 登录界面点击右上角齿轮图标,选择GNOME on Xorg登录
  • 验证会话类型:运行echo $XDG_SESSION_TYPE,输出应为x11

2. 授予X服务器访问权限

当前用户可能没有权限访问X display:

  • 临时授权:运行xhost +local:,之后重新执行你的Python代码
  • 永久授权:将xhost +local:添加到用户主目录的.bashrc或.profile文件末尾,下次登录自动生效

3. 替换为mss库(推荐)

mss对X11和虚拟环境的截图支持更稳定,可替代Pillow的ImageGrab:

  • 安装mss:
pip install mss
  • 示例代码:
from mss import mss
from PIL import Image

with mss() as sct:
    # 定义截取区域(top, left, width, height)
    monitor = {"top": 0, "left": 0, "width": 400, "height": 400}
    screenshot = sct.grab(monitor)
    # 转换为Pillow Image对象
    pil_img = Image.frombytes("RGB", screenshot.size, screenshot.bgra, "raw", "BGRX")
    print(pil_img)

4. 优化KVM虚拟显卡配置

确保虚拟机使用兼容的虚拟显卡:

  • 打开virt-manager,编辑虚拟机配置
  • 在显示选项中,将显卡类型改为VirtIO或QXL
  • 重启虚拟机后重新测试

内容的提问来源于stack exchange,提问作者C. Pendergrass

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.28 12:03:06