สิ่งแรกสิ่งแรก: XDG_RUNTIME_DIR
หากต้องการตอบคำถามแรกของคุณ"XDG_RUNTIME_DIR คืออะไร" มันเป็นตัวแปรสภาพแวดล้อมที่ตั้งค่าโดยอัตโนมัติเมื่อคุณเข้าสู่ระบบมันบอกโปรแกรมใด ๆ ที่คุณเรียกใช้ที่จะหาไดเรกทอรีเฉพาะผู้ใช้ที่มันสามารถเก็บไฟล์ชั่วคราวขนาดเล็ก โปรดทราบว่าXDG_RUNTIME_DIR
ถูกตั้งค่าโดยpam_systemd
(8)ดังนั้นจึงไม่เกี่ยวข้องกับX (การเรียกใช้โปรแกรมแบบกราฟิก) ซึ่งเป็นปัญหาที่คุณดูเหมือนจะมี
วิธีแก้ปัญหา
คำถามที่สองของคุณ"วิธีแก้ไขปัญหานี้" เป็นคนดีมาก นั่นหมายความว่าคุณกำลังสนใจในการไม่เพียง แต่สิ่งที่แก้ไข แต่ยังวิธีการที่จะคิดออกด้วยตัวคุณเอง ในการเริ่มต้นให้ดูข้อความข้อผิดพลาดแรกก่อน โดยเฉพาะอย่างยิ่งการค้นหาNo protocol specified
หรือWARNING **: Could not open X display
ควรแสดงให้คุณเห็นว่าปัญหาเกิดขึ้นกับX (หรือที่เรียกว่าThe X Windowing System ) ซึ่งเป็นวิธีแสดงโปรแกรมกราฟิกบนหน้าจอของคุณ รู้ว่าควรตั้งคำถามการแก้ไขปัญหาในใจของคุณ
X DISPLAY
คำถามต่อไปของคุณอาจเป็น"X display"ที่ไม่สามารถเปิดได้ "display" คือที่อยู่สำหรับหน้าจอของคุณ [*]โปรแกรมใด ๆ ที่ต้องการเขียนไปยังหน้าจอของคุณจะต้องทราบที่อยู่ คุณสามารถดูว่าจอแสดงผล X ของคุณคืออะไรโดยตรวจสอบตัวแปรสภาพแวดล้อม DISPLAY:
echo $DISPLAY
และคุณสามารถตรวจสอบสิ่งที่sudo
คิดว่าการแสดงผลของคุณคือโดยพิมพ์:
sudo -s
echo $DISPLAY
exit
หากไม่แสดงสิ่งใดแสดงว่าเป็นปัญหา (ดูการแก้ไขด้านล่าง)
ดิสเพลย์
แต่จะเกิดอะไรขึ้นถ้านั่นไม่ใช่ปัญหาและการDISPLAY
ตั้งค่าถูกต้องsudo
หรือไม่ จากนั้นคุณอาจสงสัยว่าXมีสิทธิ์บางอย่างที่ป้องกันผู้ใช้รายอื่นจากการเขียนบนจอแสดงผลของฉันหรือไม่? หากคุณคิดว่าคุณต้องการจะขวา, Xมีสองวิธีการอนุญาตหลักและxauth
xhost
สิ่งที่ใช้บ่อยที่สุดในวันนี้คือxauth
(1)ซึ่งใช้XAUTHORITY
ตัวแปรสภาพแวดล้อม ตรวจสอบอีกครั้งว่ามีการตั้งค่าอย่างถูกต้องในsudo
:
echo $XAUTHORITY
sudo -s
echo $XAUTHORITY
exit
หากXAUTHORITY
ชี้ไปที่ไฟล์ในโฮมไดเร็กตอรี่ของคุณ แต่มันว่างเปล่าเมื่อคุณเรียกใช้แสดงsudo
ว่าเป็นปัญหา
การแก้ไข: บันทึกตัวแปรสภาพแวดล้อม
ดังนั้นการแก้ไขคืออะไร? หากตัวแปรสภาพแวดล้อมDISPLAY
หรือXAUTHORITY
ตัวแปรสภาพแวดล้อมไม่ได้รับการบันทึกsudo
คุณสามารถบอกsudo
(8)เพื่อรักษาสภาพแวดล้อมโดยใช้-E
ตัวเลือกดังนี้:
sudo -E evince
วิธีที่ดีกว่า: env_keep
คุณอาจรวมทั้งขอให้รอถ้า-E
ทำให้ทุกอย่างทำงานได้อย่างน่าอัศจรรย์แล้วทำไมไม่ได้เริ่มต้นสำหรับsudo
? คำตอบคือมันอาจเป็นอันตรายต่อความปลอดภัย ตัวแปรสภาพแวดล้อมส่งผลกระทบต่อการทำงานของโปรแกรมและคุณไม่ต้องการให้ส่งออกทั้งหมดจากบัญชีผู้ใช้ไปยังรูท "ถูกต้อง" วิธีการทำก็คือการเพิ่มบรรทัดDefaults env_keep += "DISPLAY XAUTHORITY"
ไปsudoers
(5)ไฟล์โดยใช้(8)visudo
คุณสามารถตรวจสอบว่าตัวแปรสภาพแวดล้อม sudo รักษาไว้โดยการเรียกใช้:
sudo sudo -V
(ใช่คุณพิมพ์sudo
สองครั้ง) ฉันแนะนำให้วางสายไม่ได้อยู่ในไฟล์ sudoers เริ่มต้น ( /etc/sudoers
) แต่ในไฟล์ภายในเครื่องที่จะไม่ถูกเขียนทับเมื่อคุณอัพเกรดระบบ คุณสามารถทำเช่นนั้น:
sudo visudo -f /etc/sudoers.d/local
แต่เดี๋ยวก่อนจะเกิดอะไรขึ้นถ้าไม่มีการทำงานใด ๆ ข้างต้น
ฉันคิดว่านี่เป็นคำตอบที่ค่อนข้างละเอียด แต่ถ้าคุณยังมีปัญหาอยู่มีอีกอย่างที่ฉันอยากแนะนำ คุณสามารถใช้xhost
(1)เพื่อให้สิทธิ์การเข้าถึงแก่ผู้ใช้เฉพาะบนโฮสต์ท้องถิ่น (เครื่องของคุณ) เช่นนั้น
xhost si:localuser:root
ในกรณีนี้เรากำลังระบุroot
ว่าเป็นชื่อผู้ใช้เนื่องจากเป็นบัญชีที่ใช้sudo
งานโปรแกรมเป็น
[*] : ถาม:ฉันมีหน้าจอเดียวแล้วทำไมหน้าจอ X ถึงต้องการ "ที่อยู่"? ตอบ:เป็นเพราะXสามารถทำงานได้ไม่เพียง แต่ในเครื่องของคุณ แต่ผ่านทางอินเทอร์เน็ต ด้วยXคุณสามารถเรียกใช้โปรแกรมบนเครื่องของคุณที่แสดงบนโฮสต์อินเทอร์เน็ตอื่นและโปรแกรมบนโฮสต์อื่นที่ปรากฏบนหน้าจอของคุณ (สมมติว่าคุณให้สิทธิ์แก่พวกเขา)