From 934f6c7d1b2a3f2071c63295b8f1887be40cbe25 Mon Sep 17 00:00:00 2001 From: Robert Mader Date: Wed, 19 Mar 2025 08:25:34 +0100 Subject: [PATCH] systemd: Depend on dbus.service Solution suggested by Xi Ruoyao. The dbus user service is required for various features - the summary says: 'dbus (Bluetooth, rt, portal, pw-reserve)' On session logout the dbus service gets shut down while the Pipewire one relies on a timeout. If a user logs in again before PW timed out, the later stays alive but doesn't handle re-connecting to the dbus service of the new session, breaking the camera portal and potentially other features. Thus hard-depend on the dbus service (if enabled at build time) and thus shut down together with it. (cherry picked from commit 2625983a236ca34e5ca18fb12ad4f52166a1b4bd) --- src/daemon/systemd/user/meson.build | 6 ++++++ src/daemon/systemd/user/pipewire.service.in | 2 +- 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/src/daemon/systemd/user/meson.build b/src/daemon/systemd/user/meson.build index 10227629d..a96409f2b 100644 --- a/src/daemon/systemd/user/meson.build +++ b/src/daemon/systemd/user/meson.build @@ -11,6 +11,12 @@ systemd_config = configuration_data() systemd_config.set('PW_BINARY', pipewire_bindir / 'pipewire') systemd_config.set('PW_PULSE_BINARY', pipewire_bindir / 'pipewire-pulse') +pw_service_reqs = '' +if get_option('dbus').enabled() + pw_service_reqs += 'dbus.service ' +endif +systemd_config.set('PW_SERVICE_REQS', pw_service_reqs) + configure_file(input : 'pipewire.service.in', output : 'pipewire.service', configuration : systemd_config, diff --git a/src/daemon/systemd/user/pipewire.service.in b/src/daemon/systemd/user/pipewire.service.in index 4236c6bd4..f0c8d9cd5 100644 --- a/src/daemon/systemd/user/pipewire.service.in +++ b/src/daemon/systemd/user/pipewire.service.in @@ -13,7 +13,7 @@ Description=PipeWire Multimedia Service # # After=pipewire.socket is not needed, as it is already implicit in the # socket-service relationship, see systemd.socket(5). -Requires=pipewire.socket +Requires=pipewire.socket @PW_SERVICE_REQS@ ConditionUser=!root [Service]