Ubuntu memiliki PATH berbeda ketika diakses melalui sesi XRDP

9

Noob di sini: Saya punya masalah, ketika saya mengakses server saya melalui SSH, $ PATH benar

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

Tetapi ketika saya membuka server saya melalui sesi XRDP dan pergi ke terminal itu menunjukkan PATH yang salah :

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

Tangkapan layar keduanya: Tangkapan layar

Dan ini menciptakan masalah karena ketika saya mencoba menginstal sesuatu menggunakan "Package Installer" itu menunjukkan kesalahan ini (antara lain)

dpkg: warning: 'ldconfig' not found in PATH
Ivan Castellanos
sumber

Jawaban:

7

Untuk Ubuntu-18.04, edit /etc/pam.d/xrdp-sesman dan masukkan baris berikut di awal:

session       required   pam_env.so readenv=1 envfile=/etc/environment
session       required   pam_env.so readenv=1 envfile=/etc/default/locale
Marcelo
sumber
Ya, tanpa ini, sesi xrdp tidak memiliki semua variabel yang ditentukan di my /etc/environment!
wisbucky
5

1

PATH standar seluruh sistem didefinisikan dalam /etc/environment. Pertama, verifikasi bahwa itu disetel ke nilai waras. Untuk referensi, ini milik saya, yang sama dengan instalasi default:

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

2

Jika /etc/environmentwaras dan Anda masih mengalami masalah, Anda dapat mengganti PATH default di ~/.bashrc. Misalnya, saya memilikinya di .bashrc saya yang menambahkan direktori ke PATH saya jika dan hanya jika ada dan belum ada di PATH saya:

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

Karena muncul dari tangkapan layar Anda bahwa Anda telah mengaktifkan login root, pastikan juga untuk mengatur .bashrc root. (Omong-omong, karena root tidak bisa login secara default di Ubuntu, konfigurasi ini mungkin kurang teruji dan mungkin terkait dengan masalah Anda.)

3

Jika dua metode pertama gagal, maka periksa apakah klien XRDP Anda melakukan sesuatu yang eksotis. Jika demikian, Anda harus mengonfigurasinya untuk bekerja secara normal atau mengidentifikasi cara untuk mengatasinya.

Memperbarui

Saya telah melakukan beberapa pencarian di sekitar sistem. Anda dapat menemukan semua tempat di sistem Anda yang menentukan PATH dengan perintah berikut ( sudoada di sana karena beberapa file di bawah /etctidak dapat dibaca oleh pengguna normal):

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

Saya pikir aman untuk mengabaikan banyak dari tempat-tempat itu, menghasilkan perintah berikut:

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

Satu file yang terlihat mungkin (walaupun saya benar-benar tidak tahu banyak tentang itu) adalah /etc/login.defs. Anda mungkin melihatnya.

Selain itu, Anda juga dapat menangkap dotfiles Anda:

egrep -nr '\bPATH' $HOME/.* | less
Scott Severance
sumber
File "environment" adalah normal, menambahkan path yang benar ke ~ / .bashrc membuat perintah berjalan di terminal tetapi masih tidak berfungsi di "Package Installer" Ubuntu. Saya tidak dapat menemukan akar masalahnya tetapi saya punya solusi sekarang, saya membuat tautan simbolis di / bin / ke setiap program yang diperlukan (ldconfig, dll) ... ini mungkin merupakan pelanggaran keamanan sehingga saya akan meninggalkan pertanyaan ini terbuka jika ada yang punya solusi yang lebih baik.
Ivan Castellanos
@IvanCastellanos: Saya tidak yakin apa yang Anda maksud dengan "paket installer," karena tidak ada program dengan nama persis AFAIK. Bisakah Anda menjelaskan langkah-langkah yang Anda ambil untuk menginstal paket? Dan apakah ini penginstal GUI atau command-line?
Scott Severance
Maaf, maksud saya "Penginstal GDebi Packpage" (GUI).
Ivan Castellanos
@IvanCastellanos: Apakah Anda meluncurkannya gksudo gdebi-gtk /full/path/to/package.deb? Saya merasa agak pilih-pilih. Jika demikian, maka ia harus mewarisi lingkungan tempat ia diluncurkan.
Scott Severance
3

Pengungkapan penuh: Saya tidak menggunakan Ubuntu ... tapi saya punya masalah yang sama dengan Debian.

xrdp meluncurkan /etc/xrdp/startwm.sh (kecuali Ubuntu telah memodifikasi lokasi ini). Saya menambahkan baris ini:

. /etc/profile

ke bagian atas /etc/xrdp/startwm.sh dan PATH sekarang diatur dengan benar.

Untuk Ubuntu, menambahkan

. /etc/environment

ke bagian atas /etc/xrdp/startwm.sh mungkin melakukan hal yang sama.

EMI
sumber
2

Ini membingungkan saya untuk sementara waktu juga. /etc/environmentbukan skrip shell, jadi Anda tidak dapat menyebutnya sebagai skrip shell. Apa yang berhasil bagi saya adalah mengedit skrip manajer sesi xrdp "sesman" di pam. Saya menambahkan baris "session" ke /etc/pam.d/sesmanfile saya :

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

Ini membuat manajer sesi memuat /etc/environmentfile saat login.

Dave C
sumber
1

Secara teori menambahkan

. /etc/environment

akan bekerja tetapi tidak. Saya hanya meletakkannya di bagian atas .bashrc saya untuk memperbaiki masalah

John
sumber
1

Berkat jawaban sebelumnya saya datang ke solusi seperti itu:

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

Mungkin bukan yang paling optimal tetapi berfungsi (Ubuntu 12.04).

Alex Fliker
sumber
1

@ John: Saya percaya Anda perlu memeriksa /etc/xrdpstartwm.sh Anda - baris pertama di tambang berbunyi,

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

Itu berarti bahwa jika / etc / X11xinit / xinitrc ada, file itu akan dieksekusi sebagai gantinya - dan itu tidak akan banyak membantu untuk menambahkan

. /etc/environment

ke /etc/xrdpstartwm.sh. :-)

/ Per Hertz

Per Hertz
sumber