From: "Marc-André Lureau" <marcandre.lureau@redhat.com>
To: "Daniel P. Berrangé" <berrange@redhat.com>
Cc: qemu-devel@nongnu.org
Subject: Re: [PATCH 60/60] contrib/qemu-vnc: add standalone VNC server over D-Bus
Date: Wed, 25 Mar 2026 12:32:32 +0400 [thread overview]
Message-ID: <CAMxuvaxv2o301O3wVacVMtEdOSzc+bO6jDKX93AnhXTT4wr_6w@mail.gmail.com> (raw)
In-Reply-To: <acKsobCZ2G8TE2XI@redhat.com>
Hi
On Tue, Mar 24, 2026 at 7:24 PM Daniel P. Berrangé <berrange@redhat.com> wrote:
>
> On Tue, Mar 17, 2026 at 12:51:14PM +0400, Marc-André Lureau wrote:
> > Add a standalone VNC server binary that connects to a running QEMU
> > instance via the D-Bus display interface (org.qemu.Display1, via the bus
> > or directly p2p). This allows serving a VNC display without compiling
> > VNC support directly into the QEMU system emulator, and enables running
> > the VNC server as a separate process with independent lifecycle and
> > privilege domain.
>
> IIUC, this new binary is linking to all the existnig ui/vnc.c
> code, so there's no actual new impl of the RFB protocol, just
> a new glue layer for launching the existing impl with comms
> over DBus instead of from direct callback functions ?
>
> > Built only when both VNC and D-Bus display support are enabled.
> > If we wanted to have qemu -vnc disabled, and qemu-vnc built, we would
> > need to split CONFIG_VNC. This is left as a future exercise.
> >
> > I left out for now:
> > - sasl & tls authz
>
> IMHO these are must have features, as the default VNC protocol
> security is a very bad joke.
Ok that should be doable. One thing that bothers me a bit is mapping
the -object options (authz) to a more regular CLI. Perhaps I'll just
add -object args and wire it with the other options..
>
> > - some runtime functionalities (better done by restarting)
> > - a few legacy options
> > - Windows support
> >
> > Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
> > ---
> > MAINTAINERS | 5 +
> > docs/conf.py | 3 +
> > docs/interop/dbus-display.rst | 2 +
> > docs/interop/dbus-vnc.rst | 26 ++
> > docs/interop/index.rst | 1 +
> > docs/meson.build | 1 +
> > docs/tools/index.rst | 1 +
> > docs/tools/qemu-vnc.rst | 199 +++++++++++
> > meson.build | 17 +
> > contrib/qemu-vnc/qemu-vnc.h | 46 +++
> > contrib/qemu-vnc/trace.h | 4 +
> > contrib/qemu-vnc/audio.c | 307 +++++++++++++++++
> > contrib/qemu-vnc/chardev.c | 127 +++++++
> > contrib/qemu-vnc/clipboard.c | 378 +++++++++++++++++++++
> > contrib/qemu-vnc/console.c | 168 ++++++++++
> > contrib/qemu-vnc/dbus.c | 439 ++++++++++++++++++++++++
> > contrib/qemu-vnc/display.c | 456 +++++++++++++++++++++++++
> > contrib/qemu-vnc/input.c | 239 ++++++++++++++
> > contrib/qemu-vnc/qemu-vnc.c | 450 +++++++++++++++++++++++++
> > contrib/qemu-vnc/stubs.c | 66 ++++
> > contrib/qemu-vnc/utils.c | 59 ++++
>
> IMHO we should not really be adding more things to the contrib
> directory, and rather wish most of the existing stuff was
> not there. When I see "contrib" directories in projects, the
> message is generally "unmaintained, abandoned junk".
>
> If this is a serious maintained feature we expect people to use,
> it should be formally under the ui/ directory, possibly a
> 'ui/dbus-vnc' subdir ?
It is intended to be maintained. (although I hope we can deprecate it
in favour of qemu-rdp in the long term). I'll follow the "Cleaning up
contrib/ and tools/" thread and see where it could land.
.
>
> > tests/qtest/dbus-vnc-test.c | 733 +++++++++++++++++++++++++++++++++++++++++
> > contrib/qemu-vnc/meson.build | 26 ++
> > contrib/qemu-vnc/qemu-vnc1.xml | 174 ++++++++++
> > contrib/qemu-vnc/trace-events | 20 ++
> > meson_options.txt | 2 +
> > scripts/meson-buildoptions.sh | 3 +
> > tests/dbus-daemon.sh | 14 +-
> > tests/qtest/meson.build | 8 +
> > 29 files changed, 3971 insertions(+), 3 deletions(-)
> >
>
> > diff --git a/meson_options.txt b/meson_options.txt
> > index 31d5916cfce..ef938e74793 100644
> > --- a/meson_options.txt
> > +++ b/meson_options.txt
> > @@ -119,6 +119,8 @@ option('vfio_user_server', type: 'feature', value: 'disabled',
> > description: 'vfio-user server support')
> > option('dbus_display', type: 'feature', value: 'auto',
> > description: '-display dbus support')
> > +option('qemu_vnc', type: 'feature', value: 'auto',
> > + description: 'standalone VNC server over D-Bus')
>
> Every option is about QEMU, so 'qemu_' on a name feels redundant,
> and QEMU alrady has a VNC server too.
>
> I suggest 'dbus_vnc' is possibly a better name
>
Well, I just named the option after the binary's name. I think that's easier.
>
> > option('tpm', type : 'feature', value : 'auto',
> > description: 'TPM support')
> > option('valgrind', type : 'feature', value: 'auto',
>
> With regards,
> Daniel
> --
> |: https://berrange.com ~~ https://hachyderm.io/@berrange :|
> |: https://libvirt.org ~~ https://entangle-photo.org :|
> |: https://pixelfed.art/berrange ~~ https://fstop138.berrange.com :|
>
next prev parent reply other threads:[~2026-03-25 8:33 UTC|newest]
Thread overview: 105+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-03-17 8:50 [PATCH 00/60] ui: add standalone VNC server over D-Bus Marc-André Lureau
2026-03-17 8:50 ` [PATCH 01/60] ui/vnc-jobs: fix VncRectEntry leak on job cleanup Marc-André Lureau
2026-03-24 13:43 ` Daniel P. Berrangé
2026-03-17 8:50 ` [PATCH 02/60] ui/vnc-jobs: clear source tag Marc-André Lureau
2026-03-24 13:44 ` Daniel P. Berrangé
2026-03-17 8:50 ` [PATCH 03/60] ui/vnc-jobs: remove needless buffer_reset() before end Marc-André Lureau
2026-03-24 13:45 ` Daniel P. Berrangé
2026-03-17 8:50 ` [PATCH 04/60] ui/vnc: clarify intent using buffer_empty() function Marc-André Lureau
2026-03-24 13:45 ` Daniel P. Berrangé
2026-03-17 8:50 ` [PATCH 05/60] ui/vnc-jobs: vnc_has_job_locked() argument cannot be NULL Marc-André Lureau
2026-03-24 13:46 ` Daniel P. Berrangé
2026-03-17 8:50 ` [PATCH 06/60] ui/vnc-jobs: remove dead VncJobQueue.exit Marc-André Lureau
2026-03-24 13:49 ` Daniel P. Berrangé
2026-03-17 8:50 ` [PATCH 07/60] ui/vnc-jobs: remove vnc_queue_clear() Marc-André Lureau
2026-03-24 13:51 ` Daniel P. Berrangé
2026-03-17 8:50 ` [PATCH 08/60] ui/vnc-jobs: narrow taking the lock when pushing empty jobs Marc-André Lureau
2026-03-24 13:53 ` Daniel P. Berrangé
2026-03-24 14:04 ` Marc-André Lureau
2026-03-17 8:50 ` [PATCH 09/60] ui/vnc-jobs: drop redundant (and needless) qemu_thread_get_self() Marc-André Lureau
2026-03-24 14:00 ` Daniel P. Berrangé
2026-03-17 8:50 ` [PATCH 10/60] ui/console-vc: fix off-by-one in CSI J 2 (clear entire screen) Marc-André Lureau
2026-03-24 14:03 ` Daniel P. Berrangé
2026-03-17 8:50 ` [PATCH 11/60] ui/console-vc: add UTF-8 input decoding with CP437 rendering Marc-André Lureau
2026-03-24 14:07 ` Daniel P. Berrangé
2026-03-24 14:17 ` Marc-André Lureau
2026-03-24 15:42 ` Daniel P. Berrangé
2026-03-25 5:35 ` Markus Armbruster
2026-03-25 6:48 ` Marc-André Lureau
2026-03-17 8:50 ` [PATCH 12/60] ui/console-vc: ignore string-type escape sequences Marc-André Lureau
2026-03-17 8:50 ` [PATCH 13/60] ui/console-vc: fix comment shift-out/in comments Marc-André Lureau
2026-03-24 14:11 ` Daniel P. Berrangé
2026-03-17 8:50 ` [PATCH 14/60] ui/console: dispatch get_label() through QOM virtual method Marc-André Lureau
2026-03-24 14:14 ` Daniel P. Berrangé
2026-03-17 8:50 ` [PATCH 15/60] ui/console-vc: introduce QemuVT100 Marc-André Lureau
2026-03-17 8:50 ` [PATCH 16/60] ui/console-vc: set vt100 associated pixman image Marc-André Lureau
2026-03-17 8:50 ` [PATCH 17/60] ui/console-vc: vga_putcharxy()->vt100_putcharxy() Marc-André Lureau
2026-03-17 8:50 ` [PATCH 18/60] ui/console-vc: make invalidate_xy() take vt100 Marc-André Lureau
2026-03-17 8:50 ` [PATCH 19/60] ui/console-vc: make show_cursor() " Marc-André Lureau
2026-03-17 8:50 ` [PATCH 20/60] ui/console-vc: decouple VT100 display updates via function pointer Marc-André Lureau
2026-03-17 8:50 ` [PATCH 21/60] ui/console-vc: console_refresh() -> vt100_refresh() Marc-André Lureau
2026-03-17 8:50 ` [PATCH 22/60] ui/console-vc: move cursor blinking logic into VT100 layer Marc-André Lureau
2026-03-17 8:50 ` [PATCH 23/60] ui/console-vc: console_scroll() -> vt100_scroll() Marc-André Lureau
2026-03-17 8:50 ` [PATCH 24/60] ui/console-vc: refactor text_console_resize() into vt100_set_image() Marc-André Lureau
2026-03-17 8:50 ` [PATCH 25/60] ui/console-vc: move vc_put_lf() to VT100 layer as vt100_put_lf() Marc-André Lureau
2026-03-17 8:50 ` [PATCH 26/60] ui/console-vc: unify the write path Marc-André Lureau
2026-03-17 8:50 ` [PATCH 27/60] ui/console-vc: move VT100 state machine and output FIFO into QemuVT100 Marc-André Lureau
2026-03-17 8:50 ` [PATCH 28/60] ui/console-vc: extract vt100_input() from vc_chr_write() Marc-André Lureau
2026-03-17 8:50 ` [PATCH 29/60] ui/console-vc: extract vt100_keysym() from qemu_text_console_handle_keysym() Marc-André Lureau
2026-03-17 8:50 ` [PATCH 30/60] ui/console-vc: extract vt100_init() and vt100_fini() Marc-André Lureau
2026-03-17 8:50 ` [PATCH 31/60] ui/console: remove console_ch_t typedef and console_write_ch() Marc-André Lureau
2026-03-17 8:50 ` [PATCH 32/60] ui: avoid duplicating vgafont16 in each translation unit Marc-André Lureau
2026-03-24 14:22 ` Daniel P. Berrangé
2026-03-17 8:50 ` [PATCH 33/60] ui/vgafont: add SPDX license header Marc-André Lureau
2026-03-24 14:24 ` Daniel P. Berrangé
2026-03-17 8:50 ` [PATCH 34/60] ui: move FONT_WIDTH/HEIGHT to vgafont.h Marc-André Lureau
2026-03-24 14:25 ` Daniel P. Berrangé
2026-03-17 8:50 ` [PATCH 35/60] ui/console-vc: move VT100 emulation into separate unit Marc-André Lureau
2026-03-17 8:50 ` [PATCH 36/60] util: move datadir.c from system/ Marc-André Lureau
2026-03-24 14:27 ` Daniel P. Berrangé
2026-03-17 8:50 ` [PATCH 37/60] ui: move DisplaySurface functions to display-surface.c Marc-André Lureau
2026-03-17 8:50 ` [PATCH 38/60] ui: make qemu_default_pixelformat() static inline Marc-André Lureau
2026-03-24 14:28 ` Daniel P. Berrangé
2026-03-17 8:50 ` [PATCH 39/60] ui: make unregister_displaychangelistener() skip unregistered Marc-André Lureau
2026-03-24 14:28 ` Daniel P. Berrangé
2026-03-17 8:50 ` [PATCH 40/60] ui: minor code simplification Marc-André Lureau
2026-03-24 14:30 ` Daniel P. Berrangé
2026-03-17 8:50 ` [PATCH 41/60] system: make qemu_del_vm_change_state_handler accept NULL Marc-André Lureau
2026-03-24 14:31 ` Daniel P. Berrangé
2026-03-17 8:50 ` [PATCH 42/60] ui/vnc: assert preconditions instead of silently returning Marc-André Lureau
2026-03-24 14:31 ` Daniel P. Berrangé
2026-03-17 8:50 ` [PATCH 43/60] ui/vnc: simplify vnc_init_func error handling Marc-André Lureau
2026-03-24 14:38 ` Daniel P. Berrangé
2026-03-17 8:50 ` [PATCH 44/60] ui/vnc: VncDisplay.id is not const Marc-André Lureau
2026-03-24 14:39 ` Daniel P. Berrangé
2026-03-17 8:50 ` [PATCH 45/60] ui/vnc: fix vnc_display_init() leak on failure Marc-André Lureau
2026-03-24 14:47 ` Daniel P. Berrangé
2026-03-17 8:51 ` [PATCH 46/60] ui/vnc: merge vnc_display_init() and vnc_display_open() Marc-André Lureau
2026-03-24 14:51 ` Daniel P. Berrangé
2026-03-17 8:51 ` [PATCH 47/60] ui/vnc: report an error for duplicate display id Marc-André Lureau
2026-03-24 14:52 ` Daniel P. Berrangé
2026-03-17 8:51 ` [PATCH 48/60] ui/vnc: defer listener registration until the console is known Marc-André Lureau
2026-03-24 14:53 ` Daniel P. Berrangé
2026-03-17 8:51 ` [PATCH 49/60] ui/vnc: explicitly link with png Marc-André Lureau
2026-03-24 14:56 ` Daniel P. Berrangé
2026-03-17 8:51 ` [PATCH 50/60] ui/vnc: add vnc-system unit, to allow different implementations Marc-André Lureau
2026-03-17 8:51 ` [PATCH 51/60] ui/console: remove qemu_console_is_visible() Marc-André Lureau
2026-03-24 14:57 ` Daniel P. Berrangé
2026-03-17 8:51 ` [PATCH 52/60] ui/console: simplify registering display/console change listener Marc-André Lureau
2026-03-17 8:51 ` [PATCH 53/60] ui/console: return completion status from gfx_update callback Marc-André Lureau
2026-03-17 11:43 ` BALATON Zoltan
2026-03-17 8:51 ` [PATCH 54/60] ui/console: rename public API to use consistent qemu_console_ prefix Marc-André Lureau
2026-03-17 11:46 ` BALATON Zoltan
2026-03-17 8:51 ` [PATCH 55/60] ui/console: move console_handle_touch_event() to input Marc-André Lureau
2026-03-17 8:51 ` [PATCH 56/60] ui: extract common sources into a static library Marc-André Lureau
2026-03-17 8:51 ` [PATCH 57/60] tests: rename the dbus-daemon helper script Marc-André Lureau
2026-03-24 15:05 ` Daniel P. Berrangé
2026-03-17 8:51 ` [PATCH 58/60] tests/qtest: fix dbus-vmstate-test compilation Marc-André Lureau
2026-03-17 12:28 ` Fabiano Rosas
2026-03-17 12:39 ` Marc-André Lureau
2026-03-17 8:51 ` [PATCH 59/60] tests/qtest: drop DBUS_VMSTATE_TEST_TMPDIR Marc-André Lureau
2026-03-17 8:51 ` [PATCH 60/60] contrib/qemu-vnc: add standalone VNC server over D-Bus Marc-André Lureau
2026-03-24 15:24 ` Daniel P. Berrangé
2026-03-24 15:44 ` Peter Maydell
2026-03-25 8:32 ` Marc-André Lureau [this message]
2026-03-24 17:36 ` [PATCH 00/60] ui: " Daniel P. Berrangé
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=CAMxuvaxv2o301O3wVacVMtEdOSzc+bO6jDKX93AnhXTT4wr_6w@mail.gmail.com \
--to=marcandre.lureau@redhat.com \
--cc=berrange@redhat.com \
--cc=qemu-devel@nongnu.org \
/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