全部,
我正在使用 xrdp 连接到 Centos 7 机器。我注意到我的 PATH 环境变量根据我是使用 RDP 还是 SSH 而不同,我无论如何也想不出这是怎么回事。
我检查了 /etc/xrdp/startwm.sh,但所有与 PATH 相关的代码都已被注释掉。我的 /etc/profile 相当标准,/etc/profile.d 中没有任何内容可以执行此操作。此外,如果它位于 /etc/profile[.d] 中的某个位置,那么即使在 SSH 登录期间也会应用它。
我在互联网上的各个地方看到过几次提到这个问题,但没有真正的解决方案或解释。
有人可以解释并给我指明正确的方向吗?
不知道这到底发生在哪里,真是让我抓狂!
编辑:
我应该说得更清楚一些。我很难搞清楚的是 RDP 场景。我几乎可以解释我在 SSH 会话期间(或者甚至在 VNC 会话期间,无论如何)看到的所有与 PATH 相关的恶作剧。如果我查看 /etc/profile* 设置以及我自己的 ~/.bash_profile,SSH 会话期间一切都说得通。但是当我使用 RDP 时,事情就变得奇怪了。
除了 /etc/xrdp/startwm.sh 之外,我还检查了 /etc/security/pam_env.conf,其中所有内容都已被注释掉。
编辑2:
在 SSH/正常登录会话中,我的路径如下所示:
/usr/local/bin:/usr/bin:/usr/local/sbin:/usr/sbin
在 RDP 会话中,我的 PATH 如下所示:
/bin:/usr/bin:/usr/X11R6/bin:/usr/local/bin:/usr/local/sbin:/usr/sbin
我可以在 /etc/profile 中看到 /usr/local/sbin 和 /usr/sbin 被附加到哪里(如果是 root 则附加到前面)。
在 RDP 的情况下,有一些新增内容以及重新排列的内容。例如,/bin 突然出现,以及 /usr/XllR6/bin。此外,/usr/bin 现在位于 /usr/local/bin 之前。我最不想要的是最后一部分。
我知道我可以在自己的 ~/.bash_profile 中修复它,但我不明白为什么我必须这么做。首先不明白为什么路径会被弄乱到这种程度。
谢谢,贾斯汀
答案1
我不确定这是否能解决您的问题,因为它会影响带有 XRDP 和 XFCE4 的 Ubuntu。不过,还是有可能的,所以让我们拭目以待吧。
我遇到了类似的问题:当我通过 SSH 和 XRDP 登录计算机时,PATH 环境变量不同。具体来说,当我在 XRDP ( xterm
) 中打开终端窗口时,PATH 变量未设置为本地用户路径(~/bin
、~/.local/bin
等)。
但是,当我通过 SSH 登录时,这些路径存在。
问题是不在 XRDP 中,但是如何使用 XTerm 和 SSH 创建 Bash 会话。由于 SSH 创建了登录会话,因此加载的文件包括/etc/environment
和~/.profile
。在后者中,包含了我需要的路径。
但终端。 它创建非登录 bash 会话,因此它加载/etc/bash.bashrc
和~/.bashrc
。
修复此问题的方法是简单地将 PATH 初始化行包含到~/.profile
以下两个文件之一中。由于我希望这会影响计算机中的所有用户,因此我将其包含到/etc/bash.bashrc
:
echo PATH="$HOME/bin:$HOME/.local/bin:$PATH" >> /etc/bash.bashrc
您可以找到有关如何工作的更多信息man bash
答案2
我在 6.6 下遇到了这个问题。不知道 7 下是否也存在同样的问题。
/etc/profile
设置系统范围的环境变量并为“root”用户添加“sbin”路径。在文件底部执行的函数/etc/xrdp/startwm.sh
中加载此文件。pre_start()
但顶部/etc/xrdp/startwm.sh
看起来像这样:
# if xinitrc exists use it instead, it should load user prefferences
# including desktop environment specified in /etc/sysconfig/desktop
if [ -f /etc/X11/xinit/xinitrc ]
then
. /etc/X11/xinit/xinitrc
exit 0
fi
因此,如果/etc/X11/xinit/xinitrc
存在,/etc/xrdp/startwm.sh
则执行它并终止,这样剩余的设置都不会完成。/etc/X11/xinit/xinitrc 不会加载 /etc/profile,至少我的没有。
xinitrc
我注释掉了以下检查startwm.sh
:
# if xinitrc exists use it instead, it should load user prefferences
# including desktop environment specified in /etc/sysconfig/desktop
#if [ -f /etc/X11/xinit/xinitrc ]
#then
# . /etc/X11/xinit/xinitrc
# exit 0
#fi
这为我解决了这个问题,并且我没有注意到 XRDP 功能有任何差异。