web-dev-qa-db-fra.com

Ubuntu a un PATH différent lorsqu’il est accédé via une session XRDP

Noob here: j'ai un problème, quand j'accède à mon serveur via SSH, le $ PATH est correct

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

Mais quand j'ouvre mon serveur via une session XRDP et que je vais au terminal, il montre un chemin incorrect :

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

Capture d'écran des deux: Screenshot

Et cela crée un problème car lorsque j'essaie d'installer quelque chose à l'aide du "Package Installer", cette erreur s'affiche (entre autres).

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

Pour Ubuntu-18.04, éditez /etc/pam.d/xrdp-sesman et entrez les lignes suivantes au début:

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

1

Le PATH par défaut à l'échelle du système est défini dans /etc/environment. Tout d'abord, vérifiez qu'il est défini sur une valeur saine. Pour référence, voici le mien, qui est identique à une installation par défaut:

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

2

Si /etc/environment est sain et que vous rencontrez toujours des problèmes, vous pouvez remplacer le PATH par défaut dans ~/.bashrc. Par exemple, j'ai ceci dans mon .bashrc qui ajoute un répertoire à mon PATH si et seulement s'il existe et qu'il ne l'est pas déjà:

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

Comme il ressort de votre capture d'écran que vous avez activé les connexions root, veillez également à définir le fichier .bashrc de la racine. (En passant, étant donné que root ne peut pas se connecter par défaut dans Ubuntu, cette configuration est probablement moins testée et pourrait éventuellement être liée à votre problème.)

3

Si les deux premières méthodes échouent, vérifiez si votre client XRDP fait quelque chose d'exotique. Si tel est le cas, vous devrez soit le configurer pour fonctionner normalement, soit identifier un moyen de le contourner.

Mise à jour

J'ai fait quelques recherches dans le système. Vous pouvez trouver tous les emplacements de votre système spécifiant un PATH à l'aide de la commande suivante (la Sudo est présente car certains fichiers sous /etc sont illisibles pour les utilisateurs normaux):

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

Je pense qu'il est prudent d'ignorer beaucoup de ces endroits, ce qui entraîne la commande suivante:

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

Un fichier qui semble possible (bien que je ne sache vraiment pas grand chose à ce sujet) est /etc/login.defs. Vous pouvez y jeter un coup d'oeil.

De plus, vous pouvez aussi grep vos fichiers de points:

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

Divulgation complète: je n'utilise pas Ubuntu ... mais j'ai eu le même problème avec Debian.

xrdp lance /etc/xrdp/startwm.sh (sauf si Ubuntu a modifié cet emplacement). J'ai ajouté cette ligne:

. /etc/profile

au début de /etc/xrdp/startwm.sh et le PATH est maintenant correctement défini.

Pour Ubuntu, ajouter

. /etc/environment

au début de /etc/xrdp/startwm.sh pourrait faire de même.

3
EMI

Cela m'a stoppé pendant un moment aussi. /etc/environment n'est pas un script Shell, vous ne pouvez donc pas l'appeler comme tel. Ce qui a fonctionné pour moi a été d’éditer le script "sesman" du gestionnaire de session xrdp dans pam. J'ai ajouté la ligne "session" à mon fichier /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

Cela oblige le gestionnaire de session à charger le fichier /etc/environment lors de la connexion.

2
Dave C

@ John: Je pense que vous devez vérifier votre fichier /etc/xrdpstartwm.sh - les premières lignes de mes lectures,

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

Cela signifie que si/etc/X11xinit/xinitrc existe, ce fichier sera exécuté à la place - et cela n'aidera pas beaucoup d'ajouter la

. /etc/environment

vers /etc/xrdpstartwm.sh. :-)

/ Par Hertz

1
Per Hertz

En théorie, ajouter

. /etc/environment

fonctionnerait mais ça ne marche pas. Je viens de le mettre en haut de mon .bashrc pour corriger le problème

1
John

Grâce aux réponses précédentes, je suis arrivé à une telle solution:

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

Peut-être pas le plus optimal mais fonctionnel (Ubuntu 12.04).

1
Alex Fliker