เรียกใช้แอปพลิเคชันบนเครื่องท้องถิ่นและแสดง GUI บนจอแสดงผลระยะไกล


35

เป็นไปได้หรือไม่ที่จะรันแอปพลิเคชันบนเดสก์ท็อปท้องถิ่นของฉัน แต่แสดง GUI บนแล็ปท็อปของฉัน (remote X)

ฉันสงสัยว่ามันเป็นไปได้ไหมที่จะจำลองการตั้งค่าจอภาพสองจอโดยใช้เครื่องเชื่อมต่อ LAN 2 เครื่อง

ฉันได้ติดตั้งการทำงานร่วมกันและฉันสามารถควบคุมแล็ปท็อปของฉันได้อย่างง่ายดายด้วยแป้นพิมพ์ / เมาส์บนเดสก์ท็อป แต่ฉันก็อยากจะเรียกใช้บางอย่างบนเดสก์ท็อปและแสดง GUI บนหน้าจอแล็ปท็อป

จากประสบการณ์ที่ จำกัด ของฉันกับ X ฉันรู้ว่าฉันสามารถเรียกใช้โปรแกรมบนเครื่องระยะไกลและใช้การแสดงผลแรกเพื่อแสดงผลลัพธ์ แต่ไม่ใช่วิธีอื่น ๆ

พอยน์เตอร์ใด ๆ ก็จะช่วยได้มาก ขอขอบคุณ

PS Running XFCE 4.10 บน Ubuntu 12.10

คำตอบ:


39

Variant A - ถ่ายภาพ X Windows ไปยัง DISPLAY อื่น:

  1. ดูว่า Xserver บนแล็ปท็อปของคุณเริ่มฟังการเชื่อมต่อ tcp Sadly X11-Networking ถูกปิดใช้งานตามค่าเริ่มต้นในการกระจายส่วนใหญ่ เนื่องจาก Xserver เริ่มต้นโดยตัวจัดการการแสดงผลของคุณ (gdm, lightdm) จึงต้องมีการกำหนดค่าที่นี่:

    ไม่ว่าคุณจะใช้เครื่องมือจัดการการแสดงผลใดไฟล์การกำหนดค่าใน / etc / อาจจะมีพารามิเตอร์ XServer ที่รับผิดชอบ เรียกใช้grep -r 'nolisten tcp' /etc/บนแล็ปท็อปของคุณเพื่อค้นหาไฟล์กำหนดค่าที่รับผิดชอบและนำชิ้นส่วนที่ระบุ-nolisten tcp(ไม่ใช่ทั้งบรรทัดยกเว้นพารามิเตอร์นี้) รีสตาร์ท X บนแล็ปท็อปของคุณ

    ตอนนี้แล็ปท็อปของคุณควรมีการแสดงผลที่ทำงานบนพอร์ต tcp 6000 (ลองเรียกใช้nmap -p6000 Laptopบนเดสก์ท็อปพีซีของคุณถ้าพอร์ตที่รายงานว่า "เปิด" คุณมาไกลขนาดนี้)

  2. ทำให้ X-display ของคุณพร้อมใช้งานกับคอมพิวเตอร์เดสก์ท็อป X11 ใช้กลไกการพิสูจน์ตัวตนเพื่อให้สิทธิ์การเข้าถึงจอแสดงผล คุณต้องอนุญาตให้พีซีเดสก์ท็อปยิง Windows ลงบนแล็ปท็อป ปกติแล้วโดยการแลกเปลี่ยนคุกกี้ที่แสดง

    สำหรับผู้เริ่มดำเนินขั้นตอนนี้ด้วยมือของคุณบนโน๊ตบุ๊ค เมื่อคุณได้รับแนวคิดพร้อมDISPLAYตัวแปรและทุกอย่างคุณสามารถทำได้ผ่าน ssh

    รวดเร็วและสกปรก: คุณสามารถเรียกใช้xhost +desktops.computers.ip.addressบนแล็ปท็อปของคุณเพื่อให้สิทธิ์ X เข้าถึงคอมพิวเตอร์เดสก์ท็อป โปรดทราบว่าผู้ใช้ทุกคนบนคอมพิวเตอร์แล็ปท็อปของคุณสามารถใช้แล็ปท็อป X ของคุณแสดงผลได้ โปรดทราบว่านี่เพียงพอสำหรับการติดตั้ง keylogger บนจอแล็ปท็อปของคุณ ใช้วิธีนี้สำหรับการทดสอบเท่านั้น

    แก้ไขและรักษาความปลอดภัย: เรียกใช้xauth extract cookie-file :0บนแล็ปท็อปของคุณเพื่อส่งออกความลับในการเข้าถึงการแสดงผลของคุณไปยัง ถ่ายโอนคุกกี้ไปยังเครื่องเดสก์ท็อปของคุณ xauth merge cookie-fileวิ่ง หรือในขั้นตอนเดียว (จากเดสก์ท็อปของคุณ) ssh Laptop xauth extract - :0 |xauth merge -หมายเหตุ: หากแล็ปท็อปและเดสก์ท็อปของคุณแชร์โฮมไดเรกทอรีเช่นผ่าน nfs คุณไม่จำเป็นต้องแลกเปลี่ยนข้อมูลรับรองใด ๆ ฐานข้อมูลรับรองเป็นไฟล์. Xauthority ใน dir ที่บ้านของคุณและสามารถแชร์กับเครื่องอื่นได้

  3. เรียกใช้โปรแกรม: ใน terminal บนเดสก์ท็อปพีซีของคุณทำงานexport DISPLAY=Your.Laptops.IP.Address:0ให้รันโปรแกรม X ใด ๆ ในเทอร์มินัลเดียวกัน มันควรจะปรากฏบนหน้าจอโน้ตบุ๊ค

