ส่งต่อ X11 ด้วย Xming ผ่าน SSH หรือไม่


11

ฉันเข้าถึง SSH แล้วและฉันได้ติดตั้ง Xming พร้อมกับแบบอักษร Xming ฉันได้รับการกำหนดค่าที่จะฉาบ x11 ไปข้างหน้าและบอกว่ามันจะวางสก์ท็อปที่ localhost นี้: 0, ตามคำแนะนำของที่นี่

อย่างไรก็ตามหลังจากที่ฉันเข้าสู่ระบบและstartxฉันได้รับ ... ไม่มีอะไร หรือว่ามันจะทำงานเป็นข้อความจำนวนมากซึ่งดูเหมือนว่าทุกอย่างทำงานได้ แต่ฉันได้รับเคอร์เซอร์ในหน้าต่างคอนโซลซึ่งทำหน้าที่เหมือนอยู่ในสถานะรอ และนั่นคือมัน

ฉันกำลังคิดถึงอะไร ฉันต้องเปิดบางสิ่งบางอย่างเพื่อดูเดสก์ท็อปหรือไม่

ฉันต้องการส่งต่อเดสก์ท็อปของฉันไปยังพีซีที่ทำงานของฉันเพื่อให้ฉันสามารถเล่นกับ RasPi ตอนกลางวันโดยไม่ต้องเสียบปลั๊กฮาร์ดแวร์ กรุณาช่วย.

แก้ไข:

สกรีนช็อตของสิ่งที่เกิดขึ้นกับ Xming running และ I SSH in and call startx:

SSH พร้อมการตอบสนอง Xming

แก้ไข 2:

คำตอบนี้บอกว่าstartxไม่จำเป็นเพราะมันเริ่มเซิร์ฟเวอร์ RasPi X และฉันกำลังใช้เซิร์ฟเวอร์ Xming บน Windows ในกรณีนั้นฉันจะไปที่เดสก์ท็อป / GUI บน Xming จาก Windows ได้อย่างไร เพราะถึงแม้จะใช้ Xming และเปิดใช้งาน SSH ฉันก็ไม่ได้รับอะไรเลยนอกจากหน้าจอคอนโซลปกติ บางทีฉันอาจทำผิด สิ่งที่ฉันต้องการคือ RasPi GUI ปกติของฉันที่ทำงานอยู่ในหน้าต่างบนพีซี Windows ระยะไกลของฉัน ฉันไม่ต้องการใช้ VNC ฉันกำลังส่งต่อผ่านอินเทอร์เน็ต ฉันจะไปที่นั่นได้อย่างไร?


2
ฉันต้องการเรียกใช้เซสชั่นกราฟิกจาก Raspberry ของฉันไปยังคอมพิวเตอร์ Windows ของฉัน และเมื่อฉันเห็นข้อความของคุณที่บอกว่า startx หมายถึง start X server ฉันเข้าใจว่าฉันต้องเริ่มโปรแกรม X ... ดังนั้นขอเริ่ม ... x-session-manager! ด้วยวิธีนี้คุณจะมีเซสชันกราฟิกบนคอมพิวเตอร์ที่อยู่ห่างไกล ขอบคุณคุณให้ทางของฉัน!

คำตอบ:


15

หากคุณเริ่ม Xming บนคอมพิวเตอร์ Windows ของคุณแสดงว่าคุณมีเซิร์ฟเวอร์ X อยู่แล้ว คุณไม่จำเป็นต้องเริ่มต้นเซิร์ฟเวอร์ X ของราสเบอร์รี่ Pi startxของคุณโดยใช้ แอปพลิเคชั่น X ของคุณจะทำงานบน Raspberry Pi แต่แอปพลิเคชันจะวาดลงบนเซิร์ฟเวอร์ Xming X ของ Windows

เอกสารที่คุณเชื่อมโยงระบุว่าคุณต้องเริ่ม X server บน Windows และไม่ได้กล่าวถึงว่าคุณต้องเริ่ม X server บน Linux ในประโยคสุดท้ายของเอกสาร:

ตอนนี้คุณควรจะสามารถรันแอปพลิเคชั่น X จากโฮสต์บนเดสก์ท็อปของคุณ

