Bagaimana saya bisa menjalankan aplikasi grafis dalam sebuah wadah di bawah Wayland?

15

Ketika saya menggunakan desktop X11, saya bisa menjalankan aplikasi grafis dalam wadah buruh pelabuhan dengan berbagi $DISPLAYvariabel dan /tmp/X11-unixdirektori. 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?

Willi Ballenthin
sumber
Tidak yakin bagaimana menjawab pertanyaan Anda dengan cara yang benar (saya belum pernah melakukannya sebelumnya) tetapi pada sistem saya soket unix domain yang digunakan oleh Wayland adalah /run/user/1000/wayland-0untuk desktop pribadi saya.
Bratchley

Jawaban:

16

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 menyebutkan xhost. 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:

  1. Izinkan akses pengguna lokal Anda melalui xhost: xhost +SI:localuser:$(id -un)dan buat pengguna serupa dengan opsi run docker:--user=$(id -u):$(id -g)
  2. Berkecil: Izinkan akses root ke X dengan 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/359


Untuk 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_DIRdan namanya disimpan di WAYLAND_DISPLAY. Karena XDG_RUNTIME_DIRhanya memungkinkan akses untuk pemiliknya, Anda memerlukan pengguna yang sama dalam wadah seperti pada host. Contoh:

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

Aplikasi QT5 juga perlu -e QT_QPA_PLATFORM=waylanddan 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).

mviereck
sumber
Bagaimana jika saya tidak yakin apakah aplikasi yang ingin saya jalankan adalah X atau Wayland? Adakah sesuatu yang generik yang dapat saya lewati sehingga secara otomatis dapat menentukan apakah XWayland diperlukan atau tidak?
Oxwivi
1
@ SHN Dimungkinkan untuk menjalankan Weston sebagai klien di komposer Wayland lain. Di dalam klien ini, Weston Anda dapat menjalankan Xwayland dengan aplikasi X. Dengan x11docker:x11docker --weston-xwayland imagename application
mviereck
1
@Shn Juga Anda dapat menjalankan Xwayland langsung sebagai klien Wayland: 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.
mviereck
1
@ SHN Anda memerlukan server X dalam hal apa pun. Untuk menghindari X pada host saya berikan x11docker / xwayland . Jika xpraporting ke GTK3 + python3 suatu hari, itu akan memberikan kemungkinan lebih lanjut dengan jendela tanpa batas. Pengaturan yang tidak terlihat dimungkinkan dengan Xvfbwadah. Untuk diskusi secara rinci, Anda dapat membuka tiket masalah di github .
mviereck
0

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)

dragon788
sumber