ไม่สามารถเชื่อมต่อกับ Mir: ไม่สามารถเชื่อมต่อกับเซิร์ฟเวอร์ซ็อกเก็ต: ไม่มีไฟล์หรือไดเรกทอรีดังกล่าว


18

หลังจากเข้าสู่ระบบในฐานะผู้ใช้อื่นฉันจะรันโปรแกรม GUI ได้อย่างไร

thufir@doge:~$ 
thufir@doge:~$ sudo -u hawat -i
hawat@doge:~$ 
hawat@doge:~$ whoami
hawat
hawat@doge:~$ 
hawat@doge:~$ pwd
/home/hawat
hawat@doge:~$ 
hawat@doge:~$ echo $HOME
/home/hawat
hawat@doge:~$ 
hawat@doge:~$ firefox
No protocol specified
Failed to connect to Mir: Failed to connect to server socket: No such file or directory
Unable to init server: Could not connect: Connection refused
Error: cannot open display: :0
hawat@doge:~$ 

คำตอบ:


13

export DISPLAY=:0ทำงานให้ฉัน ตรวจสอบให้แน่ใจว่าคุณดำเนินการคำสั่งบนระบบเชื่อมต่อไม่ใช่ในระบบที่คุณกำลังเชื่อมต่อ!


2
บนเครื่องที่ฉันใช้เชื่อมต่อไม่ใช่เครื่องที่คุณกำลังเชื่อมต่อ
user2938093

อ่านี่มันอยู่ในกล่องเดียวกัน บัญชีต่าง
พฤหัสบดีที่

1
ไม่มีผลกระทบใด ๆ กับคอมพิวเตอร์ของฉัน
ComputerScientist

ไม่ทำงานสำหรับฉัน ฉันไม่รู้ว่าทำไมสิ่งนี้ถึงเกิดขึ้นกับฉัน
Chan Kim

6

คำตอบนี้ใช้ได้กับ Ubuntu 16.04 และ Mir ของฉัน (ด้วยการดัดแปลงเล็กน้อย):

เรียกใช้คำสั่ง x ในฐานะผู้ใช้รายอื่นโดยใช้ xauth

สคริปต์ทุบตี Wrapper:

เพื่อความสะดวกฉันได้สร้างสคริปต์แรปเปอร์ของ wrapperซึ่งคุณอาจต้องการดาวน์โหลด/usr/local/bin/xsudoและทำเครื่องหมายไฟล์เรียกทำงาน ( chmod +x /usr/local/bin/xsudo)

จากนั้นเรียกใช้:

xsudo hawat firefox

ทางเลือกที่เป็นไปได้:

  • เป็นทางเลือกที่ง่ายกว่ามากคุณอาจพิจารณาpam_xauth(s. คำตอบนี้ ) อย่างไรก็ตามสิ่งนี้ไม่ได้ผลสำหรับฉันด้วยเหตุผลบางอย่าง (ฉันยังคงได้รับข้อผิดพลาดเกี่ยวกับ firefox ไม่สามารถเชื่อมต่อกับจอแสดงผลได้ที่: 0)
  • ในจำนวนมากของฟอรั่มที่คุณอาจจะเห็นคำสั่งxhost +local:หรือที่คล้ายกันซึ่งจะทำให้gksudo -u hawat firefoxการทำงานโดยไม่ต้องสคริปต์เสื้อคลุมใด ๆ อย่างไรก็ตามโปรดทราบว่านี่เป็นการเปิดช่องโหว่ด้านความปลอดภัย : ผู้ใช้ใด ๆ ที่ใช้งานอยู่ในโฮสต์ท้องถิ่นของคุณจะสามารถเข้าถึงแป้นพิมพ์เมาส์หน้าจอและอื่น ๆ
  • เคยมีsuxซึ่งถูกยกเลิกด้วยเหตุผลบางอย่าง - คุณอาจยังสามารถดาวน์โหลดและใช้งานได้ เท่าที่ฉันสามารถบอกได้มันทำอะไรบางอย่างที่คล้ายกับสคริปต์ของฉันมากขึ้นเท่านั้น น่าเสียดายที่ฉันไม่สามารถทราบได้ว่าทำไมสิ่งนี้จึงไม่ได้รับการดูแลอีกต่อไป (อาจเป็นเพราะตอนนี้เราควรใช้ pam_xauth แทน - s. ทางเลือกแรก)

3

หลังจากใช้เวลาไปกับสิ่งนี้มากเกินไปฉันค้นพบว่าด้วย Gnome บน Ubuntu 16.04 ค่าที่ถูกต้องคือDISPLAY=:1ไม่ใช่DISPLAY=:0อย่างที่มันเคยเป็นมา แต่โบราณ


1

export DISPLAY =: 0 ใช้งานได้ดี แต่นี่เป็นวิธีการแก้ปัญหาชั่วคราวเนื่องจากคุณต้องพิมพ์สิ่งนี้ทุกครั้งเมื่อคุณเปิดเครื่อง

ทางออกถาวร: ปัญหาอาจเกิดจากตัวแปร env_keep ใน / etc / sudoers เพิ่มบรรทัดต่อไปนี้ในตอนท้ายของ / etc / sudoers โดยใช้ gedit หรือใช้sudo visudo

ค่าเริ่มต้น env_keep + = "DISPLAY"

หมายเหตุ: โปรดทราบ ว่าจะใช้"+ =" เสมอในขณะที่เพิ่มใน env_keep ในกรณีที่มี env_keep อื่น ๆ ที่มี"="เปลี่ยนเป็น"+ ="เพราะการใช้"="จะแทนที่ค่าอื่น ๆ


FYI: โปรดทราบว่าคุณไม่ควรแก้ไขไฟล์ sudoers โดยตรง แต่โดยใช้visudowrapper ซึ่งมีการตรวจสอบสติก่อนที่จะเขียนไฟล์ sudoers ใหม่
Gabriel Fair
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.