Skip to content

Latest commit

 

History

History
98 lines (76 loc) · 2.98 KB

File metadata and controls

98 lines (76 loc) · 2.98 KB

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
  • npx
  • pipewire
  • yarn
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 '{ "nodes": [ 10840 ] }'
      # All desktop audio
      bash native/connector/cli.sh SetSharingNode '{ "nodes": [ -1 ] }'
      # Multiple nodes
      bash native/connector/cli.sh SetSharingNode '{ "nodes": [ 10840, 10841 ] }'
    • Environment:
      DEBUG=1 # Set to enable verbose logging

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