Ubuntu a un CHEMIN différent lorsqu'il est accessible via une session XRDP

9

Noob ici: 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 lorsque j'ouvre mon serveur via une session XRDP et que je vais sur le terminal, il montre un CHEMIN incorrect :

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

Capture d'écran des deux: Capture d'écran

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

dpkg: warning: 'ldconfig' not found in PATH
Ivan Castellanos
la source

Réponses:

7

Pour Ubuntu-18.04, modifiez /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
Marcelo
la source
Oui, sans cela, les sessions xrdp manquaient toutes les variables définies dans mon /etc/environment!
wisbucky
5

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 le même qu'une installation par défaut:

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

2

Si /etc/environmentest sain d'esprit et que vous rencontrez toujours des problèmes, vous pouvez remplacer le chemin 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 n'est pas déjà dans mon PATH:

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

Comme il apparaît sur votre capture d'écran que vous avez activé les connexions root, assurez-vous également de définir le .bashrc de root. (Soit dit en passant, puisque 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 c'est le cas, vous devrez soit le configurer pour qu'il fonctionne normalement, soit identifier un moyen de le contourner.

Mise à jour

J'ai fait quelques recherches sur le système. Vous pouvez trouver tous les endroits sur votre système qui spécifient un CHEMIN avec la commande suivante (le sudoest là parce que certains fichiers sous /etcsont illisibles par les utilisateurs normaux):

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

Je pense qu'il est sûr d'ignorer bon nombre 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 n'en sache vraiment pas trop) est /etc/login.defs. Vous pourriez y jeter un œil.

De plus, vous pouvez également récupérer vos fichiers dot:

egrep -nr '\bPATH' $HOME/.* | less
Scott Severance
la source
Le fichier "environnement" est normal, l'ajout des chemins corrects à ~ / .bashrc fait que les commandes s'exécutent sur le terminal mais ne fonctionnent toujours pas sur le "Package Installer" d'Ubuntu. Je n'ai pas pu trouver la racine du problème mais j'ai une solution maintenant, j'ai créé un lien symbolique dans / bin / vers chaque programme requis (ldconfig, etc) ... c'est probablement une faille de sécurité donc je vais laisser cette question ouvrir au cas où quelqu'un aurait une meilleure solution.
Ivan Castellanos
@IvanCastellanos: Je ne suis pas sûr de ce que vous entendez par "installateur de packages", car il n'y a pas de programme avec ce nom exact AFAIK. Pourriez-vous décrire les étapes à suivre pour installer des packages? Et s'agit-il d'un GUI ou d'un programme d'installation en ligne de commande?
Scott Severance
Désolé, je veux dire "GDebi Packpage Installer" (GUI).
Ivan Castellanos
@IvanCastellanos: Le lancez-vous en tant que gksudo gdebi-gtk /full/path/to/package.deb? Je l'ai trouvé un peu difficile. Si c'est le cas, il devrait hériter de l'environnement à partir duquel il a été lancé.
Scott Severance
3

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

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

Pour Ubuntu, ajout

. /etc/environment

en haut de /etc/xrdp/startwm.sh pourrait faire de même.

EMI
la source
2

Cela m'a aussi dérouté pendant un moment. /etc/environmentn'est pas un script shell, vous ne pouvez donc pas l'appeler comme tel. Ce qui a fonctionné pour moi, c'était d'éditer le script "sesman" du gestionnaire de sessions xrdp dans pam. J'ai ajouté la ligne "session" à mon /etc/pam.d/sesmanfichier:

#%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 sessions à charger le /etc/environmentfichier à la connexion.

Dave C
la source
1

En théorie, l'ajout

. /etc/environment

fonctionnerait mais il ne fonctionne pas. Je viens de le mettre en haut de mon .bashrc pour corriger le problème

John
la source
1

Grâce aux réponses précédentes, je suis parvenu à 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

Ce n'est peut-être pas le plus optimal mais il fonctionne (Ubuntu 12.04).

Alex Fliker
la source
1

@ John: Je crois que vous devez vérifier votre /etc/xrdpstartwm.sh - les premières lignes du mien se lisent,

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 à ajouter le

. /etc/environment

à /etc/xrdpstartwm.sh. :-)

/ Per Hertz

Per Hertz
la source