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
- npx
- pipewire
- yarn
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 '{ "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
- 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.exemptedDomainsinabout:config