Ubuntu có một PATH khác khi được truy cập qua phiên XRDP


9

Noob ở đây: Tôi gặp sự cố, khi tôi truy cập máy chủ của mình qua SSH, $ PATH là chính xác

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

Nhưng khi tôi mở máy chủ của mình thông qua phiên XRDP và đi đến thiết bị đầu cuối thì nó hiển thị PATH không chính xác :

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

Ảnh chụp màn hình của cả hai: Ảnh chụp màn hình

Và điều này tạo ra một vấn đề bởi vì khi tôi cố gắng cài đặt một cái gì đó bằng cách sử dụng "Trình cài đặt gói", nó sẽ hiển thị lỗi này (trong số những thứ khác)

dpkg: warning: 'ldconfig' not found in PATH

Câu trả lời:


7

Đối với Ubuntu-18.04, hãy chỉnh sửa /etc/pam.d/xrdp-sesman và nhập các dòng sau vào lúc bắt đầu:

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

Có, không có điều này, các phiên xrdp đã thiếu tất cả các biến được định nghĩa trong của tôi /etc/environment!
wvducky

5

1

PATH mặc định trên toàn hệ thống được xác định trong /etc/environment. Đầu tiên, xác minh rằng nó được đặt thành một giá trị lành mạnh. Để tham khảo, đây là của tôi, giống như cài đặt mặc định:

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

2

Nếu /etc/environmentlành mạnh và bạn vẫn gặp sự cố, bạn có thể ghi đè PATH mặc định ~/.bashrc. Ví dụ: tôi có cái này trong .bashrc, nó sẽ thêm một thư mục vào PATH của tôi khi và chỉ khi nó tồn tại và chưa có trong PATH của tôi:

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

Vì nó xuất hiện từ ảnh chụp màn hình của bạn mà bạn đã bật đăng nhập gốc, hãy chắc chắn cũng đặt .bashrc của root. (Nhân tiện, vì root không thể đăng nhập theo mặc định trong Ubuntu, nên cấu hình này có lẽ ít được kiểm tra hơn và có thể liên quan đến vấn đề của bạn.)

3

Nếu hai phương thức đầu tiên thất bại, thì hãy kiểm tra xem máy khách XRDP của bạn có đang làm điều gì đó kỳ lạ không. Nếu vậy, bạn sẽ phải cấu hình nó hoạt động bình thường hoặc xác định một cách để làm việc xung quanh nó.

Cập nhật

Tôi đã làm một số tìm kiếm xung quanh hệ thống. Bạn có thể tìm thấy tất cả các vị trí trên hệ thống của mình chỉ định PATH bằng lệnh sau ( sudocó ở đó vì một số tệp bên dưới /etckhông thể đọc được bởi người dùng thông thường):

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

Tôi nghĩ an toàn khi bỏ qua nhiều nơi đó, dẫn đến lệnh sau:

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

Một tập tin có vẻ khả thi (mặc dù tôi thực sự không biết quá nhiều về nó) /etc/login.defs. Bạn có thể xem nó.

Ngoài ra, bạn cũng có thể grep dotfiles của mình:

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

Tệp "môi trường" là bình thường, việc thêm các đường dẫn chính xác vào ~ / .bashrc làm cho các lệnh chạy trên thiết bị đầu cuối nhưng vẫn không hoạt động trên "Trình cài đặt gói" của Ubuntu. Tôi không thể tìm ra gốc rễ của vấn đề nhưng bây giờ tôi đã có giải pháp, tôi đã tạo một liên kết tượng trưng trong / bin / cho mỗi chương trình cần thiết (ldconfig, v.v.) ... đây có thể là một vi phạm bảo mật nên tôi sẽ để lại câu hỏi này mở trong trường hợp bất cứ ai có một giải pháp tốt hơn.
Ivan Castellanos

@IvanCastellanos: Tôi không chắc ý của bạn là "trình cài đặt gói", vì không có chương trình nào có tên chính xác đó là AFAIK. Bạn có thể mô tả các bước bạn đang thực hiện để cài đặt các gói? Và đây là GUI hay trình cài đặt dòng lệnh?
Scott Severance

Xin lỗi, ý tôi là "Trình cài đặt gói GDebi" (GUI).
Ivan Castellanos

@IvanCastellanos: Bạn có khởi chạy nó gksudo gdebi-gtk /full/path/to/package.debkhông? Tôi đã tìm thấy nó là một chút kén chọn. Nếu vậy, nó sẽ kế thừa môi trường mà nó khởi chạy từ đó.
Scott Severance

3

Tiết lộ đầy đủ: Tôi không sử dụng Ubuntu ... nhưng tôi gặp vấn đề tương tự với Debian.

xrdp ra mắt /etc/xrdp/startwm.sh (trừ khi Ubuntu đã sửa đổi vị trí này). Tôi đã thêm dòng này:

. /etc/profile

lên đầu /etc/xrdp/startwm.sh và PATH hiện được đặt chính xác.

Đối với Ubuntu, thêm

. /etc/environment

đến đầu /etc/xrdp/startwm.sh có thể làm tương tự.


2

Điều này làm tôi bối rối một lúc quá. /etc/environmentkhông phải là tập lệnh shell, vì vậy bạn không thể gọi nó là tập lệnh. Điều làm việc cho tôi là chỉnh sửa tập lệnh "Sesman" của trình quản lý phiên xrd trong pam. Tôi đã thêm dòng "phiên" vào /etc/pam.d/sesmantệp của mình :

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

Điều này làm cho trình quản lý phiên tải /etc/environmenttệp khi đăng nhập.


1

Trong lý thuyết thêm

. /etc/environment

sẽ làm việc nhưng nó không. Tôi chỉ đặt nó ở đầu .bashrc của tôi để khắc phục sự cố


1

Nhờ những câu trả lời trước mà tôi đã đi đến một giải pháp như vậy:

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

Có thể không phải là tối ưu nhất nhưng hoạt động (Ubuntu 12.04).


1

@ John: Tôi tin rằng bạn cần kiểm tra /etc/xrdpstartwm.sh - những dòng đầu tiên trong tôi đọc,

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

Điều đó có nghĩa là nếu / etc / X11xinit / xinitrc tồn tại, tập tin đó sẽ được thực thi thay thế - và nó sẽ không giúp ích nhiều cho việc thêm

. /etc/environment

đến /etc/xrdpstartwm.sh. :-)

/ Per Hertz

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.