เหตุใด x11 จึงไม่แสดงผลผ่านการเข้าสู่ระบบ ssh


22

ฉันลงชื่อเข้าใช้เซิร์ฟเวอร์ระยะไกลและพยายามแสดงแอปพลิเคชัน x (เช่น firefox) แต่ข้อความแสดงข้อผิดพลาดจะปรากฏขึ้น ด้านล่างเป็นความพยายามของฉันในการเปิด Firefox

Black@Black-PC ~
$ ssh -X kwagjj@$labserver -p 122
[kwagjj@James5 ~]$ firefox
Error: no display specified
[kwagjj@James5 ~]$ exit
logout
Connection to 143.248.146.204 closed.

Black@Black-PC ~
$ ssh -Y kwagjj@$labserver -p 122
[kwagjj@James5 ~]$ firefox
Error: no display specified
[kwagjj@James5 ~]$ 

ฉันใช้ -X, -Y เพราะฉันอ่านที่ไหนสักแห่งที่ตัวเลือกทั้งสองนี้เกี่ยวข้องกับข้อมูลรับรองเกี่ยวกับ X11 และสวิตช์เหล่านี้จะทำงานให้ฉัน แม้จะไม่มีสวิตช์ -X, -Y ความพยายามของฉันก็ล้มเหลว

ข้อผิดพลาด 'no display speicified' หมายถึงอะไร

ป.ล. สิ่งที่แปลกก็คือถ้าฉันเชื่อมต่อกับเซิร์ฟเวอร์ระยะไกลผ่านของฉัน PUTTY และทำซ้ำคำสั่ง 'firefox' มันทำงานได้หรือไม่!?! (ไฟแสดงในคอมพิวเตอร์ท้องถิ่น)

PS คอมพิวเตอร์ในพื้นที่ของฉันคือ Windows 7 ดังนั้นฉันจึง Xming ทำงานบนพื้นหลังเพื่ออนุญาตให้แสดง X11 สำหรับความพยายามที่เขียนบนส่วนบนคำสั่งถูกพิมพ์ในที่เทอร์มินัล Cygwin


คุณพยายามแสดงบางสิ่งบางอย่างในเครื่องจาก Cygwin terminal ของคุณหรือไม่? ตัวอย่างเช่นคุณสามารถค้นหายูทิลิตี X ในพื้นที่เช่น xclock และรันเพื่อดูว่าเกิดอะไรขึ้น หากคุณไม่สามารถแสดงผลแบบโลคัลจอแสดงผลระยะไกลจะไม่ทำงาน คุณอาจต้องใช้เซิร์ฟเวอร์ X สำหรับ Cygwin
unxnut

1
@unxnut ตามที่คุณชี้ให้เห็นDISPLAYตัวแปรของฉันไม่ได้ถูกตั้งค่า ดังนั้นฉันจึงตั้งค่าด้วยexport DISPLAY=:0.0' and executed xclock` และ xclock จะปรากฏขึ้น แต่เมื่อฉันเข้าสู่เซิร์ฟเวอร์ระยะไกลผ่าน ssh และลองxclockอีกครั้งมันพูดว่าError: Can't open display:
kwagjj

คำตอบ:


16

ตรวจสอบให้แน่ใจว่าคุณมีชุด DISPLAY-variable ใน cygwin-environment ของคุณ:

export DISPLAY=:0.0

หลังจากเชื่อมต่อกับ SSH แล้วให้ตรวจสอบว่าเชลล์นั้นรู้ตัวแปร DISPLAY ที่ถูกต้องด้วยหรือไม่:

echo $DISPLAY

4
ฉันจะตั้งค่าตัวแปรที่แสดงใน Cygwin termnial ของเครื่องคอมพิวเตอร์ในท้องถิ่นและ ssh'ed echo $DISPLAYหลังจากนั้นไปยังเซิร์ฟเวอร์ระยะไกลและการพิมพ์ แต่ยังคงเป็นตัวแปรที่แสดงในเซิร์ฟเวอร์ระยะไกลมีการตั้งค่าเพื่ออะไร ..
kwagjj

2
Error: Can't open display: :0.0
Ahmed

2
ทำสิ่งนี้:export DISPLAY=localhost:0
trogne

18

ฉันพบปัญหานี้ในการเชื่อมต่อกับเซิร์ฟเวอร์ RHEL7 ที่ไม่มีหัว

คุณต้องการแพ็คเกจ xorg-x11-xauth ที่ติดตั้งบนโฮสต์ของคุณเพื่อให้ตัวแปร DISPLAY ได้รับการตั้งค่าและได้รับอนุญาตอย่างถูกต้อง

หวังว่าฉันช่วยใครซักคนในบางเวลา


3
สิ่งที่ฉันกำลังมองหา ชื่นชมมาก!
josh-cain

1
คำตอบที่ดี! โซลูชันอื่น ๆ (การตั้งค่า DISPLAY ด้วยตนเองผ่านการส่งออก) จะส่งผลให้มีการส่งข้อมูลที่ไม่เข้ารหัสระหว่างไคลเอนต์และเซิร์ฟเวอร์! บน Debian Squeeze มันเป็นแพ็คเกจ "xauth" ที่ต้องติดตั้งเพื่อให้ทุกอย่างทำงานได้ หลังจากที่เข้าสู่ระบบอีกต่อกลับ URL + ท่าเรือและการโทรของเปิดสถานีในหน้าต่างท้องถิ่น ssh -Xecho $DISPLAYxterm &
Jpsy

7

