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


9

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

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

但是,当我通过XRDP会话打开服务器并转到终端时,它显示了错误的PATH

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

两者的屏幕截图: 屏幕截图

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

dpkg: warning: 'ldconfig' not found in PATH

Answers:


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

是的,没有这个,xrdp会话将丢失my中定义的所有变量/etc/environment
wisbucky

5

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您的dotfile:

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

“环境”文件是正常的,将正确的路径添加到〜/ .bashrc可使命令在终端上运行,但仍无法在Ubuntu“ Package Installer”上运行。我找不到问题的根源,但是我现在有一个解决方案,我在/ bin /中创建了一个指向每个所需程序(ldconfig等)的符号链接...这可能是安全漏洞,因此我将保留此问题如果有人有更好的解决方案,请打开。
Ivan Castellanos

@IvanCastellanos:我不确定您所说的“软件包安装程序”是什么意思,因为没有确切名称为AFAIK的程序。您能描述一下您要安装软件包的步骤吗?这是GUI还是命令行安装程序?
Scott Severance,2012年

抱歉,我的意思是“ GDebi Packpage安装程序”(GUI)。
Ivan Castellanos 2012年

@IvanCastellanos:您是否以以下形式启动它gksudo gdebi-gtk /full/path/to/package.deb?我发现它有点挑剔。如果是这样,那么它应该继承从其启动的环境。
Scott Severance

3

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

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

. /etc/profile

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

对于Ubuntu,添加

. /etc/environment

/etc/xrdp/startwm.sh的顶部可能会执行相同的操作。


2

这也让我感到难过。 /etc/environment不是shell脚本,因此您不能将其称为一个。对我有用的是在pam中编辑xrdp会话管理器“ sesman”脚本。我在/etc/pam.d/sesman文件中添加了“会话”行:

#%PAM-1.0
session required pam_env.so readenv=1 user_readenv=0
@include common-auth
@include common-account
@include common-session
@include common-password

这使会话管理器/etc/environment在登录时加载文件。


1

从理论上讲

. /etc/environment

会工作,但不会。我只是将其放在我的.bashrc顶部以更正此问题


1

由于前面的回答,我得出了这样的解决方案:

cat /etc/xrdp/startwm.sh | sed "s/. \/etc\/X11\/Xsession/. \/etc\/environment/" > ./startwm.sh && echo ". /etc/X11/Xsession" >> ./startwm.sh && sudo mv ./startwm.sh /etc/xrdp/startwm.sh && sudo chmod 755 /etc/xrdp/startwm.sh

可能不是最佳的,但是可以正常工作(Ubuntu 12.04)。


1

@ John:我相信您需要检查/etc/xrdpstartwm.sh-我的第一行内容如下:

if [ -f /etc/X11/xinit/xinitrc ]
then
    . /etc/X11/xinit/xinitrc
    exit 0
fi**

这意味着,如果存在/ etc / X11xinit / xinitrc,则会改为执行该文件-并且添加该文件不会有多大帮助

. /etc/environment

到/etc/xrdpstartwm.sh。:-)

/每赫兹

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.