mirror of
https://gitlab.com/libvirt/libvirt.git
synced 2025-03-07 17:28:15 +00:00
conf: add <graphics type='dbus'>
Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com> Reviewed-by: Michal Privoznik <mprivozn@redhat.com>
This commit is contained in:
parent
14f45e5d8d
commit
88ba34f5a0
@ -926,6 +926,7 @@ VIR_ENUM_IMPL(virDomainGraphics,
|
|||||||
"desktop",
|
"desktop",
|
||||||
"spice",
|
"spice",
|
||||||
"egl-headless",
|
"egl-headless",
|
||||||
|
"dbus",
|
||||||
);
|
);
|
||||||
|
|
||||||
VIR_ENUM_IMPL(virDomainGraphicsListen,
|
VIR_ENUM_IMPL(virDomainGraphicsListen,
|
||||||
@ -1920,6 +1921,11 @@ void virDomainGraphicsDefFree(virDomainGraphicsDef *def)
|
|||||||
g_free(def->data.egl_headless.rendernode);
|
g_free(def->data.egl_headless.rendernode);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
case VIR_DOMAIN_GRAPHICS_TYPE_DBUS:
|
||||||
|
g_free(def->data.dbus.address);
|
||||||
|
g_free(def->data.dbus.rendernode);
|
||||||
|
break;
|
||||||
|
|
||||||
case VIR_DOMAIN_GRAPHICS_TYPE_LAST:
|
case VIR_DOMAIN_GRAPHICS_TYPE_LAST:
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@ -12774,6 +12780,39 @@ virDomainGraphicsDefParseXMLEGLHeadless(virDomainGraphicsDef *def,
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
static int
|
||||||
|
virDomainGraphicsDefParseXMLDBus(virDomainGraphicsDef *def,
|
||||||
|
xmlNodePtr node,
|
||||||
|
xmlXPathContextPtr ctxt)
|
||||||
|
{
|
||||||
|
VIR_XPATH_NODE_AUTORESTORE(ctxt)
|
||||||
|
xmlNodePtr cur;
|
||||||
|
virTristateBool p2p;
|
||||||
|
|
||||||
|
if (virXMLPropTristateBool(node, "p2p", VIR_XML_PROP_NONE,
|
||||||
|
&p2p) < 0)
|
||||||
|
return -1;
|
||||||
|
def->data.dbus.p2p = p2p == VIR_TRISTATE_BOOL_YES;
|
||||||
|
|
||||||
|
def->data.dbus.address = virXMLPropString(node, "address");
|
||||||
|
def->data.dbus.fromConfig = def->data.dbus.address != NULL;
|
||||||
|
|
||||||
|
ctxt->node = node;
|
||||||
|
|
||||||
|
if ((cur = virXPathNode("./gl", ctxt))) {
|
||||||
|
def->data.dbus.rendernode = virXMLPropString(cur,
|
||||||
|
"rendernode");
|
||||||
|
|
||||||
|
if (virXMLPropTristateBool(cur, "enable",
|
||||||
|
VIR_XML_PROP_REQUIRED,
|
||||||
|
&def->data.dbus.gl) < 0)
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
virDomainGraphicsDef *
|
virDomainGraphicsDef *
|
||||||
virDomainGraphicsDefNew(virDomainXMLOption *xmlopt)
|
virDomainGraphicsDefNew(virDomainXMLOption *xmlopt)
|
||||||
{
|
{
|
||||||
@ -12846,6 +12885,10 @@ virDomainGraphicsDefParseXML(virDomainXMLOption *xmlopt,
|
|||||||
case VIR_DOMAIN_GRAPHICS_TYPE_EGL_HEADLESS:
|
case VIR_DOMAIN_GRAPHICS_TYPE_EGL_HEADLESS:
|
||||||
virDomainGraphicsDefParseXMLEGLHeadless(def, node, ctxt);
|
virDomainGraphicsDefParseXMLEGLHeadless(def, node, ctxt);
|
||||||
break;
|
break;
|
||||||
|
case VIR_DOMAIN_GRAPHICS_TYPE_DBUS:
|
||||||
|
if (virDomainGraphicsDefParseXMLDBus(def, node, ctxt) < 0)
|
||||||
|
goto error;
|
||||||
|
break;
|
||||||
case VIR_DOMAIN_GRAPHICS_TYPE_LAST:
|
case VIR_DOMAIN_GRAPHICS_TYPE_LAST:
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@ -26610,6 +26653,27 @@ virDomainGraphicsDefFormat(virBuffer *buf,
|
|||||||
def->data.egl_headless.rendernode);
|
def->data.egl_headless.rendernode);
|
||||||
virBufferAddLit(buf, "/>\n");
|
virBufferAddLit(buf, "/>\n");
|
||||||
break;
|
break;
|
||||||
|
case VIR_DOMAIN_GRAPHICS_TYPE_DBUS:
|
||||||
|
if (def->data.dbus.p2p)
|
||||||
|
virBufferAddLit(buf, " p2p='yes'");
|
||||||
|
if (def->data.dbus.address)
|
||||||
|
virBufferAsprintf(buf, " address='%s'",
|
||||||
|
def->data.dbus.address);
|
||||||
|
|
||||||
|
if (!def->data.dbus.gl)
|
||||||
|
break;
|
||||||
|
|
||||||
|
if (!children) {
|
||||||
|
virBufferAddLit(buf, ">\n");
|
||||||
|
virBufferAdjustIndent(buf, 2);
|
||||||
|
children = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
virBufferAsprintf(buf, "<gl enable='%s'",
|
||||||
|
virTristateBoolTypeToString(def->data.dbus.gl));
|
||||||
|
virBufferEscapeString(buf, " rendernode='%s'", def->data.dbus.rendernode);
|
||||||
|
virBufferAddLit(buf, "/>\n");
|
||||||
|
break;
|
||||||
case VIR_DOMAIN_GRAPHICS_TYPE_LAST:
|
case VIR_DOMAIN_GRAPHICS_TYPE_LAST:
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@ -31336,6 +31400,11 @@ virDomainGraphicsDefHasOpenGL(const virDomainDef *def)
|
|||||||
case VIR_DOMAIN_GRAPHICS_TYPE_EGL_HEADLESS:
|
case VIR_DOMAIN_GRAPHICS_TYPE_EGL_HEADLESS:
|
||||||
return true;
|
return true;
|
||||||
|
|
||||||
|
case VIR_DOMAIN_GRAPHICS_TYPE_DBUS:
|
||||||
|
if (graphics->data.dbus.gl == VIR_TRISTATE_BOOL_YES)
|
||||||
|
return true;
|
||||||
|
|
||||||
|
continue;
|
||||||
case VIR_DOMAIN_GRAPHICS_TYPE_LAST:
|
case VIR_DOMAIN_GRAPHICS_TYPE_LAST:
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@ -31351,7 +31420,8 @@ virDomainGraphicsSupportsRenderNode(const virDomainGraphicsDef *graphics)
|
|||||||
bool ret = false;
|
bool ret = false;
|
||||||
|
|
||||||
if (graphics->type == VIR_DOMAIN_GRAPHICS_TYPE_SPICE ||
|
if (graphics->type == VIR_DOMAIN_GRAPHICS_TYPE_SPICE ||
|
||||||
graphics->type == VIR_DOMAIN_GRAPHICS_TYPE_EGL_HEADLESS)
|
graphics->type == VIR_DOMAIN_GRAPHICS_TYPE_EGL_HEADLESS ||
|
||||||
|
graphics->type == VIR_DOMAIN_GRAPHICS_TYPE_DBUS)
|
||||||
ret = true;
|
ret = true;
|
||||||
|
|
||||||
return ret;
|
return ret;
|
||||||
@ -31370,6 +31440,9 @@ virDomainGraphicsGetRenderNode(const virDomainGraphicsDef *graphics)
|
|||||||
case VIR_DOMAIN_GRAPHICS_TYPE_EGL_HEADLESS:
|
case VIR_DOMAIN_GRAPHICS_TYPE_EGL_HEADLESS:
|
||||||
ret = graphics->data.egl_headless.rendernode;
|
ret = graphics->data.egl_headless.rendernode;
|
||||||
break;
|
break;
|
||||||
|
case VIR_DOMAIN_GRAPHICS_TYPE_DBUS:
|
||||||
|
ret = graphics->data.dbus.rendernode;
|
||||||
|
break;
|
||||||
case VIR_DOMAIN_GRAPHICS_TYPE_SDL:
|
case VIR_DOMAIN_GRAPHICS_TYPE_SDL:
|
||||||
case VIR_DOMAIN_GRAPHICS_TYPE_VNC:
|
case VIR_DOMAIN_GRAPHICS_TYPE_VNC:
|
||||||
case VIR_DOMAIN_GRAPHICS_TYPE_RDP:
|
case VIR_DOMAIN_GRAPHICS_TYPE_RDP:
|
||||||
@ -31391,6 +31464,9 @@ virDomainGraphicsNeedsAutoRenderNode(const virDomainGraphicsDef *graphics)
|
|||||||
if (graphics->type == VIR_DOMAIN_GRAPHICS_TYPE_SPICE &&
|
if (graphics->type == VIR_DOMAIN_GRAPHICS_TYPE_SPICE &&
|
||||||
graphics->data.spice.gl != VIR_TRISTATE_BOOL_YES)
|
graphics->data.spice.gl != VIR_TRISTATE_BOOL_YES)
|
||||||
return false;
|
return false;
|
||||||
|
if (graphics->type == VIR_DOMAIN_GRAPHICS_TYPE_DBUS &&
|
||||||
|
graphics->data.dbus.gl != VIR_TRISTATE_BOOL_YES)
|
||||||
|
return false;
|
||||||
|
|
||||||
if (virDomainGraphicsGetRenderNode(graphics))
|
if (virDomainGraphicsGetRenderNode(graphics))
|
||||||
return false;
|
return false;
|
||||||
|
@ -1777,6 +1777,7 @@ typedef enum {
|
|||||||
VIR_DOMAIN_GRAPHICS_TYPE_DESKTOP,
|
VIR_DOMAIN_GRAPHICS_TYPE_DESKTOP,
|
||||||
VIR_DOMAIN_GRAPHICS_TYPE_SPICE,
|
VIR_DOMAIN_GRAPHICS_TYPE_SPICE,
|
||||||
VIR_DOMAIN_GRAPHICS_TYPE_EGL_HEADLESS,
|
VIR_DOMAIN_GRAPHICS_TYPE_EGL_HEADLESS,
|
||||||
|
VIR_DOMAIN_GRAPHICS_TYPE_DBUS,
|
||||||
|
|
||||||
VIR_DOMAIN_GRAPHICS_TYPE_LAST
|
VIR_DOMAIN_GRAPHICS_TYPE_LAST
|
||||||
} virDomainGraphicsType;
|
} virDomainGraphicsType;
|
||||||
@ -1953,6 +1954,13 @@ struct _virDomainGraphicsDef {
|
|||||||
struct {
|
struct {
|
||||||
char *rendernode;
|
char *rendernode;
|
||||||
} egl_headless;
|
} egl_headless;
|
||||||
|
struct {
|
||||||
|
bool p2p;
|
||||||
|
char *address;
|
||||||
|
char *rendernode;
|
||||||
|
virTristateBool gl;
|
||||||
|
bool fromConfig; /* true if the @address is config file originated */
|
||||||
|
} dbus;
|
||||||
} data;
|
} data;
|
||||||
/* nListens, listens, and *port are only useful if type is vnc,
|
/* nListens, listens, and *port are only useful if type is vnc,
|
||||||
* rdp, or spice. They've been extracted from the union only to
|
* rdp, or spice. They've been extracted from the union only to
|
||||||
|
@ -2424,8 +2424,15 @@ virDomainGraphicsDefValidate(const virDomainDef *def,
|
|||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (graphics->type == VIR_DOMAIN_GRAPHICS_TYPE_VNC)
|
if (graphics->type == VIR_DOMAIN_GRAPHICS_TYPE_VNC) {
|
||||||
return virDomainEnsureAudioID(def, graphics->data.vnc.audioId);
|
return virDomainEnsureAudioID(def, graphics->data.vnc.audioId);
|
||||||
|
} else if (graphics->type == VIR_DOMAIN_GRAPHICS_TYPE_DBUS) {
|
||||||
|
if (graphics->data.dbus.p2p && graphics->data.dbus.address) {
|
||||||
|
virReportError(VIR_ERR_XML_ERROR, "%s",
|
||||||
|
_("D-Bus p2p with an address is not supported"));
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
@ -220,6 +220,13 @@
|
|||||||
</define>
|
</define>
|
||||||
<!--======================================================================-->
|
<!--======================================================================-->
|
||||||
|
|
||||||
|
<!-- A D-Bus server address: https://dbus.freedesktop.org/doc/dbus-specification.html#addresses -->
|
||||||
|
<define name="dbusAddr">
|
||||||
|
<data type="string">
|
||||||
|
<param name="pattern">.+</param>
|
||||||
|
</data>
|
||||||
|
</define>
|
||||||
|
|
||||||
<!-- An ipv4 "dotted quad" address -->
|
<!-- An ipv4 "dotted quad" address -->
|
||||||
<define name="ipv4Addr">
|
<define name="ipv4Addr">
|
||||||
<data type="string">
|
<data type="string">
|
||||||
|
@ -4045,6 +4045,39 @@
|
|||||||
</optional>
|
</optional>
|
||||||
</interleave>
|
</interleave>
|
||||||
</group>
|
</group>
|
||||||
|
<group>
|
||||||
|
<attribute name="type">
|
||||||
|
<value>dbus</value>
|
||||||
|
</attribute>
|
||||||
|
<optional>
|
||||||
|
<choice>
|
||||||
|
<group>
|
||||||
|
<attribute name="address">
|
||||||
|
<ref name="dbusAddr"/>
|
||||||
|
</attribute>
|
||||||
|
</group>
|
||||||
|
<group>
|
||||||
|
<attribute name="p2p">
|
||||||
|
<ref name="virYesNo"/>
|
||||||
|
</attribute>
|
||||||
|
</group>
|
||||||
|
</choice>
|
||||||
|
</optional>
|
||||||
|
<interleave>
|
||||||
|
<optional>
|
||||||
|
<element name="gl">
|
||||||
|
<attribute name="enable">
|
||||||
|
<ref name="virYesNo"/>
|
||||||
|
</attribute>
|
||||||
|
<optional>
|
||||||
|
<attribute name="rendernode">
|
||||||
|
<ref name="absFilePath"/>
|
||||||
|
</attribute>
|
||||||
|
</optional>
|
||||||
|
</element>
|
||||||
|
</optional>
|
||||||
|
</interleave>
|
||||||
|
</group>
|
||||||
<group>
|
<group>
|
||||||
<attribute name="type">
|
<attribute name="type">
|
||||||
<value>rdp</value>
|
<value>rdp</value>
|
||||||
|
@ -1538,6 +1538,7 @@ libxlMakeVfb(virPortAllocatorRange *graphicsports,
|
|||||||
case VIR_DOMAIN_GRAPHICS_TYPE_DESKTOP:
|
case VIR_DOMAIN_GRAPHICS_TYPE_DESKTOP:
|
||||||
case VIR_DOMAIN_GRAPHICS_TYPE_SPICE:
|
case VIR_DOMAIN_GRAPHICS_TYPE_SPICE:
|
||||||
case VIR_DOMAIN_GRAPHICS_TYPE_EGL_HEADLESS:
|
case VIR_DOMAIN_GRAPHICS_TYPE_EGL_HEADLESS:
|
||||||
|
case VIR_DOMAIN_GRAPHICS_TYPE_DBUS:
|
||||||
case VIR_DOMAIN_GRAPHICS_TYPE_LAST:
|
case VIR_DOMAIN_GRAPHICS_TYPE_LAST:
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
@ -957,6 +957,7 @@ libxlDomainCleanup(libxlDriverPrivate *driver,
|
|||||||
case VIR_DOMAIN_GRAPHICS_TYPE_RDP:
|
case VIR_DOMAIN_GRAPHICS_TYPE_RDP:
|
||||||
case VIR_DOMAIN_GRAPHICS_TYPE_DESKTOP:
|
case VIR_DOMAIN_GRAPHICS_TYPE_DESKTOP:
|
||||||
case VIR_DOMAIN_GRAPHICS_TYPE_EGL_HEADLESS:
|
case VIR_DOMAIN_GRAPHICS_TYPE_EGL_HEADLESS:
|
||||||
|
case VIR_DOMAIN_GRAPHICS_TYPE_DBUS:
|
||||||
case VIR_DOMAIN_GRAPHICS_TYPE_LAST:
|
case VIR_DOMAIN_GRAPHICS_TYPE_LAST:
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
@ -465,6 +465,7 @@ libxlReconnectDomain(virDomainObj *vm,
|
|||||||
case VIR_DOMAIN_GRAPHICS_TYPE_RDP:
|
case VIR_DOMAIN_GRAPHICS_TYPE_RDP:
|
||||||
case VIR_DOMAIN_GRAPHICS_TYPE_DESKTOP:
|
case VIR_DOMAIN_GRAPHICS_TYPE_DESKTOP:
|
||||||
case VIR_DOMAIN_GRAPHICS_TYPE_EGL_HEADLESS:
|
case VIR_DOMAIN_GRAPHICS_TYPE_EGL_HEADLESS:
|
||||||
|
case VIR_DOMAIN_GRAPHICS_TYPE_DBUS:
|
||||||
case VIR_DOMAIN_GRAPHICS_TYPE_LAST:
|
case VIR_DOMAIN_GRAPHICS_TYPE_LAST:
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
@ -6226,6 +6226,8 @@ virQEMUCapsFillDomainDeviceGraphicsCaps(virQEMUCaps *qemuCaps,
|
|||||||
VIR_DOMAIN_CAPS_ENUM_SET(dev->type, VIR_DOMAIN_GRAPHICS_TYPE_SPICE);
|
VIR_DOMAIN_CAPS_ENUM_SET(dev->type, VIR_DOMAIN_GRAPHICS_TYPE_SPICE);
|
||||||
if (virQEMUCapsGet(qemuCaps, QEMU_CAPS_EGL_HEADLESS))
|
if (virQEMUCapsGet(qemuCaps, QEMU_CAPS_EGL_HEADLESS))
|
||||||
VIR_DOMAIN_CAPS_ENUM_SET(dev->type, VIR_DOMAIN_GRAPHICS_TYPE_EGL_HEADLESS);
|
VIR_DOMAIN_CAPS_ENUM_SET(dev->type, VIR_DOMAIN_GRAPHICS_TYPE_EGL_HEADLESS);
|
||||||
|
if (virQEMUCapsGet(qemuCaps, QEMU_CAPS_DISPLAY_DBUS))
|
||||||
|
VIR_DOMAIN_CAPS_ENUM_SET(dev->type, VIR_DOMAIN_GRAPHICS_TYPE_DBUS);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -8591,6 +8591,7 @@ qemuBuildGraphicsCommandLine(virQEMUDriverConfig *cfg,
|
|||||||
graphics) < 0)
|
graphics) < 0)
|
||||||
return -1;
|
return -1;
|
||||||
|
|
||||||
|
case VIR_DOMAIN_GRAPHICS_TYPE_DBUS:
|
||||||
break;
|
break;
|
||||||
case VIR_DOMAIN_GRAPHICS_TYPE_RDP:
|
case VIR_DOMAIN_GRAPHICS_TYPE_RDP:
|
||||||
case VIR_DOMAIN_GRAPHICS_TYPE_DESKTOP:
|
case VIR_DOMAIN_GRAPHICS_TYPE_DESKTOP:
|
||||||
@ -10190,6 +10191,7 @@ qemuBuildCommandLineValidate(virQEMUDriver *driver,
|
|||||||
case VIR_DOMAIN_GRAPHICS_TYPE_EGL_HEADLESS:
|
case VIR_DOMAIN_GRAPHICS_TYPE_EGL_HEADLESS:
|
||||||
++egl_headless;
|
++egl_headless;
|
||||||
break;
|
break;
|
||||||
|
case VIR_DOMAIN_GRAPHICS_TYPE_DBUS:
|
||||||
case VIR_DOMAIN_GRAPHICS_TYPE_RDP:
|
case VIR_DOMAIN_GRAPHICS_TYPE_RDP:
|
||||||
case VIR_DOMAIN_GRAPHICS_TYPE_DESKTOP:
|
case VIR_DOMAIN_GRAPHICS_TYPE_DESKTOP:
|
||||||
case VIR_DOMAIN_GRAPHICS_TYPE_LAST:
|
case VIR_DOMAIN_GRAPHICS_TYPE_LAST:
|
||||||
|
@ -3707,6 +3707,7 @@ qemuDomainDefSuggestDefaultAudioBackend(virQEMUDriver *driver,
|
|||||||
case VIR_DOMAIN_GRAPHICS_TYPE_RDP:
|
case VIR_DOMAIN_GRAPHICS_TYPE_RDP:
|
||||||
case VIR_DOMAIN_GRAPHICS_TYPE_DESKTOP:
|
case VIR_DOMAIN_GRAPHICS_TYPE_DESKTOP:
|
||||||
case VIR_DOMAIN_GRAPHICS_TYPE_EGL_HEADLESS:
|
case VIR_DOMAIN_GRAPHICS_TYPE_EGL_HEADLESS:
|
||||||
|
case VIR_DOMAIN_GRAPHICS_TYPE_DBUS:
|
||||||
break;
|
break;
|
||||||
case VIR_DOMAIN_GRAPHICS_TYPE_LAST:
|
case VIR_DOMAIN_GRAPHICS_TYPE_LAST:
|
||||||
default:
|
default:
|
||||||
|
@ -15717,12 +15717,13 @@ qemuDomainOpenGraphics(virDomainPtr dom,
|
|||||||
case VIR_DOMAIN_GRAPHICS_TYPE_SPICE:
|
case VIR_DOMAIN_GRAPHICS_TYPE_SPICE:
|
||||||
protocol = "spice";
|
protocol = "spice";
|
||||||
break;
|
break;
|
||||||
|
case VIR_DOMAIN_GRAPHICS_TYPE_DBUS:
|
||||||
case VIR_DOMAIN_GRAPHICS_TYPE_SDL:
|
case VIR_DOMAIN_GRAPHICS_TYPE_SDL:
|
||||||
case VIR_DOMAIN_GRAPHICS_TYPE_RDP:
|
case VIR_DOMAIN_GRAPHICS_TYPE_RDP:
|
||||||
case VIR_DOMAIN_GRAPHICS_TYPE_DESKTOP:
|
case VIR_DOMAIN_GRAPHICS_TYPE_DESKTOP:
|
||||||
case VIR_DOMAIN_GRAPHICS_TYPE_EGL_HEADLESS:
|
case VIR_DOMAIN_GRAPHICS_TYPE_EGL_HEADLESS:
|
||||||
virReportError(VIR_ERR_CONFIG_UNSUPPORTED,
|
virReportError(VIR_ERR_CONFIG_UNSUPPORTED,
|
||||||
_("Can only open VNC or SPICE graphics backends, not %s"),
|
_("Can only open VNC, SPICE or D-Bus p2p graphics backends, not %s"),
|
||||||
virDomainGraphicsTypeToString(vm->def->graphics[idx]->type));
|
virDomainGraphicsTypeToString(vm->def->graphics[idx]->type));
|
||||||
goto endjob;
|
goto endjob;
|
||||||
case VIR_DOMAIN_GRAPHICS_TYPE_LAST:
|
case VIR_DOMAIN_GRAPHICS_TYPE_LAST:
|
||||||
@ -15785,12 +15786,13 @@ qemuDomainOpenGraphicsFD(virDomainPtr dom,
|
|||||||
case VIR_DOMAIN_GRAPHICS_TYPE_SPICE:
|
case VIR_DOMAIN_GRAPHICS_TYPE_SPICE:
|
||||||
protocol = "spice";
|
protocol = "spice";
|
||||||
break;
|
break;
|
||||||
|
case VIR_DOMAIN_GRAPHICS_TYPE_DBUS:
|
||||||
case VIR_DOMAIN_GRAPHICS_TYPE_SDL:
|
case VIR_DOMAIN_GRAPHICS_TYPE_SDL:
|
||||||
case VIR_DOMAIN_GRAPHICS_TYPE_RDP:
|
case VIR_DOMAIN_GRAPHICS_TYPE_RDP:
|
||||||
case VIR_DOMAIN_GRAPHICS_TYPE_DESKTOP:
|
case VIR_DOMAIN_GRAPHICS_TYPE_DESKTOP:
|
||||||
case VIR_DOMAIN_GRAPHICS_TYPE_EGL_HEADLESS:
|
case VIR_DOMAIN_GRAPHICS_TYPE_EGL_HEADLESS:
|
||||||
virReportError(VIR_ERR_CONFIG_UNSUPPORTED,
|
virReportError(VIR_ERR_CONFIG_UNSUPPORTED,
|
||||||
_("Can only open VNC or SPICE graphics backends, not %s"),
|
_("Can only open VNC, SPICE or D-Bus p2p graphics backends, not %s"),
|
||||||
virDomainGraphicsTypeToString(vm->def->graphics[idx]->type));
|
virDomainGraphicsTypeToString(vm->def->graphics[idx]->type));
|
||||||
goto cleanup;
|
goto cleanup;
|
||||||
case VIR_DOMAIN_GRAPHICS_TYPE_LAST:
|
case VIR_DOMAIN_GRAPHICS_TYPE_LAST:
|
||||||
|
@ -4323,6 +4323,7 @@ qemuDomainChangeGraphics(virQEMUDriver *driver,
|
|||||||
case VIR_DOMAIN_GRAPHICS_TYPE_RDP:
|
case VIR_DOMAIN_GRAPHICS_TYPE_RDP:
|
||||||
case VIR_DOMAIN_GRAPHICS_TYPE_DESKTOP:
|
case VIR_DOMAIN_GRAPHICS_TYPE_DESKTOP:
|
||||||
case VIR_DOMAIN_GRAPHICS_TYPE_EGL_HEADLESS:
|
case VIR_DOMAIN_GRAPHICS_TYPE_EGL_HEADLESS:
|
||||||
|
case VIR_DOMAIN_GRAPHICS_TYPE_DBUS:
|
||||||
virReportError(VIR_ERR_INTERNAL_ERROR,
|
virReportError(VIR_ERR_INTERNAL_ERROR,
|
||||||
_("unable to change config on '%s' graphics type"), type);
|
_("unable to change config on '%s' graphics type"), type);
|
||||||
break;
|
break;
|
||||||
|
@ -4736,6 +4736,7 @@ qemuProcessGraphicsReservePorts(virDomainGraphicsDef *graphics,
|
|||||||
case VIR_DOMAIN_GRAPHICS_TYPE_RDP:
|
case VIR_DOMAIN_GRAPHICS_TYPE_RDP:
|
||||||
case VIR_DOMAIN_GRAPHICS_TYPE_DESKTOP:
|
case VIR_DOMAIN_GRAPHICS_TYPE_DESKTOP:
|
||||||
case VIR_DOMAIN_GRAPHICS_TYPE_EGL_HEADLESS:
|
case VIR_DOMAIN_GRAPHICS_TYPE_EGL_HEADLESS:
|
||||||
|
case VIR_DOMAIN_GRAPHICS_TYPE_DBUS:
|
||||||
case VIR_DOMAIN_GRAPHICS_TYPE_LAST:
|
case VIR_DOMAIN_GRAPHICS_TYPE_LAST:
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@ -4775,6 +4776,7 @@ qemuProcessGraphicsAllocatePorts(virQEMUDriver *driver,
|
|||||||
case VIR_DOMAIN_GRAPHICS_TYPE_RDP:
|
case VIR_DOMAIN_GRAPHICS_TYPE_RDP:
|
||||||
case VIR_DOMAIN_GRAPHICS_TYPE_DESKTOP:
|
case VIR_DOMAIN_GRAPHICS_TYPE_DESKTOP:
|
||||||
case VIR_DOMAIN_GRAPHICS_TYPE_EGL_HEADLESS:
|
case VIR_DOMAIN_GRAPHICS_TYPE_EGL_HEADLESS:
|
||||||
|
case VIR_DOMAIN_GRAPHICS_TYPE_DBUS:
|
||||||
case VIR_DOMAIN_GRAPHICS_TYPE_LAST:
|
case VIR_DOMAIN_GRAPHICS_TYPE_LAST:
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@ -4931,6 +4933,7 @@ qemuProcessGraphicsSetupListen(virQEMUDriver *driver,
|
|||||||
case VIR_DOMAIN_GRAPHICS_TYPE_RDP:
|
case VIR_DOMAIN_GRAPHICS_TYPE_RDP:
|
||||||
case VIR_DOMAIN_GRAPHICS_TYPE_DESKTOP:
|
case VIR_DOMAIN_GRAPHICS_TYPE_DESKTOP:
|
||||||
case VIR_DOMAIN_GRAPHICS_TYPE_EGL_HEADLESS:
|
case VIR_DOMAIN_GRAPHICS_TYPE_EGL_HEADLESS:
|
||||||
|
case VIR_DOMAIN_GRAPHICS_TYPE_DBUS:
|
||||||
case VIR_DOMAIN_GRAPHICS_TYPE_LAST:
|
case VIR_DOMAIN_GRAPHICS_TYPE_LAST:
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@ -5223,6 +5226,7 @@ qemuProcessStartValidateGraphics(virDomainObj *vm)
|
|||||||
case VIR_DOMAIN_GRAPHICS_TYPE_RDP:
|
case VIR_DOMAIN_GRAPHICS_TYPE_RDP:
|
||||||
case VIR_DOMAIN_GRAPHICS_TYPE_DESKTOP:
|
case VIR_DOMAIN_GRAPHICS_TYPE_DESKTOP:
|
||||||
case VIR_DOMAIN_GRAPHICS_TYPE_EGL_HEADLESS:
|
case VIR_DOMAIN_GRAPHICS_TYPE_EGL_HEADLESS:
|
||||||
|
case VIR_DOMAIN_GRAPHICS_TYPE_DBUS:
|
||||||
case VIR_DOMAIN_GRAPHICS_TYPE_LAST:
|
case VIR_DOMAIN_GRAPHICS_TYPE_LAST:
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
@ -4254,6 +4254,7 @@ qemuValidateDomainDeviceDefGraphics(const virDomainGraphicsDef *graphics,
|
|||||||
case VIR_DOMAIN_GRAPHICS_TYPE_SDL:
|
case VIR_DOMAIN_GRAPHICS_TYPE_SDL:
|
||||||
case VIR_DOMAIN_GRAPHICS_TYPE_RDP:
|
case VIR_DOMAIN_GRAPHICS_TYPE_RDP:
|
||||||
case VIR_DOMAIN_GRAPHICS_TYPE_DESKTOP:
|
case VIR_DOMAIN_GRAPHICS_TYPE_DESKTOP:
|
||||||
|
case VIR_DOMAIN_GRAPHICS_TYPE_DBUS:
|
||||||
case VIR_DOMAIN_GRAPHICS_TYPE_LAST:
|
case VIR_DOMAIN_GRAPHICS_TYPE_LAST:
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
@ -3435,6 +3435,7 @@ virVMXFormatConfig(virVMXContext *ctx, virDomainXMLOption *xmlopt, virDomainDef
|
|||||||
case VIR_DOMAIN_GRAPHICS_TYPE_DESKTOP:
|
case VIR_DOMAIN_GRAPHICS_TYPE_DESKTOP:
|
||||||
case VIR_DOMAIN_GRAPHICS_TYPE_SPICE:
|
case VIR_DOMAIN_GRAPHICS_TYPE_SPICE:
|
||||||
case VIR_DOMAIN_GRAPHICS_TYPE_EGL_HEADLESS:
|
case VIR_DOMAIN_GRAPHICS_TYPE_EGL_HEADLESS:
|
||||||
|
case VIR_DOMAIN_GRAPHICS_TYPE_DBUS:
|
||||||
virReportError(VIR_ERR_CONFIG_UNSUPPORTED,
|
virReportError(VIR_ERR_CONFIG_UNSUPPORTED,
|
||||||
_("Unsupported graphics type '%s'"),
|
_("Unsupported graphics type '%s'"),
|
||||||
virDomainGraphicsTypeToString(def->graphics[i]->type));
|
virDomainGraphicsTypeToString(def->graphics[i]->type));
|
||||||
|
@ -155,6 +155,7 @@
|
|||||||
<value>vnc</value>
|
<value>vnc</value>
|
||||||
<value>spice</value>
|
<value>spice</value>
|
||||||
<value>egl-headless</value>
|
<value>egl-headless</value>
|
||||||
|
<value>dbus</value>
|
||||||
</enum>
|
</enum>
|
||||||
</graphics>
|
</graphics>
|
||||||
<video supported='yes'>
|
<video supported='yes'>
|
||||||
|
@ -169,6 +169,7 @@
|
|||||||
<value>vnc</value>
|
<value>vnc</value>
|
||||||
<value>spice</value>
|
<value>spice</value>
|
||||||
<value>egl-headless</value>
|
<value>egl-headless</value>
|
||||||
|
<value>dbus</value>
|
||||||
</enum>
|
</enum>
|
||||||
</graphics>
|
</graphics>
|
||||||
<video supported='yes'>
|
<video supported='yes'>
|
||||||
|
@ -155,6 +155,7 @@
|
|||||||
<value>vnc</value>
|
<value>vnc</value>
|
||||||
<value>spice</value>
|
<value>spice</value>
|
||||||
<value>egl-headless</value>
|
<value>egl-headless</value>
|
||||||
|
<value>dbus</value>
|
||||||
</enum>
|
</enum>
|
||||||
</graphics>
|
</graphics>
|
||||||
<video supported='yes'>
|
<video supported='yes'>
|
||||||
|
@ -155,6 +155,7 @@
|
|||||||
<value>vnc</value>
|
<value>vnc</value>
|
||||||
<value>spice</value>
|
<value>spice</value>
|
||||||
<value>egl-headless</value>
|
<value>egl-headless</value>
|
||||||
|
<value>dbus</value>
|
||||||
</enum>
|
</enum>
|
||||||
</graphics>
|
</graphics>
|
||||||
<video supported='yes'>
|
<video supported='yes'>
|
||||||
|
@ -169,6 +169,7 @@
|
|||||||
<value>vnc</value>
|
<value>vnc</value>
|
||||||
<value>spice</value>
|
<value>spice</value>
|
||||||
<value>egl-headless</value>
|
<value>egl-headless</value>
|
||||||
|
<value>dbus</value>
|
||||||
</enum>
|
</enum>
|
||||||
</graphics>
|
</graphics>
|
||||||
<video supported='yes'>
|
<video supported='yes'>
|
||||||
|
@ -155,6 +155,7 @@
|
|||||||
<value>vnc</value>
|
<value>vnc</value>
|
||||||
<value>spice</value>
|
<value>spice</value>
|
||||||
<value>egl-headless</value>
|
<value>egl-headless</value>
|
||||||
|
<value>dbus</value>
|
||||||
</enum>
|
</enum>
|
||||||
</graphics>
|
</graphics>
|
||||||
<video supported='yes'>
|
<video supported='yes'>
|
||||||
|
35
tests/qemuxml2argvdata/graphics-dbus-address.xml
Normal file
35
tests/qemuxml2argvdata/graphics-dbus-address.xml
Normal file
@ -0,0 +1,35 @@
|
|||||||
|
<domain type='qemu'>
|
||||||
|
<name>QEMUGuest1</name>
|
||||||
|
<uuid>c7a5fdbd-edaf-9455-926a-d65c16db1809</uuid>
|
||||||
|
<memory unit='KiB'>219100</memory>
|
||||||
|
<currentMemory unit='KiB'>219100</currentMemory>
|
||||||
|
<vcpu placement='static'>1</vcpu>
|
||||||
|
<os>
|
||||||
|
<type arch='i686' machine='pc'>hvm</type>
|
||||||
|
<boot dev='hd'/>
|
||||||
|
</os>
|
||||||
|
<clock offset='utc'/>
|
||||||
|
<on_poweroff>destroy</on_poweroff>
|
||||||
|
<on_reboot>restart</on_reboot>
|
||||||
|
<on_crash>destroy</on_crash>
|
||||||
|
<devices>
|
||||||
|
<emulator>/usr/bin/qemu-system-i386</emulator>
|
||||||
|
<controller type='usb' index='0'>
|
||||||
|
<address type='pci' domain='0x0000' bus='0x00' slot='0x01' function='0x2'/>
|
||||||
|
</controller>
|
||||||
|
<controller type='ide' index='0'>
|
||||||
|
<address type='pci' domain='0x0000' bus='0x00' slot='0x01' function='0x1'/>
|
||||||
|
</controller>
|
||||||
|
<controller type='pci' index='0' model='pci-root'/>
|
||||||
|
<input type='mouse' bus='ps2'/>
|
||||||
|
<input type='keyboard' bus='ps2'/>
|
||||||
|
<graphics type='dbus' address='unix:path=/tmp/foo'>
|
||||||
|
<gl enable='yes' rendernode='/dev/dri/foo'/>
|
||||||
|
</graphics>
|
||||||
|
<video>
|
||||||
|
<model type='cirrus' vram='16384' heads='1' primary='yes'/>
|
||||||
|
<address type='pci' domain='0x0000' bus='0x00' slot='0x02' function='0x0'/>
|
||||||
|
</video>
|
||||||
|
<memballoon model='none'/>
|
||||||
|
</devices>
|
||||||
|
</domain>
|
33
tests/qemuxml2argvdata/graphics-dbus-p2p.xml
Normal file
33
tests/qemuxml2argvdata/graphics-dbus-p2p.xml
Normal file
@ -0,0 +1,33 @@
|
|||||||
|
<domain type='qemu'>
|
||||||
|
<name>QEMUGuest1</name>
|
||||||
|
<uuid>c7a5fdbd-edaf-9455-926a-d65c16db1809</uuid>
|
||||||
|
<memory unit='KiB'>219100</memory>
|
||||||
|
<currentMemory unit='KiB'>219100</currentMemory>
|
||||||
|
<vcpu placement='static'>1</vcpu>
|
||||||
|
<os>
|
||||||
|
<type arch='i686' machine='pc'>hvm</type>
|
||||||
|
<boot dev='hd'/>
|
||||||
|
</os>
|
||||||
|
<clock offset='utc'/>
|
||||||
|
<on_poweroff>destroy</on_poweroff>
|
||||||
|
<on_reboot>restart</on_reboot>
|
||||||
|
<on_crash>destroy</on_crash>
|
||||||
|
<devices>
|
||||||
|
<emulator>/usr/bin/qemu-system-i386</emulator>
|
||||||
|
<controller type='usb' index='0'>
|
||||||
|
<address type='pci' domain='0x0000' bus='0x00' slot='0x01' function='0x2'/>
|
||||||
|
</controller>
|
||||||
|
<controller type='ide' index='0'>
|
||||||
|
<address type='pci' domain='0x0000' bus='0x00' slot='0x01' function='0x1'/>
|
||||||
|
</controller>
|
||||||
|
<controller type='pci' index='0' model='pci-root'/>
|
||||||
|
<input type='mouse' bus='ps2'/>
|
||||||
|
<input type='keyboard' bus='ps2'/>
|
||||||
|
<graphics type='dbus' p2p='yes'/>
|
||||||
|
<video>
|
||||||
|
<model type='cirrus' vram='16384' heads='1' primary='yes'/>
|
||||||
|
<address type='pci' domain='0x0000' bus='0x00' slot='0x02' function='0x0'/>
|
||||||
|
</video>
|
||||||
|
<memballoon model='none'/>
|
||||||
|
</devices>
|
||||||
|
</domain>
|
33
tests/qemuxml2argvdata/graphics-dbus.xml
Normal file
33
tests/qemuxml2argvdata/graphics-dbus.xml
Normal file
@ -0,0 +1,33 @@
|
|||||||
|
<domain type='qemu'>
|
||||||
|
<name>QEMUGuest1</name>
|
||||||
|
<uuid>c7a5fdbd-edaf-9455-926a-d65c16db1809</uuid>
|
||||||
|
<memory unit='KiB'>219100</memory>
|
||||||
|
<currentMemory unit='KiB'>219100</currentMemory>
|
||||||
|
<vcpu placement='static'>1</vcpu>
|
||||||
|
<os>
|
||||||
|
<type arch='i686' machine='pc'>hvm</type>
|
||||||
|
<boot dev='hd'/>
|
||||||
|
</os>
|
||||||
|
<clock offset='utc'/>
|
||||||
|
<on_poweroff>destroy</on_poweroff>
|
||||||
|
<on_reboot>restart</on_reboot>
|
||||||
|
<on_crash>destroy</on_crash>
|
||||||
|
<devices>
|
||||||
|
<emulator>/usr/bin/qemu-system-i386</emulator>
|
||||||
|
<controller type='usb' index='0'>
|
||||||
|
<address type='pci' domain='0x0000' bus='0x00' slot='0x01' function='0x2'/>
|
||||||
|
</controller>
|
||||||
|
<controller type='ide' index='0'>
|
||||||
|
<address type='pci' domain='0x0000' bus='0x00' slot='0x01' function='0x1'/>
|
||||||
|
</controller>
|
||||||
|
<controller type='pci' index='0' model='pci-root'/>
|
||||||
|
<input type='mouse' bus='ps2'/>
|
||||||
|
<input type='keyboard' bus='ps2'/>
|
||||||
|
<graphics type='dbus'/>
|
||||||
|
<video>
|
||||||
|
<model type='cirrus' vram='16384' heads='1' primary='yes'/>
|
||||||
|
<address type='pci' domain='0x0000' bus='0x00' slot='0x02' function='0x0'/>
|
||||||
|
</video>
|
||||||
|
<memballoon model='none'/>
|
||||||
|
</devices>
|
||||||
|
</domain>
|
1
tests/qemuxml2xmloutdata/graphics-dbus-address.xml
Symbolic link
1
tests/qemuxml2xmloutdata/graphics-dbus-address.xml
Symbolic link
@ -0,0 +1 @@
|
|||||||
|
../qemuxml2argvdata/graphics-dbus-address.xml
|
1
tests/qemuxml2xmloutdata/graphics-dbus-p2p.xml
Symbolic link
1
tests/qemuxml2xmloutdata/graphics-dbus-p2p.xml
Symbolic link
@ -0,0 +1 @@
|
|||||||
|
../qemuxml2argvdata/graphics-dbus-p2p.xml
|
1
tests/qemuxml2xmloutdata/graphics-dbus.xml
Symbolic link
1
tests/qemuxml2xmloutdata/graphics-dbus.xml
Symbolic link
@ -0,0 +1 @@
|
|||||||
|
../qemuxml2argvdata/graphics-dbus.xml
|
@ -403,6 +403,16 @@ mymain(void)
|
|||||||
QEMU_CAPS_VNC,
|
QEMU_CAPS_VNC,
|
||||||
QEMU_CAPS_EGL_HEADLESS);
|
QEMU_CAPS_EGL_HEADLESS);
|
||||||
|
|
||||||
|
DO_TEST("graphics-dbus",
|
||||||
|
QEMU_CAPS_DEVICE_CIRRUS_VGA,
|
||||||
|
QEMU_CAPS_DISPLAY_DBUS);
|
||||||
|
DO_TEST("graphics-dbus-address",
|
||||||
|
QEMU_CAPS_DEVICE_CIRRUS_VGA,
|
||||||
|
QEMU_CAPS_DISPLAY_DBUS);
|
||||||
|
DO_TEST("graphics-dbus-p2p",
|
||||||
|
QEMU_CAPS_DEVICE_CIRRUS_VGA,
|
||||||
|
QEMU_CAPS_DISPLAY_DBUS);
|
||||||
|
|
||||||
DO_TEST_CAPS_ARCH_LATEST("default-video-type-aarch64", "aarch64");
|
DO_TEST_CAPS_ARCH_LATEST("default-video-type-aarch64", "aarch64");
|
||||||
DO_TEST_CAPS_ARCH_LATEST("default-video-type-ppc64", "ppc64");
|
DO_TEST_CAPS_ARCH_LATEST("default-video-type-ppc64", "ppc64");
|
||||||
DO_TEST_CAPS_ARCH_LATEST("default-video-type-riscv64", "riscv64");
|
DO_TEST_CAPS_ARCH_LATEST("default-video-type-riscv64", "riscv64");
|
||||||
|
Loading…
x
Reference in New Issue
Block a user