在 WSL2 中运行图形程序

在 WSL2 中运行图形程序

听说 WSL2 支持图形程序。

我尝试在我的 ubuntu WSL 安装上运行它(来自 rosetta 代码)

from PIL import Image
img = Image.new("RGB", (320, 240))
pixels = img.load()
pixels[100, 100] = (255, 0, 0)
img.show()

但我的电脑只是发出哔哔声。

我曾尝试在线搜索此内容,但我一直收到 2018 年的关于设置 2018 X 服务器或类似内容的文章。

请帮忙,谢谢

答案1

查看Windows 上的 Ubuntu 社区预览版微软/WSLg了解关于此主题的最新更新。请注意,WSLg 可以运行单个应用程序,但不能在 WSL2 下运行完整发行版(目前),除非您为此安装单独的 Xserver 和客户端。

答案2

安装了最新 Windows 补丁(特别是 KB5020030)的 WSL2 应该已经修复了许多图形问题,但您的示例代码虽然在原生 Ubuntu 上运行良好,但在 WSL2 下通常会失败。ImageShow 需要系统中的图像查看器,也许您需要安装一个,例如 eog。

sudo apt install eog

现在你应该看到一个空白窗口,上面显示无法找到一些随机命名的文件,如 /tmp/tmp3fg12rgsf

这是因为 ImageShow.py 中的 eog 查看器代码部分在查看器显示文件之前删除了该文件。其他查看器有 20 秒的延迟(或一些本地 ping 延迟),但 eog 没有。您说什么,图像只会显示 20 秒?是的,show() 通常仅用于调试……说得够多了。

您可以在 eog 查看器的 Python 代码中引入自己的延迟:在文件 /lib/python3/dist-packages/PIL/ImageShow.py 的第 243 行,在 eog 查看器部分,在“Popen”之后和“remove”之前添加:

  import time;time.sleep(20)

小心匹配缩进,这在 python 中至关重要。

修改系统代码是一件非常糟糕的事情,ImageShow 需要修复一些显示查看器。此修复仅适用于 eog 查看器,显示将有其自身的问题,并且如果您添加 ImageMagick 显示,它将优先于 eog,并崩溃,并缺少一些 str。

事实证明,这段代码对 WSL2 图形的测试非常糟糕。

相关内容