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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox