We must assume that you possibly did this:
Review how to 'switch to pipewire'
sudo pacman -S manjaro-pipewire
But if you didn’t, that’s the way to do it…
You can just make sure pulseaudio is dealt with:
systemctl --user disable --now pulseaudio.service pulseaudio.socket
systemctl --user mask pulseaudio
systemctl --user enable --now pipewire pipewire-pulse wireplumber
and rebooting is the cleanest way to make sure it’s all fired up correctly, in the right order, with everything switched over.
systemctl --user status pipewire pipewire-pulse wireplumber
Checks out?
● pipewire.service - PipeWire Multimedia Service
Loaded: loaded (/usr/lib/systemd/user/pipewire.service; enabled; preset: enabled)
Active: active (running) since Mon 2026-03-02 14:11:32 +07; 5 days ago
Invocation: 464d6e7e75a04466afe868f2c7b527dc
TriggeredBy: ● pipewire.socket
Main PID: 2193 (pipewire)
Tasks: 3 (limit: 18349)
Memory: 4.8M (peak: 21.8M, swap: 8M, swap peak: 15M, zswap: 129.1K)
CPU: 9min 13.649s
CGroup: /user.slice/user-1000.slice/user@1000.service/session.slice/pipewire.service
└─2193 /usr/bin/pipewire
Notice: journal has been rotated since unit was started, output may be incomplete.
● pipewire-pulse.service - PipeWire PulseAudio
Loaded: loaded (/usr/lib/systemd/user/pipewire-pulse.service; enabled; preset: enabled)
Active: active (running) since Mon 2026-03-02 14:11:32 +07; 5 days ago
Invocation: 46aa898c3ff5492ebeb84b8b6379095e
TriggeredBy: ● pipewire-pulse.socket
Main PID: 2195 (pipewire-pulse)
Tasks: 3 (limit: 18349)
Memory: 26.3M (peak: 45.3M, swap: 16.5M, swap peak: 39.6M, zswap: 2.1M)
CPU: 10min 47.344s
CGroup: /user.slice/user-1000.slice/user@1000.service/session.slice/pipewire-pulse.service
└─2195 /usr/bin/pipewire-pulse
Notice: journal has been rotated since unit was started, output may be incomplete.
● wireplumber.service - Multimedia Service Session Manager
Loaded: loaded (/usr/lib/systemd/user/wireplumber.service; enabled; preset: enabled)
Active: active (running) since Mon 2026-03-02 14:11:32 +07; 5 days ago
Invocation: 82150cc679184321b1921f31464e9ca3
Main PID: 2194 (wireplumber)
Tasks: 7 (limit: 18349)
Memory: 8M (peak: 45M, swap: 13.7M, swap peak: 17.9M, zswap: 883.1K)
CPU: 9min 11.377s
CGroup: /user.slice/user-1000.slice/user@1000.service/session.slice/wireplumber.service
└─2194 /usr/bin/wireplumber
So the issue is likely ‘buffer underruns’ because Chromium’s audio renderer starts with a small buffer (as you hinted already) so you could go with the buffer of 2048
Option 1: Systemwide fix.
mkdir -p ~/.config/pipewire/pipewire.conf.d
touch 99-quantum.conf
Contents:
context.properties = {
default.clock.quantum = 2048 # default buffer size in samples
default.clock.min-quantum = 1024 # minimum allowed (can go lower if needed)
default.clock.max-quantum = 4096 # maximum allowed
default.clock.rate = 48000 # force a consistent sample rate
}
Then restart pipewire (or reboot):
systemctl --user restart pipewire pipewire-pulse wireplumber
So have a go with that, but a 2048 buffer will introduce a small delay (about 42mS). If that’s an issue, you can delete the file.
Option 2. Surgical fix - apply the setting ONLY to Chromium:
systemctl --user restart pipewire pipewire-pulse wireplumber
Now the file:
99-chromium.conf
pulse.rules = [
{
matches = [
{ application.process.binary = "chrome" }
{ application.process.binary = "chromium" }
]
actions = {
update-props = {
# Request a minimum required latency of 512 samples
pulse.min.req = "512/48000"
# Default request size: 1024 samples
pulse.default.req = "1024/48000"
# Minimum quantum (buffer) size: 1024 samples
pulse.min.quantum = "1024/48000"
# Default quantum size: 2048 samples
pulse.default.quantum = "2048/48000"
}
}
}
]
Then the restart systemctl --user restart pipewire-pulse wireplumber.
Keep a record, I am not offering a Money Back Guarantee with my janky fix, hope it’s good 