Một chương trình X cần hai thông tin để kết nối với màn hình X.
Nó cần địa chỉ của màn hình, mà thường là :0
khi bạn đang đăng nhập tại địa phương hoặc :10
, :11
vv khi bạn đang đăng nhập từ xa (nhưng số lượng có thể thay đổi tùy thuộc vào có bao nhiêu kết nối X đang hoạt động). Địa chỉ của màn hình thường được chỉ định trong DISPLAY
biến môi trường.
Nó cần mật khẩu cho màn hình. Mật khẩu hiển thị X được gọi là cookie ma thuật . Cookie ma thuật không được chỉ định trực tiếp: chúng luôn được lưu trữ trong các tệp thẩm quyền X, đó là một tập hợp các bản ghi của biểu mẫu hình thức hiển thị :42
có cookie 123456
. Tệp thẩm quyền X thường được chỉ định trong XAUTHORITY
biến môi trường. Nếu $XAUTHORITY
không được đặt, chương trình sẽ sử dụng ~/.Xauthority
.
Xem Mở cửa sổ trên màn hình X từ xa (tại sao "Không thể mở màn hình")? để biết thêm chi tiết.
Trong trường hợp của bạn, DISPLAY
được đặt nhưng rõ ràng các chương trình không thể tìm thấy tệp cookie. Kiểm tra giá trị XAUTHORITY
trong phiên của bạn và dưới su
.
Nếu XAUTHORITY
không được thiết lập trong phiên của bạn và su
thiết lập HOME
biến môi trường vào thư mục gốc của nhà, thì bạn cần phải thiết lập XAUTHORITY
để /home/msz/.Xauthority
nơi /home/msz
là thư mục home của bạn.
Nếu su
loại bỏ XAUTHORITY
khỏi môi trường, hãy đặt nó trở lại hoặc cấu hình su
để không làm điều này.
Nếu thư mục chính của bạn nằm trên một số hệ thống tập tin như NFS, root có thể không thể đọc trực tiếp. Trong trường hợp đó, bạn có thể sao chép .Xauthority
tệp vào một vị trí khác trên hệ thống tệp không phải NFS:
XAUTHORITY_COPY=$(umask 077; mktemp)
cat "${XAUTHORITY:-~/.Xauthority}" "$XAUTHORITY_COPY"
XAUTHORITY="$XAUTHORITY_COPY" su
rm "$XAUTHORITY_COPY"
unset XAUTHORITY_COPY
export $(dbus-launch)
hoặc sử dụngxhost [+]
để có thể khởi chạy chương trình bằng X và tài khoản siêu người dùng của bạn.