ขอบคุณ @jensd @unxnut ที่ช่วยฉัน จากความคิดเห็นของคุณฉันสามารถเข้าใจปัญหาได้

การแก้ปัญหาต้องใช้สองขั้นตอน:

  1. ควรตั้งค่าตัวแปร DISPLAY อย่างเหมาะสม
  2. เมื่อ ssh'ing ไปยังเซิร์ฟเวอร์ระยะไกลสวิตช์ -X จะต้องเปิดอยู่

ความพยายามครั้งก่อนของฉันขาดหนึ่งหรือสองเงื่อนไขนี้

อย่างไรก็ตามสำหรับผู้ใช้ในภายหลังที่เห็นนี่คือตัวอย่างเพื่อแสดงให้คุณเห็นสิ่งที่ฉันพยายามจะพูด

case1

เครื่องในพื้นที่ของฉันจะไม่มีชุดตัวแปร DISPLAY แล้วฉันจะ ssh ไปยังเซิร์ฟเวอร์ระยะไกลที่มีสวิทช์ -X xclockแล้วลองรัน

Black@Black-PC ~
$ echo $DISPLAY

## the blank means that DISPLAY variable has not been specified##
Black@Black-PC ~
$ ssh -X kwagjj@$labserver -p 122
Last login: Tue Jun 24 22:23:13 2014 from 
[kwagjj@James5 ~]$ xclock
Error: Can't open display:
[kwagjj@James5 ~]$ setenv | grep $DISPLAY
DISPLAY: Undefined variable.

ในขณะที่คุณสามารถเห็นข้อผิดพลาดError: Can't open display:จะปรากฏขึ้นที่สถานีเซิร์ฟเวอร์ระยะไกล

case2

คราวนี้ที่เครื่องโลคอลฉันจะระบุตัวแปร DISPLAY แต่เมื่อฉันกำลังนั่งอยู่ฉันจะไม่เปิดสวิตช์ -X ผลลัพธ์จะล้มเหลว:

Black@Black-PC ~
$ export DISPLAY=:0.0

Black@Black-PC ~
$ echo $DISPLAY
:0.0

Black@Black-PC ~
$ ssh kwagjj@$labserver -p 122
Last login: Tue Jun 24 22:33:32 2014 from 
[kwagjj@James5 ~]$ xclock
Error: Can't open display:
[kwagjj@James5 ~]$ setenv | grep DISPLAY
[kwagjj@James5 ~]$ 

ตอนเริ่มต้นคุณจะเห็นว่าฉันได้ตั้งค่าตัวแปร DISPLAY อย่างเหมาะสมแล้ว แต่ถึงกระนั้นหลังจาก ssh'ing (ไม่มีสวิตช์ -X) xclock จะไม่ถูกเรียกใช้งาน

* ผลลัพธ์ที่แตกต่างกับsetenv | grep DISPLAYสามารถดูได้ที่นี่ (เปรียบเทียบกับ case1) ใน case2 ผลลัพธ์จะว่างเปล่า ในทางกลับกันผลลัพธ์ของ case1 ต่อบรรทัดคำสั่งนี้คือDISPLAY: undefined variable.... ฉันไม่แน่ใจว่าความแตกต่างนี้เกิดขึ้นอย่างไร แต่ฉันได้รับลางสังหรณ์ที่เกี่ยวข้องกับว่าคุณพอใจกับเงื่อนไข 1 หรือ 2 หรือไม่ .

case3

เวลานี้ฉันจะระบุตัวแปร DISPLAY ที่เครื่องโลคัลและยัง ssh ไปยังเซิร์ฟเวอร์ระยะไกลด้วยสวิตช์ -X ของฉัน

Black@Black-PC ~
$ echo $DISPLAY
:0.0

Black@Black-PC ~
$ ssh -X kwagjj@$labserver -p 122
Warning: untrusted X11 forwarding setup failed: xauth key data not generated
Warning: No xauth data; using fake authentication data for X11 forwarding.
Last login: Tue Jun 24 22:37:27 2014 from 
[kwagjj@James5 ~]$ xclock &
[1] 9174
[kwagjj@James5 ~]$ setenv | grep DISPLAY
DISPLAY=localhost:11.0
[kwagjj@James5 ~]$

ด้วยการตั้งค่านี้ใช้xclockงานได้ !! นี่เป็นภาพหน้าจอเพื่อพิสูจน์ว่าฉันไม่ได้โกหก ป้อนคำอธิบายรูปภาพที่นี่ xclock แสดงขึ้นในเครื่องของฉัน

ตรวจสอบผลลัพธ์อีกครั้งsetenv | grep DISPLAYในกรณีนี้ DISPLAY=localhost:11.0ตอนนี้ก็แสดงให้เห็นว่า จากสิ่งที่ฉันรู้นี่เกี่ยวข้องกับ MIT-MAGIC-COOKIE ในไฟล์. Xauthority แต่เนื่องจากฉันไม่รู้มากเกี่ยวกับเรื่องนี้ฉันจะไม่ไปไหนต่อไป

สรุป: จากทั้งสามกรณีข้างต้นเราสามารถยืนยันได้ว่าเพื่อให้ X Windows ระยะไกลสามารถแสดงได้อย่างถูกต้องทั้ง 1. ตัวแปร DISPLAY ของเครื่องท้องถิ่นและ 2. -Xสวิตช์ssh ต้องถูกตั้งค่าอย่างถูกต้อง แน่นอนเซิร์ฟเวอร์ระยะไกลควรอนุญาต X11forwarding

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