mirror of
https://github.com/PhyllomeOS/wiki.git
synced 2024-10-06 05:55:46 +00:00
178 lines
4.2 KiB
Markdown
178 lines
4.2 KiB
Markdown
---
|
|
title: Display
|
|
description: How to access a virtual machine's display
|
|
published: true
|
|
date: 2023-10-15T15:00:46.080Z
|
|
tags:
|
|
editor: markdown
|
|
dateCreated: 2022-07-31T09:22:05.854Z
|
|
---
|
|
|
|
# Display
|
|
|
|
A virtual display can be attached to a virtual machine. It is a must-have for non-headless scenarios.
|
|
|
|
## Display types
|
|
|
|
### SDL display
|
|
|
|
The [Simple DirectMedia Layer](https://www.libsdl.org/) (SDL)-powered display is a local-only low-latency display.
|
|
|
|
> The SDL display is only avalable with virtual machines created using the QEMU/KVM **User Session**.
|
|
{.is-info}
|
|
|
|
> Mouse grab does not currently work with the SDL display
|
|
{.is-warning}
|
|
|
|
> The display resolution of your guest display should not exceed that of your physical screen
|
|
{.is-info}
|
|
|
|
#### SELinux-related configuration
|
|
|
|
By default, SELinux will block access to X Windows Server for the virtualization stack. An exception has to be set.
|
|
|
|
* Set new rule
|
|
|
|
```
|
|
sudo setsebool -P virt_use_xserver 1
|
|
```
|
|
|
|
* Do some magic trick
|
|
|
|
```
|
|
sudo ausearch -c 'qemu-system-x86' --raw | audit2allow -M my-qemusystemx86
|
|
k
|
|
```
|
|
|
|
* And another one
|
|
|
|
```
|
|
sudo semodule -X 300 -i my-qemusystemx86.pp
|
|
```
|
|
|
|
#### SDL XML configuration
|
|
|
|
* The default display can be identified using `echo $DISPLAY`.
|
|
|
|
```
|
|
$ echo $DISPLAY
|
|
:0
|
|
```
|
|
|
|
The same applies to `xauth`. On Wayland, it would look like that.
|
|
|
|
```
|
|
$ echo $XAUTHORITY
|
|
/run/user/1000/.mutter-Xwaylandauth.ARIY51
|
|
```
|
|
|
|
* Example of an XML SDL configuration, with OpenGL enabled. This example requires a 3D-capable graphic card to be attached to the guest computer, such as `virtio-gpu`.
|
|
|
|
```
|
|
<graphics type="sdl" display=":0" xauth="/run/user/1000/.mutter-Xwaylandauth.ARIY51" fullscreen="yes">
|
|
<gl enable="yes"/>
|
|
</graphics>
|
|
```
|
|
|
|
> The fullscreen attribute is not honored at the moment
|
|
{.is-warning}
|
|
|
|
### D-Bus display
|
|
|
|
[D-Bus](https://www.freedesktop.org/wiki/Software/dbus/) is a desktop-oriented middleware that can be used to create a display for a virtual machine.
|
|
|
|
#### Libvirt
|
|
|
|
* Add a D-Bus video backend and add enable for OpenGL:
|
|
|
|
```
|
|
<graphics type="dbus">
|
|
<gl enable="yes"/>
|
|
</graphics>
|
|
```
|
|
|
|
> This equates to `-display dbus,gl=on` in QEMU
|
|
>
|
|
{.is-info}
|
|
|
|
When the virtual machine is launched, a specific D-Bus address will be choosen, as well as a rendering device:
|
|
|
|
```
|
|
<graphics type="dbus" address="unix:path=/run/user/1000/libvirt/qemu/run/dbus/8-user-d-bus-dbus.sock">
|
|
<gl enable="yes" rendernode="/dev/dri/renderD128"/>
|
|
</graphics>
|
|
```
|
|
|
|
* Add a D-Bus audio backend:
|
|
|
|
```
|
|
<graphics type="dbus">
|
|
<audio id="1">
|
|
</graphics>
|
|
```
|
|
|
|
#### Connect to the D-Bus display
|
|
|
|
A third-party tool is required to interact to the D-Bus display.
|
|
|
|
[Libmks](https://gitlab.gnome.org/GNOME/libmks), which is under development, is such a tool.
|
|
|
|
> Due to [a bug](https://gitlab.gnome.org/GNOME/libmks/-/issues/16), it is currenlty only possible to connect a D-Bus display with plain QEMU
|
|
{.is-warning}
|
|
|
|
|
|
Libmks has to be built from source.
|
|
|
|
- Clone the repository
|
|
|
|
```
|
|
git clone https://gitlab.gnome.org/GNOME/libmks
|
|
```
|
|
|
|
- Change directory
|
|
|
|
```
|
|
cd libmks
|
|
```
|
|
|
|
- Build it
|
|
|
|
```
|
|
meson setup build
|
|
cd build
|
|
ninja
|
|
```
|
|
|
|
- Launch a diskless virtual machine
|
|
|
|
```
|
|
qemu-system-x86_64 \
|
|
-enable-kvm \
|
|
-machine q35 \
|
|
-drive if=pflash,format=raw,readonly=on,file=/usr/share/edk2-ovmf/x64/OVMF_CODE.fd \
|
|
-cpu host \
|
|
-device virtio-vga-gl \
|
|
-m 4G \
|
|
-smp 2,sockets=1,dies=1,cores=2,threads=1 \
|
|
-display dbus,gl=on \
|
|
-device virtio-tablet-pci \
|
|
-device virtio-keyboard-pci \
|
|
```
|
|
|
|
- From another terminal tab or window, launch the previously built MKS using the following command
|
|
|
|
```
|
|
./build/tools/mks
|
|
```
|
|
|
|
## Resources
|
|
|
|
* [Detailed presentation](https://bootlin.com/pub/conferences/2016/meetup/dbus/josserand-dbus-meetup.pdf) on D-Bus
|
|
* [Official resource](https://libvirt.org/formatdomain.html#graphical-framebuffers) for libvirt-compatible displays, including various XML examples
|
|
* [Libmks](https://gitlab.gnome.org/chergert/libmks) provides a "Mouse, Keyboard, and Screen" to QEMU using the D-Bus device support in QEMU and GTK 4.
|
|
* [QEMU D-Bus display experiment](https://gitlab.com/marcandre.lureau/qemu-display/) is a WIP Rust crates to interact with a -display dbus QEMU
|
|
* [SDL graphics](https://fedoraproject.org/wiki/How_to_debug_Virtualization_problems#SDL_Graphics)
|
|
|
|
---
|
|
|
|
*[**Go to parent page**](https://wiki.phyllo.me/)* |