ฉันจะเรียกใช้โปรแกรมกราฟิกในคอนเทนเนอร์ใต้ Wayland ได้อย่างไร


15

เมื่อฉันใช้เดสก์ท็อป X11 ฉันสามารถเรียกใช้แอปพลิเคชั่นกราฟิกในคอนเทนเนอร์นักเทียบท่าโดยการแชร์$DISPLAYตัวแปรและ/tmp/X11-unixไดเรกทอรี ตัวอย่างเช่น:

docker run -ti -e DISPLAY=$DISPLAY -v /tmp/.X11-unix:/tmp/.X11-unix some:ubuntu xclock

ตอนนี้ฉันกำลังใช้ Wayland อยู่ใน Fedora 25 ดังนั้นจึงไม่มีโครงสร้างพื้นฐาน X11 ที่จะแชร์กับคอนเทนเนอร์ ฉันจะเปิดแอปพลิเคชั่นแบบกราฟิกในคอนเทนเนอร์ได้อย่างไรและให้ปรากฏบนเดสก์ท็อปของฉันได้อย่างไร มีวิธีผูกมัดใน XWayland ไหม?


ไม่แน่ใจว่าจะตอบคำถามของคุณอย่างถูกวิธีได้อย่างไร (แต่ฉันไม่เคยทำมาก่อน) แต่ในระบบของฉันซ็อกเก็ตโดเมน unix ที่ Wayland ใช้/run/user/1000/wayland-0สำหรับเดสก์ท็อปส่วนตัวของฉัน
Bratchley

คำตอบ:


16

อย่างที่คุณบอกว่าคุณกำลังใช้งาน Fedora 25 กับ Wayland ฉันคิดว่าคุณกำลังใช้เดสก์ท็อป Gnome-Wayland

Gnome-Wayland รัน Xwayland เพื่อรองรับ X applications คุณสามารถแบ่งปันการเข้าถึงXwaylandอย่างที่คุณเคยทำกับ Xorg

พลาดท่าตัวอย่างเช่นคำสั่งของคุณและคุณไม่ได้กล่าวถึงXAUTHORITY xhostคุณต้องใช้วิธีนี้อย่างใดอย่างหนึ่งเพื่ออนุญาตให้แอปพลิเคชัน X ในนักเทียบท่าเข้าถึง Xwayland (หรือ X ใด ๆ ) เนื่องจากทั้งหมดนี้ไม่เกี่ยวข้องกับ Wayland ฉันหมายถึงคุณจะเรียกใช้แอปพลิเคชัน GUI ในคอนเทนเนอร์นักเทียบท่าได้อย่างไร เกี่ยวกับวิธีเรียกใช้แอปพลิเคชัน X ในตัวเทียบท่า

สำหรับสั้น ๆ โซลูชันสองตัวที่มี xhost:

  1. อนุญาตให้ผู้ใช้ในพื้นที่ของคุณเข้าถึงผ่าน xhost: xhost +SI:localuser:$(id -un)และสร้างผู้ใช้ที่คล้ายกับตัวเลือกการเรียกใช้นักเทียบท่า:--user=$(id -u):$(id -g)
  2. ท้อแท้: อนุญาตการเข้าถึงรูท X ด้วย xhost +SI:localuser:root

ที่เกี่ยวข้องหลุมพราง : X หน่วยความจำปกติใช้ร่วมกัน (ส่วนขยาย X MIT-SHM) คอนเทนเนอร์นักเทียบท่าถูกแยกออกและไม่สามารถเข้าถึงหน่วยความจำที่ใช้ร่วมกันได้ ที่สามารถนำไปสู่การแสดงผลบกพร่องและการเข้าถึง RAM ล้มเหลว --ipc=hostคุณสามารถหลีกเลี่ยงที่มีตัวเลือกในการทำงานนักเทียบท่า ที่ส่งผลกระทบต่อการแยกคอนเทนเนอร์เนื่องจากปิดใช้งานการกำหนดเนมสเปซ IPC เปรียบเทียบ: https://github.com/jessfraz/dockerfiles/issues/359


ในการเรียกใช้แอปพลิเคชันWaylandใน Docker ที่ไม่มี X คุณต้องมีนักแต่งเพลง Wayland ที่ทำงานอยู่เช่น Gnome-Wayland หรือ Weston คุณต้องแบ่งปันซ็อกเก็ต Wayland คุณพบมันในและชื่อของมันถูกเก็บไว้ในXDG_RUNTIME_DIR WAYLAND_DISPLAYในฐานะที่XDG_RUNTIME_DIRอนุญาตการเข้าถึงสำหรับเจ้าของเท่านั้นคุณต้องมีผู้ใช้รายเดียวกันในคอนเทนเนอร์เหมือนบนโฮสต์ ตัวอย่าง:

docker run -e XDG_RUNTIME_DIR=/tmp \
           -e WAYLAND_DISPLAY=$WAYLAND_DISPLAY \
           -v $XDG_RUNTIME_DIR/$WAYLAND_DISPLAY:/tmp/$WAYLAND_DISPLAY  \
           --user=$(id -u):$(id -g) \
           imagename waylandapplication

แอปพลิเคชั่น QT5 นั้นต้องการ-e QT_QPA_PLATFORM=waylandและต้องเริ่มด้วยimagename dbus-launch waylandapplication


x11dockerสำหรับแอปพลิเคชั่น X และ Wayland ในตัวเชื่อมต่อเป็นโซลูชันครบวงจรในหนึ่งเดียว นอกจากนี้ยังให้ความสำคัญกับการรักษาการแยกตู้คอนเทนเนอร์ (ซึ่งจะหายไปหากแชร์โฮสต์ X display ในตัวอย่างของคุณ)


ถ้าฉันไม่แน่ใจว่าแอพที่ฉันต้องการเรียกใช้คือ X หรือ Wayland มีอะไรทั่วไปที่ฉันสามารถส่งผ่านได้เพื่อให้สามารถตัดสินได้ว่า XWayland จำเป็นหรือไม่
Oxwivi


1
@ShN เป็นไปได้ที่จะเรียกใช้ Weston ในฐานะลูกค้าในผู้แต่งเพลง Wayland คนอื่น ภายในลูกค้า Weston นี้คุณสามารถเรียกใช้ Xwayland ด้วยแอปพลิเคชั่น X ด้วย x11docker:x11docker --weston-xwayland imagename application
mviereck

1
@Shn นอกจากนี้คุณสามารถเรียกใช้ Xwayland โดยตรงเป็นลูกค้า Xwayland :20 & sleep 3 && docker run -e DISPLAY=:20 -v /tmp/.X11-unix:/tmp/.X11-unix imagename applicationWayland: Xwayland จะครอบคลุมการแสดงผลทั้งหมด; คุณสามารถย้ายไปมาได้ด้วย <Super> <LeftMouseButton> ด้วย x11docker --xwayland imagename applicationx11docker:
mviereck

1
@ShN คุณต้องมีเซิร์ฟเวอร์ X ในทุกกรณี เพื่อหลีกเลี่ยงการ X บนโฮสต์ผมให้x11docker / xwayland หากxpraมีการย้ายพอร์ตไปยัง GTK3 + python3 ในบางวันมันจะให้ความเป็นไปได้เพิ่มเติมกับหน้าต่างที่ไร้รอยต่อ การตั้งค่าที่มองไม่เห็นเป็นไปได้ด้วยXvfbในภาชนะ สำหรับการอภิปรายในรายละเอียดที่คุณอาจเปิดออกบัตรโดยสารบน GitHub
mviereck

0

ฉันแนะนำ Sommelier โดย Google อนุญาตให้คุณเปิดใช้แอพ Wayland หรือ X11 และจัดหาซ็อกเก็ตที่แอพเหล่านั้นต้องการเพื่อนำไปไว้ในเซิร์ฟเวอร์ดิสเพลย์ปัจจุบัน https://chromium.googlesource.com/chromiumos/platform2/+/master/vm_tools/sommelier/

วิธีการง่าย ๆ ที่ควรทำงานกับระบบใด ๆ ไม่ใช่แค่ Crouton / Crostini บน ChromeOS

https://github.com/dnschneid/crouton/wiki/Sommelier-(A-more-native-alternative-to-xiwi)

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