听说 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 图形的测试非常糟糕。