SSH: เรียกใช้โปรแกรม GUI บนหน้าจอระยะไกลไม่ใช่ X display


11

ปัญหา

คนส่วนใหญ่ต้องการเชื่อมต่อกับเซิร์ฟเวอร์ผ่าน ssh ด้วยตัวเลือก "-X" เพื่อเรียกใช้โปรแกรม GUI บนโฮสต์ระยะไกลโดยใช้หน้าจอไคลเอนต์ ฉันต้องการเรียกใช้โปรแกรม GUI บนหน้าจอจริงที่แนบมากับเซิร์ฟเวอร์ เป็นไปได้ไหม ให้ฉันเจาะจงมากขึ้น:

สถานการณ์ของฉันมีดังต่อไปนี้: ฉันมีเวิร์กสเตชันที่ไม่มีแป้นพิมพ์หรือเมาส์ แต่มีจอภาพเชื่อมต่ออยู่ ฉันต้องการใช้ SSH กับแล็ปท็อปของฉันและสามารถเปิดตัวโปรแกรมกราฟิกบางอย่างเช่น xeyes หรือ ssvnc และให้มันปรากฏบนหน้าจอของเวิร์กสเตชัน

[xapple@laptop ~]$ ssh workstation
Last login: Mon Sep 26 20:03:35 2011 from laptop
[xapple@workstation ~]$ export DISPLAY=:0
[xapple@workstation ~]$ xeyes
No protocol specified
Error: Can't open display: :0

แก้ไข: ข้อมูลเพิ่มเติม

ฉันควรอธิบายบางสิ่งให้ชัดเจนยิ่งขึ้น:

  • ฉันมีการเข้าถึง sudo บนเวิร์กสเตชันฉันสามารถติดตั้งอะไรก็ได้ถ้าจำเป็น
  • เวิร์กสเตชันใช้ส่วนติดต่อผู้ใช้ของ GNOME
  • ก่อนที่จะตัดการเชื่อมต่อแป้นพิมพ์และเมาส์ออกจากเวิร์กสเตชันฉันเข้าสู่เซสชั่น GNOME สามารถดูเดสก์ท็อป GNOME ของฉันได้จากหน้าจอของเวิร์กสเตชัน
  • ฉันไม่ต้องการเรียกใช้โปรแกรมจากแล็ปท็อปของฉันบนเวิร์กสเตชัน ฉันต้องการเรียกใช้โปรแกรมเวิร์กสเตชันบนเวิร์กสเตชัน xeyes หรือไฟล์เรียกใช้งานใด ๆ ที่พบได้บนรีโมตเซิร์ฟเวอร์และควรรันบนมอนิเตอร์ของรีโมตเซิร์ฟเวอร์
  • ฉันเข้าใจว่าการดำเนินการนี้จะทำให้ฉันอยู่ในสถานการณ์ที่เคอร์เซอร์ของฉันจะไม่เชื่อมต่อกับอินเทอร์เฟซ ฉันไม่สามารถคลิกที่สิ่งต่างๆได้ ไม่เป็นไร.

ความช่วยเหลือใด ๆ ที่ชื่นชมอย่างมาก!


คุณดำเนินการxhost +บนเซิร์ฟเวอร์ของคุณหรือไม่
karlphillip

ฉันคิดว่านี่เป็นคำถามที่น่าสนใจเช่นถ้าคุณมี ubuntu PC 3 เครื่องที่ใช้ Synergy เพื่อใช้แป้นพิมพ์และเมาส์เดียวกันระหว่าง 3 ... เมื่อคุณเข้าสู่ระบบคุณต้องเข้าสู่ระบบ 3 ครั้ง จะเป็นการดีถ้าคุณสร้างสคริปต์ที่ล็อกอินคุณเข้าสู่พีซีอีกสองเครื่องเมื่อคุณลงชื่อเข้าใช้พีซีหลัก
Sverre

คำตอบ:


5

แอปพลิเคชัน xlib ใด ๆ จะต้องเชื่อมต่อกับ xserver คุณต้องบอกให้แอปเชื่อมต่อกับเซิร์ฟเวอร์โดย:

  • การตั้งค่า DISPLAY ตัวแปรสภาพแวดล้อม
  • ใช้แฟล็กบรรทัดคำสั่งเช่น -display

