diff --git a/data/dbus-interfaces/org.gnome.Mutter.RemoteDesktop.xml b/data/dbus-interfaces/org.gnome.Mutter.RemoteDesktop.xml
index 75c1a137c..64f8f82d9 100644
--- a/data/dbus-interfaces/org.gnome.Mutter.RemoteDesktop.xml
+++ b/data/dbus-interfaces/org.gnome.Mutter.RemoteDesktop.xml
@@ -348,6 +348,17 @@
+
+
+
+
+
+
+
diff --git a/src/backends/meta-remote-desktop-session.c b/src/backends/meta-remote-desktop-session.c
index 69596f2ae..0ce06f619 100644
--- a/src/backends/meta-remote-desktop-session.c
+++ b/src/backends/meta-remote-desktop-session.c
@@ -1630,6 +1630,46 @@ handle_selection_read (MetaDBusRemoteDesktopSession *skeleton,
return TRUE;
}
+static gboolean
+handle_connect_to_eis (MetaDBusRemoteDesktopSession *skeleton,
+ GDBusMethodInvocation *invocation,
+ GUnixFDList *fd_list_in,
+ GVariant *arg_options)
+{
+ MetaRemoteDesktopSession *session = META_REMOTE_DESKTOP_SESSION (skeleton);
+ MetaBackend *backend =
+ meta_dbus_session_manager_get_backend (session->session_manager);
+ g_autoptr (GUnixFDList) fd_list = NULL;
+ int fd_idx;
+ GVariant *fd_variant;
+ int fd;
+ MetaEis *meis;
+
+ meis = meta_backend_get_eis (backend);
+
+ fd = meta_eis_add_client_get_fd (meis);
+ if (fd < 0)
+ {
+ g_dbus_method_invocation_return_error (invocation, G_DBUS_ERROR,
+ G_DBUS_ERROR_FAILED,
+ "Failed to create socket: %s",
+ g_strerror (-fd));
+ return G_DBUS_METHOD_INVOCATION_HANDLED;
+ }
+
+ fd_list = g_unix_fd_list_new ();
+ fd_idx = g_unix_fd_list_append (fd_list, fd, NULL);
+ close (fd);
+ fd_variant = g_variant_new_handle (fd_idx);
+
+ meta_dbus_remote_desktop_session_complete_connect_to_eis (skeleton,
+ invocation,
+ fd_list,
+ fd_variant);
+
+ return G_DBUS_METHOD_INVOCATION_HANDLED;
+}
+
static gboolean
meta_remote_desktop_session_initable_init (GInitable *initable,
GCancellable *cancellable,
@@ -1691,6 +1731,7 @@ meta_remote_desktop_session_init_iface (MetaDBusRemoteDesktopSessionIface *iface
iface->handle_selection_write = handle_selection_write;
iface->handle_selection_write_done = handle_selection_write_done;
iface->handle_selection_read = handle_selection_read;
+ iface->handle_connect_to_eis = handle_connect_to_eis;
}
static void