Ubuntu hat einen anderen Pfad, wenn über eine XRDP-Sitzung zugegriffen wird


9

Noob hier: Ich habe ein Problem, wenn ich über SSH auf meinen Server zugreife, ist der $ PATH korrekt

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

Aber wenn ich meinen Server über eine XRDP-Sitzung öffne und zum Terminal gehe, wird ein falscher PFAD angezeigt :

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

Screenshot von beiden: Bildschirmfoto

Dies führt zu einem Problem, da beim Versuch, etwas mit dem "Package Installer" zu installieren, dieser Fehler (unter anderem) angezeigt wird.

dpkg: warning: 'ldconfig' not found in PATH

Antworten:


7

Bearbeiten Sie für Ubuntu-18.04 /etc/pam.d/xrdp-sesman die folgenden Zeilen und geben Sie sie am Anfang ein:

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

Ja, ohne dies fehlten in xrdp-Sitzungen alle in my /etc/environment!
wisbucky

5

1

Der systemweite Standardpfad ist in definiert /etc/environment. Stellen Sie zunächst sicher, dass ein vernünftiger Wert festgelegt ist. Als Referenz ist hier meine, die der Standardinstallation entspricht:

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

2

Wenn dies /etc/environmentvernünftig ist und Sie immer noch Probleme haben, können Sie den Standardpfad in überschreiben ~/.bashrc. Zum Beispiel habe ich dies in meiner .bashrc, die ein Verzeichnis genau dann an meinen PATH anfügt, wenn es existiert und nicht bereits in meinem PATH ist:

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

Da aus Ihrem Screenshot hervorgeht, dass Sie Root-Anmeldungen aktiviert haben, müssen Sie auch die .bashrc-Datei von root festlegen. (Da sich root in Ubuntu nicht standardmäßig anmelden kann, ist diese Konfiguration vermutlich weniger getestet und hängt möglicherweise mit Ihrem Problem zusammen.)

3

Wenn die ersten beiden Methoden fehlschlagen, überprüfen Sie, ob Ihr XRDP-Client etwas Exotisches tut. In diesem Fall müssen Sie es entweder so konfigurieren, dass es normal funktioniert, oder einen Weg finden, um es zu umgehen.

Aktualisieren

Ich habe mich im System umgesehen. Sie können alle Stellen auf Ihrem System finden, die einen PFAD mit dem folgenden Befehl angeben (der sudoist vorhanden, da einige Dateien unter /etcfür normale Benutzer nicht lesbar sind):

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

Ich denke, es ist sicher, viele dieser Orte zu ignorieren, was zu folgendem Befehl führt:

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

Eine Datei, die möglich erscheint (obwohl ich wirklich nicht viel darüber weiß), ist /etc/login.defs. Sie könnten es sich ansehen.

Außerdem können Sie auch Ihre Punktedateien durchsuchen:

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

Die "Umgebungs" -Datei ist normal. Wenn Sie die richtigen Pfade zu ~ / .bashrc hinzufügen, werden die Befehle auf dem Terminal ausgeführt, funktionieren jedoch immer noch nicht auf dem Ubuntu "Package Installer". Ich konnte die Wurzel des Problems nicht finden, aber ich habe jetzt eine Lösung. Ich habe in / bin / einen symbolischen Link zu jedem erforderlichen Programm (ldconfig usw.) erstellt. Dies ist wahrscheinlich eine Sicherheitsverletzung, daher werde ich diese Frage hinterlassen offen für den Fall, dass jemand eine bessere Lösung hat.
Ivan Castellanos

@IvanCastellanos: Ich bin mir nicht sicher, was Sie unter "Paketinstallationsprogramm" verstehen, da es kein Programm mit genau diesem Namen AFAIK gibt. Können Sie die Schritte beschreiben, die Sie zur Installation von Paketen ausführen? Und ist dies eine GUI oder ein Befehlszeileninstallationsprogramm?
Scott Severance

Entschuldigung, ich meine "GDebi Packpage Installer" (GUI).
Ivan Castellanos

@IvanCastellanos: Starten Sie es als gksudo gdebi-gtk /full/path/to/package.deb? Ich fand es etwas wählerisch. Wenn ja, sollte es die Umgebung erben, aus der es gestartet wurde.
Scott Severance

3

Vollständige Offenlegung: Ich verwende kein Ubuntu ... aber ich hatte das gleiche Problem mit Debian.

xrdp startet /etc/xrdp/startwm.sh (es sei denn, Ubuntu hat diesen Speicherort geändert). Ich habe diese Zeile hinzugefügt:

. /etc/profile

an den Anfang von /etc/xrdp/startwm.sh und der PATH ist jetzt korrekt eingestellt.

Für Ubuntu hinzufügen

. /etc/environment

an die Spitze von /etc/xrdp/startwm.sh könnte dasselbe tun.


2

Das hat mich auch eine Weile verblüfft. /etc/environmentist kein Shell-Skript, daher können Sie es nicht als eines bezeichnen. Was für mich funktioniert hat, war das "sesman" -Skript des xrdp-Sitzungsmanagers in pam zu bearbeiten. Ich habe meiner /etc/pam.d/sesmanDatei die Zeile "Sitzung" hinzugefügt :

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

Dadurch lädt der Sitzungsmanager die /etc/environmentDatei bei der Anmeldung.


1

Theoretisch hinzufügen

. /etc/environment

würde funktionieren, aber es funktioniert nicht. Ich habe es einfach oben in meine .bashrc eingefügt, um das Problem zu beheben


1

Dank der vorherigen Antworten bin ich zu einer solchen Lösung gekommen:

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

Möglicherweise nicht das Optimum, aber es funktioniert (Ubuntu 12.04).


1

@ John: Ich glaube, du musst deine /etc/xrdpstartwm.sh überprüfen - die ersten Zeilen in meiner lauten:

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

Das heißt, wenn / etc / X11xinit / xinitrc vorhanden ist, wird diese Datei stattdessen ausgeführt - und es hilft nicht viel, die hinzuzufügen

. /etc/environment

zu /etc/xrdpstartwm.sh. :-)

/ Per Hertz

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.