Extension to passthrough Pipewire audio to WebRTC Screenshare
Based on virtual-mic and Screenshare-with-audio-on-Discord-with-Linux
You can find us on Matrix
# 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 ]; })
# ...
];
}
- cargo
- pipewire
git clone https://github.com/IceDBorn/pipewire-screenaudio.git
cd pipewire-screenaudio
bash install.sh
-
- 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
-
- 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
- You can't stream firefox WebRTC calls at all while using
All Desktop Audio
, they are excluded by default
- 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
inabout:config
- This bug exclusively impacts Firefox versions predating 120
- Multiple nodes selection
- More customization options (node matching, watcher behavior etc.)
- Chromium support