From: Alexandre Derumier <alexandre.derumier@groupe-cyllene.com>
To: pve-devel@lists.proxmox.com
Cc: Alexandre Derumier <aderumier@groupe-cyllene.com>
Subject: SPAM: [RFC pve-http-server/qemu-server/pve-manager/pve-{qemu-kyber,kyberproxy, kyber-web,qemu-rdp,rdpproxy,rdp-web} 00/13] add rdp && kyber consoles for qemu over D-Bus display
Date: Tue, 25 Aug 2026 13:08:32 +0200 [thread overview]
Message-ID: <20260825110849.2967694-1-alexandre.derumier@groupe-cyllene.com> (raw)
From: Alexandre Derumier <aderumier@groupe-cyllene.com>
Hi,
This patch series add support for 2 new remote console protocols as alternative
to VNC && spice.
They use the QEMU's D-Bus display feature to encode and stream the video to
through an external daemon.
1) Kyber web console
This use the new streaming protocol developped by the VLC developpers
https://gitlab.com/kyber/kyber
https://www.youtube.com/watch?v=nqVzOMebNx8
The target is a replacement of spice protocol for cloud gaming, video
acceleration, 3d support.
The kyber server has been patched to support qemu video output && inputs.
Kyber use a controlplane through websockets && dataplane for video through
quick/webtransport.
browser
|
+-------------------------+-------------------------+
| |
control plane data plane
HTTPS :8006 WebTransport (QUIC)
/api2/json/nodes/<node>/qemu/<vmid>/kyber/ UDP :63100, per node
| routed by the token
v start_mux handed out
+---------------------+ |
| pveproxy | |
| checks VM.Console | |
+---------------------+ |
| |
| unix /run/pvekyberproxy.sock |
v v
+---------------------------------------------------------------+
| pvekyberproxy |
| start_mux is answered with this daemon's port and its |
| certificate hash, which is what sends the client here |
+---------------------------------------------------------------+
| |
| unix | QUIC
| /run/qemu-server/<vmid>.kyber.sock | 127.0.0.1:63000
v v
+---------------------------------------------------------------+
| kycontroller (pve-kyber) |
+---------------------------------------------------------------+
| spawns
v
kyavserver / kynputserver
| spawn
v
kyber-qemu-server ---> kymux tcp 127.0.0.1:9091/0 video, /1 audio
|
| D-Bus unix /run/qemu-server/<vmid>.dbusdisplay, org.qemu on
v the private bus qemu-server starts for that VM
QEMU -display dbus,addr=unix:path=...
2) RDP web console
It's use the IronRDP server && gateway implementation
https://github.com/Devolutions/IronRDP
https://github.com/Devolutions/devolutions-gateway
Target is VNC replacement (with audio && clipboard support),
cpu usage is pretty low && display is a lot better than VNC when playing videos
for example.
browser
|
| one websocket, and only this one:
| HTTPS :8006, no second port to open
| /api2/json/nodes/<node>/qemu/<vmid>/rdp/<token>
v
+---------------------+
| pveproxy |
| checks VM.Console |
+---------------------+
|
| unix /run/pverdpproxy.sock
| path rewritten to /<vmid>/<token>
v
+----------------------------------+ reads the
| pverdpproxy | token from
| RDCleanPath: X.224 request, TLS |---> <vmid>.rdp.env
| handshake, certificate chain | (root only)
| back to the client, then bytes |
+----------------------------------+
|
| unix /run/qemu-server/<vmid>.rdp.sock
| TLS, terminated here - CredSSP binds to
| the server's key, so it cannot be dropped
v
+----------------------------------+ credentials
| qemu-rdp (pve-rdp@) |<--- over D-Bus,
+----------------------------------+ from the API
|
| D-Bus unix, org.qemu on the private bus
v /run/qemu-server/<vmid>.dbusdisplay
QEMU -display dbus,addr=unix:path=...
the kyber/rdp servers && proxy are written in Rust, as I'm a pretty poor rust
developper, I have use claude for most of their implementation, and review all
the code multiple times, but please review carefully to be sure.
For kyber, I have added an experimental patch for qemu-server to use gpu
acceleration through DMABUF, but I had some bugs with some resolutions display,
tested with an amd gpu, I didn't have nvidia hardware to compare.
pve-http-server (1):
anyevent : proxy a path prefix to a local http proxy
src/PVE/APIServer/AnyEvent.pm | 263 ++++++++++++++++++++++++++++++++++
1 file changed, 263 insertions(+)
qemu-server (4):
add D-Bus display support
add kyber display
add rdp display
add experimental kyber-gl display
17 files changed, 929 insertions(+), 7 deletions(-)
pve-manager (2):
ui: add kyber console
ui: add rdp console
12 files changed, 1280 insertions(+), 6 deletions(-)
new packages (6):
pve-qemu-kyber 28 files changed, 7987 insertions(+)
pve-kyberproxy 16 files changed, 3245 insertions(+)
pve-kyber-web 13 files changed, 542 insertions(+)
pve-qemu-rdp 11 files changed, 328 insertions(+)
pve-rdpproxy 13 files changed, 1802 insertions(+)
pve-rdp-web 15 files changed, 5055 insertions(+)
--
2.55.0
next reply other threads:[~2026-08-25 11:09 UTC|newest]
Thread overview: 11+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-08-25 11:08 Alexandre Derumier [this message]
2026-08-25 11:08 ` SPAM: [RFC pve-http-server 01/13] anyevent : proxy a path prefix to a local http proxy Alexandre Derumier
2026-08-25 11:08 ` SPAM: [RFC qemu-server 02/13] add D-Bus display support Alexandre Derumier
2026-08-25 11:08 ` SPAM: [RFC qemu-server 03/13] add kyber display Alexandre Derumier
2026-08-25 11:08 ` SPAM: [RFC qemu-server 04/13] add rdp display Alexandre Derumier
2026-08-25 11:08 ` SPAM: [RFC qemu-server 05/13] add experimental kyber-gl display Alexandre Derumier
2026-08-25 11:08 ` SPAM: [RFC pve-manager 06/13] ui: add kyber console Alexandre Derumier
2026-08-25 11:08 ` SPAM: [RFC pve-manager 07/13] ui: add rdp console Alexandre Derumier
2026-08-25 11:08 ` SPAM: [RFC pve-kyber-web 10/13] add pve-kyber-web: console's webassembly client Alexandre Derumier
2026-08-25 11:08 ` SPAM: [RFC pve-qemu-rdp 11/13] Add pve-qemu-rdp: an RDP server for the console Alexandre Derumier
2026-08-25 11:08 ` SPAM: [RFC pve-rdpproxy 12/13] Add pve-rdpproxy Alexandre Derumier
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20260825110849.2967694-1-alexandre.derumier@groupe-cyllene.com \
--to=alexandre.derumier@groupe-cyllene.com \
--cc=aderumier@groupe-cyllene.com \
--cc=pve-devel@lists.proxmox.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.