patches and low-level development discussion
 help / color / mirror / code / Atom feed
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 --]

  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).