diff options
Diffstat (limited to 'src/daemon/systemd')
-rw-r--r-- | src/daemon/systemd/meson.build | 6 | ||||
-rw-r--r-- | src/daemon/systemd/system/meson.build | 15 | ||||
-rw-r--r-- | src/daemon/systemd/system/pipewire.service.in | 35 | ||||
-rw-r--r-- | src/daemon/systemd/system/pipewire.socket | 12 | ||||
-rw-r--r-- | src/daemon/systemd/user/filter-chain.service.in | 21 | ||||
-rw-r--r-- | src/daemon/systemd/user/meson.build | 27 | ||||
-rw-r--r-- | src/daemon/systemd/user/pipewire-pulse.service.in | 36 | ||||
-rw-r--r-- | src/daemon/systemd/user/pipewire-pulse.socket | 11 | ||||
-rw-r--r-- | src/daemon/systemd/user/pipewire.service.in | 32 | ||||
-rw-r--r-- | src/daemon/systemd/user/pipewire.socket | 9 |
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 |