Ubuntu ma inną ŚCIEŻKĘ w przypadku dostępu przez sesję XRDP


9

Noob tutaj: Mam problem, kiedy uzyskuję dostęp do mojego serwera przez SSH, $ PATH jest poprawny

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

Ale kiedy otwieram mój serwer przez sesję XRDP i przechodzę do terminala, wyświetla on niepoprawną ŚCIEŻKĘ :

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

Zrzut ekranu obu: Zrzut ekranu

A to stwarza problem, ponieważ kiedy próbuję zainstalować coś przy użyciu „Instalatora pakietów”, pokazuje ten błąd (między innymi)

dpkg: warning: 'ldconfig' not found in PATH

Odpowiedzi:


7

W przypadku Ubuntu-18.04 edytuj /etc/pam.d/xrdp-sesman i wprowadź na początku następujące wiersze:

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

Tak, bez tego w sesjach xrdp brakuje wszystkich zmiennych zdefiniowanych w moim /etc/environment!
wisbucky,

5

1

Domyślna ścieżka systemowa jest zdefiniowana w /etc/environment. Najpierw sprawdź, czy jest ustawiony na rozsądną wartość. Dla porównania, oto moja, która jest taka sama jak domyślna instalacja:

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

2)

Jeśli /etc/environmentjest to normalne i nadal masz problemy, możesz zastąpić domyślną PATH w ~/.bashrc. Na przykład mam to w moim .bashrc, który dołącza katalog do mojej ŚCIEŻKI wtedy i tylko wtedy, gdy istnieje i nie ma go już w ŚCIEŻCE:

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

Ponieważ z twojego zrzutu ekranu wynika, że ​​masz włączone logowanie użytkownika root, pamiętaj, aby ustawić również .bashrc użytkownika root. (Nawiasem mówiąc, ponieważ root nie może zalogować się domyślnie w Ubuntu, ta konfiguracja jest prawdopodobnie mniej przetestowana i może być związana z twoim problemem).

3)

Jeśli pierwsze dwie metody zawiodą, sprawdź, czy Twój klient XRDP robi coś egzotycznego. Jeśli tak, musisz albo skonfigurować go, aby działał normalnie, albo określić sposób obejścia tego.

Aktualizacja

Rozglądałem się po systemie. Możesz znaleźć wszystkie miejsca w systemie, które określają ŚCIEŻKĘ za pomocą następującego polecenia ( sudoistnieje, ponieważ niektóre pliki /etcsą nieczytelne dla zwykłych użytkowników):

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

Myślę, że można bezpiecznie zignorować wiele z tych miejsc, co powoduje następujące polecenie:

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

Jednym z plików, który wygląda na możliwy (choć tak naprawdę nie wiem zbyt wiele na ten temat) jest /etc/login.defs. Możesz na to spojrzeć.

Ponadto możesz również grepować swoje pliki kropkowe:

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

Plik „środowiska” jest normalny, dodanie poprawnych ścieżek do ~ / .bashrc powoduje, że polecenia działają na terminalu, ale nadal nie działają na „Instalatorze pakietów” Ubuntu. Nie mogłem znaleźć źródła problemu, ale teraz mam rozwiązanie, utworzyłem dowiązanie symboliczne w / bin / do każdego wymaganego programu (ldconfig itp.) ... prawdopodobnie jest to naruszenie bezpieczeństwa, więc zostawię to pytanie otwarte na wypadek, gdyby ktoś miał lepsze rozwiązanie.
Ivan Castellanos

@IvanCastellanos: Nie jestem pewien, co rozumiesz przez „instalator pakietów”, ponieważ nie ma programu o takiej nazwie AFAIK. Czy mógłbyś opisać kroki, które podejmujesz, aby zainstalować pakiety? I czy jest to GUI lub instalator z wiersza poleceń?
Scott Severance

Przepraszam, mam na myśli „GDebi Packpage Installer” (GUI).
Ivan Castellanos

@IvanCastellanos: Czy uruchamiasz go jako gksudo gdebi-gtk /full/path/to/package.deb? Uważam, że jest trochę wybredna. Jeśli tak, to powinien odziedziczyć środowisko, z którego został uruchomiony.
Scott Severance

3

Pełne ujawnienie: Nie używam Ubuntu ... ale miałem ten sam problem z Debianem.

xrdp uruchamia /etc/xrdp/startwm.sh (chyba że Ubuntu zmodyfikowało tę lokalizację). Dodałem tę linię:

. /etc/profile

na początku pliku /etc/xrdp/startwm.sh, a PATH jest teraz ustawiony poprawnie.

W przypadku Ubuntu dodawanie

. /etc/environment

na górze pliku /etc/xrdp/startwm.sh może zrobić to samo.


2

To mnie też zaskoczyło. /etc/environmentnie jest skryptem powłoki, więc nie można go tak nazwać. Dla mnie zadziałała edycja skryptu „sesman” menedżera sesji xrdp w pam. Do mojego /etc/pam.d/sesmanpliku dodałem wiersz „sesja” :

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

To powoduje, że menedżer sesji ładuje /etc/environmentplik przy logowaniu.


1

Teoretycznie dodawanie

. /etc/environment

działałoby, ale nie działa. Po prostu umieściłem go na górze mojego .bashrc, aby rozwiązać problem


1

Dzięki poprzednim odpowiedziom doszedłem do takiego rozwiązania:

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

Może nie być najbardziej optymalny, ale działa (Ubuntu 12.04).


1

@ John: Uważam, że musisz sprawdzić swój plik /etc/xrdpstartwm.sh - pierwsze linie w moim czytają,

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

Oznacza to, że jeśli istnieje plik / etc / X11xinit / xinitrc, plik ten zostanie zamiast tego wykonany - i nie pomoże dodanie

. /etc/environment

do /etc/xrdpstartwm.sh. :-)

/ Per Hertz

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.