"แอปพลิเคชัน X" ไม่ได้หมายถึงเซิร์ฟเวอร์ X (ซึ่งควรเริ่มต้นด้วยstartx) แต่แอปพลิเคชันเช่น xclock, xeyes และอื่น ๆ

แอปพลิเคชั่น X พิเศษหนึ่งรายการคือlxsessionซึ่งจะเริ่มตัวจัดการเซสชันมาตรฐานของ LXDE (อย่างน้อยใน Raspbian ของฉัน) การเริ่มต้นแอปพลิเคชันนี้บนคอนโซลจะให้ "เต็ม GUI" ที่คุณกำลังมองหา:

lxsession

โดยส่วนตัวฉันไม่พบว่ามีประโยชน์ในการเริ่มต้นการเริ่มlxsessionต้นแอปพลิเคชัน X บนคอนโซลนั้นง่ายกว่าสำหรับฉันมาก


1
ตกลง. ฉันเข้าใจสิ่งนี้ฉันคิดว่า คุณกำลังบอกว่า startx ไม่จำเป็นเพราะมันเริ่มเซิร์ฟเวอร์ RasPi x และฉันกำลังใช้เซิร์ฟเวอร์ Xming บน windows ในกรณีนั้นฉันจะไปยังเดสก์ท็อป / GUI บน Xming จาก windows ได้อย่างไร เพราะถึงแม้จะใช้ Xming และเปิดใช้งาน SSH ฉันก็ไม่ได้รับอะไรเลยนอกจากหน้าจอคอนโซลปกติ คุณกำลังบอกว่าฉันจะเรียกใช้แอปพลิเคชันจริงใน xming ไม่ใช่ GUI แบบเต็ม บางทีฉันอาจทำผิด สิ่งที่ฉันต้องการก็คือ RasPi GUI ปกติของฉันที่ทำงานอยู่ในหน้าต่างบนพีซีที่ใช้ Windows แบบรีโมท ฉันไม่ต้องการใช้ VNC ฉันกำลังส่งต่อผ่านอินเทอร์เน็ต
zenbike

อัปเดตคำตอบ
asalamon74

ทำงานได้อย่างสมบูรณ์ถ้า (ตามที่คาดไว้) จะตอบช้า ขอขอบคุณสำหรับความช่วยเหลือของคุณ.
zenbike

1
…และนี่คือเหตุผลที่คู่มือของคุณแนะนำให้เรียกใช้แอพเดียวในเวลาเดียวกัน ...
Alexander - Reinstate Monica

1
@ asalamon74 ขอบคุณ! ว้าว! นี่เป็นเพียง kickass ฉันไม่ต้องจัดการกับแป้นพิมพ์และเมาส์ที่เชื่อมต่อกับ usb ด้วยสายสั้น ๆ อย่างบ้าคลั่ง ฉันเคยนั่งหน้าทีวีด้วยการตั้งค่าด้านบน ตอนนี้? ฉันแค่ ssh และเรียกใช้ gui เหมือนเจ้านาย !!
Dheeraj Bhaskar

1

ใช้ Cygwin / X

หากคุณไม่ได้เชื่อมโยงกับ Xming คุณสามารถใช้Cygwin / Xเพื่อใช้งานเซิร์ฟเวอร์ X ใน Windows ได้

เตรียมราสเบอร์รี่ Pi

ลองสร้างการเชื่อมต่อ SSH ปกติจาก Windows ไปยัง Raspberry Pi โดยใช้ PowerShell:

เข้าสู่ Raspberry Pi บน Windows ด้วย PowerShell และ SSH

ระบุว่า Raspbian Buster รวมX11Forwarding yesอยู่/etc/ssh/sshd_configด้วย Raspberry Pi ของคุณควรจะสามารถส่งต่อการแสดงผลภาพของแอพพลิเคชั่น X11 ไปยังเซิร์ฟเวอร์ X บน Windows

ขั้นตอนถัดไปแสดงวิธีการติดตั้งเซิร์ฟเวอร์ X

ติดตั้ง Cygwin / X บน Windows