Variant B - การใช้ SSH ด้วยการบิด

SSH สำเร็จการส่งต่อ X11 โดยส่งต่อซ็อกเก็ต X11 ในเครื่อง (โดยทั่วไปคือซ็อกเก็ต Unix โดเมน) ไปยังซ็อกเก็ต TCP โลคัลบนเครื่องระยะไกลจากนั้นทำการเจรจาคุกกี้แสดงผลจากนั้นตั้งค่า DISPLAY-Environment บนเครื่องระยะไกล วิธีนี้ทราฟฟิก X11 ทั้งหมดจะถูกเข้ารหัสเหนืออุโมงค์ ssh กรณีการใช้งานปกติคือส่งต่อจอแสดงผลในเครื่องไปยังเครื่องระยะไกล (หมายถึงอนุญาตให้แอปพลิเคชันระยะไกลแสดง x windows ในพื้นที่)

ข้อดีของการใช้ ssh คือคุณไม่จำเป็นต้องใส่ X-Server ของคุณเข้าสู่โหมดการฟัง tcp (เนื่องจากใช้ซ็อกเก็ต unix) และ ssh จัดการการแลกเปลี่ยนข้อมูลประจำตัว

  1. SSH ไปยังแล็ปท็อปของคุณจากคอมพิวเตอร์เดสก์ท็อปของคุณ (คุณไม่จำเป็นต้องใช้ -X เลย)
  2. ในเปลือกระยะไกลให้ป้อนexport DISPLAY=:0สิ่งนี้ทำให้การแสดงผลที่กำลังทำงานอยู่ในสมุดบันทึกของคุณพร้อมใช้งานสำหรับเชลล์ที่คุณได้รับผ่าน ssh หากคุณเรียกใช้คำสั่ง X ตอนนี้คำสั่งนั้นจะปรากฏบนหน้าจอโน้ตบุ๊คของคุณแล้ว แต่ยังคงรันบนแล็ปท็อปของคุณ (ลองใช้เพื่อความปลอดภัย)
  3. จากเชลล์นี้กลับไปที่คอมพิวเตอร์เดสก์ท็อปของคุณให้ใช้ -X ในเวลานี้ ตอนนี้คุณมีเชลล์บนเครื่องที่เซสชัน ssh เกิดขึ้น แต่คราวนี้ใช้งานได้ X รัน xeyes หรือ xcalc เพื่อทดสอบ
  4. echo $DISPLAYแสดงการกำหนดให้คุณแสดงหน้าจอแล็ปท็อป X บนคอมพิวเตอร์เดสก์ท็อปของคุณ เช่น: 10 หรือ: 11
  5. คุณสามารถย่อขนาดเทอร์มินัลได้ในขณะนี้ ทุกครั้งที่คุณป้อนexport DISPLAY=:10(ดูหมายเลขจอแสดงผลที่คุณได้รับ) บนคอมพิวเตอร์เดสก์ท็อปของคุณตอนนี้แต่ละโปรแกรมที่คุณรันหลังจากนั้นในเชลล์เดียวกันจะปรากฏบนหน้าจอสมุดบันทึกของคุณ

    ตัวแปรนี้ง่าย แต่ช้าเนื่องจากปริมาณการใช้งาน X11 ทั้งหมดถูกส่งต่อผ่าน SSH