xserver แรกสามารถเข้าถึงได้โดยสตริงการเชื่อมต่อ ': 0' ดังนั้นลองทำสิ่งนี้:

xeyes -display :0

หรือสิ่งนี้

env DISPLAY=:0 xeyes

ในหลายกรณี (เช่นเมื่อเริ่มต้นด้วย GDM ของ GNOME) การตั้งค่าXAUTHORITYก็จำเป็นเช่นกันเนื่องจากเซิร์ฟเวอร์ X11 จะใช้ไฟล์ Xauthority ชั่วคราว
user1686

ที่น่าสนใจหลังจากตั้งค่าตัวแปร $ DISPLAY ตอนนี้ฉันได้รับนอกเหนือจากข้อความ "ข้อผิดพลาด: ไม่สามารถเปิดการแสดงผล" ข้อความ "ไม่ได้ระบุโปรโตคอล" เมื่อพยายามเรียกใช้ xeyes
xApple

@ grawity ขอบคุณสำหรับคำแนะนำ ฉันจะถามว่าฉันจะตั้งค่า XAUTHORITY เพื่อให้คำสั่งทำงานได้อย่างไร
xApple

5

เวิร์กสเตชันนี้ใช้เซิร์ฟเวอร์ X Windows หรือไม่ หากปราศจากนั่นก็คือสิ่งที่สงสัยทั้งหมด

คุณต้องการบางสิ่งเพื่อประมวลผลข้อมูลเป็นกราฟิกพิกเซลสีและตำแหน่ง 'จอภาพ' ไม่มีประโยชน์หากไม่มีซอฟต์แวร์ใด ๆ ให้เรียกใช้

สมมติว่ามันเป็น (แต่จากข้อความให้แน่ใจว่าเสียงเป็นอย่างอื่น)

ระบุชื่อโฮสต์ (และการแก้ไข DNS ที่เหมาะสมผ่าน / etc / hosts หรือ DNS หรืออะไรก็ตาม) ของ 'เวิร์กสเตชัน' และ 'แล็ปท็อป' ... ถ้าไม่ให้แทนที่ชื่อโฮสต์เครื่องด้วยที่อยู่ IP ที่เหมาะสม

ssh workstation
xhost +laptop

จากนั้นคุณสามารถออกจากระบบของเวิร์กสเตชัน ณ จุดนี้เนื่องจากเป็นการตั้งค่าสิทธิ์บน Xserver ของเวิร์กสเตชันเพื่ออนุญาตให้ 'แล็ปท็อป' เชื่อมต่อ

หากคุณเริ่มโปรแกรมของคุณด้วยการตั้งค่า DISPLAY env var อย่างเหมาะสมคุณสามารถทำให้แอปพลิเคชันแสดงบนเวิร์กสเตชันในขณะที่ทำงานบนแล็ปท็อปของคุณ

DISPLAY=workstation:0 xeyes

-หรือ-

export DISPLAY=workstation:0
xeyes

วิธีการใดวิธีหนึ่งจะทำงานหลังทำให้อะไร X11 ที่เกี่ยวข้องจะปรากฏบนเวิร์กสเตชันเมื่อเริ่มต้นจากเปลือกที่ (หวังว่ามันสมเหตุสมผล)

บรรทัด 'xhost' คือการอนุญาตให้แล็ปท็อปเชื่อมต่อกับ Xserver ของเวิร์กสเตชัน ถ้าไม่มีคุณจะได้รับอนุญาตยกเว้นว่าคุณเริ่มต้นเซิร์ฟเวอร์ X โดยไม่มีสิทธิ์ซึ่งไม่แนะนำจริงๆ การป้องกัน 'xhost' ยังคงอ่อนแอเนื่องจากข้อมูลถูกส่ง 'ข้อความธรรมดา' ระหว่างแล็ปท็อปและเวิร์กสเตชันและสามารถดมกลิ่น แต่มันเป็นทางออกที่ง่าย

หากคุณต้องการความเป็นส่วนตัวคุณจะต้องตั้งค่าอุโมงค์ที่เข้ารหัสระหว่างแล็ปท็อปของคุณและเวิร์กสเตชัน (พอร์ต 6000 สำหรับการแสดงผล: 0) ใช่แล้วมันแปลกประหลาด ณ จุดนี้

