Điều đầu tiên trước tiên: XDG_RUNTIME_DIR
Để trả lời câu hỏi đầu tiên của bạn, "XDG_RUNTIME_DIR là gì?" , nó là một biến môi trường được đặt tự động khi bạn đăng nhập. Nó cho bất kỳ chương trình nào bạn chạy ở đâu để tìm thư mục dành riêng cho người dùng trong đó nó có thể lưu trữ các tệp tạm thời nhỏ. Lưu ý rằng XDG_RUNTIME_DIR
được đặt theo pam_systemd
(8) , vì vậy nó không thực sự liên quan đến X (chạy chương trình đồ họa), đây là vấn đề bạn dường như đang gặp phải.
Cách khắc phục sự cố
Câu hỏi thứ hai của bạn, "Làm thế nào để khắc phục sự cố này?" là một trong những rất tốt. Điều đó có nghĩa bạn đang quan tâm đến không chỉ những gì sửa chữa, nhưng cũng cách để con nó ra một mình. Để bắt đầu, hãy xem các thông báo lỗi đầu tiên trước. Cụ thể, tìm kiếm No protocol specified
hoặc WARNING **: Could not open X display
, sẽ cho bạn thấy rằng vấn đề xảy ra với X (còn được gọi là Hệ thống cửa sổ X ), đó là cách các chương trình đồ họa được hiển thị trên màn hình của bạn. Biết rằng sẽ đưa ra nhiều câu hỏi xử lý sự cố trong tâm trí của bạn.
X HIỂN THỊ
Câu hỏi tiếp theo của bạn có thể là, "màn hình X" này chứng tỏ điều gì không thể mở? "Màn hình" là địa chỉ cho màn hình của bạn. [*] Bất kỳ chương trình nào muốn ghi vào màn hình của bạn đều phải biết địa chỉ. Bạn có thể xem màn hình X của mình là gì bằng cách kiểm tra biến môi trường HIỂN THỊ:
echo $DISPLAY
Và bạn có thể kiểm tra những gì sudo
nghĩ rằng HIỂN THỊ của bạn bằng cách gõ:
sudo -s
echo $DISPLAY
exit
Nếu nó không hiển thị bất cứ điều gì, thì đó là vấn đề. (Xem sửa chữa dưới đây).
XÁC NHẬN
Nhưng, nếu đó không phải là vấn đề và DISPLAY
được đặt chính xác sudo
thì sao? Sau đó, bạn có thể tự hỏi, X có một số loại quyền ngăn người dùng khác viết trên màn hình của tôi không? Nếu bạn nghĩ rằng, bạn đã đúng, X có hai phương thức ủy quyền chính: xauth
và xhost
. Cái được sử dụng phổ biến nhất hiện nay là xauth
(1) sử dụng XAUTHORITY
biến môi trường. Một lần nữa, hãy kiểm tra xem nó có được đặt đúng không sudo
:
echo $XAUTHORITY
sudo -s
echo $XAUTHORITY
exit
Nếu XAUTHORITY
chỉ vào một tệp trong thư mục chính của bạn cho bạn, nhưng nó trống khi bạn chạy sudo
, thì đó là vấn đề.
CỐ ĐỊNH: Lưu các biến môi trường
Vì vậy, những gì sửa chữa? Nếu một trong hai người DISPLAY
hoặc XAUTHORITY
biến môi trường không nhận được lưu trên sudo
, bạn có thể nói sudo
(8) để bảo vệ môi trường bằng cách sử dụng các -E
tùy chọn, như sau:
sudo -E evince
Một cách tốt hơn: env_keep
Bạn cũng có thể hỏi, Đợi đã, nếu -E
làm cho mọi thứ hoạt động kỳ diệu, thì tại sao nó không được mặc định sudo
? Câu trả lời là nó là một mối nguy hiểm an ninh tiềm tàng. Các biến môi trường ảnh hưởng đến cách các chương trình hoạt động và bạn không muốn tất cả chúng được xuất từ tài khoản người dùng đến thư mục gốc. Cách "chính xác" để làm điều đó là thêm dòng Defaults env_keep += "DISPLAY XAUTHORITY"
vào tệp sudoers
(5) bằng cách sử dụng visudo
(8) . Bạn có thể kiểm tra biến môi trường nào sudo bảo tồn bằng cách chạy:
sudo sudo -V
(Có, bạn gõ sudo
hai lần). Tôi khuyên bạn nên đặt dòng không nằm trong tệp sudoers mặc định ( /etc/sudoers
), nhưng trong tệp cục bộ sẽ không bị ghi đè khi bạn nâng cấp hệ thống. Bạn có thể làm như vậy:
sudo visudo -f /etc/sudoers.d/local
Nhưng chờ đã, nếu không có cái nào ở trên hoạt động thì sao?
Tôi nghĩ rằng đây là một câu trả lời khá kỹ lưỡng, nhưng nếu bạn vẫn gặp rắc rối, có một điều khác tôi muốn đề xuất. Bạn có thể sử dụng xhost
(1) để cấp quyền truy cập cho một người dùng cụ thể trên máy chủ cục bộ (máy của bạn) như vậy,
xhost si:localuser:root
Trong trường hợp này, chúng tôi chỉ định root
là tên người dùng, vì đó là tài khoản sudo
chạy các chương trình như.
[*] : Q: Tôi chỉ có một màn hình, vậy tại sao màn hình X cần có "địa chỉ"? Trả lời: Đó là vì X có thể hoạt động không chỉ trên máy của bạn mà còn qua internet. Với X , thật dễ dàng để chạy các chương trình trên máy của bạn hiển thị trên các máy chủ và chương trình internet khác trên các máy chủ khác xuất hiện trên màn hình của bạn (giả sử bạn cho phép chúng).