aboutsummaryrefslogtreecommitdiff
path: root/ui
diff options
context:
space:
mode:
authorMarc-André Lureau <marcandre.lureau@redhat.com>2021-09-29 20:32:28 +0400
committerMarc-André Lureau <marcandre.lureau@redhat.com>2021-12-21 10:50:22 +0400
commit7f767ca35e54f391061a9f574c916168b0bee1a6 (patch)
tree605506b9642984481a68196e52b0afba1225f4e3 /ui
parent3e301c8d7ef0259c7e19277ea93a9915b55a1c6d (diff)
downloadqemu-7f767ca35e54f391061a9f574c916168b0bee1a6.zip
qemu-7f767ca35e54f391061a9f574c916168b0bee1a6.tar.gz
qemu-7f767ca35e54f391061a9f574c916168b0bee1a6.tar.bz2
ui/dbus: register D-Bus VC handler
Export the default consoles over the D-Bus chardev. Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com> Acked-by: Gerd Hoffmann <kraxel@redhat.com>
Diffstat (limited to 'ui')
-rw-r--r--ui/dbus.c53
1 files changed, 53 insertions, 0 deletions
diff --git a/ui/dbus.c b/ui/dbus.c
index 41f1716..b2c1c9f 100644
--- a/ui/dbus.c
+++ b/ui/dbus.c
@@ -357,6 +357,57 @@ dbus_display_class_init(ObjectClass *oc, void *data)
get_gl_mode, set_gl_mode);
}
+#define TYPE_CHARDEV_VC "chardev-vc"
+
+typedef struct DBusVCClass {
+ DBusChardevClass parent_class;
+
+ void (*parent_parse)(QemuOpts *opts, ChardevBackend *b, Error **errp);
+} DBusVCClass;
+
+DECLARE_CLASS_CHECKERS(DBusVCClass, DBUS_VC,
+ TYPE_CHARDEV_VC)
+
+static void
+dbus_vc_parse(QemuOpts *opts, ChardevBackend *backend,
+ Error **errp)
+{
+ DBusVCClass *klass = DBUS_VC_CLASS(object_class_by_name(TYPE_CHARDEV_VC));
+ const char *name = qemu_opt_get(opts, "name");
+ const char *id = qemu_opts_id(opts);
+
+ if (name == NULL) {
+ if (g_str_has_prefix(id, "compat_monitor")) {
+ name = "org.qemu.monitor.hmp.0";
+ } else if (g_str_has_prefix(id, "serial")) {
+ name = "org.qemu.console.serial.0";
+ } else {
+ name = "";
+ }
+ if (!qemu_opt_set(opts, "name", name, errp)) {
+ return;
+ }
+ }
+
+ klass->parent_parse(opts, backend, errp);
+}
+
+static void
+dbus_vc_class_init(ObjectClass *oc, void *data)
+{
+ DBusVCClass *klass = DBUS_VC_CLASS(oc);
+ ChardevClass *cc = CHARDEV_CLASS(oc);
+
+ klass->parent_parse = cc->parse;
+ cc->parse = dbus_vc_parse;
+}
+
+static const TypeInfo dbus_vc_type_info = {
+ .name = TYPE_CHARDEV_VC,
+ .parent = TYPE_CHARDEV_DBUS,
+ .class_init = dbus_vc_class_init,
+};
+
static void
early_dbus_init(DisplayOptions *opts)
{
@@ -370,6 +421,8 @@ early_dbus_init(DisplayOptions *opts)
display_opengl = 1;
}
+
+ type_register(&dbus_vc_type_info);
}
static void