หากคุณอยู่ในสภาพแวดล้อมที่มีการควบคุมการใช้คำสั่ง 'xhost + แล็ปท็อป' จะเพียงพอหากคุณออกจากส่วน 'แล็ปท็อป' ของคำสั่งนั้น 'xhost +' แล้วทุกคนสามารถเชื่อมต่อกับ Xserver และแสดงสิ่งต่างๆ

อย่าลืมว่าเมาส์ของคุณไม่ได้เชื่อมต่อกับเวิร์กสเตชัน Xserver และคุณจะไม่สามารถควบคุมหน้าต่างหรือคลิกสิ่งต่างๆได้

หากคุณต้องการเชื่อมต่อเมาส์ฉันขอแนะนำบางอย่างเช่น x2x, synergy, vnc หรือแอปพลิเคชั่นการแชร์หน้าจอที่ใช้ Windows X


ขอบคุณสำหรับคำตอบ ! คุณพูดถูกฉันอาจต้องระบุบางสิ่งเพิ่มเติม: (1) เวิร์กสเตชันใช้ส่วนติดต่อผู้ใช้ของ GNOME (2) ฉันไม่ต้องการเรียกใช้โปรแกรมจากแล็ปท็อปของฉัน Xeyes หรืออะไรก็ตามที่ควรทำงานบนเวิร์กสเตชันด้วยจอภาพของเวิร์กสเตชัน (3) ไม่เป็นไรฉันเข้าใจว่าเคอร์เซอร์ของฉันจะไม่เชื่อมต่อ
xApple

โอ้คุณต้องใช้ ssh กับเวิร์กสเตชันจริงๆตั้งค่าตัวแปร DISPLAY เป็น 'localhost: 0' (หรือเพียงแค่ ': 0') และเริ่มแอปของคุณ คุณจะต้องจัดการกับการอนุญาต (xhost + localhost น่าจะเป็นคำตอบที่ดีที่สุด) และไม่ต้องรอหรือหรือ! (แบ็คกราวน์และการปฏิเสธ) หรือคำสั่ง bg / disown จากเชลล์ดังนั้นแอปจะไม่ออกเมื่อคุณออกจากระบบ (เว้นแต่เป็นสิ่งที่คุณต้องการแน่นอน)
lornix

อาดังนั้นปัญหาของฉันอาจเป็นเพียงปัญหาสิทธิ์เท่านั้น แม้ว่าถ้าฉันเรียกใช้ "xeyes" เป็น root ข้อความแสดงข้อผิดพลาดจะเหมือนกัน หากคุณโพสต์คำตอบที่แก้ไขปัญหาการอนุญาตฉันสามารถทำเครื่องหมายว่าแก้ไขแล้ว!
xApple

มีใครเข้าสู่ระบบในเซสชัน Windows X บนเวิร์กสเตชันหรือไม่ หากไม่มีรหัสที่ฟังการเชื่อมต่อของโปรแกรมจะยังไม่เปิดใช้งาน (ฉันลดความซับซ้อนลงอย่างมาก!) ลอง ssh'ing ไปที่เวิร์กสเตชันแล้ว 'startx' จากนั้นคุณอาจเชื่อมต่อกับจอแสดงผลได้ อีกวิธีหนึ่งคือใช้เซิร์ฟเวอร์เปล่า bone X พิมพ์ 'X: 0 &' ตั้งค่าตัวแปร DISPLAY และดำเนินการ 'xhost + laptop' (หรือเพียงแค่ 'xhost +') แต่นั่นก็ค่อนข้างต่ำสำหรับคนส่วนใหญ่ (ยอดเยี่ยมสำหรับการทดสอบ!)
lornix

ใช่ฉันเข้าสู่ระบบ GNOME บนเวิร์กสเตชันก่อนที่จะตัดการเชื่อมต่อของแป้นพิมพ์และเมาส์ ไม่มีน้อยฉันพยายามดำเนินการคำสั่ง "startx" จากเซสชั่น ssh ของฉัน ข้อความแสดงข้อผิดพลาดมีดังต่อไปนี้: "X: ผู้ใช้ไม่ได้รับอนุญาตให้เรียกใช้เซิร์ฟเวอร์ X, ยกเลิก"
xApple
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.