ฉันกำลังพยายามเรียกใช้gedit
จากเทอร์มินัล SSH บน Windows เชื่อมต่อกับอินสแตนซ์ Amazon EC2 ที่ใช้เซิร์ฟเวอร์ Ubuntu 12.04 และฉันได้รับข้อผิดพลาดนี้:
Cannot open display:
ฉันจะแก้ไขได้อย่างไร
ฉันกำลังพยายามเรียกใช้gedit
จากเทอร์มินัล SSH บน Windows เชื่อมต่อกับอินสแตนซ์ Amazon EC2 ที่ใช้เซิร์ฟเวอร์ Ubuntu 12.04 และฉันได้รับข้อผิดพลาดนี้:
Cannot open display:
ฉันจะแก้ไขได้อย่างไร
คำตอบ:
เมื่อคุณใช้ Windows อยู่ข้างๆคุณจะต้องมี SSH- ไคลเอนต์ที่รันเซิร์ฟเวอร์ X ในเครื่องบน Windows เพื่อเรียกใช้โปรแกรมกราฟิกจากเซิร์ฟเวอร์จากระยะไกลบนหน้าจอของคุณ
จากประสบการณ์ฉันขอแนะนำMobaXTermฟรีที่มีฟังก์ชั่นนี้ในตัว โปรดดาวน์โหลดและทดลองใช้:
หากคุณได้รับข้อผิดพลาดนั่นเป็นเพราะบางครั้งอาจมีการตั้งค่าอิมเมจเซิร์ฟเวอร์ขั้นต่ำเพื่อให้ X-forwarding ในกรณีนั้นโปรดแสดงความคิดเห็นและฉันจะช่วยคุณแก้ปัญหา ฉันทำสิ่งนี้ด้วย VPS ขั้นต่ำจำนวนมากที่ใช้ Ubuntu / Debian
ดังนั้นคุณกำลังเชื่อมต่อจากพีซีที่บ้านของคุณ (เรียกว่าเครื่องของคุณ ) กับเซิร์ฟเวอร์ (เรียกว่าเซิร์ฟเวอร์ ) ผ่าน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.0
Ssh ทำสิ่งนี้ให้คุณอย่างเหมาะสมหากคุณมี-X
ตัวเลือก
* หมายเหตุ: ฉันคิดว่ามีวิธีที่ดีกว่านี้สำหรับ for-loop
ใช้โปรแกรมแก้ไขข้อความเชลล์ vi
, vim
, nano
และemacs
ที่พบมากที่สุดและอย่างน้อยหนึ่งของพวกเขาจะได้รับการติดตั้งและการดำเนินงาน ของพวกเขาnano
เป็นคำอธิบายที่ง่ายที่สุดและมากที่สุด
for
ห่วง bit..it :0
:0.0
ตอนนี้จะแสดงอยู่บนจอแสดงผลเท่านั้นเช่น รู้สึกอิสระที่จะกลับถ้าคุณคิดว่ามันไม่ใช่สิ่งที่คุณต้องการ ..
อะไร Con-F-ใช้งานกล่าวว่า
โดยทั่วไปคุณมีเทอร์มินัลผ่าน SSH และ Gedit เป็นโปรแกรม GUI คำตอบของการใช้งาน Con-f-use จะทำงานได้จากเซสชันไคลเอนต์ Linux GUI
ตัวเลือกอื่น ๆ คือใช้ตัวแก้ไข GUI ที่ไม่ใช่เช่น nano, Vi หรืออื่น ๆ มากมาย