奇怪的 xauth 问题

最近在用 root shell 进行操作时,发现我的 /root 目录下多出了一堆 .xauth* 文件,前面的文件名都相同,文件名的最后六位是随机名称。

随意 Google 了下,绝大多数都是讲解如何通过 xauth 授权其他用户访问 X 程序的,没多少有用的信息。但是我至少知道了一点:这些文件是通过 su 切换用户时生成的,具体的文件路径和文件名取决于 $XAUTHORITY 环境变量。如果未指定 $XAUTHORITY 环境变量,那么默认的路径和文件名就是 ~/.Xauthority

话虽如此,但是我还是不明白为何我的 xauth 文件会是随机文件名。后来终于在 stackexchange 的某个讨论下找到了一点线索。

在 stackexchange 的那个话题下,有人进行了解释:通过 su - 切换用户时,除了 $USER$HOME$SHELL 这三个环境变量会切换过去之外,其他环境变量都会从当前用户进行继承。因此,$XAUTHORITY 这个环境变量也是从我当前用户继承过去的。

于是果断查看当前用户的 $XAUTHORITY 环境变量,发现其路径为 /run/gdm/auth-for-wood-\*,这里的 * 也是六位随机名字。那么问题很明确了,只要在进行 su - 操作前执行一下 export XAUTHORITY=~/.Xauthority 就行了,问题解决。但是不能把这条配置写入 ~/.zshrc,从 gdm 登录的话,必须保持 $XAUTHORITY 不变,否则在终端运行诸如 primusrun 时就会出现“No protocol specified”的错误。