xrdp 改变 PATH 环境变量

xrdp 改变 PATH 环境变量

全部,

我正在使用 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 功能有任何差异。

相关内容