ฉันจะรันแอปพลิเคชั่นแบบกราฟิกบนเซิร์ฟเวอร์ระยะไกลเมื่อลงชื่อเข้าใช้ผ่าน SSH ได้อย่างไร


14

ฉันกำลังพยายามเรียกใช้geditจากเทอร์มินัล SSH บน Windows เชื่อมต่อกับอินสแตนซ์ Amazon EC2 ที่ใช้เซิร์ฟเวอร์ Ubuntu 12.04 และฉันได้รับข้อผิดพลาดนี้:

Cannot open display:

ฉันจะแก้ไขได้อย่างไร

คำตอบ:


14

เมื่อคุณใช้ Windows อยู่ข้างๆคุณจะต้องมี SSH- ไคลเอนต์ที่รันเซิร์ฟเวอร์ X ในเครื่องบน Windows เพื่อเรียกใช้โปรแกรมกราฟิกจากเซิร์ฟเวอร์จากระยะไกลบนหน้าจอของคุณ

จากประสบการณ์ฉันขอแนะนำMobaXTermฟรีที่มีฟังก์ชั่นนี้ในตัว โปรดดาวน์โหลดและทดลองใช้:

ป้อนคำอธิบายรูปภาพที่นี่

หากคุณได้รับข้อผิดพลาดนั่นเป็นเพราะบางครั้งอาจมีการตั้งค่าอิมเมจเซิร์ฟเวอร์ขั้นต่ำเพื่อให้ X-forwarding ในกรณีนั้นโปรดแสดงความคิดเห็นและฉันจะช่วยคุณแก้ปัญหา ฉันทำสิ่งนี้ด้วย VPS ขั้นต่ำจำนวนมากที่ใช้ Ubuntu / Debian


17

ดังนั้นคุณกำลังเชื่อมต่อจากพีซีที่บ้านของคุณ (เรียกว่าเครื่องของคุณ ) กับเซิร์ฟเวอร์ (เรียกว่าเซิร์ฟเวอร์ ) ผ่านssh ? คุณต้องการเริ่มโปรแกรมด้วยหน้าต่างกราฟิกบนเซิร์ฟเวอร์ผ่านเครื่องของคุณหรือไม่? หากนั่นถูกต้องกว่าโดยทั้งหมดหมายความว่าอ่านต่อ

ลองเรียกโปรแกรมเพื่อเริ่มต้นgeditแต่กระบวนการนั้นเหมือนกันสำหรับทุกคน ขึ้นอยู่กับตำแหน่งที่คุณต้องการดูหน้าต่างกราฟิกข้ามไปที่หัวเรื่องขวา

หน้าต่างบนหน้าจอของเครื่อง

ถ้าคุณต้องการดูและใช้หน้าต่างของ gedit บนเครื่องรีโมต แต่เริ่มทำงานบนเซิร์ฟเวอร์คุณจะต้องการให้เชลล์เซสชันของคุณมีลักษณะดังนี้:

user@remote-machine:~$ ssh -X user@server
Last login: Tue Aug 14 13:47:04 2012 from clientXX
*******************************************************************************
M O T D (Message Of The Day)
*******************************************************************************
user@server:~$ gedit .bash_aliases 

** (gedit:7851): WARNING **: Could not load theme icon gtk-home: Icon 'gtk-home' not present in theme

(gedit:7851): Gtk-WARNING **: Attempting to store changes 

ไม่สนใจคำเตือนมันเป็นเรื่องปกติ - หน้าต่าง gedit จะปรากฏขึ้นบนหน้าจอของเครื่องระยะไกลของคุณราวกับว่ามันจะดูบนเซิร์ฟเวอร์ เคล็ดลับคือการใช้ตัวเลือก "-X" ssh -Xซึ่งเปิดใช้งาน X-tunneling และตั้งค่าDISPLAYตัวแปรให้ถูกต้อง

สมมติว่าคุณกำลังใช้ไคลเอ็นต์ SSH ที่สนับสนุน X11 และเซิร์ฟเวอร์ของคุณมี X-server ที่ทำงานอยู่ (บางตัวโดยไม่จำเป็นต้องใช้ GUI ไม่ต้องเรียกใช้ X-server) โดยเฉพาะอย่างยิ่งบน windows นี่อาจเป็นปัญหาเนื่องจากโปรแกรม windows terminal ส่วนใหญ่ไม่มี X ดังที่izxระบุMobaXTermเป็นหนึ่งในไคลเอนต์ SSH จำนวนมากสำหรับ windows ที่มี X-Server

สำหรับเซิร์ฟเวอร์ที่ขาด X11 คุณจะต้องติดตั้ง

บนหน้าจอของเซิร์ฟเวอร์

นอกจากนี้คุณยังสามารถเริ่มต้นอินสแตนซ์บนหน้าจอเซิร์ฟเวอร์ของคุณโดยการเรียก gedit ดังนี้:

