PipeWire

General Commands

  • Check running PulseAudio process:

    $ ps axf | grep pulseaudio
    
  • Check running PipeWire process:

    $ ps axf | grep pipewire
    
  • PulseAudio information:

    $ pactl info
    
  • Check dependencies of pavucontrol-qt for PulseAudio:

    $ ldd /usr/bin/pavucontrol-qt | grep pulse
    

Key Concepts

  • SPA: Simple Plugin API
  • ALSA: Advanced Linux Sound Architecture

Working with PipeWire

  1. Navigate to the PipeWire directory:
# Navigate to the project path
$ cd /path/to/pipewire
  1. Start a shell for testing or debugging:
$ make shell
  1. Useful tools:
  • PipeWire CLI:

    $ pw-cli
    $ list-objects
    
  • PipeWire Monitor:

    $ pipewire-monitor
    
  • Debugging PipeWire:

    $ DEBUG_PIPEWIRE=4 pipewire
    

Installed Tools

  • Carla: A modular audio plugin host.
  • Pavucontrol: PulseAudio Volume Control.

Visualization

Generate and view a graphical representation of PipeWire's graph:

$ pw-dot pw.dot && xdot pw.dot
$ pw-dot --detail pw.dot && xdot pw.dot

Starting the Camera

  • Use gst-launch to stream video:

    $ gst-launch-1.0 pipewiresrc ! videoconvert ! xvimagesink
    
  • Commands to run:

    • PipeWire:

      $ make run
      
    • WirePlumber:

      $ make run
      

Using VLC

  • Open audio files with VLC:

    $ vlc /home/ugur/Downloads/EverybodyKnows.wav
    
  • Open audio files in CLI mode with VLC:

    $ cvlc /home/ugur/Downloads/EverybodyKnows.wav
    

PipeWire Configuration Path

  • Daemon Configuration Path:
    /home/ugur/Desktop/Codes/pipewire/pipewire/src/daemon
  • Global Configuration Path:
    /etc/pipewire

Note:

  • To ensure WirePlumber works, comment out the following line in pipewire.conf.in:

    exec @media_session_path@
    

    This is because WirePlumber is an external media session manager and conflicts with the built-in session.

  • Uncomment the required libpipewire modules in pipewire.conf using a text editor:

    $ nano /etc/pipewire/pipewire.conf
    

System Management

  • Start PipeWire services:

    $ systemctl --user start pipewire-pulse.service pipewire-pulse.socket
    
  • Stop PipeWire services:

    $ systemctl --user stop pipewire-pulse.service pipewire-pulse.socket
    
  • Start PulseAudio services:

    $ systemctl --user start pulseaudio.service pulseaudio.socket
    
  • Stop PulseAudio services:

    $ systemctl --user stop pulseaudio.service pulseaudio.socket
    

Non-Functional Features

  • Not Working:

    • pipewire-gstreamer

    • pipewire-monitor

    • python3 xdp-screen-cast.py

    • Playing audio files via VLC:

      $ vlc /home/ugur/Downloads/EverybodyKnows.wav  # Opens VLC, no sound
      $ cvlc /home/ugur/Downloads/EverybodyKnows.wav  # CLI VLC, no sound
      

Environment Variables

Set the library path for PipeWire:

$ export LD_LIBRARY_PATH=/home/ugur/Desktop/Codes/pipewire/pipewire/build/src/pipewire:/home/ugur/Desktop/Codes/pipewire/pipewire/pipewire-jack:/home/ugur/Desktop/Codes/pipewire/pipewire/pipewire-pulseaudio

Miscellaneous

  • Run the following to debug or verify PipeWire and PulseAudio processes:

    $ ps ax | grep -e pipe -e pulse