Created
March 11, 2023 12:02
-
-
Save bassmanitram/8e13230910b901a9be4bd979763be902 to your computer and use it in GitHub Desktop.
How to make PipeWire prevent an application from adjusting sound settings
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
-- | |
-- Prerequisites: you are using PipeWire, WirePlumber is your session manager, and you | |
-- are using a per-user configuration. These preconditions are fulfilled in Pop!OS 22_04. | |
-- | |
-- It does not matter what API the PipeWire client is using to interact with PipeWire - Pulse, | |
-- Jack, ALSA, Native - this works in all cases. | |
-- | |
-- Put this file in $HOME/.config/wireplumber/main.lua.d, then restart the services related | |
-- to PipeWire - "systemctl --user restart wireplumber pipewire pipewire-pulse" | |
-- | |
-- This specific example stops any Ferdium client from messing with sound settings - sink or source. | |
-- There are many other "matches" that you can use to target specific clients. For example, you COULD | |
-- target only microphone changes comming from Ferdium, by adding to the matches | |
-- | |
-- { "application.name", "=", "Chromium input" }, | |
-- | |
-- To find the IDs of clients attached to PipeWire via WirePlumber, use "wpctl status" | |
-- To list the properties of a client (that can be used in match constraints), use "wpctl inspect <client-id>" | |
-- | |
-- The WirePlumber feature that this file messes with is "access" - specifically the default_access table. | |
-- This is described here https://pipewire.pages.freedesktop.org/wireplumber/configuration/access.html which also | |
-- links to this document https://pipewire.pages.freedesktop.org/wireplumber/configuration/alsa.html | |
-- which describes the syntax of the "matches" block. | |
-- | |
-- Note that clients have a property named pipewire.access - this is NOT the permissions GRANTED, it is the | |
-- permissions that the client has requested. The code below will not change this string - but WILL restrict | |
-- the permissions of the client to being able to stream to/from, and read the status of, devices, but not to | |
-- change the properties of the device | |
-- | |
table.insert (default_access.rules, | |
{ | |
matches = { | |
{ | |
{ "application.process.binary", "=", "ferdium" }, | |
} | |
}, | |
default_permissions = "rx", | |
}) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment