# QEMU D-Bus display experiment

## Introduction

*WIP* Rust crates to interact with a ``-display dbus`` QEMU.
Some dependencies, such as RDW are also in development and unreleased.

## Features

Depending on what the VM exposes & supports, various interfaces are implemented:

 - display, with optional DMABUF sharing
 - display resize
 - keyboard & mouse
 - serial terminals
 - QMP/HMP monitors
 - audio playback & recording
 - USB device redirection
 - clipboard sharing

## Project organization

### qemu-display

This crate provides simple D-Bus interfaces through zbus, and some basic abstractions.

### qemu-rdw

This crate aims to provide Gtk+ 4 widget for a QEMU display, as well as
dialogs/widgets for USB redirection and other options or features.

Currently it's a demo app (run by default with `cargo run`). 

It is also based on a *WIP* crate "RDW" (*Remote display/desktop widget*) to
provide a base widget for various remote display solutions (VNC, RDP, Spice
etc).

### qemu-vnc

A simple VNC server implementation.

### qemu-vte

A standalone VTE/Gtk+ 4 client, which should eventually be a consumable crate or
integrated with qemu-rdw.

## Build requirements

To build this project, you will need several system libraries. Here is the
current list of build dependencies on Fedora:

```sh
$ sudo dnf install cargo gcc usbredir-devel wayland-devel libxkbcommon-devel glib2-devel gtk4-devel gstreamer1-devel gstreamer1-plugins-base-devel
```