ส่งต่อ 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.