当我从 切换su+bash
到 时,su+tmux+zsh
我注意到我得到的$XAUTHORITY
变量定义为/root/.xauthXXXXXX
6XXXXXX
个随机字母数字字符。使用之前的配置,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
这就是我认为正在发生的事情。
当您使用su
and时bash
, -session 会继承除, andsu
之外的环境,因此仍然指向并且一切都很好。然而(从USER
HOME
SHELL
XAUTHORITY
~username/.Xauthority
男人页),当tmux
服务器启动时:
... tmux 将环境复制到全局环境中;此外,每个会话都有一个会话环境。创建窗口时,会话环境和全局环境将合并,会话环境将覆盖两者中存在的任何变量。
我怀疑(在不知道调用详细信息的情况下),当您切换凭据时,su
尝试查找.Xauthority
,/root
并且由于当您需要运行应用程序时找不到凭据X
,因此它会创建一个凭据。我可以想出几种方法来尝试解决这个问题:
su
通过使用 来调用su -
。这将复制真实用户的环境- 添加
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 。