systemd: Add system service and socket

Add system service and socket in addition to the user service and
socket. The system service is started as pipewire user and group and
clients need to be in the pipewire group to be able to connect.
This commit is contained in:
Jonas Holmberg 2020-08-17 10:48:55 +02:00 committed by Wim Taymans
parent 120090741a
commit 5c52670421
5 changed files with 66 additions and 1 deletions

View file

@ -26,6 +26,14 @@ option('systemd',
description: 'Enable systemd integration', description: 'Enable systemd integration',
type: 'boolean', type: 'boolean',
value: true) value: true)
option('systemd-system-service',
description: 'Install systemd system service file',
type: 'boolean',
value: false)
option('systemd-user-service',
description: 'Install systemd user service file',
type: 'boolean',
value: true)
option('pipewire-alsa', option('pipewire-alsa',
description: 'Enable pipewire-alsa integration', description: 'Enable pipewire-alsa integration',
type: 'boolean', type: 'boolean',

View file

@ -1 +1,6 @@
subdir('user') if get_option('systemd-system-service')
subdir('system')
endif
if get_option('systemd-user-service')
subdir('user')
endif

View file

@ -0,0 +1,12 @@
systemd_system_services_dir = systemd.get_pkgconfig_variable('systemdsystemunitdir', define_variable : [ 'prefix', prefix])
install_data(sources : 'pipewire.socket',
install_dir : systemd_system_services_dir)
systemd_config = configuration_data()
systemd_config.set('PW_BINARY', join_paths(pipewire_bindir, 'pipewire'))
configure_file(input : 'pipewire.service.in',
output : 'pipewire.service',
configuration : systemd_config,
install_dir : systemd_system_services_dir)

View file

@ -0,0 +1,27 @@
[Unit]
Description=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]
Type=simple
ExecStart=@PW_BINARY@
Restart=on-failure
RuntimeDirectory=pipewire
User=pipewire
Environment=PIPEWIRE_RUNTIME_DIR=%t/pipewire
[Install]
Also=pipewire.socket
WantedBy=default.target

View file

@ -0,0 +1,13 @@
[Unit]
Description=Multimedia System
[Socket]
Priority=6
Backlog=5
ListenStream=%t/pipewire/pipewire-0
SocketUser=pipewire
SocketGroup=pipewire
SocketMode=0660
[Install]
WantedBy=sockets.target