Variant C - แนวคิด thinclient ดั้งเดิม:

คุณสามารถใช้แล็ปท็อปของคุณเพื่อเปิดเซสชันเดสก์ท็อปที่ทำงานบนคอมพิวเตอร์เดสก์ท็อปของคุณได้ทั้งหมด

  1. กำหนดค่าเครื่องมือจัดการการแสดงผลบนเดสก์ท็อปของคุณเพื่อตอบ XDMCP Broadcasts วิธีการทำเช่นนี้ขึ้นอยู่กับเครื่องมือจัดการหน้าจอของคุณ ผู้จัดการการแสดงผลบางคนไม่สนับสนุนสิ่งนี้เลย XDM, KDM, WDM, GDM รองรับ

  2. เริ่ม X-Server บนแล็ปท็อปของคุณซึ่งร้องขอตัวจัดการการแสดงผลจากเดสก์ท็อปของคุณ เป็น X: Xephyr :1 -query desktopหรือหรือซ้อนกันXephyr :1 -broadcast โดยการปิดโน้ตบุ๊ก X-Server ของคุณและเข้าสู่ Terminal Systemsudo Xorg :0 -broadcast

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


2
BTW X11 ฟังก์ชั่นที่ยอดเยี่ยมทั้งหมดนี้จะหยุดทำงานทันทีที่ Ubuntu เปลี่ยนมาใช้ Wayland แอปพลิเคชัน Wayland ของ NAtive ไม่สามารถส่งต่อผ่าน ssh ได้อีก
Paul Hänsch

6
มันค่อนข้างประชดว่าไม่มี toolchain แบบกราฟิกในการควบคุม X-Server ของคุณหรือไม่ หากคุณต้องการทำงานกับ GUI อย่างแท้จริงคุณต้องควบคุมบรรทัดคำสั่งก่อน
Paul Hänsch

คำแนะนำทั่วไป: โปรแกรมแรกที่คุณอาจต้องการเริ่มต้นบนจอแสดงผลระยะไกลของคุณคือแอปพลิเคชั่นเริ่มต้น เช่น lxpanel หรืออะไรบางอย่าง savel นี้ทำงานได้หลายบรรทัดคำสั่ง
Paul Hänsch

สิ่งนี้ยังใช้งานได้กับ +1 ของ Ubuntu 17 หรือว่าคำทำนายของ Wayland จะสำเร็จหรือไม่?
Xen2050

19

คุณสามารถใช้การส่งต่อ ssh X เพื่อให้บรรลุเป้าหมายของคุณ หากคุณอยู่ในเครือข่ายย่อยเดียวกันมากกว่าที่จะเลิกเร็ว

ติดตั้งเซิร์ฟเวอร์ ssh และไคลเอนต์บนแล็ปท็อปและเดสก์ท็อปพีซีของคุณ

sudo apt-get install ssh

ในการเชื่อมต่อกับเดสก์ท็อปพีซีให้เปิดเทอร์มินัลบนแล็ปท็อปแล้วพิมพ์ดังต่อไปนี้

ssh -X username@desktop_pc_ip

และคุณสามารถเริ่มซอฟต์แวร์ใด ๆ โดยใช้เทอร์มินัลเช่นเริ่ม Firefox เพียงแค่พิมพ์firefoxเทอร์มินัล


