From: Alyssa Ross <hi@alyssa.is>
To: Demi Marie Obenour <demiobenour@gmail.com>
Cc: Spectrum OS Development <devel@spectrum-os.org>
Subject: Re: [PATCH v3] Run PipeWire and WirePlumber in the VMs
Date: Mon, 14 Jul 2025 16:54:21 +0200 [thread overview]
Message-ID: <87seiyg6w2.fsf@alyssa.is> (raw)
In-Reply-To: <638beeaa-2351-4f51-81a6-bc58883930c2@gmail.com>
[-- Attachment #1: Type: text/plain, Size: 26094 bytes --]
Demi Marie Obenour <demiobenour@gmail.com> writes:
> WirePlumber is completely overkill as a session manager here, and
> ideally a trivial session manager would be used instead. I did build a
> Spectrum OS image and found that PipeWire and WirePlumber both
> successfully started. PipeWire is configured to listen on the
> PulseAudio socket, so PulseAudio compatibility works. This does inject
> a large number of completely unnecessary files into the VM, notably for
> libcamera and Bluetooth support.
Yeah, I saw this in the log:
N 14:27:54.810067 wp-internal-comp-l ../lib/wp/private/internal-comp-loader.c:588:on_component_loaded: <WpCore:0x28d95d30> optional component 'support.logind [module: libwireplumber-module-logind]' failed to load: failed to start systemd logind monitor: -2 (No such file or directory)
N 14:27:54.811299 wp-internal-comp-l ../lib/wp/private/internal-comp-loader.c:640:wp_component_array_load_task_execute_step: <WpCore:0x28d95d30> skipping component 'monitor.bluez.seat-monitoring [virtual]' because some of its dependencies were not loaded
E 14:27:54.851210 spa.dbus ../spa/plugins/support/dbus.c:333:impl_connection_get: Failed to connect to system bus: Failed to connect to socket /run/dbus/system_bus_socket: No such file or directory
E 14:27:54.852143 spa.bluez5 ../spa/plugins/bluez5/bluez5-dbus.c:6632:impl_init: failed to get dbus connection
N 14:27:54.855904 wp-device ../lib/wp/device.c:710:wp_spa_device_new_from_spa_factory: SPA handle 'api.bluez5.enum.dbus' could not be loaded; is it installed?
N 14:27:54.856657 s-monitors bluez.lua:411:createMonitor: PipeWire's BlueZ SPA plugin is missing or broken. Bluetooth devices will not be supported.
E 14:27:54.859091 spa.bluez5.midi ../spa/plugins/bluez5/midi-enum.c:805:impl_init: Creating GDBus connection failed: Could not connect: No such file or directory
N 14:27:54.859810 wp-device ../lib/wp/device.c:710:wp_spa_device_new_from_spa_factory: SPA handle 'api.bluez5.midi.enum' could not be loaded; is it installed?
N 14:27:54.860524 s-monitors bluez-midi.lua:95:createMonitor: PipeWire's BlueZ MIDI SPA missing or broken. Bluetooth not supported.
E 14:27:54.861346 spa.bluez5.midi.no ../spa/plugins/bluez5/midi-node.c:1989:impl_init: failed to get dbus connection: Could not connect: No such file or directory
E 14:27:54.862435 pw.resource ../src/pipewire/resource.c:255:pw_resource_errorf_id: can't create node: Input/output error
W 14:27:54.863275 wp-node ../lib/wp/node.c:913:wp_impl_node_new_from_pw_factory: failed to create node from factory 'spa-node-factory'
N 14:27:54.863965 s-monitors bluez-midi.lua:130:createServers: Failed to create BLE MIDI server.
[0:00:01.314658075] [123] INFO IPAManager ipa_manager.cpp:137 libcamera is not installed. Adding '/nix/store/src/ipa' to the IPA search path
[0:00:01.321611889] [123] INFO Camera camera_manager.cpp:326 libcamera v0.5.0
Can we set something in a config file or something to disable this extra
stuff?
> Signed-off-by: Demi Marie Obenour <demiobenour@gmail.com>
> ---
> Changes since v2: Enable PipeWire's PulseAudio emulation.
>
> img/app/Makefile | 19 +-
> img/app/default.nix | 3 +
> img/app/etc/fstab | 5 +-
> .../pipewire.conf.d/90_enable_pulseaudio.conf | 172 ++++++++++++++++++
> .../etc/s6-rc/app/dependencies.d/wireplumber | 0
> .../app/dependencies.d/wireplumber.license | 2 +
> img/app/etc/s6-rc/directories/type | 1 +
> img/app/etc/s6-rc/directories/type.license | 2 +
> img/app/etc/s6-rc/directories/up | 11 ++
> .../s6-rc/pipewire/dependencies.d/directories | 0
> .../dependencies.d/directories.license | 2 +
> img/app/etc/s6-rc/pipewire/notification-fd | 1 +
> .../s6-rc/pipewire/notification-fd.license | 2 +
> img/app/etc/s6-rc/pipewire/run | 20 ++
> img/app/etc/s6-rc/pipewire/type | 1 +
> img/app/etc/s6-rc/pipewire/type.license | 2 +
> .../dependencies.d/directories | 0
> .../dependencies.d/directories.license | 2 +
> img/app/etc/s6-rc/wayland-proxy-virtwl/run | 11 --
> .../etc/s6-rc/wireplumber/dependencies.d/dbus | 0
> .../wireplumber/dependencies.d/dbus.license | 2 +
> .../s6-rc/wireplumber/dependencies.d/pipewire | 0
> .../dependencies.d/pipewire.license | 2 +
> img/app/etc/s6-rc/wireplumber/run | 4 +
> img/app/etc/s6-rc/wireplumber/type | 1 +
> img/app/etc/s6-rc/wireplumber/type.license | 2 +
> 26 files changed, 251 insertions(+), 16 deletions(-)
> create mode 100644 img/app/etc/pipewire/pipewire.conf.d/90_enable_pulseaudio.conf
> create mode 100644 img/app/etc/s6-rc/app/dependencies.d/wireplumber
> create mode 100644 img/app/etc/s6-rc/app/dependencies.d/wireplumber.license
> create mode 100644 img/app/etc/s6-rc/directories/type
> create mode 100644 img/app/etc/s6-rc/directories/type.license
> create mode 100644 img/app/etc/s6-rc/directories/up
> create mode 100644 img/app/etc/s6-rc/pipewire/dependencies.d/directories
> create mode 100644 img/app/etc/s6-rc/pipewire/dependencies.d/directories.license
> create mode 100644 img/app/etc/s6-rc/pipewire/notification-fd
> create mode 100644 img/app/etc/s6-rc/pipewire/notification-fd.license
> create mode 100644 img/app/etc/s6-rc/pipewire/run
> create mode 100644 img/app/etc/s6-rc/pipewire/type
> create mode 100644 img/app/etc/s6-rc/pipewire/type.license
> create mode 100644 img/app/etc/s6-rc/wayland-proxy-virtwl/dependencies.d/directories
> create mode 100644 img/app/etc/s6-rc/wayland-proxy-virtwl/dependencies.d/directories.license
> create mode 100644 img/app/etc/s6-rc/wireplumber/dependencies.d/dbus
> create mode 100644 img/app/etc/s6-rc/wireplumber/dependencies.d/dbus.license
> create mode 100644 img/app/etc/s6-rc/wireplumber/dependencies.d/pipewire
> create mode 100644 img/app/etc/s6-rc/wireplumber/dependencies.d/pipewire.license
> create mode 100644 img/app/etc/s6-rc/wireplumber/run
> create mode 100644 img/app/etc/s6-rc/wireplumber/type
> create mode 100644 img/app/etc/s6-rc/wireplumber/type.license
>
> diff --git a/img/app/Makefile b/img/app/Makefile
> index f818e91..8144518 100644
> --- a/img/app/Makefile
> +++ b/img/app/Makefile
> @@ -53,7 +53,8 @@ VM_FILES = \
> etc/s6-linux-init/scripts/rc.init \
> etc/s6-linux-init/scripts/rc.shutdown \
> etc/s6-linux-init/scripts/rc.shutdown.final \
> - etc/xdg/xdg-desktop-portal/portals.conf
> + etc/xdg/xdg-desktop-portal/portals.conf \
> + etc/pipewire/pipewire.conf.d/90_enable_pulseaudio.conf
Keep lists alphabetical please!
> VM_DIRS = dev run proc sys tmp \
> etc/s6-linux-init/run-image/service
> VM_FIFOS = etc/s6-linux-init/run-image/service/s6-linux-init-shutdownd/fifo
> @@ -83,22 +84,34 @@ build/rootfs.erofs: ../../scripts/make-erofs.sh $(VM_FILES) $(VM_BUILD_FILES) bu
> VM_S6_RC_FILES = \
> etc/s6-rc/app/dependencies.d/dbus \
> etc/s6-rc/app/dependencies.d/wayland-proxy-virtwl \
> + etc/s6-rc/app/dependencies.d/wireplumber \
> etc/s6-rc/app/run \
> etc/s6-rc/app/type \
> etc/s6-rc/dbus/notification-fd \
> etc/s6-rc/dbus/run \
> etc/s6-rc/dbus/type \
> + etc/s6-rc/directories/type \
> + etc/s6-rc/directories/up \
> etc/s6-rc/mdevd-coldplug/dependencies \
> etc/s6-rc/mdevd-coldplug/type \
> etc/s6-rc/mdevd-coldplug/up \
> etc/s6-rc/mdevd/notification-fd \
> etc/s6-rc/mdevd/run \
> etc/s6-rc/mdevd/type \
> + etc/s6-rc/ok-all/contents \
> + etc/s6-rc/ok-all/type \
> + etc/s6-rc/pipewire/dependencies.d/directories \
> + etc/s6-rc/pipewire/notification-fd \
> + etc/s6-rc/pipewire/run \
> + etc/s6-rc/pipewire/type \
> + etc/s6-rc/wayland-proxy-virtwl/dependencies.d/directories \
> etc/s6-rc/wayland-proxy-virtwl/notification-fd \
> etc/s6-rc/wayland-proxy-virtwl/run \
> etc/s6-rc/wayland-proxy-virtwl/type \
> - etc/s6-rc/ok-all/contents \
> - etc/s6-rc/ok-all/type
> + etc/s6-rc/wireplumber/dependencies.d/dbus \
> + etc/s6-rc/wireplumber/dependencies.d/pipewire \
> + etc/s6-rc/wireplumber/run \
> + etc/s6-rc/wireplumber/type
>
> build/etc/s6-rc: $(VM_S6_RC_FILES)
> mkdir -p $$(dirname $@)
> diff --git a/img/app/default.nix b/img/app/default.nix
> index 740643a..d3eed1f 100644
> --- a/img/app/default.nix
> +++ b/img/app/default.nix
> @@ -48,6 +48,9 @@ let
> pkgs.xwayland
> pkgs.xdg-desktop-portal
> pkgs.xdg-desktop-portal-gtk
> + # Depends on pulseaudio libs
> + pkgs.pipewire
> + pkgs.wireplumber
> ];
> })).fhsenv;
> in
> diff --git a/img/app/etc/fstab b/img/app/etc/fstab
> index a95088b..40aa3bd 100644
> --- a/img/app/etc/fstab
> +++ b/img/app/etc/fstab
> @@ -1,7 +1,8 @@
> # SPDX-License-Identifier: CC0-1.0
> # SPDX-FileCopyrightText: 2020-2022 Alyssa Ross <hi@alyssa.is>
> proc /proc proc defaults 0 0
> -devpts /dev/pts devpts defaults,gid=4,mode=620 0 0
> +devpts /dev/pts devpts defaults,gid=4,mode=620 0 0
> tmpfs /dev/shm tmpfs defaults 0 0
> sysfs /sys sysfs defaults 0 0
> -tmpfs /tmp tmpfs defaults 0 0
> +tmpfs /tmp tmpfs defaults,mode=1755 0 0
> +tmpfs /run tmpfs defaults 0 0
Still think it would be nice to do the directory permissions a separate
patch, since it's not strictly related to PipeWire. (And again, /run is
provided by s6-linux-init, so we don't need to create it again — or is
there some advantage to still having it listed in fstab?)
> diff --git a/img/app/etc/pipewire/pipewire.conf.d/90_enable_pulseaudio.conf b/img/app/etc/pipewire/pipewire.conf.d/90_enable_pulseaudio.conf
> new file mode 100644
> index 0000000..a5b86a6
> --- /dev/null
> +++ b/img/app/etc/pipewire/pipewire.conf.d/90_enable_pulseaudio.conf
> @@ -0,0 +1,172 @@
> +# SPDX-License-Identifier: MIT
> +# SPDX-FileCopyrightText: Copyright © 2018 Wim Taymans
REUSE should detect the copyright line below fine, so the
SPDX-FileCopyrightText header shouldn't be necessary. (It's probably a
bug if not.)
> +
> +# Copyright © 2018 Wim Taymans
> +#
> +# Permission is hereby granted, free of charge, to any person obtaining a
> +# copy of this software and associated documentation files (the "Software"),
> +# to deal in the Software without restriction, including without limitation
> +# the rights to use, copy, modify, merge, publish, distribute, sublicense,
> +# and/or sell copies of the Software, and to permit persons to whom the
> +# Software is furnished to do so, subject to the following conditions:
> +#
> +# The above copyright notice and this permission notice (including the next
> +# paragraph) shall be included in all copies or substantial portions of the
> +# Software.
> +#
I recently added a check for trailing whitespace
(release/checks/whitespace.nix), and it doesn't like this license header.
> +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
> +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
> +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
> +# THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
> +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
> +# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
> +# DEALINGS IN THE SOFTWARE.
> +
> +# PulseAudio config file for PipeWire version "1.4.2" #
> +#
> +# Copy and edit this file in /etc/pipewire for system-wide changes
> +# or in ~/.config/pipewire for local changes.
> +#
> +# It is also possible to place a file with an updated section in
> +# /etc/pipewire/pipewire-pulse.conf.d/ for system-wide changes or in
> +# ~/.config/pipewire/pipewire-pulse.conf.d/ for local changes.
> +#
> +
> +context.modules = [
> + { name = libpipewire-module-protocol-pulse
> + args = {
> + # contents of pulse.properties can also be placed here
> + # to have config per server.
> + }
> + }
> +]
> +
> +# Extra commands can be executed here.
> +# load-module : loads a module with args and flags
> +# args = "<module-name> <module-args>"
> +# ( flags = [ nofail ] )
> +# ( condition = [ { <key1> = <value1>, ... } ... ] )
> +# conditions will check the pulse.properties key/values.
> +pulse.cmd = [
> + { cmd = "load-module" args = "module-always-sink" flags = [ ]
> + condition = [ { pulse.cmd.always-sink = !false } ] }
> + { cmd = "load-module" args = "module-device-manager" flags = [ ]
> + condition = [ { pulse.cmd.device-manager = !false } ] }
> + { cmd = "load-module" args = "module-device-restore" flags = [ ]
> + condition = [ { pulse.cmd.device-restore = !false } ] }
> + { cmd = "load-module" args = "module-stream-restore" flags = [ ]
> + condition = [ { pulse.cmd.stream-restore = !false } ] }
> + #{ cmd = "load-module" args = "module-switch-on-connect" }
> + #{ cmd = "load-module" args = "module-gsettings" flags = [ nofail ] }
There's a lot of commented out stuff in this file. Elsewhere in
Spectrum, I've generally left that sort of thing out, to keep the file
as short and easy to review as possible. Upstream is always available
as a reference when more stuff needs to be enabled.
> +]
> +
> +stream.properties = {
> + #node.latency = 1024/48000
> + #node.autoconnect = true
> + #resample.quality = 4
> + #channelmix.normalize = false
> + #channelmix.mix-lfe = true
> + #channelmix.upmix = true
> + #channelmix.upmix-method = psd # none, simple
> + #channelmix.lfe-cutoff = 150
> + #channelmix.fc-cutoff = 12000
> + #channelmix.rear-delay = 12.0
> + #channelmix.stereo-widen = 0.0
> + #channelmix.hilbert-taps = 0
> + #dither.noise = 0
> +}
> +
> +pulse.properties = {
> + # the addresses this server listens on
> + server.address = [
> + "unix:native"
> + #"unix:/tmp/something" # absolute paths may be used
> + #"tcp:4713" # IPv4 and IPv6 on all addresses
> + #"tcp:[::]:9999" # IPv6 on all addresses
> + #"tcp:127.0.0.1:8888" # IPv4 on a single address
> + #
> + #{ address = "tcp:4713" # address
> + # max-clients = 64 # maximum number of clients
> + # listen-backlog = 32 # backlog in the server listen queue
> + # client.access = "restricted" # permissions for clients
> + #}
> + ]
> + #server.dbus-name = "org.pulseaudio.Server"
> + #pulse.allow-module-loading = true
> + #pulse.min.req = 128/48000 # 2.7ms
> + #pulse.default.req = 960/48000 # 20 milliseconds
> + #pulse.min.frag = 128/48000 # 2.7ms
> + #pulse.default.frag = 96000/48000 # 2 seconds
> + #pulse.default.tlength = 96000/48000 # 2 seconds
> + #pulse.min.quantum = 128/48000 # 2.7ms
> + #pulse.idle.timeout = 0 # don't pause after underruns
> + #pulse.default.format = F32
> + #pulse.default.position = [ FL FR ]
> +}
> +
> +pulse.properties.rules = [
> + { matches = [ { cpu.vm.name = !null } ]
> + actions = {
> + update-props = {
> + # These overrides are only applied when running in a vm.
> + pulse.min.quantum = 1024/48000 # 22ms
> + }
> + }
> + }
> +]
> +
> +# client/stream specific properties
> +pulse.rules = [
> + {
> + matches = [
> + {
> + # all keys must match the value. ! negates. ~ starts regex.
> + #client.name = "Firefox"
> + #application.process.binary = "teams"
> + #application.name = "~speech-dispatcher.*"
> + }
> + ]
> + actions = {
> + update-props = {
> + #node.latency = 512/48000
> + }
> + # Possible quirks:"
> + # force-s16-info forces sink and source info as S16 format
> + # remove-capture-dont-move removes the capture DONT_MOVE flag
> + # block-source-volume blocks updates to source volume
> + # block-sink-volume blocks updates to sink volume
> + #quirks = [ ]
> + }
> + }
> + {
> + # skype does not want to use devices that don't have an S16 sample format.
> + matches = [
> + { application.process.binary = "teams" }
> + { application.process.binary = "teams-insiders" }
> + { application.process.binary = "teams-for-linux" }
> + { application.process.binary = "skypeforlinux" }
> + ]
> + actions = { quirks = [ force-s16-info ] }
> + }
> + {
> + # firefox marks the capture streams as don't move and then they
> + # can't be moved with pavucontrol or other tools.
> + matches = [ { application.process.binary = "firefox" } ]
> + actions = { quirks = [ remove-capture-dont-move ] }
> + }
> + {
> + # speech dispatcher asks for too small latency and then underruns.
> + matches = [ { application.name = "~speech-dispatcher.*" } ]
> + actions = {
> + update-props = {
> + pulse.min.req = 512/48000 # 10.6ms
> + pulse.min.quantum = 512/48000 # 10.6ms
> + pulse.idle.timeout = 5 # pause after 5 seconds of underrun
> + }
> + }
> + }
> + #{
> + # matches = [ { application.process.binary = "Discord" } ]
> + # actions = { quirks = [ block-source-volume ] }
> + #}
> +]
> diff --git a/img/app/etc/s6-rc/app/dependencies.d/wireplumber b/img/app/etc/s6-rc/app/dependencies.d/wireplumber
> new file mode 100644
> index 0000000..e69de29
> diff --git a/img/app/etc/s6-rc/app/dependencies.d/wireplumber.license b/img/app/etc/s6-rc/app/dependencies.d/wireplumber.license
> new file mode 100644
> index 0000000..c4a0586
> --- /dev/null
> +++ b/img/app/etc/s6-rc/app/dependencies.d/wireplumber.license
> @@ -0,0 +1,2 @@
> +SPDX-License-Identifier: CC0-1.0
> +SPDX-FileCopyrightText: 2025 Demi Marie Obenour <demiobenour@gmail.com>
> diff --git a/img/app/etc/s6-rc/directories/type b/img/app/etc/s6-rc/directories/type
> new file mode 100644
> index 0000000..bdd22a1
> --- /dev/null
> +++ b/img/app/etc/s6-rc/directories/type
> @@ -0,0 +1 @@
> +oneshot
> diff --git a/img/app/etc/s6-rc/directories/type.license b/img/app/etc/s6-rc/directories/type.license
> new file mode 100644
> index 0000000..c4a0586
> --- /dev/null
> +++ b/img/app/etc/s6-rc/directories/type.license
> @@ -0,0 +1,2 @@
> +SPDX-License-Identifier: CC0-1.0
> +SPDX-FileCopyrightText: 2025 Demi Marie Obenour <demiobenour@gmail.com>
> diff --git a/img/app/etc/s6-rc/directories/up b/img/app/etc/s6-rc/directories/up
> new file mode 100644
> index 0000000..2396fad
> --- /dev/null
> +++ b/img/app/etc/s6-rc/directories/up
> @@ -0,0 +1,11 @@
> +#!/bin/execlineb -P
> +# SPDX-License-Identifier: EUPL-1.2+
> +# SPDX-FileCopyrightText: 2023-2024 Alyssa Ross <hi@alyssa.is>
> +#
> +# Directory creation (if it's copyrightable):
> +# SPDX-License-Identifier: MIT
> +# SPDX-FileCopyrightText: 2022 Unikie
> +
> +if { mkdir -m 1755 /tmp/.X11-unix }
> +if { mkdir -m 0755 /run/user }
> +if { mkdir -m 0700 /run/user/0 }
> diff --git a/img/app/etc/s6-rc/pipewire/dependencies.d/directories b/img/app/etc/s6-rc/pipewire/dependencies.d/directories
> new file mode 100644
> index 0000000..e69de29
> diff --git a/img/app/etc/s6-rc/pipewire/dependencies.d/directories.license b/img/app/etc/s6-rc/pipewire/dependencies.d/directories.license
> new file mode 100644
> index 0000000..c4a0586
> --- /dev/null
> +++ b/img/app/etc/s6-rc/pipewire/dependencies.d/directories.license
> @@ -0,0 +1,2 @@
> +SPDX-License-Identifier: CC0-1.0
> +SPDX-FileCopyrightText: 2025 Demi Marie Obenour <demiobenour@gmail.com>
> diff --git a/img/app/etc/s6-rc/pipewire/notification-fd b/img/app/etc/s6-rc/pipewire/notification-fd
> new file mode 100644
> index 0000000..7ed6ff8
> --- /dev/null
> +++ b/img/app/etc/s6-rc/pipewire/notification-fd
> @@ -0,0 +1 @@
> +5
> diff --git a/img/app/etc/s6-rc/pipewire/notification-fd.license b/img/app/etc/s6-rc/pipewire/notification-fd.license
> new file mode 100644
> index 0000000..c4a0586
> --- /dev/null
> +++ b/img/app/etc/s6-rc/pipewire/notification-fd.license
> @@ -0,0 +1,2 @@
> +SPDX-License-Identifier: CC0-1.0
> +SPDX-FileCopyrightText: 2025 Demi Marie Obenour <demiobenour@gmail.com>
> diff --git a/img/app/etc/s6-rc/pipewire/run b/img/app/etc/s6-rc/pipewire/run
> new file mode 100644
> index 0000000..c0b55a1
> --- /dev/null
> +++ b/img/app/etc/s6-rc/pipewire/run
> @@ -0,0 +1,20 @@
> +#!/bin/execlineb -P
> +# SPDX-License-Identifier: EUPL-1.2+
> +# SPDX-FileCopyrightText: 2023-2024 Alyssa Ross <hi@alyssa.is>
> +# SPDX-FileCopyrightText: 2025 Demi Marie Obenour <demiobenour@gmail.com>
> +
> +s6-ipcserver-socketbinder -B /run/user/0/pipewire-0
> +fdmove -c 3 0
> +
> +s6-ipcserver-socketbinder -B /run/user/0/pipewire-0-manager
> +fdmove -c 4 0
> +
> +redirfd -r 0 /dev/null
> +
> +# Notify readiness.
> +if { fdmove 1 5 echo }
> +fdclose 5
> +
> +export LISTEN_FDS 2
> +getpid LISTEN_PID
> +pipewire
> diff --git a/img/app/etc/s6-rc/pipewire/type b/img/app/etc/s6-rc/pipewire/type
> new file mode 100644
> index 0000000..5883cff
> --- /dev/null
> +++ b/img/app/etc/s6-rc/pipewire/type
> @@ -0,0 +1 @@
> +longrun
> diff --git a/img/app/etc/s6-rc/pipewire/type.license b/img/app/etc/s6-rc/pipewire/type.license
> new file mode 100644
> index 0000000..c4a0586
> --- /dev/null
> +++ b/img/app/etc/s6-rc/pipewire/type.license
> @@ -0,0 +1,2 @@
> +SPDX-License-Identifier: CC0-1.0
> +SPDX-FileCopyrightText: 2025 Demi Marie Obenour <demiobenour@gmail.com>
> diff --git a/img/app/etc/s6-rc/wayland-proxy-virtwl/dependencies.d/directories b/img/app/etc/s6-rc/wayland-proxy-virtwl/dependencies.d/directories
> new file mode 100644
> index 0000000..e69de29
> diff --git a/img/app/etc/s6-rc/wayland-proxy-virtwl/dependencies.d/directories.license b/img/app/etc/s6-rc/wayland-proxy-virtwl/dependencies.d/directories.license
> new file mode 100644
> index 0000000..c4a0586
> --- /dev/null
> +++ b/img/app/etc/s6-rc/wayland-proxy-virtwl/dependencies.d/directories.license
> @@ -0,0 +1,2 @@
> +SPDX-License-Identifier: CC0-1.0
> +SPDX-FileCopyrightText: 2025 Demi Marie Obenour <demiobenour@gmail.com>
> diff --git a/img/app/etc/s6-rc/wayland-proxy-virtwl/run b/img/app/etc/s6-rc/wayland-proxy-virtwl/run
> index 7b80343..c1e0e08 100755
> --- a/img/app/etc/s6-rc/wayland-proxy-virtwl/run
> +++ b/img/app/etc/s6-rc/wayland-proxy-virtwl/run
> @@ -1,17 +1,6 @@
> #!/bin/execlineb -P
> # SPDX-License-Identifier: EUPL-1.2+
> # SPDX-FileCopyrightText: 2023-2024 Alyssa Ross <hi@alyssa.is>
> -#
> -# Directory creation (if it's copyrightable):
> -# SPDX-License-Identifier: MIT
> -# SPDX-FileCopyrightText: 2022 Unikie
> -
> -foreground { mkdir /tmp/.X11-unix }
> -foreground { mkdir /run/user }
> -foreground {
> - umask 077
> - mkdir /run/user/0
> -}
>
> s6-ipcserver-socketbinder -B /run/user/0/wayland-0
> fdmove -c 3 0
> diff --git a/img/app/etc/s6-rc/wireplumber/dependencies.d/dbus b/img/app/etc/s6-rc/wireplumber/dependencies.d/dbus
> new file mode 100644
> index 0000000..e69de29
> diff --git a/img/app/etc/s6-rc/wireplumber/dependencies.d/dbus.license b/img/app/etc/s6-rc/wireplumber/dependencies.d/dbus.license
> new file mode 100644
> index 0000000..c4a0586
> --- /dev/null
> +++ b/img/app/etc/s6-rc/wireplumber/dependencies.d/dbus.license
> @@ -0,0 +1,2 @@
> +SPDX-License-Identifier: CC0-1.0
> +SPDX-FileCopyrightText: 2025 Demi Marie Obenour <demiobenour@gmail.com>
> diff --git a/img/app/etc/s6-rc/wireplumber/dependencies.d/pipewire b/img/app/etc/s6-rc/wireplumber/dependencies.d/pipewire
> new file mode 100644
> index 0000000..e69de29
> diff --git a/img/app/etc/s6-rc/wireplumber/dependencies.d/pipewire.license b/img/app/etc/s6-rc/wireplumber/dependencies.d/pipewire.license
> new file mode 100644
> index 0000000..c4a0586
> --- /dev/null
> +++ b/img/app/etc/s6-rc/wireplumber/dependencies.d/pipewire.license
> @@ -0,0 +1,2 @@
> +SPDX-License-Identifier: CC0-1.0
> +SPDX-FileCopyrightText: 2025 Demi Marie Obenour <demiobenour@gmail.com>
> diff --git a/img/app/etc/s6-rc/wireplumber/run b/img/app/etc/s6-rc/wireplumber/run
> new file mode 100644
> index 0000000..e721d8d
> --- /dev/null
> +++ b/img/app/etc/s6-rc/wireplumber/run
> @@ -0,0 +1,4 @@
> +#!/bin/execlineb -P
> +# SPDX-License-Identifier: EUPL-1.2+
> +# SPDX-FileCopyrightText: 2025 Demi Marie Obenour <demiobenour@gmail.com>
> +wireplumber
> diff --git a/img/app/etc/s6-rc/wireplumber/type b/img/app/etc/s6-rc/wireplumber/type
> new file mode 100644
> index 0000000..5883cff
> --- /dev/null
> +++ b/img/app/etc/s6-rc/wireplumber/type
> @@ -0,0 +1 @@
> +longrun
> diff --git a/img/app/etc/s6-rc/wireplumber/type.license b/img/app/etc/s6-rc/wireplumber/type.license
> new file mode 100644
> index 0000000..c4a0586
> --- /dev/null
> +++ b/img/app/etc/s6-rc/wireplumber/type.license
> @@ -0,0 +1,2 @@
> +SPDX-License-Identifier: CC0-1.0
> +SPDX-FileCopyrightText: 2025 Demi Marie Obenour <demiobenour@gmail.com>
>
> base-commit: 9090caebe25310caa80a13787ef58b1f81658a78
> --
> Sincerely,
> Demi Marie Obenour (she/her/hers)
[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 227 bytes --]
next prev parent reply other threads:[~2025-07-14 14:54 UTC|newest]
Thread overview: 81+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-07-11 2:44 [PATCH v3] Run PipeWire and WirePlumber in the VMs Demi Marie Obenour
2025-07-14 14:54 ` Alyssa Ross [this message]
2025-07-15 20:22 ` Demi Marie Obenour
2025-07-16 10:26 ` Alyssa Ross
2025-07-16 21:16 ` Demi Marie Obenour
2025-07-16 21:27 ` Demi Marie Obenour
2025-07-18 12:16 ` Alyssa Ross
2025-07-17 5:53 ` Demi Marie Obenour
2025-07-18 10:02 ` Alyssa Ross
2025-07-18 10:19 ` Alyssa Ross
2025-07-18 2:07 ` [PATCH v4 0/3] Sound support in Spectrum VMs Demi Marie Obenour
2025-07-18 2:13 ` [PATCH v4 1/3] Rebuild the root filesystem when the makefile changes Demi Marie Obenour
2025-07-18 11:14 ` Alyssa Ross
2025-07-18 2:13 ` [PATCH v4 2/3] Fix permissions on /tmp Demi Marie Obenour
2025-07-18 11:51 ` Alyssa Ross
2025-07-18 11:51 ` Alyssa Ross
2025-07-18 11:53 ` Alyssa Ross
2025-07-18 2:14 ` [PATCH v4 3/3] Run PipeWire and WirePlumber in the VMs Demi Marie Obenour
2025-07-18 11:27 ` Alyssa Ross
2025-07-18 17:59 ` Demi Marie Obenour
2025-07-19 9:22 ` Alyssa Ross
2025-07-19 20:05 ` Demi Marie Obenour
2025-07-19 8:06 ` Alyssa Ross
2025-07-19 20:03 ` Demi Marie Obenour
2025-07-19 20:07 ` Demi Marie Obenour
2025-07-20 7:50 ` Alyssa Ross
2025-07-20 17:58 ` [PATCH v5 0/8] Sound support in Spectrum VMs Demi Marie Obenour
2025-07-20 18:02 ` [PATCH v5 1/8] Revert "img/app: fix permissions on /tmp" Demi Marie Obenour
2025-07-21 9:34 ` Alyssa Ross
2025-07-20 18:03 ` [PATCH v5 2/8] img/app: Use separate service to create directories Demi Marie Obenour
2025-07-21 9:21 ` Alyssa Ross
2025-07-22 23:48 ` Demi Marie Obenour
2025-07-20 18:04 ` [PATCH v5 3/8] img/app: Fix permissions of /tmp/.X11-unix Demi Marie Obenour
2025-07-20 18:05 ` [PATCH v5 4/8] img/app: Create other X11 directories Demi Marie Obenour
2025-07-21 9:23 ` Alyssa Ross
2025-07-21 19:03 ` Demi Marie Obenour
2025-07-20 18:06 ` [PATCH v5 5/8] img/app: Be explicit about directory modes Demi Marie Obenour
2025-07-20 18:08 ` [PATCH v5 6/8] img/app: create /run/user and /run/wait very early in boot Demi Marie Obenour
2025-07-21 9:23 ` Alyssa Ross
2025-07-20 18:10 ` [PATCH v5 7/8] host/rootfs: " Demi Marie Obenour
2025-07-20 18:11 ` [PATCH v5 8/8] img/app: Run PipeWire and WirePlumber in the VMs Demi Marie Obenour
2025-07-21 9:42 ` Alyssa Ross
2025-07-21 19:09 ` Demi Marie Obenour
2025-07-26 10:11 ` Alyssa Ross
2025-07-21 19:10 ` Demi Marie Obenour
2025-07-24 22:15 ` [PATCH v6 0/5] Sound support in Spectrum VMs Demi Marie Obenour
2025-07-24 22:30 ` [PATCH v6 1/5] host/rootfs: Create /run/user and /run/wait via run-image Demi Marie Obenour
2025-07-26 10:46 ` Alyssa Ross
2025-07-24 22:32 ` [PATCH v6 2/5] img/app: " Demi Marie Obenour
2025-07-24 22:33 ` [PATCH v6 3/5] img/app: tell mount(8) to create directories Demi Marie Obenour
2025-07-26 11:20 ` Alyssa Ross
2025-07-26 11:26 ` Alyssa Ross
2025-07-24 22:35 ` [PATCH v6 4/5] img/app: Create needed directories in early boot Demi Marie Obenour
2025-07-26 10:24 ` Alyssa Ross
2025-07-27 20:13 ` Demi Marie Obenour
2025-07-24 22:36 ` [PATCH v6 5/5] img/app: Run PipeWire and WirePlumber in the VMs Demi Marie Obenour
2025-07-26 11:29 ` Alyssa Ross
2025-07-26 10:57 ` [PATCH v6 0/5] Sound support in Spectrum VMs Alyssa Ross
2025-07-28 5:57 ` [PATCH v7 0/2] " Demi Marie Obenour
2025-07-28 6:01 ` [PATCH v7 1/2] img/app: Create needed directories in early boot Demi Marie Obenour
2025-07-28 6:03 ` [PATCH v7 2/2] img/app: Run PipeWire and WirePlumber in the VMs Demi Marie Obenour
2025-07-28 6:18 ` Demi Marie Obenour
2025-07-28 23:13 ` [PATCH v8 0/2] Sound support in Spectrum VMs Demi Marie Obenour
2025-07-29 0:32 ` [PATCH v9 " Demi Marie Obenour
2025-07-29 0:33 ` [PATCH v9 1/2] img/app: Create needed directories in early boot Demi Marie Obenour
2025-07-29 12:44 ` Alyssa Ross
2025-07-29 0:33 ` [PATCH v9 2/2] img/app: Run PipeWire and WirePlumber in the VMs Demi Marie Obenour
2025-07-29 13:08 ` Alyssa Ross
2025-07-29 21:17 ` Demi Marie Obenour
2025-07-30 8:10 ` Alyssa Ross
2025-07-30 9:59 ` [PATCH v10] " Demi Marie Obenour
2025-07-31 9:12 ` Alyssa Ross
2025-07-31 9:40 ` Alyssa Ross
2025-07-31 17:06 ` [PATCH v11] " Demi Marie Obenour
2025-08-01 17:53 ` Alyssa Ross
2025-08-02 7:54 ` Alyssa Ross
2025-07-28 23:13 ` [PATCH v8 1/2] img/app: Create needed directories in early boot Demi Marie Obenour
2025-07-28 23:19 ` Demi Marie Obenour
2025-07-28 23:13 ` [PATCH v8 2/2] img/app: Run PipeWire and WirePlumber in the VMs Demi Marie Obenour
2025-07-29 12:41 ` [PATCH v7 0/2] Sound support in Spectrum VMs Alyssa Ross
2025-07-24 22:23 ` [PATCH v6 1/5] host/rootfs: Create /run/user and /run/wait via run-image Demi Marie Obenour
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=87seiyg6w2.fsf@alyssa.is \
--to=hi@alyssa.is \
--cc=demiobenour@gmail.com \
--cc=devel@spectrum-os.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
Code repositories for project(s) associated with this public inbox
https://spectrum-os.org/git/crosvm
https://spectrum-os.org/git/doc
https://spectrum-os.org/git/mktuntap
https://spectrum-os.org/git/nixpkgs
https://spectrum-os.org/git/spectrum
https://spectrum-os.org/git/ucspi-vsock
https://spectrum-os.org/git/www
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).