diff --git a/configure.ac b/configure.ac index 5f7786d..91ce0e7 100644 --- a/configure.ac +++ b/configure.ac @@ -117,6 +117,14 @@ AS_IF([test "x$have_libvirt" = "xyes"], ]) AM_CONDITIONAL([HAVE_LIBVIRT], [test "x$have_libvirt" = "xyes"]) +old_LIBS=$LIBS +LIBS=$LIBVIRT_LIBS +# virDomainOpenGraphicsFD was introduced in libvirt 1.2.8 +AC_CHECK_LIB([virt], + [virDomainOpenGraphicsFD], + [AC_DEFINE([HAVE_VIR_DOMAIN_OPEN_GRAPHICS_FD], 1, [Have virDomainOpenGraphicsFD?])]) +LIBS=$old_LIBS + AC_MSG_CHECKING([which gtk+ version to compile against]) AC_ARG_WITH([gtk], [AS_HELP_STRING([--with-gtk=2.0|3.0],[which gtk+ version to compile against (default: 3.0)])], diff --git a/src/virt-viewer.c b/src/virt-viewer.c index c6066c5..4b90a59 100644 --- a/src/virt-viewer.c +++ b/src/virt-viewer.c @@ -428,18 +428,31 @@ virt_viewer_open_connection(VirtViewerApp *self G_GNUC_UNUSED, int *fd) VirtViewer *viewer = VIRT_VIEWER(self); VirtViewerPrivate *priv = viewer->priv; int pair[2]; + virErrorPtr err; #endif *fd = -1; #if defined(HAVE_SOCKETPAIR) if (!priv->dom) return TRUE; +#ifdef HAVE_VIR_DOMAIN_OPEN_GRAPHICS_FD + if ((*fd = virDomainOpenGraphicsFD(priv->dom, 0, + VIR_DOMAIN_OPEN_GRAPHICS_SKIPAUTH)) >= 0) + return TRUE; + + err = virGetLastError(); + if (err && err->code != VIR_ERR_NO_SUPPORT) { + g_debug("Error %s", err->message ? err->message : "Unknown"); + return TRUE; + } +#endif + if (socketpair(PF_UNIX, SOCK_STREAM, 0, pair) < 0) return FALSE; if (virDomainOpenGraphics(priv->dom, 0, pair[0], VIR_DOMAIN_OPEN_GRAPHICS_SKIPAUTH) < 0) { - virErrorPtr err = virGetLastError(); + err = virGetLastError(); g_debug("Error %s", err && err->message ? err->message : "Unknown"); close(pair[0]); close(pair[1]);