ฉันมีคำถามเดียวกันกับคุณ แต่สำหรับผู้ใช้ปกติ สมมติว่าฉันต้องการเริ่ม Firefox โดยใช้บัญชีผู้ใช้ foo ฉันเข้าสู่ระบบในฐานะบาร์:
[bar@localhost ~]$ sudo -u foo -H firefox
น่าเศร้าที่คำสั่งนั้นล้มเหลวโดยมีข้อผิดพลาดเหมือนกับในคำถาม (เช่นไม่มีโปรโตคอลที่ระบุและไม่สามารถเปิดจอแสดงผลได้)
โซลูชันของฉันคือเพียงเพิ่ม foo ผู้ใช้ลงในรายการการเข้าถึงที่ได้รับอนุญาตไปยังเซิร์ฟเวอร์ X
xhost si:localuser:foo
และนั่นก็คือฉันสามารถเปิด Firefox (และแอพพลิเคชั่น X อื่น ๆ ) โดยใช้sudo
และผู้ใช้งาน foo
พื้นหลัง : บน X Window จะมีสถาปัตยกรรมไคลเอนต์ / เซิร์ฟเวอร์ เมื่อคุณเรียกใช้แอปพลิเคชันคุณจะต้องขอการอนุญาตจาก X server เพื่อแสดง ตามค่าเริ่มต้นเมื่อคุณเปิดเซสชัน (คุณเข้าสู่ระบบแบบกราฟิก) คุณ (ผู้ใช้ของคุณ) จะได้รับอนุญาตให้สื่อสารกับเซิร์ฟเวอร์และแอปพลิเคชันการแสดงผลอย่างชัดเจน ผู้ใช้รายอื่นไม่มีสิทธิ์นี้นอกจากคุณจะระบุ xhost
เป็นเครื่องมือในการจัดการรายการสิทธิ์ si
แสดงให้เห็นว่ากฎเป็นฝั่งเซิร์ฟเวอร์และจะอนุญาตให้ผู้ใช้ท้องถิ่นfoo
เพื่อการใช้งานจอแสดงผล X Window มีประสิทธิภาพมากในเรื่องนี้และคุณสามารถแสดงแอปพลิเคชันระยะไกลในพื้นที่ได้ด้วยการเล่นกับDISPLAY
ตัวแปรสภาพแวดล้อมและxhost
(แต่ไม่ จำกัด เฉพาะพวกมัน) ในสมัยก่อนเมื่อมีคนพิมพ์xhost +
และอนุญาตให้ทุกคนใช้เซสชั่น X ของพวกเขาโดยปริยายมันเป็นไปได้ที่จะแสดงแอปพลิเคชันบนหน้าจอของพวกเขาสำหรับการเล่นแผลง ๆ ;-) ไม่มากในปัจจุบันเนื่องจากผู้คนใช้งานน้อยลง 10 ปีที่ผ่านมา)
PS: ฉันทำสิ่งนี้เพื่อเปิด Firefox ในรูปแบบ "คุก" (เพื่อหลีกเลี่ยงช่องโหว่เช่นสำหรับ pdf.jsในอนาคต) แต่ฉันพบว่าการโทร Firefox ผ่าน sudo จะไม่อนุญาตให้เข้าถึงเสียงหรือฮาร์ดแวร์วิดีโอ แต่มีหนึ่งคนที่แต่งตัวประหลาดที่ชัดเจนอธิบายวิธีการเร่งฮาร์ดแวร์วิดีโอเปิดใช้งานและเสียงเมื่อโทร Firefox ผ่าน sudo YMMV พร้อมคำแนะนำเหล่านี้เช่นฉันยังคงได้รับอนุญาตปฏิเสธด้วยเสียง แต่วิดีโอทำได้ดี (ทดสอบใน Fedora 22 ด้วย SELinux ON)