2
อย่าลืมตรวจสอบว่าไฟล์การกำหนดค่า sshd (โดยปกติแล้ว / etc / ssh / sshd_config) มีการตั้งค่า X11Forwarding เป็นใช่เช่นกัน
Mole เมทริกซ์

นี่คือกรณีการใช้งานของฉัน: ฉันอยู่บนเดสก์ท็อปและฉันเปิด Firefox เป็นต้น แต่ฉันต้องการให้หน้าต่างเบราว์เซอร์เปิดบนจอแสดงผลแล็ปท็อปของฉันและยังคงทำงานบนเดสก์ท็อปของฉัน ฉันกำลังมองหาฟังก์ชั่นที่คล้ายกับพื้นที่ทำงาน แต่แทนที่จะเป็นพื้นที่ทำงานในท้องถิ่น (4 หน้าจอในพีซีเครื่องเดียวกัน) เพื่อใช้พื้นที่ทำงานระยะไกล (แล็ปท็อป)
Vlad Balmos

2
นอกจากนี้คุณสามารถลองใช้x2xแพคเกจคุณสามารถใช้หนึ่งแป้นพิมพ์และเมาส์ในเครื่องที่แตกต่างกัน เช่น:ssh -X user@host x2x -west -to :0
OHLÁLÁ

@iUngi ฉันกำลังใช้งานการทำงานร่วมกันอยู่แล้วขอบคุณแล้ว
Vlad Balmos

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

7

การจัดเตรียม

(คุณทำสิ่งนี้เพียงครั้งเดียว)

ในเดสก์ท็อปของคุณติดตั้งเซิร์ฟเวอร์ SSH

sudo apt-get install openssh-server


จากแล็ปท็อปของคุณ:

ssh -X ชื่อผู้ใช้ @ desktop_pc_ip

ในเครื่องเทอร์มินัลคุณจะได้อะไรก็ตามที่คุณเรียกใช้จะอยู่บนเดสก์ท็อปของคุณ หากคุณต้องการทำสิ่งเดียวกันขณะที่นั่งบนเดสก์ท็อปของคุณ (และส่ง windows บนแล็ปท็อปของคุณ) จากนั้นไปต่อ

ใน terminal ของคุณคุณทำงาน

echo $ DISPLAY

สิ่งนี้จะแสดงสิ่งที่คุณต้องการ:

localhost:10.0

จากเดสก์ท็อปของคุณ:

เปิดเทอร์มินัลแล้วเรียกใช้

DISPLAY=:10.0 firefox

สิ่งนี้ควรส่งfirefoxหน้าต่างบนแล็ปท็อปของคุณ แต่รันบนเดสก์ท็อป ตรวจสอบให้แน่ใจว่าหมายเลขที่คุณใส่ (เช่น10.0) นั้นตรงกับechoผลลัพธ์


3

คุณกำลังมองหาการใช้การรวมกันของ SSH และหน้าจอเพื่อรับสถานการณ์ที่คุณต้องการ

บนเดสก์ท็อปของคุณติดตั้งหน้าจอ:

sudo apt-get หน้าจอติดตั้ง

จากนั้นเริ่มเซสชันหน้าจอใหม่:

จอภาพ

และเปิด Firefox ในนั้น:

Firefox

ใช้ firefox ทั้งหมดที่คุณต้องการบนเดสก์ท็อปของคุณแล้ว ssh ลงในคอมพิวเตอร์ของคุณจากแล็ปท็อปของคุณ:

ssh -X username @ hostname

พิมพ์คำสั่งต่อไปนี้เพื่อดูเซสชันหน้าจอที่คุณใช้:

หน้าจอ -ls

เข้าสู่ระบบในเซสชั่นหน้าจอของคุณ (1234 จะเป็นจำนวนหน้าจอ -ls ให้คุณ)

หน้าจอ -x 1234

จากนั้นคุณสามารถใช้ firefox บนแล็ปท็อปของคุณและปิดเทอร์มินัลบนเดสก์ท็อปของคุณ


