Arch Linux 的官方仓库里终于有 GNOME 44 了,今天更新了一下系统,在思考出怎么解决 DaVinci Resolve 一定要去加载 onetbb 里面 intel 的 OpenCL 实现之前,我遇到了一个更奇怪的问题:所有的 XWayland 程序都显示不出来窗口,程序启动了,没有报错,但是点不到。
忘了我当时在查什么反正看了一下 journalctl -f
发现一直刷一个 mutter-x11-frames
core dump 的 log,我想起来 mutter 44 应该是把 X11 程序的 decoration 挪到单独的 client 里面实现了,所以也许是 mutter 的问题,不过我还是尝试用 gdb 看了一下 backtrace:
然后我就在想看起来是 GTK4 的问题,我还去群里问了一下有没有 GNOME + NVIDIA 的用户,看看是我的问题还是 bug,不过没人理我,还差点把我恶心到了。然后我想了一下试了 GDK_BACKEND=x11 nautilus
发现也有一样的问题,就跑到 GTK 那边提了个 issue,结果那位有点出名的毒舌老哥跟我说看着不像是 GTK 的问题倒像是 nvidia 的问题,我也怀疑过,但我检查了一下和 nvidia 相关的都没什么变化,然后我去翻 glvnd 和 egl-wayland 的仓库也没翻出什么。换到 KDE 下面还是一样有问题。但我突然想到会不会和我设置的一些环境变量有关系,于是就去注销了一大片,结果就好了。最后我看了一下好像有 platform,发现是我设置过一个 EGL_PLATFORM=wayland
的环境变量,删掉这个就好了。
我想了一下这应该是我当初弄 Firefox 的硬件解码视频时候设置的,果不其然在 https://github.com/elFarto/nvidia-vaapi-driver#firefox 里面写了,看起来是因为这个变量导致 XWayland 程序加载 EGL 的时候把 platform 当成了 Wayland,不过我没想清楚为什么滚系统之前没有遇到这个问题。
总之这是个不能算 bug 的问题了,如果我在群里问的时候有人回我,我就能直接排除法发现是我自己配置的问题,结果提了 issue 以后发现不是上游的问题感觉很尴尬。想了一下还是决定把这个记在这里,因为我推测有很多人看了 nvidia-vaapi-driver
的文档,说不定也设置了这个变量然后遇到了同样的问题,记录下来方便搜到。