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
Marcelo
источник
Да, без этого в сеансах xrdp отсутствовали все переменные, определенные в моем /etc/environment!
wisbucky
5

1

Общесистемный путь по умолчанию определен в /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

Так как на скриншоте видно, что вы включили root-логины, не забудьте также установить root .bashrc. (Кстати, поскольку 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
Скотт Северанс
источник
Файл "environment" нормальный, добавление правильных путей к ~ / .bashrc заставляет команды выполняться на терминале, но все еще не работает на Ubuntu "Package Installer". Я не смог найти корень проблемы, но теперь у меня есть решение, я создал символическую ссылку в / bin / для каждой требуемой программы (ldconfig и т. Д.) ... это, вероятно, нарушение безопасности, поэтому я оставлю этот вопрос открыть на случай, если у кого-то есть лучшее решение.
Иван Кастелланос
@IvanCastellanos: Я не уверен, что вы подразумеваете под «установщиком пакетов», поскольку нет программы с таким точным именем AFAIK. Не могли бы вы описать шаги, которые вы предпринимаете для установки пакетов? И это установщик с графическим интерфейсом или командной строки?
Скотт Северанс
Извините, я имею в виду «GDebi Packpage Installer» (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 может сделать то же самое.

EMI
источник
2

Это на некоторое время поставило меня в тупик. /etc/environmentне является сценарием оболочки, поэтому вы не можете назвать его как единое целое. Что мне помогло, так это редактирование скрипта менеджера сессий xrdp "sesman" в pam. Я добавил строку «сессия» в мой /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. :-)

/ На герц

На герц
источник