当我输入到 Linux 主机的 SSH 连接时,XAUTHORITY 环境变量未设置。如果我运行sudo -b
,连接将被丢弃,除非我nohup
立即添加命令,在这种情况下操作失败,报告X11 connection rejected because of wrong authentication.
作为解决方法,我可以手动将该值设置为$HOME/.Xauthority
。
该变量通常是自动设置的。我应该怎么做才能确保以首选方式设置变量(在正确的时间通过正确的流程)?
答案1
如果 Xauthority 文件位于$HOME/.Xauthority
,那么您不需要XAUTHORITY
环境变量,因为$HOME/.Xauthority
是默认路径:X11 库应该自动检查它。
如果您随后使用sudo
切换到 root,那么通过 维护 X11 会话访问将变得更加困难sudo
,因为它不再只是保留DISPLAY
和XAUTHORITY
环境变量并让 root 用户从任何位置读取 Xauthority 的问题:在某些时候需要设置 XAUTHORITY 值来标识 Xauthority 文件的实际位置。如何设置它并不重要,只要在需要它的进程启动之前设置它即可。
如果sudo
已配置为保留变量,那么您可以通过在登录脚本中显式设置(如之前的原始用户帐户)XAUTHORITY
来解决此问题(如果已设置),如下所示:XAUTHORITY
sudo
DISPLAY
if [ "$DISPLAY" != "" ] && [ "$XAUTHORITY" = "" ]; then
export XAUTHORITY=$HOME/.Xauthority
fi
或者,如果sudo
不保留XAUTHORITY
和/或您不希望配置sudo
保留它,您可以将以下代码片段放入/etc/bash.bashrc
或 ~/.bashrc
(或由命令启动的 shell 执行的任何脚本sudo
)中。
if [ "$SUDO_USER" != "" ] && [ "$DISPLAY" != "" ]; then
export XAUTHORITY=$(getent passwd "${SUDO_USER}" | cut -d : -f 6)/.Xauthority
fi