O Ubuntu possui um PATH diferente quando acessado pela sessão XRDP

9

Noob aqui: Eu tenho um problema, quando eu acesso meu servidor via SSH, o $ PATH está correto

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

Mas quando abro meu servidor via sessão XRDP e vou para o terminal, ele mostra um PATH incorreto :

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

Captura de tela de ambos: Captura de tela

E isso cria um problema, porque quando tento instalar algo usando o "Instalador de Pacotes", ele mostra esse erro (entre outros)

dpkg: warning: 'ldconfig' not found in PATH
Ivan Castellanos
fonte

Respostas:

7

Para o Ubuntu-18.04, edite /etc/pam.d/xrdp-sesman e insira as seguintes linhas no início:

session       required   pam_env.so readenv=1 envfile=/etc/environment
session       required   pam_env.so readenv=1 envfile=/etc/default/locale
Marcelo
fonte
Sim, sem isso, as sessões xrdp estavam faltando todas as variáveis ​​definidas no meu /etc/environment!
wisbucky
5

1

O caminho padrão de todo o sistema é definida em /etc/environment. Primeiro, verifique se está definido como um valor sensato. Para referência, aqui está o meu, que é o mesmo que uma instalação padrão:

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

2

Se /etc/environmentestiver correto e você ainda estiver tendo problemas, poderá substituir o PATH padrão ~/.bashrc. Por exemplo, eu tenho isso no meu .bashrc que anexa um diretório ao meu PATH se, e somente se, ele existir e ainda não estiver no meu PATH:

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

Como na sua captura de tela parece que você ativou os logins raiz, defina também o .bashrc da raiz. (A propósito, como o root não pode efetuar login por padrão no Ubuntu, essa configuração é presumivelmente menos testada e pode estar relacionada ao seu problema.)

3

Se os dois primeiros métodos falharem, verifique se o seu cliente XRDP está fazendo algo exótico. Nesse caso, você precisará configurá-lo para funcionar normalmente ou identificar uma maneira de contornar isso.

Atualizar

Eu tenho olhado em volta do sistema. Você pode encontrar todos os locais em seu sistema que especificam um PATH com o seguinte comando ( sudoexiste porque alguns arquivos em /etcsão ilegíveis por usuários normais):

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

Eu acho que é seguro ignorar muitos desses lugares, resultando no seguinte comando:

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

Um arquivo que parece possível (embora eu realmente não saiba muito sobre isso) é /etc/login.defs. Você pode dar uma olhada nisso.

Além disso, você também pode receber seus arquivos de ponto:

egrep -nr '\bPATH' $HOME/.* | less
Scott Severance
fonte
O arquivo "environment" é normal, adicionando os caminhos corretos ao ~ / .bashrc, os comandos são executados no terminal, mas ainda não funcionam no "Instalador de Pacotes" do Ubuntu. Não consegui encontrar a raiz do problema, mas agora tenho uma solução, criei um link simbólico em / bin / para cada programa necessário (ldconfig, etc) ... isso provavelmente é uma violação de segurança, então deixarei esta pergunta aberto caso alguém tenha uma solução melhor.
Ivan Castellanos
@IvanCastellanos: Não sei ao certo o que você quer dizer com "instalador de pacotes", pois não há nenhum programa com esse nome exato AFAIK. Você poderia descrever as etapas que você está executando para instalar pacotes? E este é um GUI ou instalador de linha de comando?
Scott Severance
Desculpe, eu quero dizer "GDebi Packpage Installer" (GUI).
Ivan Castellanos
@IvanCastellanos: Você o lança como gksudo gdebi-gtk /full/path/to/package.deb? Eu achei um pouco exigente. Nesse caso, deve herdar o ambiente do qual foi lançado.
Scott Severance
3

Divulgação completa: Eu não uso o Ubuntu ... mas tive o mesmo problema com o Debian.

O xrdp lança o /etc/xrdp/startwm.sh (a menos que o Ubuntu tenha modificado este local). Eu adicionei esta linha:

. /etc/profile

no topo do /etc/xrdp/startwm.sh e o PATH está agora definido corretamente.

Para o Ubuntu, adicionando

. /etc/environment

no topo do /etc/xrdp/startwm.sh pode fazer o mesmo.

EMI
fonte
2

Isso me surpreendeu por um tempo também. /etc/environmentnão é um script de shell, então você não pode chamá-lo como um. O que funcionou para mim foi editar o script "sesman" do xrdp session manager no pam. Eu adicionei a linha "session" ao meu /etc/pam.d/sesmanarquivo:

#%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

Isso faz com que o gerenciador de sessões carregue o /etc/environmentarquivo no login.

Dave C
fonte
1

Em teoria, adicionando

. /etc/environment

iria funcionar, mas não. Acabei de colocá-lo no topo do meu .bashrc para corrigir o problema

John
fonte
1

Graças às respostas anteriores, cheguei a essa solução:

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

Pode não ser o mais ideal, mas está funcionando (Ubuntu 12.04).

Alex Fliker
fonte
1

@ John: Eu acredito que você precisa verificar o seu /etc/xrdpstartwm.sh - as primeiras linhas nas minhas dizem:

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

Isso significa que, se o / etc / X11xinit / xinitrc existir, esse arquivo será executado - e não ajudará muito em adicionar o arquivo

. /etc/environment

para /etc/xrdpstartwm.sh. :-)

/ Per Hertz

Per Hertz
fonte