From 87781c765844409226804157546753b84ef3c6b4 Mon Sep 17 00:00:00 2001 From: Ophestra Date: Mon, 8 Dec 2025 08:03:50 +0900 Subject: treewide: include PipeWire op and enforce PulseAudio check This fully replaces PulseAudio with PipeWire and enforces the PulseAudio check and error message. The pipewire-pulse daemon is handled in the NixOS module. Closes #26. Signed-off-by: Ophestra --- test/configuration.nix | 6 ------ test/interactive/hakurei.nix | 2 +- test/sandbox/case/device.nix | 12 ++++++++---- test/sandbox/case/mapuid.nix | 12 ++++++++---- test/sandbox/case/pd.nix | 2 +- test/sandbox/case/pdlike.nix | 12 ++++++++---- test/sandbox/case/preset.nix | 12 ++++++++---- test/sandbox/case/tty.nix | 12 ++++++++---- test/sandbox/test.py | 2 +- test/test.py | 18 ++++++++++++------ 10 files changed, 55 insertions(+), 35 deletions(-) (limited to 'test') diff --git a/test/configuration.nix b/test/configuration.nix index 5bc50e7c..58fdf5ad 100644 --- a/test/configuration.nix +++ b/test/configuration.nix @@ -134,7 +134,6 @@ enablements = { wayland = false; pipewire = false; - pulse = false; }; }; @@ -154,7 +153,6 @@ enablements = { dbus = false; pipewire = false; - pulse = false; }; }; @@ -170,7 +168,6 @@ enablements = { dbus = false; pipewire = false; - pulse = false; }; }; @@ -203,7 +200,6 @@ x11 = true; dbus = false; pipewire = false; - pulse = false; }; }; @@ -223,7 +219,6 @@ enablements = { dbus = false; pipewire = false; - pulse = false; }; }; @@ -238,7 +233,6 @@ x11 = false; dbus = false; pipewire = false; - pulse = false; }; }; }; diff --git a/test/interactive/hakurei.nix b/test/interactive/hakurei.nix index 887ed3e2..9b37bc73 100644 --- a/test/interactive/hakurei.nix +++ b/test/interactive/hakurei.nix @@ -15,7 +15,7 @@ command = "foot"; enablements = { dbus = false; - pulse = false; + pipewire = false; }; }; }; diff --git a/test/sandbox/case/device.nix b/test/sandbox/case/device.nix index b5678349..da5c6fdb 100644 --- a/test/sandbox/case/device.nix +++ b/test/sandbox/case/device.nix @@ -41,7 +41,7 @@ in "DBUS_SESSION_BUS_ADDRESS=unix:path=/run/user/65534/bus" "DISPLAY=unix:/tmp/.X11-unix/X0" "HOME=/var/lib/hakurei/u0/a4" - "PULSE_SERVER=unix:/run/user/65534/pulse/native" + "PIPEWIRE_REMOTE=/run/user/65534/pipewire-0" "SHELL=/run/current-system/sw/bin/bash" "TERM=linux" "USER=u0_a4" @@ -137,8 +137,12 @@ in user = fs "800001ed" { "65534" = fs "800001c0" { bus = fs "10001fd" null null; - pulse = fs "800001c0" { native = fs "10001b6" null null; } null; + pulse = fs "800001c0" { + native = fs "10001ff" null null; + pid = fs "1a4" null null; + } null; wayland-0 = fs "1000038" null null; + pipewire-0 = fs "1000038" null null; } null; } null; } null; @@ -220,13 +224,13 @@ in (ent "/" ignore ignore ignore ignore ignore) (ent "/" ignore ignore ignore ignore ignore) (ent "/" "/dev/shm" "rw,nosuid,nodev,relatime" "tmpfs" "ephemeral" "rw,uid=10004,gid=10004") - (ent "/" "/run/user" "rw,nosuid,nodev,relatime" "tmpfs" "ephemeral" "rw,size=4k,mode=755,uid=10004,gid=10004") + (ent "/" "/run/user" "rw,nosuid,nodev,relatime" "tmpfs" "ephemeral" "rw,size=16384k,mode=755,uid=10004,gid=10004") (ent "/tmp/hakurei.0/tmpdir/4" "/tmp" "rw,nosuid,nodev,relatime" "ext4" "/dev/disk/by-label/nixos" "rw") (ent ignore "/etc/passwd" "ro,nosuid,nodev,relatime" "tmpfs" "rootfs" "rw,uid=10004,gid=10004") (ent ignore "/etc/group" "ro,nosuid,nodev,relatime" "tmpfs" "rootfs" "rw,uid=10004,gid=10004") (ent ignore "/run/user/65534/wayland-0" "ro,nosuid,nodev,relatime" "ext4" "/dev/disk/by-label/nixos" "rw") (ent "/tmp/.X11-unix" "/tmp/.X11-unix" "ro,nosuid,nodev,relatime" "ext4" "/dev/disk/by-label/nixos" "rw") - (ent ignore "/run/user/65534/pulse/native" "ro,nosuid,nodev,relatime" "tmpfs" "tmpfs" ignore) + (ent ignore "/run/user/65534/pipewire-0" "ro,nosuid,nodev,relatime" "ext4" "/dev/disk/by-label/nixos" "rw") (ent ignore "/run/user/65534/bus" "ro,nosuid,nodev,relatime" "ext4" "/dev/disk/by-label/nixos" "rw") (ent "/bin" "/bin" "ro,nosuid,nodev,relatime" "ext4" "/dev/disk/by-label/nixos" "rw") (ent "/usr/bin" "/usr/bin" "ro,nosuid,nodev,relatime" "ext4" "/dev/disk/by-label/nixos" "rw") diff --git a/test/sandbox/case/mapuid.nix b/test/sandbox/case/mapuid.nix index f5e33a5c..4201aacd 100644 --- a/test/sandbox/case/mapuid.nix +++ b/test/sandbox/case/mapuid.nix @@ -49,7 +49,7 @@ in env = [ "DBUS_SESSION_BUS_ADDRESS=unix:path=/run/user/1000/bus" "HOME=/var/lib/hakurei/u0/a3" - "PULSE_SERVER=unix:/run/user/1000/pulse/native" + "PIPEWIRE_REMOTE=/run/user/1000/pipewire-0" "SHELL=/run/current-system/sw/bin/bash" "TERM=linux" "USER=u0_a3" @@ -162,8 +162,12 @@ in user = fs "800001ed" { "1000" = fs "800001f8" { bus = fs "10001fd" null null; - pulse = fs "800001c0" { native = fs "10001b6" null null; } null; + pulse = fs "800001c0" { + native = fs "10001ff" null null; + pid = fs "1a4" null null; + } null; wayland-0 = fs "1000038" null null; + pipewire-0 = fs "1000038" null null; } null; } null; } null; @@ -247,13 +251,13 @@ in (ent "/" "/dev/pts" "rw,nosuid,noexec,relatime" "devpts" "devpts" "rw,mode=620,ptmxmode=666") (ent "/" "/dev/mqueue" "rw,nosuid,nodev,noexec,relatime" "mqueue" "mqueue" "rw") (ent "/" "/dev/shm" "rw,nosuid,nodev,relatime" "tmpfs" "ephemeral" "rw,uid=10003,gid=10003") - (ent "/" "/run/user" "rw,nosuid,nodev,relatime" "tmpfs" "ephemeral" "rw,size=4k,mode=755,uid=10003,gid=10003") + (ent "/" "/run/user" "rw,nosuid,nodev,relatime" "tmpfs" "ephemeral" "rw,size=16384k,mode=755,uid=10003,gid=10003") (ent "/tmp/hakurei.0/runtime/3" "/run/user/1000" "rw,nosuid,nodev,relatime" "ext4" "/dev/disk/by-label/nixos" "rw") (ent "/tmp/hakurei.0/tmpdir/3" "/tmp" "rw,nosuid,nodev,relatime" "ext4" "/dev/disk/by-label/nixos" "rw") (ent ignore "/etc/passwd" "ro,nosuid,nodev,relatime" "tmpfs" "rootfs" "rw,uid=10003,gid=10003") (ent ignore "/etc/group" "ro,nosuid,nodev,relatime" "tmpfs" "rootfs" "rw,uid=10003,gid=10003") (ent ignore "/run/user/1000/wayland-0" "ro,nosuid,nodev,relatime" "ext4" "/dev/disk/by-label/nixos" "rw") - (ent ignore "/run/user/1000/pulse/native" "ro,nosuid,nodev,relatime" "tmpfs" "tmpfs" ignore) + (ent ignore "/run/user/1000/pipewire-0" "ro,nosuid,nodev,relatime" "ext4" "/dev/disk/by-label/nixos" "rw") (ent ignore "/run/user/1000/bus" "ro,nosuid,nodev,relatime" "ext4" "/dev/disk/by-label/nixos" "rw") (ent "/bin" "/bin" "ro,nosuid,nodev,relatime" "ext4" "/dev/disk/by-label/nixos" "rw") (ent "/usr/bin" "/usr/bin" "ro,nosuid,nodev,relatime" "ext4" "/dev/disk/by-label/nixos" "rw") diff --git a/test/sandbox/case/pd.nix b/test/sandbox/case/pd.nix index 98627fe1..4d7d082a 100644 --- a/test/sandbox/case/pd.nix +++ b/test/sandbox/case/pd.nix @@ -181,7 +181,7 @@ (ent ignore "/dev/console" "rw,nosuid,noexec,relatime" "devpts" "devpts" "rw,gid=3,mode=620,ptmxmode=666") (ent "/" "/dev/mqueue" "rw,nosuid,nodev,noexec,relatime" "mqueue" "mqueue" "rw") (ent "/" "/dev/shm" "rw,nosuid,nodev,relatime" "tmpfs" "ephemeral" "rw,uid=10000,gid=10000") - (ent "/" "/run/user" "rw,nosuid,nodev,relatime" "tmpfs" "ephemeral" "rw,size=4k,mode=755,uid=10000,gid=10000") + (ent "/" "/run/user" "rw,nosuid,nodev,relatime" "tmpfs" "ephemeral" "rw,size=16384k,mode=755,uid=10000,gid=10000") (ent "/tmp/hakurei.0/runtime/0" "/run/user/65534" "rw,nosuid,nodev,relatime" "ext4" "/dev/disk/by-label/nixos" "rw") (ent "/tmp/hakurei.0/tmpdir/0" "/tmp" "rw,nosuid,nodev,relatime" "ext4" "/dev/disk/by-label/nixos" "rw") (ent ignore "/etc/passwd" "ro,nosuid,nodev,relatime" "tmpfs" "rootfs" "rw,uid=10000,gid=10000") diff --git a/test/sandbox/case/pdlike.nix b/test/sandbox/case/pdlike.nix index d8de1abe..d76c0cc5 100644 --- a/test/sandbox/case/pdlike.nix +++ b/test/sandbox/case/pdlike.nix @@ -49,7 +49,7 @@ in env = [ "DBUS_SESSION_BUS_ADDRESS=unix:path=/run/user/65534/bus" "HOME=/var/lib/hakurei/u0/a5" - "PULSE_SERVER=unix:/run/user/65534/pulse/native" + "PIPEWIRE_REMOTE=/run/user/65534/pipewire-0" "SHELL=/run/current-system/sw/bin/bash" "TERM=linux" "USER=u0_a5" @@ -160,8 +160,12 @@ in user = fs "800001ed" { "65534" = fs "800001f8" { bus = fs "10001fd" null null; - pulse = fs "800001c0" { native = fs "10001b6" null null; } null; + pulse = fs "800001c0" { + native = fs "10001ff" null null; + pid = fs "1a4" null null; + } null; wayland-0 = fs "1000038" null null; + pipewire-0 = fs "1000038" null null; } null; } null; } null; @@ -245,13 +249,13 @@ in (ent ignore "/dev/console" "rw,nosuid,noexec,relatime" "devpts" "devpts" "rw,gid=3,mode=620,ptmxmode=666") (ent "/" "/dev/mqueue" "rw,nosuid,nodev,noexec,relatime" "mqueue" "mqueue" "rw") (ent "/" "/dev/shm" "rw,nosuid,nodev,relatime" "tmpfs" "ephemeral" "rw,uid=10005,gid=10005") - (ent "/" "/run/user" "rw,nosuid,nodev,relatime" "tmpfs" "ephemeral" "rw,size=4k,mode=755,uid=10005,gid=10005") + (ent "/" "/run/user" "rw,nosuid,nodev,relatime" "tmpfs" "ephemeral" "rw,size=16384k,mode=755,uid=10005,gid=10005") (ent "/tmp/hakurei.0/runtime/5" "/run/user/65534" "rw,nosuid,nodev,relatime" "ext4" "/dev/disk/by-label/nixos" "rw") (ent "/tmp/hakurei.0/tmpdir/5" "/tmp" "rw,nosuid,nodev,relatime" "ext4" "/dev/disk/by-label/nixos" "rw") (ent ignore "/etc/passwd" "ro,nosuid,nodev,relatime" "tmpfs" "rootfs" "rw,uid=10005,gid=10005") (ent ignore "/etc/group" "ro,nosuid,nodev,relatime" "tmpfs" "rootfs" "rw,uid=10005,gid=10005") (ent ignore "/run/user/65534/wayland-0" "ro,nosuid,nodev,relatime" "ext4" "/dev/disk/by-label/nixos" "rw") - (ent ignore "/run/user/65534/pulse/native" "ro,nosuid,nodev,relatime" "tmpfs" "tmpfs" ignore) + (ent ignore "/run/user/65534/pipewire-0" "ro,nosuid,nodev,relatime" "ext4" "/dev/disk/by-label/nixos" "rw") (ent ignore "/run/user/65534/bus" "ro,nosuid,nodev,relatime" "ext4" "/dev/disk/by-label/nixos" "rw") (ent "/bin" "/bin" "ro,nosuid,nodev,relatime" "ext4" "/dev/disk/by-label/nixos" "rw") (ent "/usr/bin" "/usr/bin" "ro,nosuid,nodev,relatime" "ext4" "/dev/disk/by-label/nixos" "rw") diff --git a/test/sandbox/case/preset.nix b/test/sandbox/case/preset.nix index aabe2b06..070446b2 100644 --- a/test/sandbox/case/preset.nix +++ b/test/sandbox/case/preset.nix @@ -49,7 +49,7 @@ in env = [ "DBUS_SESSION_BUS_ADDRESS=unix:path=/run/user/65534/bus" "HOME=/var/lib/hakurei/u0/a1" - "PULSE_SERVER=unix:/run/user/65534/pulse/native" + "PIPEWIRE_REMOTE=/run/user/65534/pipewire-0" "SHELL=/run/current-system/sw/bin/bash" "TERM=linux" "USER=u0_a1" @@ -159,8 +159,12 @@ in user = fs "800001ed" { "65534" = fs "800001c0" { bus = fs "10001fd" null null; - pulse = fs "800001c0" { native = fs "10001b6" null null; } null; + pulse = fs "800001c0" { + native = fs "10001ff" null null; + pid = fs "1a4" null null; + } null; wayland-0 = fs "1000038" null null; + pipewire-0 = fs "1000038" null null; } null; } null; } null; @@ -243,12 +247,12 @@ in (ent "/" "/dev/pts" "rw,nosuid,noexec,relatime" "devpts" "devpts" "rw,mode=620,ptmxmode=666") (ent "/" "/dev/mqueue" "rw,nosuid,nodev,noexec,relatime" "mqueue" "mqueue" "rw") (ent "/" "/dev/shm" "rw,nosuid,nodev,relatime" "tmpfs" "ephemeral" "rw,uid=10001,gid=10001") - (ent "/" "/run/user" "rw,nosuid,nodev,relatime" "tmpfs" "ephemeral" "rw,size=4k,mode=755,uid=10001,gid=10001") + (ent "/" "/run/user" "rw,nosuid,nodev,relatime" "tmpfs" "ephemeral" "rw,size=16384k,mode=755,uid=10001,gid=10001") (ent "/" "/tmp" "rw,nosuid,nodev,relatime" "tmpfs" "ephemeral" "rw,uid=10001,gid=10001") (ent ignore "/etc/passwd" "ro,nosuid,nodev,relatime" "tmpfs" "rootfs" "rw,uid=10001,gid=10001") (ent ignore "/etc/group" "ro,nosuid,nodev,relatime" "tmpfs" "rootfs" "rw,uid=10001,gid=10001") (ent ignore "/run/user/65534/wayland-0" "ro,nosuid,nodev,relatime" "ext4" "/dev/disk/by-label/nixos" "rw") - (ent ignore "/run/user/65534/pulse/native" "ro,nosuid,nodev,relatime" "tmpfs" "tmpfs" ignore) + (ent ignore "/run/user/65534/pipewire-0" "ro,nosuid,nodev,relatime" "ext4" "/dev/disk/by-label/nixos" "rw") (ent ignore "/run/user/65534/bus" "ro,nosuid,nodev,relatime" "ext4" "/dev/disk/by-label/nixos" "rw") (ent "/bin" "/bin" "ro,nosuid,nodev,relatime" "ext4" "/dev/disk/by-label/nixos" "rw") (ent "/usr/bin" "/usr/bin" "ro,nosuid,nodev,relatime" "ext4" "/dev/disk/by-label/nixos" "rw") diff --git a/test/sandbox/case/tty.nix b/test/sandbox/case/tty.nix index 8dbff164..0058332e 100644 --- a/test/sandbox/case/tty.nix +++ b/test/sandbox/case/tty.nix @@ -50,7 +50,7 @@ in "DBUS_SESSION_BUS_ADDRESS=unix:path=/run/user/65534/bus" "DISPLAY=:0" "HOME=/var/lib/hakurei/u0/a2" - "PULSE_SERVER=unix:/run/user/65534/pulse/native" + "PIPEWIRE_REMOTE=/run/user/65534/pipewire-0" "SHELL=/run/current-system/sw/bin/bash" "TERM=linux" "USER=u0_a2" @@ -164,8 +164,12 @@ in user = fs "800001ed" { "65534" = fs "800001f8" { bus = fs "10001fd" null null; - pulse = fs "800001c0" { native = fs "10001b6" null null; } null; + pulse = fs "800001c0" { + native = fs "10001ff" null null; + pid = fs "1a4" null null; + } null; wayland-0 = fs "1000038" null null; + pipewire-0 = fs "1000038" null null; } null; } null; } null; @@ -252,14 +256,14 @@ in (ent ignore "/dev/console" "rw,nosuid,noexec,relatime" "devpts" "devpts" "rw,gid=3,mode=620,ptmxmode=666") (ent "/" "/dev/mqueue" "rw,nosuid,nodev,noexec,relatime" "mqueue" "mqueue" "rw") (ent "/" "/dev/shm" "rw,nosuid,nodev,relatime" "tmpfs" "ephemeral" "rw,uid=10002,gid=10002") - (ent "/" "/run/user" "rw,nosuid,nodev,relatime" "tmpfs" "ephemeral" "rw,size=4k,mode=755,uid=10002,gid=10002") + (ent "/" "/run/user" "rw,nosuid,nodev,relatime" "tmpfs" "ephemeral" "rw,size=16384k,mode=755,uid=10002,gid=10002") (ent "/tmp/hakurei.0/runtime/2" "/run/user/65534" "rw,nosuid,nodev,relatime" "ext4" "/dev/disk/by-label/nixos" "rw") (ent "/" "/tmp" "rw,nosuid,nodev,relatime" "tmpfs" "ephemeral" "rw,uid=10002,gid=10002") (ent ignore "/etc/passwd" "ro,nosuid,nodev,relatime" "tmpfs" "rootfs" "rw,uid=10002,gid=10002") (ent ignore "/etc/group" "ro,nosuid,nodev,relatime" "tmpfs" "rootfs" "rw,uid=10002,gid=10002") (ent ignore "/run/user/65534/wayland-0" "ro,nosuid,nodev,relatime" "ext4" "/dev/disk/by-label/nixos" "rw") (ent "/tmp/.X11-unix" "/tmp/.X11-unix" "ro,nosuid,nodev,relatime" "ext4" "/dev/disk/by-label/nixos" "rw") - (ent ignore "/run/user/65534/pulse/native" "ro,nosuid,nodev,relatime" "tmpfs" "tmpfs" ignore) + (ent ignore "/run/user/65534/pipewire-0" "ro,nosuid,nodev,relatime" "ext4" "/dev/disk/by-label/nixos" "rw") (ent ignore "/run/user/65534/bus" "ro,nosuid,nodev,relatime" "ext4" "/dev/disk/by-label/nixos" "rw") (ent "/bin" "/bin" "ro,nosuid,nodev,relatime" "ext4" "/dev/disk/by-label/nixos" "rw") (ent "/usr/bin" "/usr/bin" "ro,nosuid,nodev,relatime" "ext4" "/dev/disk/by-label/nixos" "rw") diff --git a/test/sandbox/test.py b/test/sandbox/test.py index ad38e73c..62311342 100644 --- a/test/sandbox/test.py +++ b/test/sandbox/test.py @@ -83,4 +83,4 @@ swaymsg("exit", succeed=False) machine.wait_for_file("/tmp/sway-exit-ok") # Print hakurei runDir contents: -print(machine.succeed("find /run/user/1000/hakurei")) +print(machine.fail("ls /run/user/1000/hakurei")) diff --git a/test/test.py b/test/test.py index 305614fa..d1edca4c 100644 --- a/test/test.py +++ b/test/test.py @@ -160,17 +160,17 @@ machine.succeed("pkill -9 mako") # Check revert type selection: hakurei("-v run --wayland -X --dbus --pulse -u p0 foot && touch /tmp/p0-exit-ok") wait_for_window("p0@machine") -print(machine.succeed("getfacl --absolute-names --omit-header --numeric /run/user/1000 | grep 10000")) +print(machine.succeed("getfacl --absolute-names --omit-header --numeric /tmp/hakurei.0/runtime | grep 10000")) hakurei("-v run --wayland -X --dbus --pulse -u p1 foot && touch /tmp/p1-exit-ok") wait_for_window("p1@machine") -print(machine.succeed("getfacl --absolute-names --omit-header --numeric /run/user/1000 | grep 10000")) +print(machine.succeed("getfacl --absolute-names --omit-header --numeric /tmp/hakurei.0/runtime | grep 10000")) machine.send_chars("exit\n") machine.wait_for_file("/tmp/p1-exit-ok", timeout=15) # Verify acl is kept alive: -print(machine.succeed("getfacl --absolute-names --omit-header --numeric /run/user/1000 | grep 10000")) +print(machine.succeed("getfacl --absolute-names --omit-header --numeric /tmp/hakurei.0/runtime | grep 10000")) machine.send_chars("exit\n") machine.wait_for_file("/tmp/p0-exit-ok", timeout=15) -machine.fail("getfacl --absolute-names --omit-header --numeric /run/user/1000 | grep 10000") +machine.fail("getfacl --absolute-names --omit-header --numeric /tmp/hakurei.0/runtime | grep 10000") # Check invalid identifier fd behaviour: machine.fail('echo \'{"container":{"shell":"/proc/nonexistent","home":"/proc/nonexistent","path":"/proc/nonexistent"}}\' | sudo -u alice -i hakurei -v app --identifier-fd 32767 - 2>&1 | tee > /tmp/invalid-identifier-fd') @@ -219,15 +219,21 @@ machine.send_chars("exit\n") machine.wait_until_fails("pgrep foot", timeout=5) machine.fail(f"getfacl --absolute-names --omit-header --numeric /run/user/1000 | grep {hakurei_identity(0) + 10000}", timeout=5) -# Test PulseAudio (hakurei does not support PipeWire yet): +# Test pipewire-pulse: swaymsg("exec pa-foot") wait_for_window(f"u0_a{hakurei_identity(1)}@machine") machine.send_chars("clear; pactl info && touch /var/tmp/pulse-ok\n") machine.wait_for_file("/var/tmp/pulse-ok", timeout=15) collect_state_ui("pulse_wayland") -check_state("pa-foot", {"wayland": True, "pipewire": True, "pulse": True}) +check_state("pa-foot", {"wayland": True, "pipewire": True}) +# Test PipeWire: +machine.send_chars("clear; pw-cli i 0 && touch /var/tmp/pw-ok\n") +machine.wait_for_file("/var/tmp/pw-ok", timeout=15) +collect_state_ui("pipewire_wayland") machine.send_chars("exit\n") machine.wait_until_fails("pgrep foot", timeout=5) +# Test PipeWire SecurityContext: +machine.fail("sudo -u alice -i XDG_RUNTIME_DIR=/run/user/1000 hakurei -v run --pulse pactl set-sink-mute @DEFAULT_SINK@ toggle") # Test XWayland (foot does not support X): swaymsg("exec x11-alacritty") -- cgit v1.3.1