From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from gate001.proxmox.com (gate001.proxmox.com [IPv6:2a0f:8001:1:32::40]) by lore.proxmox.com (Postfix) with ESMTPS id 5AF241FF0B7 for ; Tue, 25 Aug 2026 13:09:19 +0200 (CEST) Received: from gate001.proxmox.com (localhost.localdomain [127.0.0.1]) by gate001.proxmox.com (Proxmox) with ESMTP id 58460215F8; Tue, 25 Aug 2026 13:09:14 +0200 (CEST) From: Alexandre Derumier To: pve-devel@lists.proxmox.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 Message-ID: <20260825110849.2967694-1-alexandre.derumier@groupe-cyllene.com> X-Mailer: git-send-email 2.47.3 MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-SPAM-LEVEL: Spam detection results: 7 AWL -0.400 Adjusted score from AWL reputation of From: address DMARC_QUAR 0.1 DMARC quarantine policy HEADER_FROM_DIFFERENT_DOMAINS 0.25 From and EnvelopeFrom 2nd level mail domains are different KAM_ASCII_DIVIDERS 0.8 Email that uses ascii formatting dividers and possible spam tricks KAM_DMARC_QUARANTINE 4 DKIM has Failed or SPF has failed on the message and the domain has a DMARC quarantine policy KAM_DMARC_STATUS 0.01 Test Rule for DKIM or SPF Failure with Strict Alignment (newer systems) KAM_LAZY_DOMAIN_SECURITY 1 Sending domain does not have any anti-forgery methods RDNS_NONE 1.274 Delivered to internal network by a host with no rDNS SPF_HELO_NONE 0.001 SPF: HELO does not publish an SPF Record SPF_NONE 0.001 SPF: sender does not publish an SPF Record Message-ID-Hash: S2IKOCAQLMJQBKZ5ZJYGPO333ADVLEXE X-Message-ID-Hash: S2IKOCAQLMJQBKZ5ZJYGPO333ADVLEXE X-MailFrom: root@formationkvm1.odiso.net X-Mailman-Rule-Misses: dmarc-mitigation; no-senders; approved; loop; banned-address; emergency; member-moderation; nonmember-moderation; administrivia; implicit-dest; max-recipients; max-size; news-moderation; no-subject; digests; suspicious-header CC: Alexandre Derumier X-Mailman-Version: 3.3.10 Precedence: list List-Id: Proxmox VE development discussion List-Help: List-Owner: List-Post: List-Subscribe: List-Unsubscribe: From: Alexandre Derumier 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//qemu//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/.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/.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//qemu//rdp/ v +---------------------+ | pveproxy | | checks VM.Console | +---------------------+ | | unix /run/pverdpproxy.sock | path rewritten to // v +----------------------------------+ reads the | pverdpproxy | token from | RDCleanPath: X.224 request, TLS |---> .rdp.env | handshake, certificate chain | (root only) | back to the client, then bytes | +----------------------------------+ | | unix /run/qemu-server/.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/.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