Cygwin / X จัดเตรียมเซิร์ฟเวอร์ X สำหรับ Windows ที่แสดงแอปพลิเคชัน GUI ที่ทำงานบน Raspberry Pi

  1. ดาวน์โหลดและเรียกใช้setup-x86_64.exeจากเว็บไซต์ของ Cygwin

  2. สำหรับ Cygwin ของ "แพคเกจท้องถิ่นไดเรกทอรี" C:\Users\me\AppData\Roaming\Cygwinคุณสามารถใช้

  3. เลือกเซิร์ฟเวอร์ใกล้คุณเพื่อดาวน์โหลดแพ็คเกจ

  4. ชุด "ดู" กับ "เต็ม" xinitและค้นหา

  5. ในคอลัมน์ "ใหม่" ใช้เมนูแบบเลื่อนลงเพื่อเปลี่ยนค่าจาก "ข้าม" xinitเป็นเวอร์ชันล่าสุด:

ติดตั้งแพ็คเกจ xinit ด้วย Cygwin

  1. ติดตั้งแพ็คเกจopensshด้วยวิธีเดียวกัน

เชื่อมต่อกับ Raspberry Pi จาก Windows

  1. เริ่มต้นเซิร์ฟเวอร์ X โดยใช้เมนูเริ่มต้นของ Cygwin-X → XWin ServerWindows: นี่จะไม่เปิดหน้าต่างใด ๆ แต่คุณควรเห็นไอคอนใหม่สองไอคอนในถาดระบบของคุณ:

ไอคอนเซิร์ฟเวอร์ XWin ในซิสเต็มเทรย์

  1. เริ่มเทอร์มินัล Cygwin: Cygwin → Cygwin64 Terminal

  2. ตั้งค่าDISPLAYตัวแปรสภาพแวดล้อมเป็นที่ที่เซิร์ฟเวอร์ X บน Windows ทำงาน:

    export DISPLAY=:0.0

  3. เชื่อมต่อกับ Raspberry Pi ของคุณด้วยการส่งต่อ X11:

    ssh -Y pi@raspberrypi

เข้าสู่ระบบด้วย Cygwin Terminal

ในเซสชั่น SSH ตอนนี้คุณสามารถเริ่มต้นแอปพลิเคชั่น X บน Raspberry Pi อย่างThonny :

Thonny ส่งต่อไปยัง Windows

หรือตามที่ผู้ใช้ 1297 พูดถึงในความคิดเห็นของคำถามคุณสามารถเรียกใช้x-session-managerเพื่อจำลองประสบการณ์ที่คุณได้รับเมื่อเชื่อมต่อกับ Raspberry Pi ผ่าน HDMI บนจอภาพภายนอก:

เดสก์ท็อป Rasbpian forwared กับ Windows

หากคุณต้องการเริ่มแอปพลิเคชันโดยตรงโดยไม่ต้องพิมพ์ชื่อในเชลล์ก่อนให้ใช้สิ่งนี้:

ssh -Y pi@raspberrypi x-session-manager

บน macOS

XQuartzจัดเตรียมเซิร์ฟเวอร์ X สำหรับ macOS

ติดตั้ง XQuartz ออกจากระบบและย้อนกลับ (เพื่อสร้างคุณค่าใหม่ที่DISPLAYมีประสิทธิภาพ) จากนั้นเปิดแอปพลิเคชันด้วย SSH จาก Bash:

ssh -Y pi@raspberrypi thonny

Thonny ข้างใน macOS โดยใช้ XQuartz


1

หากคุณใช้เซิร์ฟเวอร์ X บน Windows อยู่แล้ว (เช่นเดียวกับ Xming) แล้วฝั่ง Windows นั้นส่วนใหญ่แล้วจะทำ (แต่ดูรายละเอียดที่สำคัญด้านล่าง) กุญแจสำคัญที่เหลืออยู่คือบอกแอพ X11 บน pi เพื่อส่งข้อมูล X11 ไปยังพีซี Windows ของคุณ

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

หากต้องการบอกให้แอปส่งข้อมูล X11 ไปยังโหนดระยะไกลให้ระบุที่อยู่ IP ในDISPLAYตัวแปร ตัวอย่างเช่นexport DISPLAY=192.168.1.10:0. สิ่งนี้จะบอกแอป X11 ใด ๆ ที่พวกเขาต้องการเพื่อเปิดการเชื่อมต่อ TCP ไปยัง X server # 0 บนโหนด 192.168.1.10 ชื่อโฮสต์ DNS ใช้ได้ที่นี่หากคุณมีชื่อเหล่านั้นในเครือข่ายของคุณ

สองปัญหาที่อาจเกิดขึ้น

อย่างที่ฉันเขียนไว้ในย่อหน้าแรกการรัน Xming อาจไม่เพียงพอ อาจมีการกำหนดค่าเพิ่มเติมที่จำเป็น

ประการแรกคือเซิร์ฟเวอร์ X11 ของคุณต้องได้รับการกำหนดค่าให้ยอมรับการเชื่อมต่อจากโหนดระยะไกลผ่าน TCP เซิร์ฟเวอร์ X จำนวนมากกระจายวันนี้ (ฉันไม่รู้เกี่ยวกับ Xming) ยอมรับเฉพาะการเชื่อมต่อจากแอพที่ใช้งานในเครื่องเท่านั้นเว้นแต่คุณจะกำหนดค่าไว้อย่างชัดเจน นี่เป็นคุณลักษณะด้านความปลอดภัยเนื่องจากซ็อกเก็ตที่เปิดอยู่ทุกตัวนั้นเป็นเวกเตอร์ที่มีศักยภาพสำหรับการโจมตี

ประการที่สองคือเซิร์ฟเวอร์ X11 ของคุณรักษาฐานข้อมูลของโฮสต์ / ผู้ใช้ที่ได้รับอนุญาตให้เชื่อมต่อ คุณต้องขึ้นบัญชีขาวที่อยู่ IP ของ Raspberry Pi ของคุณ คุณสามารถทำได้โดยการรันxhostคำสั่งจาก Xming บน Windows ตัวอย่างเช่นจากคอนโซลที่รันใน xterm นอกจากนี้คุณยังสามารถพิมพ์xhost +เพื่อปิดการใช้งานการตรวจสอบความปลอดภัยนี้ แต่มันอันตรายเพราะจะอนุญาตให้แอปจากที่ใดก็ได้ในโลกเปิดการเชื่อมต่อไปยังจอแสดงผลของคุณ หากคุณอยู่หลังไฟร์วอลล์บน LAN ที่คุณเชื่อใจทุกคน (เช่นบ้านของคุณเอง) นั่นเป็นวิธีที่ง่ายที่สุด แต่ใช้เวลาในการกำหนดค่าอย่างเหมาะสมxhostหากคุณไม่ได้ใช้

ทางเลือก: ssh -Y

ด้วยวิธีการข้างต้นแอป X11 ของคุณจะพยายามเปิดการเชื่อมต่อ TCP ไปยังเซิร์ฟเวอร์ X ของคุณ การเชื่อมต่อเหล่านี้ไม่ปลอดภัย ใครบางคนในกลุ่มการสอดแนม LAN ของคุณสามารถดักจับพวกเขาได้

เพื่อแก้ปัญหานี้แทนที่จะตั้งค่าตัวแปร DISPLAY บน Raspberry pi ให้ใช้-Yพารามิเตอร์เมื่อเชื่อมต่อกับมัน (เช่นslogin -Y hostname) พารามิเตอร์ -Y (เช่น -X) จะสร้างช่องสัญญาณระหว่างโหนดสำหรับการรับส่งข้อมูล X11 วิธีนี้จะทำให้การรับส่งข้อมูล X11 เข้ารหัสและปลอดภัย นอกจากนี้ยังจะกำหนดตัวแปรสภาพแวดล้อม DISPLAY ของตัวเองเพื่อให้แอปใช้อุโมงค์ นอกจากนี้ยังอาจขจัดความจำเป็นในการยุ่งเหยิงxhostตั้งแต่ (เท่าที่เซิร์ฟเวอร์ X ของคุณเป็นกังวล) การเชื่อมต่อนั้นมีต้นกำเนิดจากภายในเครื่อง (จากด้านต้นทางของอุโมงค์ SSH)

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