通过 XRDP 会话访问时,Ubuntu 具有不同的 PATH

Iva*_*nos 9 gui command-line paths

菜鸟在这里:我有一个问题,当我通过 SSH 访问我的服务器时,$PATH 是正确的

root@ks391320:~# echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games
Run Code Online (Sandbox Code Playgroud)

但是当我通过 XRDP 会话打开我的服务器并转到终端时,它显示了一个不正确的 PATH

root@ks391320:~# echo $PATH
/bin:/usr/bin:/usr/X11R6/bin:/usr/local/bin
Run Code Online (Sandbox Code Playgroud)

两者的截图: 截屏

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

dpkg: warning: 'ldconfig' not found in PATH
Run Code Online (Sandbox Code Playgroud)

小智 7

对于 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
Run Code Online (Sandbox Code Playgroud)


Sco*_*nce 5

1

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

PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games"
Run Code Online (Sandbox Code Playgroud)

2

如果/etc/environment正常并且您仍然遇到问题,您可以在~/.bashrc. 例如,我在我的 .bashrc 中有这个,当且仅当它存在并且不在我的 PATH 中时,它才会将一个目录附加到我的 PATH 中:

if [ -d "$HOME/bin" ]; then
    if [[ $PATH =~ $HOME/bin ]]; then :
    else export PATH="$HOME/bin:$PATH"
    fi
fi
Run Code Online (Sandbox Code Playgroud)

由于您的屏幕截图显示您已启用 root 登录,因此请确保也设置 root 的 .bashrc。(顺便说一句,由于 root 无法在 Ubuntu 中默认登录,因此此配置可能未经测试,并且可能与您的问题有关。)

3

如果前两种方法失败,请检查您的 XRDP 客户端是否在做一些奇怪的事情。如果是这样,您必须将其配置为正常工作或确定一种解决方法。

更新

我一直在环顾系统。您可以使用以下命令找到系统上所有指定 PATH 的位置(sudo之所以存在,是因为/etc普通用户无法读取其中的某些文件):

sudo egrep -nr '\bPATH' /etc | less
Run Code Online (Sandbox Code Playgroud)

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

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

一个看起来可能的文件(虽然我真的不太了解)是/etc/login.defs. 你可以看看它。

此外,您还可以 grep 您的点文件:

egrep -nr '\bPATH' $HOME/.* | less
Run Code Online (Sandbox Code Playgroud)