public inbox for qemu-devel@nongnu.org
 help / color / mirror / Atom feed
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 :|
>



  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