pipewire.conf (9143B)
1 # Daemon config file for PipeWire version "0.3.40" # 2 # 3 # Copy and edit this file in /etc/pipewire for system-wide changes 4 # or in ~/.config/pipewire for local changes. 5 6 context.properties = { 7 ## Configure properties in the system. 8 #library.name.system = support/libspa-support 9 #context.data-loop.library.name.system = support/libspa-support 10 #support.dbus = true 11 #link.max-buffers = 64 12 link.max-buffers = 16 # version < 3 clients can't handle more 13 #mem.warn-mlock = false 14 #mem.allow-mlock = true 15 #mem.mlock-all = false 16 #clock.power-of-two-quantum = true 17 #log.level = 2 18 #cpu.zero.denormals = true 19 20 core.daemon = true # listening for socket connections 21 core.name = pipewire-0 # core name and socket name 22 23 ## Properties for the DSP configuration. 24 #default.clock.rate = 48000 25 #default.clock.allowed-rates = [ 48000 ] 26 #default.clock.quantum = 1024 27 #default.clock.min-quantum = 32 28 #default.clock.max-quantum = 8192 29 #default.video.width = 640 30 #default.video.height = 480 31 #default.video.rate.num = 25 32 #default.video.rate.denom = 1 33 # 34 # These overrides are only applied when running in a vm. 35 vm.overrides = { 36 default.clock.min-quantum = 1024 37 } 38 } 39 40 context.spa-libs = { 41 #<factory-name regex> = <library-name> 42 # 43 # Used to find spa factory names. It maps an spa factory name 44 # regular expression to a library name that should contain 45 # that factory. 46 # 47 audio.convert.* = audioconvert/libspa-audioconvert 48 api.alsa.* = alsa/libspa-alsa 49 api.v4l2.* = v4l2/libspa-v4l2 50 api.libcamera.* = libcamera/libspa-libcamera 51 api.bluez5.* = bluez5/libspa-bluez5 52 api.vulkan.* = vulkan/libspa-vulkan 53 api.jack.* = jack/libspa-jack 54 support.* = support/libspa-support 55 #videotestsrc = videotestsrc/libspa-videotestsrc 56 #audiotestsrc = audiotestsrc/libspa-audiotestsrc 57 } 58 59 context.modules = [ 60 #{ name = <module-name> 61 # [ args = { <key> = <value> ... } ] 62 # [ flags = [ [ ifexists ] [ nofail ] ] 63 #} 64 # 65 # Loads a module with the given parameters. 66 # If ifexists is given, the module is ignored when it is not found. 67 # If nofail is given, module initialization failures are ignored. 68 # 69 70 # Uses RTKit to boost the data thread priority. 71 { name = libpipewire-module-rtkit 72 args = { 73 #nice.level = -11 74 #rt.prio = 88 75 #rt.time.soft = 2000000 76 #rt.time.hard = 2000000 77 } 78 flags = [ ifexists nofail ] 79 } 80 81 # Set thread priorities without using RTKit. 82 #{ name = libpipewire-module-rt 83 # args = { 84 # nice.level = -11 85 # rt.prio = 88 86 # rt.time.soft = 2000000 87 # rt.time.hard = 2000000 88 # } 89 # flags = [ ifexists nofail ] 90 #} 91 92 # The native communication protocol. 93 { name = libpipewire-module-protocol-native } 94 95 # The profile module. Allows application to access profiler 96 # and performance data. It provides an interface that is used 97 # by pw-top and pw-profiler. 98 { name = libpipewire-module-profiler } 99 100 # Allows applications to create metadata objects. It creates 101 # a factory for Metadata objects. 102 { name = libpipewire-module-metadata } 103 104 # Creates a factory for making devices that run in the 105 # context of the PipeWire server. 106 { name = libpipewire-module-spa-device-factory } 107 108 # Creates a factory for making nodes that run in the 109 # context of the PipeWire server. 110 { name = libpipewire-module-spa-node-factory } 111 112 # Allows creating nodes that run in the context of the 113 # client. Is used by all clients that want to provide 114 # data to PipeWire. 115 { name = libpipewire-module-client-node } 116 117 # Allows creating devices that run in the context of the 118 # client. Is used by the session manager. 119 { name = libpipewire-module-client-device } 120 121 # The portal module monitors the PID of the portal process 122 # and tags connections with the same PID as portal 123 # connections. 124 { name = libpipewire-module-portal 125 flags = [ ifexists nofail ] 126 } 127 128 # The access module can perform access checks and block 129 # new clients. 130 { name = libpipewire-module-access 131 args = { 132 # access.allowed to list an array of paths of allowed 133 # apps. 134 #access.allowed = [ 135 # /usr/bin/pipewire-media-session 136 #] 137 138 # An array of rejected paths. 139 #access.rejected = [ ] 140 141 # An array of paths with restricted access. 142 #access.restricted = [ ] 143 144 # Anything not in the above lists gets assigned the 145 # access.force permission. 146 #access.force = flatpak 147 } 148 } 149 150 # Makes a factory for wrapping nodes in an adapter with a 151 # converter and resampler. 152 { name = libpipewire-module-adapter } 153 154 # Makes a factory for creating links between ports. 155 { name = libpipewire-module-link-factory } 156 157 # Provides factories to make session manager objects. 158 { name = libpipewire-module-session-manager } 159 ] 160 161 context.objects = [ 162 #{ factory = <factory-name> 163 # [ args = { <key> = <value> ... } ] 164 # [ flags = [ [ nofail ] ] 165 #} 166 # 167 # Creates an object from a PipeWire factory with the given parameters. 168 # If nofail is given, errors are ignored (and no object is created). 169 # 170 #{ factory = spa-node-factory args = { factory.name = videotestsrc node.name = videotestsrc Spa:Pod:Object:Param:Props:patternType = 1 } } 171 #{ factory = spa-device-factory args = { factory.name = api.jack.device foo=bar } flags = [ nofail ] } 172 #{ factory = spa-device-factory args = { factory.name = api.alsa.enum.udev } } 173 #{ factory = spa-node-factory args = { factory.name = api.alsa.seq.bridge node.name = Internal-MIDI-Bridge } } 174 #{ factory = adapter args = { factory.name = audiotestsrc node.name = my-test } } 175 #{ factory = spa-node-factory args = { factory.name = api.vulkan.compute.source node.name = my-compute-source } } 176 177 # A default dummy driver. This handles nodes marked with the "node.always-driver" 178 # property when no other driver is currently active. JACK clients need this. 179 { factory = spa-node-factory 180 args = { 181 factory.name = support.node.driver 182 node.name = Dummy-Driver 183 node.group = pipewire.dummy 184 priority.driver = 20000 185 } 186 } 187 { factory = spa-node-factory 188 args = { 189 factory.name = support.node.driver 190 node.name = Freewheel-Driver 191 priority.driver = 19000 192 node.group = pipewire.freewheel 193 node.freewheel = true 194 } 195 } 196 # This creates a new Source node. It will have input ports 197 # that you can link, to provide audio for this source. 198 #{ factory = adapter 199 # args = { 200 # factory.name = support.null-audio-sink 201 # node.name = "my-mic" 202 # node.description = "Microphone" 203 # media.class = "Audio/Source/Virtual" 204 # audio.position = "FL,FR" 205 # } 206 #} 207 208 # This creates a single PCM source device for the given 209 # alsa device path hw:0. You can change source to sink 210 # to make a sink in the same way. 211 #{ factory = adapter 212 # args = { 213 # factory.name = api.alsa.pcm.source 214 # node.name = "alsa-source" 215 # node.description = "PCM Source" 216 # media.class = "Audio/Source" 217 # api.alsa.path = "hw:0" 218 # api.alsa.period-size = 1024 219 # api.alsa.headroom = 0 220 # api.alsa.disable-mmap = false 221 # api.alsa.disable-batch = false 222 # audio.format = "S16LE" 223 # audio.rate = 48000 224 # audio.channels = 2 225 # audio.position = "FL,FR" 226 # } 227 #} 228 ] 229 230 context.exec = [ 231 #{ path = <program-name> [ args = "<arguments>" ] } 232 # 233 # Execute the given program with arguments. 234 # 235 # You can optionally start the session manager here, 236 # but it is better to start it as a systemd service. 237 # Run the session manager with -h for options. 238 # 239 #{ path = "/usr/bin/pipewire-media-session" args = "" } 240 # 241 # You can optionally start the pulseaudio-server here as well 242 # but it is better to start it as a systemd service. 243 # It can be interesting to start another daemon here that listens 244 # on another address with the -a option (eg. -a tcp:4713). 245 # 246 { path = "/usr/bin/pipewire" args = "-c pipewire-pulse.conf" } 247 { path = "/usr/bin/wireplumber" args = "" } 248 ]