Ubuntu має інший PATH під час доступу до сесії XRDP


9

Noob тут: у мене проблема, коли я отримую доступ до свого сервера через SSH, $ PATH правильний

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

Але коли я відкриваю свій сервер через сеанс XRDP і переходжу до терміналу, він показує неправильний ПАТ :

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

Скріншот обох: Знімок екрана

І це створює проблему, оскільки коли я намагаюся інсталювати щось за допомогою "Установника пакунків", він показує цю помилку (серед інших)

dpkg: warning: 'ldconfig' not found in PATH

Відповіді:


7

Для Ubuntu-18.04 /etc/pam.d/xrdp-sesman на початку відредагуйте та введіть такі рядки:

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

Так, без цього в сесіях xrdp були відсутні всі змінні, визначені в моєму /etc/environment!
wisbucky

5

1

Загальносистемний PATH визначений у /etc/environment. По-перше, переконайтеся, що воно встановлено на здорове значення. Для довідки, ось моя, яка є такою ж, як і встановлення за замовчуванням:

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

2

Якщо /etc/environmentце здорово, і у вас все ще виникають проблеми, ви можете змінити параметр PATH за замовчуванням ~/.bashrc. Наприклад, я маю це у своєму .bashrc, який додає каталог до моєї PATH, якщо і лише тоді, коли він існує і ще не є в моєму PATH:

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

Оскільки на екрані екрану видно, що ви ввімкнули кореневі входи, обов’язково встановіть і .bashrc root. (До речі, оскільки root не може увійти до Ubuntu за замовчуванням, ця конфігурація, ймовірно, менш перевірена і, можливо, може бути пов'язана з вашою проблемою.)

3

Якщо перші два способи не вдалося, то перевірте, чи ваш клієнт XRDP чимось екзотичним. Якщо так, то вам доведеться або налаштувати його на нормальну роботу, або визначити спосіб обійти його.

Оновлення

Я займався деяким оглядом системи. Ви можете знайти всі місця у вашій системі, які задають PATH, за допомогою наступної команди ( sudoє, тому що деякі файли під /etcзвичайними користувачами не читаються):

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

Я думаю, що цілком безпечно ігнорувати багато з цих місць, в результаті чого з’являється наступна команда:

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

Один файл, який виглядає можливим (хоча я насправді про нього не надто знаю) /etc/login.defs. Ви можете поглянути на це.

Крім того, ви також можете зірвати свої точкові файли:

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

Файл "оточення" є нормальним, додаючи правильні шляхи до ~ / .bashrc, змушує команди виконуватись на терміналі, але все ще не працює над "Установкою пакетів" Ubuntu. Я не зміг знайти корінь проблеми, але в мене зараз є рішення, я створив символічне посилання в / bin / до кожної необхідної програми (ldconfig тощо) ... це, мабуть, порушення безпеки, тому я залишу це питання відкрити на випадок, якщо хтось має краще рішення.
Іван Кастельянос

@IvanCastellanos: Я не впевнений, що ви маєте на увазі під "установкою пакету", оскільки не існує програми з такою точною назвою AFAIK. Чи можете ви описати кроки, які ви виконуєте для встановлення пакетів? І це встановлення графічного інтерфейсу чи командного рядка?
Скотт Северанс

Вибачте, я маю на увазі "Установник пакунків GDebi" (GUI).
Іван Кастельянос

@IvanCastellanos: Ви запускаєте його як gksudo gdebi-gtk /full/path/to/package.deb? Я знайшов це трохи прискіпливо. Якщо так, то він повинен успадкувати середовище, з якого запускається.
Скотт Северанс

3

Повне розкриття: я не використовую Ubuntu ... але у мене була та сама проблема з Debian.

xrdp запускає /etc/xrdp/startwm.sh (якщо Ubuntu не змінив це місце). Я додав цей рядок:

. /etc/profile

вгору /etc/xrdp/startwm.sh і PATH тепер встановлений правильно.

Для Ubuntu додаємо

. /etc/environment

вгору /etc/xrdp/startwm.sh може зробити те саме.


2

Це натрапило і на якийсь час. /etc/environmentце не скрипт оболонки, тому його не можна назвати як один. Що для мене працювало - це відредагувати сценарій "sesman" менеджера xrdp в пам. Я додав рядок "сеанс" до свого /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

Це змушує менеджера сеансу завантажувати /etc/environmentфайл під час входу.


1

Теоретично додавання

. /etc/environment

буде працювати, але це не так. Я просто поставив це у верхній частині свого .bashrc, щоб виправити проблему


1

Завдяки попереднім відповідям я прийшов до такого рішення:

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

Може бути не найоптимальнішим, але робочим (Ubuntu 12.04).


1

@ Джон: Я вважаю, вам потрібно перевірити /etc/xrdpstartwm.sh - перші рядки в моєму читанні,

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

Це означає, що якщо / etc / X11xinit / xinitrc існує, цей файл буде виконуватися замість цього - і це не дуже допоможе додати

. /etc/environment

до /etc/xrdpstartwm.sh. :-)

/ Пер Герц

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.