Show a cover letter.

GET /api/1.1/covers/2230536/?format=api
HTTP 200 OK
Allow: GET, HEAD, OPTIONS
Content-Type: application/json
Vary: Accept

{
    "id": 2230536,
    "url": "http://patchwork.ozlabs.org/api/1.1/covers/2230536/?format=api",
    "web_url": "http://patchwork.ozlabs.org/project/qemu-devel/cover/20260430-qemu-vnc-v3-0-be96757428d0@redhat.com/",
    "project": {
        "id": 14,
        "url": "http://patchwork.ozlabs.org/api/1.1/projects/14/?format=api",
        "name": "QEMU Development",
        "link_name": "qemu-devel",
        "list_id": "qemu-devel.nongnu.org",
        "list_email": "qemu-devel@nongnu.org",
        "web_url": "",
        "scm_url": "",
        "webscm_url": ""
    },
    "msgid": "<20260430-qemu-vnc-v3-0-be96757428d0@redhat.com>",
    "date": "2026-04-29T21:02:33",
    "name": "[v3,00/26] ui: add standalone VNC server over D-Bus",
    "submitter": {
        "id": 66774,
        "url": "http://patchwork.ozlabs.org/api/1.1/people/66774/?format=api",
        "name": "Marc-André Lureau",
        "email": "marcandre.lureau@redhat.com"
    },
    "mbox": "http://patchwork.ozlabs.org/project/qemu-devel/cover/20260430-qemu-vnc-v3-0-be96757428d0@redhat.com/mbox/",
    "series": [
        {
            "id": 502150,
            "url": "http://patchwork.ozlabs.org/api/1.1/series/502150/?format=api",
            "web_url": "http://patchwork.ozlabs.org/project/qemu-devel/list/?series=502150",
            "date": "2026-04-29T21:02:34",
            "name": "ui: add standalone VNC server over D-Bus",
            "version": 3,
            "mbox": "http://patchwork.ozlabs.org/series/502150/mbox/"
        }
    ],
    "comments": "http://patchwork.ozlabs.org/api/covers/2230536/comments/",
    "headers": {
        "Return-Path": "<qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org>",
        "X-Original-To": "incoming@patchwork.ozlabs.org",
        "Delivered-To": "patchwork-incoming@legolas.ozlabs.org",
        "Authentication-Results": [
            "legolas.ozlabs.org;\n\tdkim=pass (1024-bit key;\n unprotected) header.d=redhat.com header.i=@redhat.com header.a=rsa-sha256\n header.s=mimecast20190719 header.b=bElJo/xj;\n\tdkim-atps=neutral",
            "legolas.ozlabs.org;\n spf=pass (sender SPF authorized) smtp.mailfrom=nongnu.org\n (client-ip=209.51.188.17; helo=lists1p.gnu.org;\n envelope-from=qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org;\n receiver=patchwork.ozlabs.org)"
        ],
        "Received": [
            "from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17])\n\t(using TLSv1.2 with cipher ECDHE-ECDSA-AES256-GCM-SHA384 (256/256 bits))\n\t(No client certificate requested)\n\tby legolas.ozlabs.org (Postfix) with ESMTPS id 4g5VCb2Bjwz1yGq\n\tfor <incoming@patchwork.ozlabs.org>; Thu, 30 Apr 2026 07:03:55 +1000 (AEST)",
            "from localhost ([::1] helo=lists1p.gnu.org)\n\tby lists1p.gnu.org with esmtp (Exim 4.90_1)\n\t(envelope-from <qemu-devel-bounces@nongnu.org>)\n\tid 1wIC44-0003Sh-9g; Wed, 29 Apr 2026 17:03:24 -0400",
            "from eggs.gnu.org ([2001:470:142:3::10])\n by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256)\n (Exim 4.90_1) (envelope-from <marcandre.lureau@redhat.com>)\n id 1wIC40-0003SL-Fm\n for qemu-devel@nongnu.org; Wed, 29 Apr 2026 17:03:21 -0400",
            "from us-smtp-delivery-124.mimecast.com ([170.10.133.124])\n by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256)\n (Exim 4.90_1) (envelope-from <marcandre.lureau@redhat.com>)\n id 1wIC3y-0003Be-Gz\n for qemu-devel@nongnu.org; Wed, 29 Apr 2026 17:03:20 -0400",
            "from mx-prod-mc-01.mail-002.prod.us-west-2.aws.redhat.com\n (ec2-54-186-198-63.us-west-2.compute.amazonaws.com [54.186.198.63]) by\n relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3,\n cipher=TLS_AES_256_GCM_SHA384) id us-mta-134-H9sj_JB2MSy5OBqoeyZezQ-1; Wed,\n 29 Apr 2026 17:03:15 -0400",
            "from mx-prod-int-06.mail-002.prod.us-west-2.aws.redhat.com\n (mx-prod-int-06.mail-002.prod.us-west-2.aws.redhat.com [10.30.177.93])\n (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)\n key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest\n SHA256)\n (No client certificate requested)\n by mx-prod-mc-01.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTPS\n id 7F355195609F; Wed, 29 Apr 2026 21:03:14 +0000 (UTC)",
            "from localhost (unknown [10.44.22.2])\n by mx-prod-int-06.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTP\n id EDD0A1800480; Wed, 29 Apr 2026 21:03:12 +0000 (UTC)"
        ],
        "DKIM-Signature": "v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com;\n s=mimecast20190719; t=1777496597;\n h=from:from:reply-to:subject:subject:date:date:message-id:message-id:\n to:to:cc:cc:mime-version:mime-version:content-type:content-type:\n content-transfer-encoding:content-transfer-encoding;\n bh=r3oSa83zjymYTA4wJzHr5ynKYatofS4KaV1vQrVllEs=;\n b=bElJo/xj+mlchTgHUwLDhq8nF1kQh9B39NPOxkJyYC9BshkJlXJqqtFvCQRm238XyCjmWe\n Qt9/DerdTGrJqfS0daXQ3o763Qy/nZ7+6uFWQDesmvWJiUCxDOwtOvPuIM1e5xGv6gPRHA\n GePoDe1yl7qyf25YA4m5jSGJi4iWZRg=",
        "X-MC-Unique": "H9sj_JB2MSy5OBqoeyZezQ-1",
        "X-Mimecast-MFC-AGG-ID": "H9sj_JB2MSy5OBqoeyZezQ_1777496594",
        "From": "=?utf-8?q?Marc-Andr=C3=A9_Lureau?= <marcandre.lureau@redhat.com>",
        "Subject": "[PATCH v3 00/26] ui: add standalone VNC server over D-Bus",
        "Date": "Thu, 30 Apr 2026 01:02:33 +0400",
        "Message-Id": "<20260430-qemu-vnc-v3-0-be96757428d0@redhat.com>",
        "MIME-Version": "1.0",
        "Content-Type": "text/plain; charset=\"utf-8\"",
        "Content-Transfer-Encoding": "8bit",
        "X-B4-Tracking": "v=1; b=H4sIAAAAAAAC/1WMyw7CIBBFf6VhLQaGOqgr/8O4aGGwLPoQKtE0/\n XdpE1Ndnpt7zsQiBU+RnYuJBUo++r7LoHYFM03V3Yl7m5mBABRKAn9Q++SpM/yECM4cNAACy/c\n hkPOvNXW9ZW58HPvwXstJLus3ordIklzw8ki1tMbpWuMlkG2qcW/6li2VBJtZSvFjQjZByVKi0\n 2iN+jPnef4AjHFfUtsAAAA=",
        "X-Change-ID": "20260312-qemu-vnc-9662fc572262",
        "To": "qemu-devel@nongnu.org",
        "Cc": "=?utf-8?q?Marc-Andr=C3=A9_Lureau?= <marcandre.lureau@redhat.com>,\n\t=?utf-8?q?Philippe_Mathieu-Daud=C3=A9?= <philmd@linaro.org>, =?utf-8?q?Dani?=\n\t=?utf-8?q?el_P=2E_Berrang=C3=A9?= <berrange@redhat.com>",
        "X-Developer-Signature": "v=1; a=openpgp-sha256; l=9597;\n i=marcandre.lureau@redhat.com; h=from:subject:message-id;\n bh=XZccesYayirKxP1kNjWgcUVsDNcyuofaX912irk6JjI=;\n b=owEBbQKS/ZANAwAKAdro4Ql1lpzlAcsmYgBp8nIL1XvkeyA7xTCecy1qeGUcPYrYnT/S6QeZ5\n c9tpsXoHSWJAjMEAAEKAB0WIQSHqb2TP4fGBtJ29i3a6OEJdZac5QUCafJyCwAKCRDa6OEJdZac\n 5VAwD/9WTvCWgVaVcgxmX1HN809EqalZyl27DR56OgWr0NYJq+Yz/dPQKHRoDKFzL8e7oSJoSBt\n /DkaegPnP+nx8ZODr+u0q5+IjTcdN3JBoNpvgjvkb19n5lwdzJWNESv/jTXsTPPi5st9IM39sgb\n bSCRRqrUsjW5OZ9HasVo7zskgHV/3fP/MVLC61uRUDz8wtDbWs97s5ohnKfugAtq0C4MTDRzyKI\n AIZAXOFPZEJf0FcK9tRvBt5f+f6IItc6u/fRwVSs8KjNObhLvyutc7kChGdvM2J87mXi02oodyd\n r8uw6PGlLByXKJGhbj6uqfnPvZnDRd3qzxQ1Hy2MxG4O93F4BlMGeNAe+BChDchdfCThhAG3exG\n lnyjeFs/+H9A+fczKpMBZQnG30IPAfMVfRSjwfZNRjuEely2L8PEAWSNlzOYAAogAHL4Gdo+B+5\n TsUuzkILuHCmcBKfTDvWc6gNzPEaL7e5Thpjc1T/x9Bbzqv1vKDBmZvMFTxMr8RtqqC1cnhNW5N\n fTOdDoFjhl4s2xV1zI2WSAQQ9hTsu+vooBWHEhYdBQHgyJDOgIg/iq0vbt496N3pNIOUfgWgErk\n 1UmUs4qp03I0iJdtbpEOYddZLydarqEhxeNzxw7CX5Yud/UdQXEo8C8vJ4lH5QLDZn7cfuR8S8B\n TGSz9fvVjtOoF8Q==",
        "X-Developer-Key": "i=marcandre.lureau@redhat.com; a=openpgp;\n fpr=87A9BD933F87C606D276F62DDAE8E10975969CE5",
        "X-Scanned-By": "MIMEDefang 3.4.1 on 10.30.177.93",
        "Received-SPF": "pass client-ip=170.10.133.124;\n envelope-from=marcandre.lureau@redhat.com;\n helo=us-smtp-delivery-124.mimecast.com",
        "X-Spam_score_int": "12",
        "X-Spam_score": "1.2",
        "X-Spam_bar": "+",
        "X-Spam_report": "(1.2 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=-0.001,\n DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1,\n RCVD_IN_DNSWL_NONE=-0.0001, RCVD_IN_MSPIKE_H5=0.001, RCVD_IN_MSPIKE_WL=0.001,\n RCVD_IN_SBL_CSS=3.335, SPF_HELO_PASS=-0.001,\n SPF_PASS=-0.001 autolearn=no autolearn_force=no",
        "X-Spam_action": "no action",
        "X-BeenThere": "qemu-devel@nongnu.org",
        "X-Mailman-Version": "2.1.29",
        "Precedence": "list",
        "List-Id": "qemu development <qemu-devel.nongnu.org>",
        "List-Unsubscribe": "<https://lists.nongnu.org/mailman/options/qemu-devel>,\n <mailto:qemu-devel-request@nongnu.org?subject=unsubscribe>",
        "List-Archive": "<https://lists.nongnu.org/archive/html/qemu-devel>",
        "List-Post": "<mailto:qemu-devel@nongnu.org>",
        "List-Help": "<mailto:qemu-devel-request@nongnu.org?subject=help>",
        "List-Subscribe": "<https://lists.nongnu.org/mailman/listinfo/qemu-devel>,\n <mailto:qemu-devel-request@nongnu.org?subject=subscribe>",
        "Errors-To": "qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org",
        "Sender": "qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org"
    },
    "content": "This series adds qemu-vnc, a standalone VNC server that connects to a\nrunning QEMU instance via the D-Bus display interface (org.qemu.Display1).\nThis allows serving a VNC display as a separate process with an independent\nlifecycle and privilege domain, without requiring VNC support compiled into\nthe QEMU system emulator itself.\n\nThe bulk of the series is preparatory refactoring:\n\n- Clean up VNC code: merge init/open, fix leaks, simplify error handling\n- Extract and clean up VT100 emulation from console-vc into a reusable unit\n- Reorganize ui/ code: move DisplaySurface functions, vgafont, datadir\nand other pieces into their own files\n- Refactor console APIs: rename methods, simplify listener registration,\nreturn completion status from gfx_update\n- Extract common ui sources into a static library that can be linked by\nboth the system emulator and the new standalone binary\n\nThe final patch adds contrib/qemu-vnc, built when both VNC and D-Bus\ndisplay support are enabled.\n\nSigned-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>\n---\nChanges in v3:\n- added \"encoding\" property to vc chardev, default to cp437 for <=11.0\n- keep vnc_queue_new/free()\n- added an assert(!vnc_display_find(id)) in vnc_display_new()\n- modify vnc_cleanup(), pushing some work in vnc_display_close/free()\n- drop \"ui/vnc: expose vnc_disconnect_start()\" patch\n- added Server.AddClient method\n- dropped dbus-vmstate patches\n- rebased, collect trailer tags\n- Link to v2: https://lore.kernel.org/qemu-devel/20260410-qemu-vnc-v2-0-231416f76dc3@redhat.com\n\nChanges in v2:\n- renamed utf8_ DFA function/symbols with bh_ (Bjoern Hoehrmann) prefix\n- use \"QemuVT *vt = &s->vt;\" to avoid some code churn\n- use size_t for vt100_input()\n- replace back compound literal usage for QEMUUIInfo, use variable\n- add a preliminary patch to convert vnc_display_init/open() to return bool\n- add doc comment for qemu_console_{un}register_listener()\n- document GraphicsHwOps.gfx_update better\n- add \"ui/vnc: make the worker thread per-VncDisplay\", and free it on vnc_display_free()\n- add \"ui/vnc: add vnc_cleanup()\"\n- add \"replace VNC_DEBUG with trace-events\"\n- qemu-vnc: add sasl & authz support, doc updates\n- move qemu-vnc under tools/\n- rebased, collect trailer tags\n- Link to v1: https://lore.kernel.org/qemu-devel/20260317-qemu-vnc-v1-0-48eb1dcf7b76@redhat.com\n\n---\nMarc-André Lureau (26):\n      qemu-options.hx: document -chardev vc backend-specific behavior\n      char: error out if given unhandled size options\n      ui/console: add vc encoding=utf8/cp437 option\n      ui/console: default vc encoding to cp437 for machine < 11.1\n      ui/dbus: expose vc encoding via D-Bus Chardev.VCEncoding interface\n      ui/console-vc: add UTF-8 input decoding with CP437 rendering\n      ui/console-vc: move VT100 state machine and output FIFO into QemuVT100\n      ui/console-vc: extract vt100_input() from vc_chr_write()\n      ui/console-vc: extract vt100_keysym() from qemu_text_console_handle_keysym()\n      ui/console-vc: extract vt100_init() and vt100_fini()\n      ui/console: remove console_ch_t typedef and console_write_ch()\n      ui: move FONT_WIDTH/HEIGHT to vgafont.h\n      ui/console-vc: move VT100 emulation into separate unit\n      ui/vnc: make the worker thread per-VncDisplay\n      ui/vnc: vnc_display_init() and vnc_display_open() return bool\n      ui/vnc: merge vnc_display_init() and vnc_display_open()\n      ui/vnc: clean up VNC displays on exit\n      ui/vnc: defer listener registration until the console is known\n      ui/vnc: add vnc-system unit, to allow different implementations\n      ui/console: simplify registering display/console change listener\n      ui/console: add doc comment for qemu_console_{un}register_listener()\n      ui/console: rename public API to use consistent qemu_console_ prefix\n      ui/vnc: replace VNC_DEBUG with trace-events\n      ui: extract common sources into a static library\n      tests/qtest: drop DBUS_VMSTATE_TEST_TMPDIR\n      tools/qemu-vnc: add standalone VNC server over D-Bus\n\n MAINTAINERS                      |    5 +\n docs/conf.py                     |    3 +\n docs/interop/dbus-display.rst    |    2 +\n docs/interop/dbus-vnc.rst        |   26 +\n docs/interop/index.rst           |    1 +\n docs/meson.build                 |    1 +\n docs/tools/index.rst             |    1 +\n docs/tools/qemu-vnc.rst          |  226 +++++++\n meson.build                      |   17 +\n qapi/char.json                   |   30 +-\n include/chardev/char.h           |   21 +\n include/qemu/option.h            |    1 +\n include/ui/console.h             |  124 ++--\n tools/qemu-vnc/qemu-vnc.h        |   49 ++\n tools/qemu-vnc/trace.h           |    4 +\n ui/console-priv.h                |    1 -\n ui/cp437.h                       |   13 +\n ui/dbus.h                        |    1 +\n ui/vnc-jobs.h                    |    3 +-\n ui/vnc.h                         |   17 +-\n ui/vt100.h                       |   95 +++\n chardev/char.c                   |   22 +\n hw/arm/musicpal.c                |    4 +-\n hw/core/machine.c                |    4 +-\n hw/display/artist.c              |    4 +-\n hw/display/ati.c                 |   16 +-\n hw/display/bcm2835_fb.c          |    5 +-\n hw/display/bochs-display.c       |   14 +-\n hw/display/cg3.c                 |    6 +-\n hw/display/cirrus_vga.c          |    8 +-\n hw/display/cirrus_vga_isa.c      |    2 +-\n hw/display/dm163.c               |    6 +-\n hw/display/exynos4210_fimd.c     |    4 +-\n hw/display/g364fb.c              |   10 +-\n hw/display/jazz_led.c            |   18 +-\n hw/display/macfb.c               |    6 +-\n hw/display/next-fb.c             |    4 +-\n hw/display/omap_lcdc.c           |    4 +-\n hw/display/pl110.c               |    4 +-\n hw/display/qxl-render.c          |   12 +-\n hw/display/qxl.c                 |   18 +-\n hw/display/ramfb-standalone.c    |    2 +-\n hw/display/ramfb.c               |    4 +-\n hw/display/sm501.c               |    6 +-\n hw/display/ssd0303.c             |    4 +-\n hw/display/ssd0323.c             |    5 +-\n hw/display/tcx.c                 |   16 +-\n hw/display/vga-isa.c             |    2 +-\n hw/display/vga-mmio.c            |    2 +-\n hw/display/vga-pci.c             |    6 +-\n hw/display/vga.c                 |   56 +-\n hw/display/vhost-user-gpu.c      |   22 +-\n hw/display/virtio-gpu-base.c     |    4 +-\n hw/display/virtio-gpu-rutabaga.c |   10 +-\n hw/display/virtio-gpu-udmabuf.c  |    4 +-\n hw/display/virtio-gpu-virgl.c    |   20 +-\n hw/display/virtio-gpu.c          |   26 +-\n hw/display/virtio-vga.c          |    4 +-\n hw/display/vmware_vga.c          |   14 +-\n hw/display/xenfb.c               |    6 +-\n hw/display/xlnx_dp.c             |   10 +-\n hw/vfio/display.c                |   32 +-\n system/runstate.c                |    5 +\n tests/qtest/dbus-vmstate-test.c  |    2 -\n tests/qtest/dbus-vnc-test.c      | 1346 ++++++++++++++++++++++++++++++++++++++\n tools/qemu-vnc/audio.c           |  308 +++++++++\n tools/qemu-vnc/chardev.c         |  148 +++++\n tools/qemu-vnc/clipboard.c       |  378 +++++++++++\n tools/qemu-vnc/console.c         |  170 +++++\n tools/qemu-vnc/dbus.c            |  474 ++++++++++++++\n tools/qemu-vnc/display.c         |  456 +++++++++++++\n tools/qemu-vnc/input.c           |  239 +++++++\n tools/qemu-vnc/qemu-vnc.c        |  581 ++++++++++++++++\n tools/qemu-vnc/stubs.c           |   62 ++\n tools/qemu-vnc/utils.c           |   59 ++\n ui/console-vc-stubs.c            |    1 +\n ui/console-vc.c                  | 1074 +++---------------------------\n ui/console.c                     |  173 ++---\n ui/cp437.c                       |  205 ++++++\n ui/curses.c                      |   23 +-\n ui/dbus-chardev.c                |   10 +\n ui/dbus-console.c                |   10 +-\n ui/dbus-listener.c               |   37 +-\n ui/dbus.c                        |   59 ++\n ui/egl-headless.c                |    8 +-\n ui/gtk-egl.c                     |    6 +-\n ui/gtk-gl-area.c                 |    6 +-\n ui/gtk.c                         |   28 +-\n ui/sdl2-2d.c                     |    2 +-\n ui/sdl2-gl.c                     |    2 +-\n ui/sdl2.c                        |   14 +-\n ui/spice-display.c               |   24 +-\n ui/vnc-auth-sasl.c               |   13 +-\n ui/vnc-enc-tight.c               |    4 +-\n ui/vnc-enc-zlib.c                |    4 +-\n ui/vnc-jobs.c                    |   62 +-\n ui/vnc-system.c                  |   19 +\n ui/vnc-ws.c                      |   10 +-\n ui/vnc.c                         |  232 +++----\n ui/vt100.c                       |  984 ++++++++++++++++++++++++++++\n util/qemu-option.c               |   13 +\n hw/display/apple-gfx.m           |   16 +-\n meson_options.txt                |    2 +\n qemu-options.hx                  |   20 +-\n scripts/meson-buildoptions.sh    |    3 +\n tests/dbus-daemon.sh             |   16 +-\n tests/qtest/meson.build          |   13 +\n tools/qemu-vnc/meson.build       |   26 +\n tools/qemu-vnc/qemu-vnc1.xml     |  201 ++++++\n tools/qemu-vnc/trace-events      |   21 +\n ui/cocoa.m                       |   23 +-\n ui/dbus-display1.xml             |   18 +\n ui/meson.build                   |  103 +--\n ui/trace-events                  |   29 +-\n 114 files changed, 7113 insertions(+), 1696 deletions(-)\n---\nbase-commit: 282771e1f9b9b6e0147adf5f9d676325175b1767\nchange-id: 20260312-qemu-vnc-9662fc572262\n\nBest regards,\n--  \nMarc-André Lureau <marcandre.lureau@redhat.com>"
}