พยายามที่ เปิดหน้าจอจากเทอร์มินัลเริ่ม firefox บนเดสก์ท็อปแล้ว sshed จากแล็ปท็อปไปยังเดสก์ท็อปแนบเซสชั่นหน้าจอ แต่ฉันไม่ได้รับหน้าต่างบนแล็ปท็อปเพียงแค่เอาท์พุท
Vlad Balmos

คุณกำลังผสมมัน เดี๋ยวก่อนอย่างน้อยหนึ่งคน ติดตั้งหน้าจอบนคอมพิวเตอร์เดสก์ท็อปของคุณใช้โน้ตบุ๊กของคุณไปssh -Xยังเดสก์ท็อปเริ่มหน้าจอในเซสชัน ssh แยกออกและเปิดใช้งานเซสชัน จากนั้นติดตั้งเซสชันหน้าจออีกครั้งด้วยมือบนคอมพิวเตอร์เดสก์ท็อปของคุณแล้วรันบางสิ่ง นี่คล้ายกับคำตอบ "SSH with a twist" ของฉัน การใช้หน้าจอทำให้สะดวกยิ่งขึ้น
พอลHänsch

3

Virtualglจะสร้างเป็นพิเศษ (พื้นหลัง) สก์ท็อป(TightVNC สไตล์)ที่คุณสามารถเข้าถึงผ่านทางลูกค้า VNC เทอร์โบ มันจะทำหน้าที่เป็นข้อตกลงประเภทเดสก์ท็อประยะไกล -> แต่มันจะเล่นวิดีโอที่ราบรื่นผ่านเครือข่าย

หากคุณกำลังมองหาวิธีที่จะลดภาระการโอเวอร์เฮดของCPUสำหรับการเชื่อมต่อระยะไกลดังนั้นคุณสามารถเรียกใช้แอพจากคอมพิวเตอร์ของคุณบนแล็ปท็อปของคุณนั่นจะเป็นสิ่งที่ฉันจะทำ

http://www.virtualgl.org/

คุณยังสามารถส่งออกสภาพแวดล้อมเดสก์ท็อปผ่าน SSH เป็น / dude ดังกล่าวข้างต้น


ขอขอบคุณ. ดูมีแนวโน้ม ฉันจะดูและทำให้คุณโพสต์
Vlad Balmos

ใช่ "TurboVNC" (มากกว่าส่วนประกอบ VirtualGL) เป็นผลมาจากการค้นหาโปรแกรมเดสก์ท็อประยะไกลที่จะให้ฉันเล่นวิดีโอเกมและภาพยนตร์ มันจะทำงานได้อย่างง่ายดายเป็นจอภาพเสริม
TardisGuy

1

หลังจากขุดหาข้อมูลออนไลน์เพิ่มเติมผมได้พบกับDMX

จากหน้าแรก

Xdmx เป็นพร็อกซีเซิร์ฟเวอร์ X ที่ให้การสนับสนุนหลายหัวสำหรับการแสดงผลหลายจอที่ติดอยู่กับเครื่องต่างๆ (ซึ่งแต่ละเครื่องใช้เซิร์ฟเวอร์ X ทั่วไป) เมื่อใช้ Xinerama กับ Xdmx หน้าจอหลายจอบนเครื่องหลายเครื่องจะแสดงต่อผู้ใช้ในรูปแบบหน้าจอเดียว


1
นี่จะเป็นคำตอบที่ดีกว่าถ้าคุณสามารถให้คำแนะนำวิธีการติดตั้งและวิธีใช้
fossfreedom

XmetaX ให้ฟังก์ชันการทำงานที่คล้ายกัน มีทางเลือกอื่นในการ Xdmx และ XmetaX หรือไม่?
Mariusz

1

ใช่มันเป็นไปได้ ฉันกำลังจะติดตั้งคอมพิวเตอร์ linux ทั้งสองพร้อมกับ xclock บนคอมพิวเตอร์ท้องถิ่น ฉันพยายามเรียกใช้ xclock ภายในเครื่องและแสดงนาฬิกาบนคอมพิวเตอร์ระยะไกลของ linux

reboot the remote machine
Disable firewall
Disable SELINUX
Check $DISPLAY variable value by command
echo $DISPLAY
Let say its value is :1
run command
xhost +

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