ขอบคุณ @jensd @unxnut ที่ช่วยฉัน จากความคิดเห็นของคุณฉันสามารถเข้าใจปัญหาได้
การแก้ปัญหาต้องใช้สองขั้นตอน:
- ควรตั้งค่าตัวแปร DISPLAY อย่างเหมาะสม
- เมื่อ 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