Pipewire: Difference between revisions

From miki
Jump to navigation Jump to search
Line 5: Line 5:
* [https://wiki.archlinux.org/title/PipeWire PipeWire - ArchLinux]
* [https://wiki.archlinux.org/title/PipeWire PipeWire - ArchLinux]
* [https://news.ycombinator.com/item?id=26327779 PipeWire on HackerNews]
* [https://news.ycombinator.com/item?id=26327779 PipeWire on HackerNews]
* [https://gitlab.freedesktop.org/pipewire/pipewire/-/wikis/Configuration?version_id=c672a24752b14fad8a33fece86f31fac55f581a7#using-pw-cli PipeWire (old) configuration docs]
* [https://gitlab.freedesktop.org/pipewire/pipewire PipeWire repo - GitLab]
:* [https://gitlab.freedesktop.org/pipewire PipeWire issue trackers]
:* [https://gitlab.freedesktop.org/pipewire/pipewire/-/wikis/Configuration?version_id=c672a24752b14fad8a33fece86f31fac55f581a7#using-pw-cli PipeWire (old) configuration docs]
:Speak about Pulse network transport:
:Speak about Pulse network transport:
# Setup server with
# Setup server with
Line 12: Line 14:
PULSE_SERVER=tcp:<ip>:4713 pactl info
PULSE_SERVER=tcp:<ip>:4713 pactl info
* [https://pipewire.pages.freedesktop.org/wireplumber/ WirePlumber - documentation]
* [https://pipewire.pages.freedesktop.org/wireplumber/ WirePlumber - documentation]

;Support
* [https://gitlab.freedesktop.org/pipewire PipeWire issue trackers]


== References ==
== References ==

Revision as of 12:29, 25 April 2022

Pipewire is the new sound system on Linux, meant to replace Pulseaudio.

Links

Speak about Pulse network transport:
# Setup server with
pipewire-pulse -a tcp:4713
# Connect to it with
PULSE_SERVER=tcp:<ip>:4713 pactl info

References

Configuration files:

  • /usr/share/pipewire
  • /usr/share/wireplumber

Commands

# View status
systemctl --user status pipewire

# Use PipeWire instead of JACK
pw-jack SOMEAPP

# PipeWire process viewer (quantum usage...)
pw-top

# Setup sinks, sources, audio devices
pw-link
qjackctl         # Graphical tool, leveraging on JACK
qpwgraph         # Alternative, pipewire native

# Get settings
pw-metadata -n settings

# Set settings
pw-metadata -n settings 0 clock.rate 48000
pw-metadata -n settings 0 clock.allowed-rates '[ 48000, 96000, 44100 ]'

# Command line
pw-cli
> info all

Troubleshooting

Setting and keeping bluetooth profile for headset

We want to use the profile sbc sbc_xq for our BT headset Sony WH-1000XM3.

Set the profile manually - profile should be persistent on reboot / reconnect.
  • In principe WirePlumber should remember the last selected profile.
  • See [1]
# See available profile and device id with 'pactl list'
pactl set-card-profile bluez_card.38_18_4C_4B_6A_3A a2dp-sink-sbc_xq
Configure profile
  • When using pipewire-media-session, the default profile could be selected in bluez-monitor.conf, but this file no longer exists with WirePlumber.
  • (UPDATE - Archlinux - Pipewire) Edit /etc/wireplumber/bluetooth.lua.d/51-bluez-config.lua (or ~/.config/wireplumber/bluetooth.lua.d/51-bluez-config.lua):
bluez_monitor.properties = {
  ["bluez5.enable-sbc-xq"] = true,
  ["bluez5.enable-msbc"] = true,
  ["bluez5.codecs"] = "[sbc sbc_xq]",
}

Crackling / Stuttering audio

This applies in a VM. Not sure these apply when PipeWire is run on the host.

Enable multi-user audio

References

Currently PipeWire support sharing through network using Pulse, but auth-anonymous is always turned on (auth-ip-acl not implemented).

context.modules = [
    # ...
    { name = libpipewire-module-protocol-pulse
        args = {
            # the addresses this server listens on
            server.address = [
                "unix:native"
                "tcp:4713"                          # IPv4 and IPv6 on all addresses
            ]
        }
    }
]
On the secondary user, export the following env variables:
export PULSE_SERVER=tcp:127.0.0.1:4713
Note: make sure the port is allowed in the firewall as well.
  • Another method it seems is to start the daemon manually [2]:
# On the server
pipewire-pulse -a tcp:4713
# On the client
PULSE_SERVER=tcp:SERVER_IP_ADDRESS:4713 pactl info