xref: /aosp_15_r20/external/crosvm/docs/book/src/devices/wayland.md (revision bb4ee6a4ae7042d18b07a98463b9c8b875e44b39)
1*bb4ee6a4SAndroid Build Coastguard Worker# Wayland
2*bb4ee6a4SAndroid Build Coastguard Worker
3*bb4ee6a4SAndroid Build Coastguard WorkerIf you have a Wayland compositor running on your host, it is possible to display and control guest
4*bb4ee6a4SAndroid Build Coastguard Workerapplications from it. This requires:
5*bb4ee6a4SAndroid Build Coastguard Worker
6*bb4ee6a4SAndroid Build Coastguard Worker- A guest kernel version 5.16 or above with `CONFIG_DRM_VIRTIO_GPU` enabled,
7*bb4ee6a4SAndroid Build Coastguard Worker- The `sommelier` Wayland proxy in your guest image.
8*bb4ee6a4SAndroid Build Coastguard Worker
9*bb4ee6a4SAndroid Build Coastguard WorkerThis section will walk you through the steps needed to get this to work.
10*bb4ee6a4SAndroid Build Coastguard Worker
11*bb4ee6a4SAndroid Build Coastguard Worker## Guest kernel requirements
12*bb4ee6a4SAndroid Build Coastguard Worker
13*bb4ee6a4SAndroid Build Coastguard WorkerWayland support on crosvm relies on virtio-gpu contexts, which have been introduced in Linux 5.16.
14*bb4ee6a4SAndroid Build Coastguard WorkerMake sure your guest kernel is either this version or a more recent one, and that
15*bb4ee6a4SAndroid Build Coastguard Worker`CONFIG_DRM_VIRTIO_GPU` is enabled in your kernel configuration.
16*bb4ee6a4SAndroid Build Coastguard Worker
17*bb4ee6a4SAndroid Build Coastguard Worker## Crosvm requirements
18*bb4ee6a4SAndroid Build Coastguard Worker
19*bb4ee6a4SAndroid Build Coastguard WorkerWayland forwarding requires the GPU feature and the virtio-gpu cross domain mode to be enabled.
20*bb4ee6a4SAndroid Build Coastguard Worker
21*bb4ee6a4SAndroid Build Coastguard Worker```
22*bb4ee6a4SAndroid Build Coastguard Workercargo build --features "gpu"
23*bb4ee6a4SAndroid Build Coastguard Worker```
24*bb4ee6a4SAndroid Build Coastguard Worker
25*bb4ee6a4SAndroid Build Coastguard Worker## Building sommelier
26*bb4ee6a4SAndroid Build Coastguard Worker
27*bb4ee6a4SAndroid Build Coastguard Worker[Sommelier] is a proxy Wayland compositor that forwards the Wayland protocol from a guest to a
28*bb4ee6a4SAndroid Build Coastguard Workercompositor running on the host through the guest GPU device. As it is not a standard tool, we will
29*bb4ee6a4SAndroid Build Coastguard Workerhave to build it by ourselves. It is recommended to do this from the guest
30*bb4ee6a4SAndroid Build Coastguard Worker[with networking enabled](../running_crosvm/example_usage.md#add-networking-support).
31*bb4ee6a4SAndroid Build Coastguard Worker
32*bb4ee6a4SAndroid Build Coastguard WorkerClone ChromeOS' `platform2` repository, which contains the source for sommelier:
33*bb4ee6a4SAndroid Build Coastguard Worker
34*bb4ee6a4SAndroid Build Coastguard Worker```sh
35*bb4ee6a4SAndroid Build Coastguard Workergit clone https://chromium.googlesource.com/chromiumos/platform2
36*bb4ee6a4SAndroid Build Coastguard Worker```
37*bb4ee6a4SAndroid Build Coastguard Worker
38*bb4ee6a4SAndroid Build Coastguard WorkerGo into the sommelier directory and prepare for building:
39*bb4ee6a4SAndroid Build Coastguard Worker
40*bb4ee6a4SAndroid Build Coastguard Worker```sh
41*bb4ee6a4SAndroid Build Coastguard Workercd platform2/vm_tools/sommelier/
42*bb4ee6a4SAndroid Build Coastguard Workermeson setup build -Dwith_tests=false
43*bb4ee6a4SAndroid Build Coastguard Worker```
44*bb4ee6a4SAndroid Build Coastguard Worker
45*bb4ee6a4SAndroid Build Coastguard WorkerThis setup step will check for all libraries required to build sommelier. If some are missing,
46*bb4ee6a4SAndroid Build Coastguard Workerinstall them using your guest's distro package manager and re-run `meson setup` until it passes.
47*bb4ee6a4SAndroid Build Coastguard Worker
48*bb4ee6a4SAndroid Build Coastguard WorkerFinally, build sommelier and install it:
49*bb4ee6a4SAndroid Build Coastguard Worker
50*bb4ee6a4SAndroid Build Coastguard Worker```sh
51*bb4ee6a4SAndroid Build Coastguard Workermeson compile -C build
52*bb4ee6a4SAndroid Build Coastguard Workersudo meson install -C build
53*bb4ee6a4SAndroid Build Coastguard Worker```
54*bb4ee6a4SAndroid Build Coastguard Worker
55*bb4ee6a4SAndroid Build Coastguard WorkerThis last step will put the `sommelier` binary into `/usr/local/bin`.
56*bb4ee6a4SAndroid Build Coastguard Worker
57*bb4ee6a4SAndroid Build Coastguard Worker## Running guest Wayland apps
58*bb4ee6a4SAndroid Build Coastguard Worker
59*bb4ee6a4SAndroid Build Coastguard WorkerCrosvm can connect to a running Wayland server (e.g. [weston]) on the host and forward the protocol
60*bb4ee6a4SAndroid Build Coastguard Workerfrom all Wayland guest applications to it. To enable this you need to know the socket of the Wayland
61*bb4ee6a4SAndroid Build Coastguard Workerserver running on your host - typically it would be `$XDG_RUNTIME_DIR/wayland-0`.
62*bb4ee6a4SAndroid Build Coastguard Worker
63*bb4ee6a4SAndroid Build Coastguard WorkerOnce you have confirmed the socket, create a GPU device and enable forwarding by adding the
64*bb4ee6a4SAndroid Build Coastguard Worker`--gpu=context-types=cross-domain --wayland-sock $XDG_RUNTIME_DIR/wayland-0` arguments to your
65*bb4ee6a4SAndroid Build Coastguard Workercrosvm command-line. Other context types may be also enabled for those interested in 3D
66*bb4ee6a4SAndroid Build Coastguard Workeracceleration.
67*bb4ee6a4SAndroid Build Coastguard Worker
68*bb4ee6a4SAndroid Build Coastguard WorkerYou can now run Wayland clients through sommelier, e.g:
69*bb4ee6a4SAndroid Build Coastguard Worker
70*bb4ee6a4SAndroid Build Coastguard Worker```sh
71*bb4ee6a4SAndroid Build Coastguard Workersommelier --virtgpu-channel weston-terminal
72*bb4ee6a4SAndroid Build Coastguard Worker```
73*bb4ee6a4SAndroid Build Coastguard Worker
74*bb4ee6a4SAndroid Build Coastguard WorkerOr
75*bb4ee6a4SAndroid Build Coastguard Worker
76*bb4ee6a4SAndroid Build Coastguard Worker```sh
77*bb4ee6a4SAndroid Build Coastguard Workersommelier --virtgpu-channel gedit
78*bb4ee6a4SAndroid Build Coastguard Worker```
79*bb4ee6a4SAndroid Build Coastguard Worker
80*bb4ee6a4SAndroid Build Coastguard WorkerApplications started that way should appear on and be controllable from the Wayland server running
81*bb4ee6a4SAndroid Build Coastguard Workeron your host.
82*bb4ee6a4SAndroid Build Coastguard Worker
83*bb4ee6a4SAndroid Build Coastguard WorkerThe `--virtgpu-channel` option is currently necessary for sommelier to work with the setup of this
84*bb4ee6a4SAndroid Build Coastguard Workerdocument, but will likely not be required in the future.
85*bb4ee6a4SAndroid Build Coastguard Worker
86*bb4ee6a4SAndroid Build Coastguard WorkerIf you have `Xwayland` installed in the guest you can also run X applications:
87*bb4ee6a4SAndroid Build Coastguard Worker
88*bb4ee6a4SAndroid Build Coastguard Worker```sh
89*bb4ee6a4SAndroid Build Coastguard Workersommelier -X --xwayland-path=/usr/bin/Xwayland xeyes
90*bb4ee6a4SAndroid Build Coastguard Worker```
91*bb4ee6a4SAndroid Build Coastguard Worker
92*bb4ee6a4SAndroid Build Coastguard Worker[sommelier]: https://chromium.googlesource.com/chromiumos/platform2/+/master/vm_tools/sommelier
93*bb4ee6a4SAndroid Build Coastguard Worker[weston]: https://github.com/wayland-project/weston
94