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 8CCEE1FF0B7 for ; Tue, 25 Aug 2026 13:35:35 +0200 (CEST) Received: from gate001.proxmox.com (localhost.localdomain [127.0.0.1]) by gate001.proxmox.com (Proxmox) with ESMTP id 43DA421673; Tue, 25 Aug 2026 13:35:14 +0200 (CEST) ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=UWoGJDKG7ZU4Tde6lzjCOBanK2Fo+dmbH9Zv5WDnkksxwp5OoniqbtUmDSIvZc9FjbUxUaQq2FmSw/mHyBE7rhqIpkLKeNCJ6flluhMNWGpsDpQlRfko4U6ZR5OIC3/UykhVAFvfx93L5PYxjTufcb5buHigE+2EdhAXoFXhn+y6XijbI9J/V4gqFf8vhiArezhxJe1EfZdttSJsy/gLiw+qanP8kmm3mJ7py9aaZCbVT1y29WuQTbemE6S1Q4ptsx2j4uJQ2FefHOvtmSAgDU04BithYKiPiv3Je46XIMq6ykeQnysGB3Qxj72w3uy6R9Lnk5DF8LPgY5lC9Da+eQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=xFNrFLXqobdsgnGoIaX7BzG634/hzR3Npxe7QFeIqm8=; b=fC7/V7Kd0awC21tJA76rjZGfTOO7rgjpMsLVvU3U0RVRU7R84HH0jt6zDqAKepEkrxSdmaXarS1xsxJN7nh6JrDwhcC1282zCeW7Z6x1sQR/eaxHabBPjZxd/0qHW69QnIbhnrux385YlUtoFkp5FiGAiJeFphT4sKyeBnsDZmCqOSV7z38aF11KZmxm/qBOgsBEg04dlxnm2GftWgDmEyq5koklf8xibxGMpsTtnojBjF7c/Ft/ruS4YP77/W/r2uzlVRJmbCxvIwUzws0y+/F+Y5ru58j5gztQAmefatFAPO2+aDfl2jHysxVkxlNF0fWSUQuNHpSWJQZ4nzXUaA== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=groupe-cyllene.com; dmarc=pass action=none header.from=groupe-cyllene.com; dkim=pass header.d=groupe-cyllene.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=groupecyllene.onmicrosoft.com; s=selector2-groupecyllene-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=xFNrFLXqobdsgnGoIaX7BzG634/hzR3Npxe7QFeIqm8=; b=GhiaIBXn30ZfDCc5qWkJp++QWkRlI8iWFW+MyHjrHLuDVKqkl4JuGe1oGPpgNXSyr9hiBjqnUf+uTcYKVW1nbX2PUD/r1YJ2u5Tuar1OLuki4vyZ00CQcFBm2aB3cljyyC3LyE1EMMTocTyZsWRRYI9qJYWhrTqjxT8Bh+Kfttc= Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=groupe-cyllene.com; From: Alexandre Derumier To: pve-devel@lists.proxmox.com Subject: [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:34:25 +0200 Message-ID: <20260825113442.947620-1-alexandre.derumier@groupe-cyllene.com> X-Mailer: git-send-email 2.55.0 Content-Transfer-Encoding: 8bit Content-Type: text/plain X-ClientProxiedBy: PR3P192CA0021.EURP192.PROD.OUTLOOK.COM (2603:10a6:102:56::26) To PR0P264MB3691.FRAP264.PROD.OUTLOOK.COM (2603:10a6:102:14b::12) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: PR0P264MB3691:EE_|MRYP264MB6064:EE_ X-MS-Office365-Filtering-Correlation-Id: c9b26da2-f255-4387-2010-08df029ce3e0 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|52116014|376014|23010399003|366016|1800799024|38350700014|6133799003|10067099003|56012099006|18002099003|3023799007; X-Microsoft-Antispam-Message-Info: rpCiBfMvI0mhvy0SO4AIyRhdTuh8LYJaUBp9ZNCIZjc6NycuX4rQofLLN0/Lrpx0y/Ub6O5Xb/dtZua/FowjdcQNwOZDJykMogU/j0nbOeg9nQWgUdeSClto8aI3aw6vZ01IoEBcuuqkWkojUAk+0weO/C9uAe9OzC6+TYFuyrjzQQKV7T4b2TVEdua7dWaPFx9IdPpNSYZVWNr4IJUjYPVEe5MDSJLY35kD7X6YWEP+KV1zi+yrGmcd3G4j7d7LabF09LfofvUTTzZ5GBXPCagmnmAnD4/1DpTuigffG7CGFOUxhNlNholx1nf8Ceg/GG3aqWrAdI/bwOElvEZ2jMNccSvfcWaYUkI4XglAY6qteNJg8nkDAKPnVMJatM7xJgHGAoJGCWkWpVHfHJl84mP1LNtj8WOLxXFrJI7ptdfvBQ8pCQ+Rd6kGXSHohhvHQm6RNsyWQ3Fg9ZUIjH0irwD5qc/EQKGE/n0zFXVcbUttMThOhO+uBpLdo7nQQVAecLQExtI6TZSJ8HlDfGaQFzpPZv/wSRlbxZ9CSD/jBb1WzQXZsTnL7Kfgq0Vd+QyYDrUvlJI2Rn7pc/hQ6UeDoKrihAld1RtolHLlUIwQtEzUjd5ozQN2o2KdnB4nXRAepXm5QUxrZPU0ZZTHwdOw2eKJ+M83FBkCxRUEsNaKkxaaSyiGvqa0VSeIsh4E6O3EIq+U4FdSAzA1QCTwS5B4plMFQiAR21AQGnT/nTs2gfo= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:PR0P264MB3691.FRAP264.PROD.OUTLOOK.COM;PTR:;CAT:NONE;SFS:(13230040)(52116014)(376014)(23010399003)(366016)(1800799024)(38350700014)(6133799003)(10067099003)(56012099006)(18002099003)(3023799007);DIR:OUT;SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?5yO+N8TfOwaSFT6b98VL/R2iAooWq65gpQQOUw+SHqpJFi35zO1J6PG8q2Cg?= =?us-ascii?Q?wHbtXrMtb4brZI58zH0ZsHPvvBpcE0uoxyKo0MZu6y6rutbBP3/n9d8KBJgV?= =?us-ascii?Q?OlnFLh3xDIFf9nWE5nF4Ter0Q4/w0djAnagYeRR3p8+NtRblujq9xVCMWRct?= =?us-ascii?Q?/2y4SAOjNH6K05tV7OMFDoMwpgaVnpVaxfTMZoMacxNldToQSFZXnbbtyZjh?= =?us-ascii?Q?8LQ0cNSpJby6RH8+0vFZ0U7fkpoXUFwUqGp+6UpP5VnX5YO9fP/YVfBPZFfS?= =?us-ascii?Q?Z6mlKC7zbRw926jXtopGCUbitnGi0bNsaRVkPdAzO4kkTlIhphbeeC1FHHt5?= =?us-ascii?Q?dt0MVh0hzrwiuyHVrWjzKq73v8ZXe2kQmKFlnms+9fqnrtRxPh4T3+MeH4Jh?= =?us-ascii?Q?BAYEaD0ojbA+h0RShDF84XPKAfE9BUVTmNL8ybFBP2UNj1cQvZpvNRfDgjDh?= =?us-ascii?Q?i71bUfqIzyN37IFK/b+1CqbZ3AnL0p8ksCmWcGNF6epTeMnJNxR5nQaEwMjV?= =?us-ascii?Q?H3k9nqsroYBIPA77H33hY1eDM/OnaICDj658yim15+MxqjnPrr7ippuTSE0F?= =?us-ascii?Q?weDUh1XndizvOe9miFadUXwInh4o9rlOUZR9Xp2SGRAvVAs76l7Ba5AQcktv?= =?us-ascii?Q?8HKfxR17NGtZJonQq2PjTmku6aOuEX9SAkg9uSNswtZOqDQwkg5gdUIDVCSL?= =?us-ascii?Q?K20JEFbHsT89em01xhDd5yFYaKWdx/y8le0wPvbxIbWNQGqxbk1ORyf9ixgN?= =?us-ascii?Q?Hk4Zh3e0QmdEZTiQRluD+Um/tOVERww7NFCqW/tjr6MCwQjG8rjHKkL7MNlC?= =?us-ascii?Q?2ZnVG6Hfpt6XfslCF7wyzhmxi9qV8j5kAtQRlzfPV8kGandQkpPF4tR13bQk?= =?us-ascii?Q?jhonHrQ1+hDE/JF5hrgkt2j2JRieAVRvclcr6lELLVVtvB0mw4mL6EO64vc5?= =?us-ascii?Q?SLf1BIfi2DkfUzdypefxQ+qz6zuZfVQ/uI3W/l6DvxduPSyOvpjp7wboZFL0?= =?us-ascii?Q?MrYjX4EcYcNTmvLVfjHeg5i/JjBPtmIzb3ONsmnyd1AtOMMO1cVfKrzvfLBH?= =?us-ascii?Q?rMNrUoJQqWj5t4T9WEtOCtyqoYtNJeNqroGd4IEhenY/TUzTvwRMPOm7zlaJ?= =?us-ascii?Q?GtXw10OhPCv8DFkzPvVav0hDYI0Gnr1H8BqtYEazNkvz0A8jiEO6JHEQdOBh?= =?us-ascii?Q?y6EcsfMnQEXlKQtekqmZf34pUI9QnJGkeZ6MYzIt3wmoQaSRqOTs+rhMw86I?= =?us-ascii?Q?F6tvlZNMEsu5V9unUqyp8ZkZEEGETzbVkSgpBWbuNsJq5dMukQNDQf0asVls?= =?us-ascii?Q?Ef2rNClmLYQGAFgA6a2Vu8SQWg4pE9PNSbsoNowyn6pVAq9fuF2F8Zy8BmEz?= =?us-ascii?Q?ejzcJl1qucZWkgBJq4p9p/FWHxXjHgsbxuJKcsAIqt+6Oif4QBjyuLJdBoMT?= =?us-ascii?Q?8mlw9b0a72CFUtlFDx4oGx2T73GBcRSPdBwLfm+HkbZ9zecgTr5uSqop/Aen?= =?us-ascii?Q?LGiQGufYHNzQGTkk80GsJRkZ6XNIW8aD/2oBLDUIFJOJZKtGQny3vb9YLT8A?= =?us-ascii?Q?j6vC74ocCjSsVTAitdrGw0EHo5f2QjpbLqQVuSuprQaHdnVc/DyzBkkYrHvw?= =?us-ascii?Q?KLHJ9zPG2sHb0Qf7/5gw+tesIq1W56h+nrCKi1AF6zm+DMA4/rThlXyf7oZS?= =?us-ascii?Q?pvxH2X9BGfJtFkBjNQnZsEZaWUePyzd18XQ0q8v/Kcv53pyhIbPcVC33+4bL?= =?us-ascii?Q?DGxpqAFCBI41IB0NQlqXL2W8Q9vf+i6uOpXlz5Q2jU9Ie2w9w6Ix?= X-OriginatorOrg: groupe-cyllene.com X-MS-Exchange-CrossTenant-Network-Message-Id: c9b26da2-f255-4387-2010-08df029ce3e0 X-MS-Exchange-CrossTenant-AuthSource: PR0P264MB3691.FRAP264.PROD.OUTLOOK.COM X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 25 Aug 2026 11:34:57.2238 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: ee11ccf7-112c-4284-848b-f229745e715b X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: c4bOngTvdT6Rze+sNSNNbC4NAS+/ICF++hiFEdREoI4ruEw1WqtmOH88SymRBYgA4Y1zNDDpamoXs0qfiynx18gERoJIxlh6Z/RasMk5l3WCPhikOtDfYxNSriVufRct X-MS-Exchange-Transport-CrossTenantHeadersStamped: MRYP264MB6064 X-SPAM-LEVEL: Spam detection results: 0 AWL -0.400 Adjusted score from AWL reputation of From: address DKIM_SIGNED 0.1 Message has a DKIM or DK signature, not necessarily valid DKIM_VALID -0.1 Message has at least one valid DKIM or DK signature DMARC_PASS -0.1 DMARC pass policy KAM_ASCII_DIVIDERS 0.8 Email that uses ascii formatting dividers and possible spam tricks RCVD_IN_DNSWL_NONE -0.0001 Sender listed at https://www.dnswl.org/, no trust SPF_HELO_PASS -0.001 SPF: HELO matches SPF record SPF_PASS -0.001 SPF: sender matches SPF record Message-ID-Hash: HGWTXVCDADPGGWZA53W27DT7YYFUPPUZ X-Message-ID-Hash: HGWTXVCDADPGGWZA53W27DT7YYFUPPUZ X-MailFrom: Alexandre.DERUMIER@groupe-cyllene.com 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 X-Mailman-Version: 3.3.10 Precedence: list List-Id: Proxmox VE development discussion List-Help: List-Owner: List-Post: List-Subscribe: List-Unsubscribe: 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