Ketika saya menggunakan desktop X11, saya bisa menjalankan aplikasi grafis dalam wadah buruh pelabuhan dengan berbagi $DISPLAY
variabel dan /tmp/X11-unix
direktori. Sebagai contoh:
docker run -ti -e DISPLAY=$DISPLAY -v /tmp/.X11-unix:/tmp/.X11-unix some:ubuntu xclock
Sekarang, saya menggunakan Fedora 25 yang menjalankan Wayland, jadi tidak ada infrastruktur X11 untuk dibagikan dengan kontainer. Bagaimana saya bisa meluncurkan aplikasi grafis dalam wadah, dan membuatnya muncul di desktop saya? Apakah ada cara untuk mengikat XWayland?
/run/user/1000/wayland-0
untuk desktop pribadi saya.Jawaban:
Seperti yang Anda katakan Anda menjalankan Fedora 25 dengan Wayland, saya menganggap Anda menggunakan desktop Gnome-Wayland.
Gnome-Wayland menjalankan Xwayland untuk mendukung aplikasi X. Anda dapat membagikan akses Xwayland seperti yang Anda lakukan sebelumnya dengan Xorg.
Perintah contoh Anda meleset
XAUTHORITY
, dan Anda tidak menyebutkanxhost
. Anda memerlukan salah satu cara ini untuk memungkinkan aplikasi X di buruh pelabuhan untuk mengakses Xwayland (atau X apa pun). Karena semua ini tidak terkait dengan Wayland, saya merujuk ke Bagaimana Anda bisa menjalankan aplikasi GUI dalam wadah buruh pelabuhan? tentang cara menjalankan aplikasi X di buruh pelabuhan.Singkatnya, dua solusi dengan xhost:
xhost +SI:localuser:$(id -un)
dan buat pengguna serupa dengan opsi run docker:--user=$(id -u):$(id -g)
xhost +SI:localuser:root
Terkait Kesalahan : X biasanya menggunakan memori bersama (ekstensi X
MIT-SHM
). Kontainer Docker terisolasi dan tidak dapat mengakses memori bersama. Itu dapat menyebabkan rendering gangguan dan kegagalan akses RAM. Anda dapat menghindari itu dengan opsi run docker--ipc=host
. Itu berdampak isolasi wadah karena menonaktifkan penamaan IPC. Bandingkan: https://github.com/jessfraz/dockerfiles/issues/359Untuk menjalankan aplikasi Wayland di buruh pelabuhan tanpa X, Anda memerlukan komposer wayland yang berjalan seperti Gnome-Wayland atau Weston. Anda harus berbagi soket Wayland. Anda menemukannya
XDG_RUNTIME_DIR
dan namanya disimpan diWAYLAND_DISPLAY
. KarenaXDG_RUNTIME_DIR
hanya memungkinkan akses untuk pemiliknya, Anda memerlukan pengguna yang sama dalam wadah seperti pada host. Contoh:Aplikasi QT5 juga perlu
-e QT_QPA_PLATFORM=wayland
dan harus dimulaiimagename dbus-launch waylandapplication
x11docker untuk aplikasi X dan Wayland di docker adalah solusi menyeluruh . Ini juga peduli tentang menjaga isolasi wadah (yang hilang jika hanya berbagi tampilan host X seperti pada contoh Anda).
sumber
x11docker --weston-xwayland imagename application
Xwayland :20 & sleep 3 && docker run -e DISPLAY=:20 -v /tmp/.X11-unix:/tmp/.X11-unix imagename application
. Xwayland akan mencakup seluruh tampilan; Anda dapat memindahkannya dengan <Super> <LeftMouseButton>. Dengan x11docker:x11docker --xwayland imagename application
.xpra
porting ke GTK3 + python3 suatu hari, itu akan memberikan kemungkinan lebih lanjut dengan jendela tanpa batas. Pengaturan yang tidak terlihat dimungkinkan denganXvfb
wadah. Untuk diskusi secara rinci, Anda dapat membuka tiket masalah di github .Saya akan merekomendasikan Sommelier oleh Google. Ini memungkinkan Anda untuk meluncurkan aplikasi Wayland OR X11 dan menyediakan soket yang dicari oleh aplikasi tersebut untuk memasukkannya ke server tampilan saat ini. https://chromium.googlesource.com/chromiumos/platform2/+/master/vm_tools/sommelier/
Cara sederhana untuk itu harus berfungsi pada sistem apa pun bukan hanya Crouton / Crostini di ChromeOS.
https://github.com/dnschneid/crouton/wiki/Sommelier-(A-more-native-alternative-to-xiwi)
sumber