Skip to content

IceDBorn/pipewire-screenaudio

Repository files navigation

Logo Pipewire Screenaudio

Extension to passthrough Pipewire audio to WebRTC Screenshare

Based on virtual-mic and Screenshare-with-audio-on-Discord-with-Linux

Communication

You can find us on Matrix

Installation

Packages

AUR AUR

NixOS Flakes

# flake.nix

{
  inputs.pipewire-screenaudio.url = "github:IceDBorn/pipewire-screenaudio";
  # ...

  outputs = {nixpkgs, pipewire-screenaudio, ...} @ inputs: {
    nixosConfigurations.HOSTNAME = nixpkgs.lib.nixosSystem {
      specialArgs = { inherit inputs; }; # this is the important part
      modules = [
        ./configuration.nix
      ];
    };
  }
}

# configuration.nix

{inputs, pkgs, ...}: {
  environment.systemPackages = with pkgs; [
    (firefox.override { nativeMessagingHosts = [ inputs.pipewire-screenaudio.packages.${pkgs.system}.default ]; })
    # ...
  ];
}

Installing from Source

Requirements

  • cargo
  • pipewire
git clone https://github.com/IceDBorn/pipewire-screenaudio.git
cd pipewire-screenaudio
bash install.sh

Usage

  • Via the extension

    • Install the extension
    • Optional: Grant extension with access permissions to all sites
    • Join a WebRTC call, click the extension icon, select an audio node and share
    • Stream, your transmission should contain both audio and video
  • Via the CLI

    • Description: It's used to manually call the commands that are normally called by the extension. It is meant for troubleshooting, but it could be used for integrating the connector with other apps.
    • Usage:
      bash native/connector/cli.sh COMMAND ARGUMENTS
    • Example:
      bash native/connector/cli.sh GetNodes
      bash native/connector/cli.sh SetSharingNode '{ "micId": 100, "node": 200 }'
    • Environment:
      DEBUG=1 # Set to enable verbose logging

Known Problems

  • You can't stream firefox WebRTC calls at all while using All Desktop Audio, they are excluded by default

resistFingerprinting

  • privacy.resistFingerprinting (enabled by default in LibreWolf, arkenfox user.js, etc.) breaks the extension. Either disable the preference or add any domains you wish to use Pipewire Screenaudio with to privacy.resistFingerprinting.exemptedDomains in about:config

Audio pitching

  • This bug exclusively impacts Firefox versions predating 120

Planned Features

  • Multiple nodes selection
  • More customization options (node matching, watcher behavior etc.)
  • Chromium support