在Ubuntu上使用python MSS库时XGetImage失败错误

时间:2019-03-10 06:26:40

标签: python linux x11 python-mss

在Ubuntu 18.10上使用mss时遇到错误(如果重要)。这是我的代码(取自文档中的示例,加上一些额外的错误输出):

import mss
with mss.mss() as sct:
    try:
        filename = sct.shot(mon=-1, output='fullscreen.png')
        print(filename)
    except Exception as e:
        print(e, "\n", e.details)

这是我使用python 3.7运行代码时看到的输出。

XGetImage() failed
 {'retval': <mss.linux.LP_XImage object at 0x7fc72d567bf8>, 'args': (<mss.linux.LP_Display object at 0x7fc72db7d1e0>, <mss.linux.LP_Display object at 0x7fc72d567950>, 0, 0, 1920, 1080, 16777215, 2)}

如果有帮助,这是我没有捕获到异常(stacktrace)的输出

Traceback (most recent call last):
  File "process.py", line 3, in <module>
    filename = sct.shot(mon=-1, output='fullscreen.png')
  File "/home/f41lurizer/.local/share/virtualenvs/poker-TAtsjijf/lib/python3.7/site-packages/mss/base.py", line 140, in shot
    return next(self.save(**kwargs))
  File "/home/f41lurizer/.local/share/virtualenvs/poker-TAtsjijf/lib/python3.7/site-packages/mss/base.py", line 129, in save
    sct = self.grab(monitor)
  File "/home/f41lurizer/.local/share/virtualenvs/poker-TAtsjijf/lib/python3.7/site-packages/mss/linux.py", line 430, in grab
    ZPIXMAP,
  File "/home/f41lurizer/.local/share/virtualenvs/poker-TAtsjijf/lib/python3.7/site-packages/mss/linux.py", line 171, in validate
    raise ScreenShotError(err, details=details)
mss.exception.ScreenShotError: XGetImage() failed

我正在虚拟环境中运行它,我的Pipfile.lock在其中报告mss版本4.0.2

我尝试以root身份运行它,但是给出了相同的输出。我在Google中找不到类似的问题。我也尝试在tmux之外运行它,也没有结果。

2 个答案:

答案 0 :(得分:0)

降低屏幕分辨率,范围为700-400,然后重试。您可能需要尝试在该范围内使用其他值以使其更精确。

答案 1 :(得分:0)

在使用Fedora 29时,我遇到了同样的问题。但是在检查源代码之后,似乎mss使用x11而不是xWayland来捕获屏幕,{ {1}}在Fedora中是默认设置。将会话切换为使用xWayland可以解决我的问题。 here中提到了切换方式。