summaryrefslogtreecommitdiffstats
path: root/src/daemon/systemd
diff options
context:
space:
mode:
authorDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-07 18:28:17 +0000
committerDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-07 18:28:17 +0000
commit7a46c07230b8d8108c0e8e80df4522d0ac116538 (patch)
treed483300dab478b994fe199a5d19d18d74153718a /src/daemon/systemd
parentInitial commit. (diff)
downloadpipewire-upstream.tar.xz
pipewire-upstream.zip
Adding upstream version 0.3.65.upstream/0.3.65upstream
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'src/daemon/systemd')
-rw-r--r--src/daemon/systemd/meson.build6
-rw-r--r--src/daemon/systemd/system/meson.build15
-rw-r--r--src/daemon/systemd/system/pipewire.service.in35
-rw-r--r--src/daemon/systemd/system/pipewire.socket12
-rw-r--r--src/daemon/systemd/user/filter-chain.service.in21
-rw-r--r--src/daemon/systemd/user/meson.build27
-rw-r--r--src/daemon/systemd/user/pipewire-pulse.service.in36
-rw-r--r--src/daemon/systemd/user/pipewire-pulse.socket11
-rw-r--r--src/daemon/systemd/user/pipewire.service.in32
-rw-r--r--src/daemon/systemd/user/pipewire.socket9
10 files changed, 204 insertions, 0 deletions
diff --git a/src/daemon/systemd/meson.build b/src/daemon/systemd/meson.build
new file mode 100644
index 0000000..482a44c
--- /dev/null
+++ b/src/daemon/systemd/meson.build
@@ -0,0 +1,6 @@
+if get_option('systemd-system-service').allowed()
+ subdir('system')
+endif
+if get_option('systemd-user-service').allowed()
+ subdir('user')
+endif
diff --git a/src/daemon/systemd/system/meson.build b/src/daemon/systemd/system/meson.build
new file mode 100644
index 0000000..84ca0b0
--- /dev/null
+++ b/src/daemon/systemd/system/meson.build
@@ -0,0 +1,15 @@
+systemd_system_services_dir = systemd.get_variable('systemdsystemunitdir', pkgconfig_define : [ 'rootprefix', prefix])
+if get_option('systemd-system-unit-dir') != ''
+ systemd_system_services_dir = get_option('systemd-system-unit-dir')
+endif
+
+install_data(sources : 'pipewire.socket',
+ install_dir : systemd_system_services_dir)
+
+systemd_config = configuration_data()
+systemd_config.set('PW_BINARY', pipewire_bindir / 'pipewire')
+
+configure_file(input : 'pipewire.service.in',
+ output : 'pipewire.service',
+ configuration : systemd_config,
+ install_dir : systemd_system_services_dir)
diff --git a/src/daemon/systemd/system/pipewire.service.in b/src/daemon/systemd/system/pipewire.service.in
new file mode 100644
index 0000000..8b75ba2
--- /dev/null
+++ b/src/daemon/systemd/system/pipewire.service.in
@@ -0,0 +1,35 @@
+[Unit]
+Description=PipeWire Multimedia Service
+
+# We require pipewire.socket to be active before starting the daemon, because
+# while it is possible to use the service without the socket, it is not clear
+# why it would be desirable.
+#
+# Installing pipewire and doing `systemctl start pipewire` will not get the
+# socket started, which might be confusing and problematic if the server is to
+# be restarted later on, as the client autospawn feature might kick in. Also, a
+# start of the socket unit will fail, adding to the confusion.
+#
+# After=pipewire.socket is not needed, as it is already implicit in the
+# socket-service relationship, see systemd.socket(5).
+Requires=pipewire.socket
+
+[Service]
+LockPersonality=yes
+MemoryDenyWriteExecute=yes
+NoNewPrivileges=yes
+RestrictNamespaces=yes
+SystemCallArchitectures=native
+SystemCallFilter=@system-service
+Type=simple
+AmbientCapabilities=CAP_SYS_NICE
+ExecStart=@PW_BINARY@
+Restart=on-failure
+RuntimeDirectory=pipewire
+RuntimeDirectoryPreserve=yes
+User=pipewire
+Environment=PIPEWIRE_RUNTIME_DIR=%t/pipewire
+
+[Install]
+Also=pipewire.socket
+WantedBy=default.target
diff --git a/src/daemon/systemd/system/pipewire.socket b/src/daemon/systemd/system/pipewire.socket
new file mode 100644
index 0000000..2e3cb71
--- /dev/null
+++ b/src/daemon/systemd/system/pipewire.socket
@@ -0,0 +1,12 @@
+[Unit]
+Description=PipeWire Multimedia System Socket
+
+[Socket]
+Priority=6
+ListenStream=%t/pipewire/pipewire-0
+SocketUser=pipewire
+SocketGroup=pipewire
+SocketMode=0660
+
+[Install]
+WantedBy=sockets.target
diff --git a/src/daemon/systemd/user/filter-chain.service.in b/src/daemon/systemd/user/filter-chain.service.in
new file mode 100644
index 0000000..542cbd7
--- /dev/null
+++ b/src/daemon/systemd/user/filter-chain.service.in
@@ -0,0 +1,21 @@
+[Unit]
+Description=PipeWire filter chain daemon
+
+After=pipewire.service pipewire-session-manager.service
+BindsTo=pipewire.service
+
+[Service]
+LockPersonality=yes
+MemoryDenyWriteExecute=yes
+NoNewPrivileges=yes
+RestrictNamespaces=yes
+SystemCallArchitectures=native
+SystemCallFilter=@system-service
+Type=simple
+ExecStart=@PW_BINARY@ -c filter-chain.conf
+Restart=on-failure
+Slice=session.slice
+
+[Install]
+Also=pipewire.socket
+WantedBy=default.target
diff --git a/src/daemon/systemd/user/meson.build b/src/daemon/systemd/user/meson.build
new file mode 100644
index 0000000..1022762
--- /dev/null
+++ b/src/daemon/systemd/user/meson.build
@@ -0,0 +1,27 @@
+systemd_user_services_dir = systemd.get_variable('systemduserunitdir', pkgconfig_define : [ 'prefix', prefix])
+if get_option('systemd-user-unit-dir') != ''
+ systemd_user_services_dir = get_option('systemd-user-unit-dir')
+endif
+
+install_data(
+ sources : ['pipewire.socket', 'pipewire-pulse.socket'],
+ install_dir : systemd_user_services_dir)
+
+systemd_config = configuration_data()
+systemd_config.set('PW_BINARY', pipewire_bindir / 'pipewire')
+systemd_config.set('PW_PULSE_BINARY', pipewire_bindir / 'pipewire-pulse')
+
+configure_file(input : 'pipewire.service.in',
+ output : 'pipewire.service',
+ configuration : systemd_config,
+ install_dir : systemd_user_services_dir)
+
+configure_file(input : 'pipewire-pulse.service.in',
+ output : 'pipewire-pulse.service',
+ configuration : systemd_config,
+ install_dir : systemd_user_services_dir)
+
+configure_file(input : 'filter-chain.service.in',
+ output : 'filter-chain.service',
+ configuration : systemd_config,
+ install_dir : systemd_user_services_dir)
diff --git a/src/daemon/systemd/user/pipewire-pulse.service.in b/src/daemon/systemd/user/pipewire-pulse.service.in
new file mode 100644
index 0000000..73d22e5
--- /dev/null
+++ b/src/daemon/systemd/user/pipewire-pulse.service.in
@@ -0,0 +1,36 @@
+[Unit]
+Description=PipeWire PulseAudio
+
+# We require pipewire-pulse.socket to be active before starting the daemon, because
+# while it is possible to use the service without the socket, it is not clear
+# why it would be desirable.
+#
+# A user installing pipewire and doing `systemctl --user start pipewire-pulse`
+# will not get the socket started, which might be confusing and problematic if
+# the server is to be restarted later on, as the client autospawn feature
+# might kick in. Also, a start of the socket unit will fail, adding to the
+# confusion.
+#
+# After=pipewire-pulse.socket is not needed, as it is already implicit in the
+# socket-service relationship, see systemd.socket(5).
+Requires=pipewire-pulse.socket
+ConditionUser=!root
+Wants=pipewire.service pipewire-session-manager.service
+After=pipewire.service pipewire-session-manager.service
+Conflicts=pulseaudio.service
+
+[Service]
+LockPersonality=yes
+MemoryDenyWriteExecute=yes
+NoNewPrivileges=yes
+RestrictNamespaces=yes
+SystemCallArchitectures=native
+SystemCallFilter=@system-service
+Type=simple
+ExecStart=@PW_PULSE_BINARY@
+Restart=on-failure
+Slice=session.slice
+
+[Install]
+Also=pipewire-pulse.socket
+WantedBy=default.target
diff --git a/src/daemon/systemd/user/pipewire-pulse.socket b/src/daemon/systemd/user/pipewire-pulse.socket
new file mode 100644
index 0000000..1ae5eda
--- /dev/null
+++ b/src/daemon/systemd/user/pipewire-pulse.socket
@@ -0,0 +1,11 @@
+[Unit]
+Description=PipeWire PulseAudio
+ConditionUser=!root
+Conflicts=pulseaudio.socket
+
+[Socket]
+Priority=6
+ListenStream=%t/pulse/native
+
+[Install]
+WantedBy=sockets.target
diff --git a/src/daemon/systemd/user/pipewire.service.in b/src/daemon/systemd/user/pipewire.service.in
new file mode 100644
index 0000000..b9b1373
--- /dev/null
+++ b/src/daemon/systemd/user/pipewire.service.in
@@ -0,0 +1,32 @@
+[Unit]
+Description=PipeWire Multimedia Service
+
+# We require pipewire.socket to be active before starting the daemon, because
+# while it is possible to use the service without the socket, it is not clear
+# why it would be desirable.
+#
+# A user installing pipewire and doing `systemctl --user start pipewire`
+# will not get the socket started, which might be confusing and problematic if
+# the server is to be restarted later on, as the client autospawn feature
+# might kick in. Also, a start of the socket unit will fail, adding to the
+# confusion.
+#
+# After=pipewire.socket is not needed, as it is already implicit in the
+# socket-service relationship, see systemd.socket(5).
+Requires=pipewire.socket
+
+[Service]
+LockPersonality=yes
+MemoryDenyWriteExecute=yes
+NoNewPrivileges=yes
+RestrictNamespaces=yes
+SystemCallArchitectures=native
+SystemCallFilter=@system-service
+Type=simple
+ExecStart=@PW_BINARY@
+Restart=on-failure
+Slice=session.slice
+
+[Install]
+Also=pipewire.socket
+WantedBy=default.target
diff --git a/src/daemon/systemd/user/pipewire.socket b/src/daemon/systemd/user/pipewire.socket
new file mode 100644
index 0000000..232bbb8
--- /dev/null
+++ b/src/daemon/systemd/user/pipewire.socket
@@ -0,0 +1,9 @@
+[Unit]
+Description=PipeWire Multimedia System Socket
+
+[Socket]
+Priority=6
+ListenStream=%t/pipewire-0
+
+[Install]
+WantedBy=sockets.target