1

1

新手:我遇到了一个问题,当我通过 SSH 访问我的服务器时,$PATH 是正确的

root@ks391320:~# echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games

但是当我通过 XRDP 会话打开我的服务器并进入终端时,它显示路径错误

root@ks391320:~# echo $PATH
/bin:/usr/bin:/usr/X11R6/bin:/usr/local/bin

两者的截图:截屏

这会产生一个问题,因为当我尝试使用“包安装程序”安装某些东西时,它会显示这个错误(以及其他错误)

dpkg: warning: 'ldconfig' not found in PATH

答案1

对于 Ubuntu-18.04,请 /etc/pam.d/xrdp-sesman 在开头编辑并输入以下几行:

session       required   pam_env.so readenv=1 envfile=/etc/environment
session       required   pam_env.so readenv=1 envfile=/etc/default/locale

答案2

1

系统范围的默认 PATH 在 中定义/etc/environment。首先,验证它是否设置为合理的值。作为参考,这是我的,它与默认安装相同:

PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games"

2

如果/etc/environment一切正常,但您仍然遇到问题,则可以覆盖 中的默认 PATH ~/.bashrc。例如,我的 .bashrc 中有此内容,当且仅当目录存在且不在我的 PATH 中时,才会将目录附加到我的 PATH:

if [ -d "$HOME/bin" ]; then
    if [[ $PATH =~ $HOME/bin ]]; then :
    else export PATH="$HOME/bin:$PATH"
    fi
fi

由于从屏幕截图中可以看出您已启用 root 登录,因此请确保也设置 root 的 .bashrc。(顺便说一句,由于 root 在 Ubuntu 中默认无法登录,因此此配置可能没有经过太多测试,可能与您的问题有关。)

3

如果前两种方法失败,请检查您的 XRDP 客户端是否正在执行一些异常操作。如果是,您必须将其配置为正常工作或找到解决方法。

更新

我已经查看了整个系统。您可以使用以下命令找到系统中指定 PATH 的所有位置(之所以sudo出现 ,是因为/etc普通用户无法读取下面的某些文件):

sudo egrep -nr '\bPATH' /etc | less

我认为忽略其中的许多地方是安全的,从而得到以下命令:

sudo egrep -nr '\bPATH' /etc | egrep -v '^/etc/(init|rc|ppp|bash_c)' | egrep -v '^Binary' | less

一个看起来可能的文件(尽管我对此了解不多)是/etc/login.defs。你可以看看它。

此外,你也可以 grep 你的点文件:

egrep -nr '\bPATH' $HOME/.* | less

答案3

全面披露:我不使用 Ubuntu...但我在 Debian 上遇到了同样的问题。

xrdp 启动 /etc/xrdp/startwm.sh(除非 Ubuntu 修改了此位置)。我添加了以下行:

. /etc/profile

到 /etc/xrdp/startwm.sh 的顶部,PATH 现在已正确设置。

对于 Ubuntu,添加

. /etc/environment

/etc/xrdp/startwm.sh 的顶部可能会做同样的事情。

答案4

理论上添加

. /etc/environment

可以工作,但实际上不行。我把它放在 .bashrc 的顶部来解决这个问题

相关内容