wsl debian sid emacs 29.4 除emacs外GUI程序无法正常显示 bug排查求助

我目前在WSL中安装了debian sid,最近发现从sid中安装的emacs-pgtk 29.4会导致除了emacs以外的其他GUI程序无法正常显示(如gvim或是简单的python tk)。

我进行了如下测试:

  1. debian sid 安装emacs-pgtk 29.4,出错
  2. debian stable (bookworm) 从 stable-backports 安装 emacs-pgtk 29.4,正常
  3. debian stable 添加 sid 源,从 sid 源安装 emacs-pgtk 29.4,出错

由于现在好不容易修好了(换源回stable,卸载重新安装emacs),不太敢再继续折腾。如果有朋友愿意帮助排查错误的话,我可以把我的debian wsl先export保存备份,再从一个干净的debian wsl来尝试复现问题。

完蛋,似乎回退emacs版本并没有用。目前的情况是,通过wsl --shutdown之后再启动wsl,可以在里面正常运行GUI程序,但是大约10~30s之后,再运行就失败了,报错如下:

python test/a.py
Traceback (most recent call last):
  File "/home/wang1zhen/test/a.py", line 7, in <module>
    root = tk.Tk()
           ^^^^^^^
  File "/usr/lib/python3.11/tkinter/__init__.py", line 2326, in __init__
    self.tk = _tkinter.create(screenName, baseName, className, interactive, wantobjects, useTk, sync, use)
              ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
_tkinter.TclError: couldn't connect to display ":0"

但emacs居然不受影响……

卸载了来自stable-backports的emacs-pgtk,安装stable源中的emacs 28.2,emacs -Q和其他的GUI程序一样无法正常运行。报错似乎也类似:

emacs -Q
^CDisplay :0 unavailable, simulating -nw

所以应该是wayland程序能运行,x11不行?

根据一个superuser的回答,在禁用systemd后似乎就正常了。但是我还是比较依赖systemd,所以看了关于X11 server的问题,根据wsl官方给出的FAQ,发现=/tmp/.X11-unix=不存在。手动创建软链接后,也是空的:

❯ ls -la /tmp/.X11-unix
❯ ln -s /mnt/wslg/.X11-unix /tmp/.X11-unix
❯ python test/a.py
^C^Cobject address  : 0x7efe6fad8280
object refcount : 2
object type     : 0x28e2ef0
object type name: TclError
object repr     : TclError('couldn\'t connect to display ":0"')
lost sys.stderr
❯ ls -la /tmp/.X11-unix
lrwxrwxrwx 19 wang1zhen  3 Aug 23:01 .X11-unix -> /mnt/wslg/.X11-unix
❯ echo $DISPLAY
:0
❯ ls -la /tmp/.X11-unix
lrwxrwxrwx 19 wang1zhen  3 Aug 23:01 .X11-unix -> /mnt/wslg/.X11-unix
❯ ls /tmp/.X11-unix

比较疑惑这个问题,我先向wsl上游提交一下试试看。

在我先前因为这个问题重装过一次wsl后,固定在stable使用没有出现任何问题,但是添加sid的emacs-pgtk以及一些其他软件包后,就出现了这样的问题。删除sid源、删除相应软件包、删除后再重装,都无法解决。

望指点一二。

目前看下来,临时的解决方法似乎是:

sudo rmdir /tmp/.X11-unix && ln -s /mnt/wslg/.X11-unix /tmp/.X11-unix

先前的检测结果似乎有误,抱歉。

不过至于是什么导致了/tmp/.X11-unix没有被正确的软链接,可能需要更上游去排查了。