ssh user@server
DISPLAY=:0.0 gedit

คุณต้องแทนที่ค่าที่ถูกต้องแทนที่จะ:0.0เป็นบนหน้าจอ X ขวา (สำคัญเฉพาะถ้ามีหลายหน้าจอเชื่อมต่อกับเซิร์ฟเวอร์ของคุณหรือถ้ามันค่อนข้างแปลกในการกำหนดค่า)

นี่คือสถานการณ์ที่พบได้บ่อยที่สุดสำหรับสิ่งที่ไม่สามารถใช้งานได้หากเซิร์ฟเวอร์ขาด X11-Server แต่กว่าจะไม่มีจอภาพเชื่อมต่ออยู่หรือไม่มีส่วนต่อประสานกราฟิกกับผู้ใช้และคุณไม่ต้องอ่านสิ่งนี้: D

ทฤษฎีนิดหน่อย

ฉันผู้เชี่ยวชาญในการนี้ แต่วิธีที่ผมคิดว่ามันทำงานคือว่าหน้าจอทางกายภาพแต่ละเช่นจอคอมพิวเตอร์แต่ละเครื่องที่เชื่อมต่อกับเครื่องคอมพิวเตอร์ส่วนบุคคลที่ได้รับเป็นจำนวนมากทำงานในรูปแบบของ0.0, 1.0, 2.0...

หมายเลขนี้ถูกกำหนดโดย X-Window-System aka X11 นั่นคือเลเยอร์เพื่อจัดหาเครือข่ายและอินเทอร์เฟซกราฟิกขั้นพื้นฐานที่ Unity, Gnome, KDE และสิ่งอื่น ๆ ที่สามารถสร้างได้

คุณสามารถดูจำนวนเครื่องที่แสดงและจำนวนที่ใช้โดยเรียกใช้for x in /tmp/.X11-unix/X*; do echo ":${x##*X}"; doneบนเครื่องที่เป็นปัญหา * จากนั้นคอมพิวเตอร์แต่ละเครื่องที่ได้รับการกำหนดค่าเพื่อให้หน้าจอพร้อมใช้งานและใช้งานเซิร์ฟเวอร์ X จะมีชื่อโฮสต์ คุณสามารถใช้โฮสต์หน้าจอจากเครื่องใด ๆ ในเครือข่ายเดียวกันโดยการตั้งค่าของตัวแปรตามDISPLAY DISPLAY=hostname:0.0Ssh ทำสิ่งนี้ให้คุณอย่างเหมาะสมหากคุณมี-Xตัวเลือก

* หมายเหตุ: ฉันคิดว่ามีวิธีที่ดีกว่านี้สำหรับ for-loop

ถ้าทุกอย่างอื่นล้มเหลว

ใช้โปรแกรมแก้ไขข้อความเชลล์ vi, vim, nanoและemacsที่พบมากที่สุดและอย่างน้อยหนึ่งของพวกเขาจะได้รับการติดตั้งและการดำเนินงาน ของพวกเขาnanoเป็นคำอธิบายที่ง่ายที่สุดและมากที่สุด


@ การหัส: ถ้าคุณเป็น SSHing จาก Windows มันขึ้นอยู่กับลูกค้าว่าจะใช้งานได้หรือไม่ ลูกค้าบางคนไม่สื่อสารกับ X11 และดังนั้นจึงไม่มีการส่งต่อ X - สำหรับบางคนแม้ว่ามันจะทำงานได้ดี หากไม่ทำงานให้เปลี่ยนไคลเอ็นต์ SSH สำหรับ Windows หรือใช้ nano, vim หรือ emacs ตามที่ xyious แนะนำไว้ในคำตอบของเขา
con-f-use

ใช่ฉันได้รับการลงคะแนนเห็นในโปรไฟล์ของฉันและสงสัยว่าทำไมไม่มีความคิดเห็นหรืออะไร ไม่สำคัญไม่ได้เกี่ยวกับคุณเพียงแค่สงสัย - ดีใจที่คุณได้รับการแก้ไขปัญหาและฉันอาจจะช่วยเล็กน้อยที่นี่
con-f-use

ฉันได้แก้ไขforห่วง bit..it :0 :0.0ตอนนี้จะแสดงอยู่บนจอแสดงผลเท่านั้นเช่น รู้สึกอิสระที่จะกลับถ้าคุณคิดว่ามันไม่ใช่สิ่งที่คุณต้องการ ..
heemayl

0

อะไร Con-F-ใช้งานกล่าวว่า

โดยทั่วไปคุณมีเทอร์มินัลผ่าน SSH และ Gedit เป็นโปรแกรม GUI คำตอบของการใช้งาน Con-f-use จะทำงานได้จากเซสชันไคลเอนต์ Linux GUI

ตัวเลือกอื่น ๆ คือใช้ตัวแก้ไข GUI ที่ไม่ใช่เช่น nano, Vi หรืออื่น ๆ มากมาย

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