ข้อผิดพลาด `ไม่ได้ระบุโปรโตคอล 'เมื่อเรียกใช้จากเครื่องระยะไกลผ่าน ssh


10

ฉันมีสคริปต์เพียงเพื่อเรียกใช้แอปพลิเคชั่น Graphical (GUI) ดังต่อไปนี้

#cat gui.sh
#!/bin/bash 
./gui -display 127.0.0.1:0.0    

เมื่อฉันเรียกใช้จากเครื่องท้องถิ่น ( ./gui.sh) มันทำงานได้อย่างสมบูรณ์แบบ แต่เมื่อฉันพยายามเรียกใช้จากเครื่องระยะไกลผ่าน ssh ฉันได้รับข้อผิดพลาดดังต่อไปนี้

[root@localhost]# ssh -f 192.168.3.77 "cd /root/Desktop/GUI/ && "./gui.sh""   
No protocol specified  
gdm: cannot connect to X server 192.168.3.77:0.0   
[root@localhost]#    

ฉันไม่รู้ว่าโพรโทคอลใดถามหรือฉันหายไปอะไร ฉันลองโดยตรงโดยเริ่มแอปพลิเคชันโดยไม่มีสคริปต์ [ ssh -f 192.168.3.77 "cd /root/Desktop/GUI/ && "./gui""] แต่ผลลัพธ์เหมือนกัน ฉันได้ลองชุดต่างๆเช่นssh -Y, ssh -fYและอื่น ๆ แต่ผลที่ได้คือเดียวกัน!
ประการที่สองสำหรับการสมัครของฉันมีเงื่อนไขที่ต้องทำก่อนอื่นเราต้องเข้าไปในไดเรกทอรีที่โปรแกรมนั้นอยู่
โซลูชั่นใด ๆ ?

คำตอบ:


5

ความหมายของตัวเลือก-display 127.0.0.1:0.0ขึ้นอยู่กับguiโปรแกรมนั้น แต่มีความเป็นไปได้สูงที่จะหมายถึง "แสดงผลบน X display 127.0.0.1onge" นี่เป็นการแสดงโลคัล X แรกที่เข้าถึงผ่าน TCP นี่เป็นสิ่งที่ผิดอย่างแน่นอนด้วยเหตุผลสองประการ ก่อนอื่นการแสดงโลคัล X ควร:0ไม่ใช่127.0.0.1:0เพราะการรวมที่อยู่ IP ทำให้การรับส่งข้อมูลผ่าน TCP แทนที่จะเป็นการเข้าถึงภายในเครื่อง การผ่าน TCP อาจไม่ทำงานขึ้นอยู่กับว่า X server ยอมรับการเชื่อมต่อ TCP หรือไม่ แม้ว่าจะเป็นเช่นนั้นคุณจะสูญเสียการปรับให้เหมาะสมที่แสดงในเครื่อง

ปกติแล้วการแสดงผลที่ใช้จะแสดงโดยDISPLAYตัวแปรสภาพแวดล้อมและตัวแปรนั้นมีแนวโน้มที่จะตั้งค่าอย่างถูกต้องโดยอัตโนมัติ (โดยปกติหากDISPLAYมีค่าที่ผิดนั่นเป็นเพราะคุณได้ทำกับมันข้อยกเว้นหลักคือการใช้screenหรือtmux.)

โปรแกรมของคุณอาจค้นหาค่าของDISPLAYตัวแปรสภาพแวดล้อมเนื่องจากมีแนวโน้มที่จะเกิดขึ้นโดยอัตโนมัติด้วยการเรียก xlib ดังนั้นคุณควรโทร./guiมาสคริปต์ของคุณไม่ได้ทำอะไรที่มีประโยชน์ หากโปรแกรมของคุณยืนยัน-displayอาร์กิวเมนต์ให้ใช้ตัวแปรสภาพแวดล้อม:

./gui -display "$DISPLAY"

4

ssh -Yและssh -Xควรเป็นการเริ่มต้นที่ดี แต่คุณส่งต่อเซิร์ฟเวอร์ X ด้วยหรือไม่

$ grep X /etc/ssh/sshd_config
X11Forwarding yes

มิฉะนั้นจะไม่ทำงาน

สิ่งที่ต้องตรวจสอบก็คือตัวแปร DISPLAY ซึ่งควรแสดงดังนี้:

$ echo $DISPLAY
$ localhost:10.0

ssh -Yนี้ได้รับการทำงานหลังจากที่ ตัวแปรเดียวกันเป็นที่ว่างเปล่าถ้าฉัน ssh โดยไม่ต้องหรือ-Y-X

สำหรับความแตกต่างระหว่าง-Xและ-Yอ่าน man page ของ ssh


3

วิดีโอนี้อธิบายถึงวิธีการแก้ไขข้อผิดพลาดทีละขั้นตอน หากคุณไม่ต้องการดูให้ทำตามข้อความด้านล่าง:

ข้อผิดพลาดที่ไม่ระบุโปรโตคอลระบุว่า "ผู้ใช้ไม่ทราบวิธีเปิดใช้แอปพลิเคชัน GUI" และ "ผู้ใช้ไม่ได้รับอนุญาตให้เปิดแอปพลิเคชัน GUI" ในวิดีโอโปรแกรมประยุกต์แบบ GUI dbcaคือ

ชิ้นส่วนสำคัญของวิดีโอนี้กำลังเรียกใช้คำสั่งxhost +ที่ให้สิทธิ์ผู้ใช้เพื่อแสดง GUI จากระยะไกลจากระบบรีโมตไปยังระบบโลคัล


6
xhost +จะให้สิทธิ์การเข้าถึงกับทุกคนเพื่อเชื่อมต่อกับจอแสดงผลของคุณ ฉันจะแนะนำxhost +local:[hostname or ip]
vimdude

นี้และนี้คือสิ่งที่ได้รับการแก้ไขข้อผิดพลาดสำหรับฉัน +1
Yug Singh

1

Debian Jessie เพิ่มด้วย:

export XAUTHORITY=/.Xauthority

xhost +แก้ไขปัญหาของฉัน (ในฝั่งไคลเอ็นต์)
danger89

ที่ช่วยขอบคุณ! XAUTHORITY ของฉันคือ/tmp/xauth-1000-_0แต่หลังจากเริ่มเซสชัน X เพิ่มเติมสองครั้งที่ไฟล์หายไป - มีเพียงหนึ่งในสามที่เหลืออยู่ เพื่อแก้ไขปัญหาสำหรับ windows ทั้งหมดฉันกู้คืนได้ด้วย:ln -s ~/.Xauthority /tmp/xauth-1000-_0
joeytwiddle

0

ฉันโดนปัญหาเดียวกันฉันแก้ไขมันโดยการเปลี่ยนตัวแปรสภาพแวดล้อม DISPLAY จาก:

export DISPLAY=:0.0

ถึง

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