From 780a69aff0ff57ef813179a2f09556eaf488cdfc Mon Sep 17 00:00:00 2001 From: David Herrmann Date: Mon, 22 Jun 2015 21:13:05 +0200 Subject: systemd-logind: do not rely on directed signals Right now, Xorg does not install DBus matches for "PauseDevice" / "ResumeDevice". Therefore, it should usually not receive those DBus signals from logind. It is just a coincidence that systemd-logind sends those signals in a directed manner right now. Therefore, dbus-daemon bypasses the broadcast matches. However, this is not ABI and Xorg should not rely on this. systemd-logind is free to send those signals as broadcasts, in which case Xorg will freeze the VT. Fix this by always installing those matches. Cc: Hans de Goede Cc: Keith Packard Reported-by: Jan Alexander Steffens Signed-off-by: David Herrmann Reviewed-by: Hans de Goede Tested-by: Hans de Goede Signed-off-by: Hans de Goede diff --git a/hw/xfree86/os-support/linux/systemd-logind.c b/hw/xfree86/os-support/linux/systemd-logind.c index 69e2f67..2612d9e 100644 --- a/hw/xfree86/os-support/linux/systemd-logind.c +++ b/hw/xfree86/os-support/linux/systemd-logind.c @@ -507,6 +507,24 @@ connect_hook(DBusConnection *connection, void *data) goto cleanup; } + dbus_bus_add_match(connection, + "type='signal',sender='org.freedesktop.login1',interface='org.freedesktop.login1.Session',member='PauseDevice'", + &error); + if (dbus_error_is_set(&error)) { + LogMessage(X_ERROR, "systemd-logind: could not add match: %s\n", + error.message); + goto cleanup; + } + + dbus_bus_add_match(connection, + "type='signal',sender='org.freedesktop.login1',interface='org.freedesktop.login1.Session',member='ResumeDevice'", + &error); + if (dbus_error_is_set(&error)) { + LogMessage(X_ERROR, "systemd-logind: could not add match: %s\n", + error.message); + goto cleanup; + } + /* * HdG: This is not useful with systemd <= 208 since the signal only * contains invalidated property names there, rather than property, val -- cgit v0.10.2