`$XAUTHORITY` 在 su+tmux 上“无处”出现

`$XAUTHORITY` 在 su+tmux 上“无处”出现

当我从 切换su+bash到 时,su+tmux+zsh我注意到我得到的$XAUTHORITY变量定义为/root/.xauthXXXXXX6XXXXXX个随机字母数字字符。使用之前的配置,X 可以完美地与 root 配合使用,但现在我需要复制~username/.Xauthority$XAUTHORITY

该变量没有定义;我检查过.zshrc,等等/etc/profile*/etc/profile.d/*

# env
TERM=screen
SHELL=/usr/bin/tmux
USER=toor
TMUX=/tmp//tmux-0/default,6495,3
PATH=/sbin:/bin:/usr/sbin:/usr/bin
PWD=/root
SHLVL=2
HOME=/root
LOGNAME=toor
DISPLAY=:0.0
XAUTHORITY=/root/.xauthUSzLl4
COLORTERM=gnome-terminal
_=/bin/env
OLDPWD=/root
EDITOR=vim
vcs_info_msg_0_=
vcs_info_msg_1_=

% echo $XAUTHORITY 
/home/mpiechotka/.Xauthority
% su 
password:
# echo $XAUTHORITY 
/root/.xauthUSzLl4
# ls $XAUTHORITY
ls: cannot access /root/.xauthUSzLl4: No such file or directory
# cat .tmux.conf 
set -g default-command /bin/zsh
set -g default-shell /bin/zsh

su是别名,su - toor并且它tmux作为 shell 打开。 toor 是具有不同 shell 的 root 的别名。

我刚刚发现它也出现在普通的su上。前一段时间它并没有这样做。

set-environment不工作。

xhost +localhost不起作用,但是xhost +(禁用所有控制)确实起作用了。

答案1

这就是我认为正在发生的事情。

当您使用suand时bash, -session 会继承除, andsu之外的环境,因此仍然指向并且一切都很好。然而(从USERHOMESHELLXAUTHORITY~username/.Xauthority男人页),当tmux服务器启动时:

... tmux 将环境复制到全局环境中;此外,每个会话都有一个会话环境。创建窗口时,会话环境和全局环境将合并,会话环境将覆盖两者中存在的任何变量。

我怀疑(在不知道调用详细信息的情况下),当您切换凭据时,su尝试查找.Xauthority/root并且由于当您需要运行应用程序时找不到凭据X,因此它会创建一个凭据。我可以想出几种方法来尝试解决这个问题:

  1. su通过使用 来调用su -。这将复制真实用户的环境
  2. 添加set-environment <name> <value>到您的tmux配置中。

不幸的是,我无法测试这个,因为我最近切换到i3(太棒了)而且我没有备用机器。

答案2

这可能是由于配置错误造成的pam_xauthPAM 模块。当您运行时,它应该将您的密钥复制到临时文件中su。您描述的行为与 pam_xauth 创建临时文件但不知何故不复制密钥一致(可能是因为您有 a~/.xauth/export或 a /root/.xauth/import)。

答案3

这发生在我身上,但这次是 $COLORTERM 变量。

例如,如果您在具有 COLORTERM=terminus 的终端模拟器上启动 tmux,之后甚至在通常具有 COLORTERM=gnome-terminal 的另一个终端客户端上启动另一个 tmux 会话,则此新会话将交叉并继承 COLORTERM=terminus 。

不幸的是,这些断言足以得出结论,即使您使用不同的终端模拟器,tmux 会话也不是相互隔离的。

您的 su 子 shell 可能从另一个 tmux 会话(更具体地说是创建的第一个 tmux 会话)继承 $XAUTHORITY 。

相关内容