docs: improve bluetooth documentation and example config file

This commit is contained in:
George Kiagiadakis
2024-03-16 10:43:09 +02:00
parent 4683f1fa44
commit 7b918060c4
2 changed files with 381 additions and 212 deletions

View File

@@ -3,23 +3,83 @@
Bluetooth configuration Bluetooth configuration
======================= =======================
Using the same format as the :ref:`ALSA monitor <config_alsa>`, the Bluetooth audio and MIDI devices are managed by the BlueZ and BlueZ-MIDI
configuration file ``wireplumber.conf.d/bluetooth.conf`` configures monitors, respectively.
the Bluetooth devices and nodes created by WirePlumber.
* *Settings* Both monitors are enabled by default and can be disabled using the
``monitor.bluez`` and ``monitor.bluez-midi`` :ref:`features <config_features>`
in the configuration file.
Example: As with all device monitors, both of these monitors are implemented as SPA
plugins and are part of PipeWire. WirePlumber merely loads the plugins and lets
them do their work. These plugins then monitor the BlueZ system-wide D-Bus
service and create device and node objects for all the connected Bluetooth audio
and MIDI devices.
.. code-block:: Logind integration
------------------
monitor.bluez.properties = { The BlueZ monitors are integrated with logind to ensure that only one user at a
bluez5.roles = "[ a2dp_sink a2dp_source bap_sink bap_source hsp_hs hsp_ag hfp_hf hfp_ag ]" time can use the Bluetooth audio devices. This is because on most Linux desktop
systems, the graphical login manager (GDM, SDDM, etc.) is running as a separate
user and runs its own instance of PipeWire and Wireplumber. This means that if a
user logs in graphically, the Bluetooth audio devices will be automatically
grabbed by the PipeWire/WirePlumber instance of the graphical login manager,
and the user that logs in will not get access to them.
To overcome this, the BlueZ monitors are integrated with logind and are only
allowed to create device and node objects for Bluetooth audio devices if the
user is currently on the "active" logind session.
In some cases, however, this behavior is not desired. For example, if you
manually switch to a TTY and log in there, you may want to keep the Bluetooth
audio devices connected to the now inactive graphical session. Or you may want
to have a dedicated user that is always allowed to use the Bluetooth audio
devices, regardless of the active logind session, for example for a (possibly
headless) music player daemon.
To disable this behavior, you can set the ``monitor.bluez.seat-monitoring``
:ref:`feature <config_features>` to ``disabled``.
Example configuration :ref:`fragment <config_conf_file_fragments>` file:
.. code-block::
wireplumber.profiles = {
main = {
monitor.bluez.seat-monitoring = disabled
}
} }
Enabled headset roles (default: [ a2dp_sink a2dp_source bap_sink bap_source hsp_hs hsp_ag hfp_hf hfp_ag ]). .. note::
Some headsets (e.g. Sony WH-1000XM3) do not work with both hsp_ag and hfp_ag enabled,
so `hsp_ag` and `hfp_ag` are disabled by default. If logind is not installed on the system, this functionality is disabled
automatically.
Monitor Properties
------------------
The BlueZ monitor SPA plugin (``api.bluez5.enum.dbus``) supports properties that
can be used to configure it when it is loaded. These properties can be set in
the ``monitor.bluez.properties`` section of the WirePlumber configuration file.
Example:
.. code-block::
monitor.bluez.properties = {
bluez5.roles = [ a2dp_sink a2dp_source bap_sink bap_source hsp_hs hsp_ag hfp_hf hfp_ag ]
bluez5.codecs = [ sbc sbc_xq aac ]
bluez5.enable-sbc-xq = true
bluez5.hfphsp-backend = "native"
}
.. describe:: bluez5.roles
Enabled roles.
Currently some headsets (e.g. Sony WH-1000XM3) do not work with both
``hsp_ag`` and ``hfp_ag`` enabled, so by default we enable only HFP.
Supported roles: Supported roles:
@@ -32,149 +92,220 @@ the Bluetooth devices and nodes created by WirePlumber.
- ``bap_sink`` (LE Audio Basic Audio Profile Sink) - ``bap_sink`` (LE Audio Basic Audio Profile Sink)
- ``bap_source`` (LE Audio Basic Audio Profile Source) - ``bap_source`` (LE Audio Basic Audio Profile Source)
.. code-block:: :Default value: ``[ a2dp_sink a2dp_source bap_sink bap_source hfp_hf hfp_ag ]``
:Type: array of strings
bluez5.codecs = "[ sbc sbc_xq aac ]" .. describe:: bluez5.codecs
Enables the specified A2DP codecs. All codecs are enabled by default. Enabled A2DP codecs.
Supported codecs:``sbc``, ``sbc_xq``, ``aac``, ``ldac``, ``aptx``, Supported codecs: ``sbc``, ``sbc_xq``, ``aac``, ``ldac``, ``aptx``,
``aptx_hd``, ``aptx_ll``, ``aptx_ll_duplex``, ``faststream``, ``aptx_hd``, ``aptx_ll``, ``aptx_ll_duplex``, ``faststream``,
``faststream_duplex``, ``lc3plus_h3``, ``opus_05``, ``opus_05_51``, ``opus_05_71``, ``faststream_duplex``, ``lc3plus_h3``, ``opus_05``, ``opus_05_51``,
``opus_05_duplex``, ``opus_05_pro``, ``lc3``. ``opus_05_71``, ``opus_05_duplex``, ``opus_05_pro``, ``lc3``.
.. code-block:: :Default value: all available codecs
:Type: array of strings
bluez5.hfphsp-backend = "native" .. describe:: bluez5.enable-msbc
HFP/HSP backend (default: native). Available values: ``any``, ``none``, Enable mSBC codec (wideband speech codec for HFP/HSP).
``hsphfpd``, ``ofono`` or ``native``.
.. code-block:: This does not work on all headsets, so it is enabled based on the hardware
quirks database. By explicitly setting this option you can force it to be
enabled or disabled regardless.
bluez5.hfphsp-backend-native-modem = "none" :Default value: ``true``
:Type: boolean
.. describe:: bluez5.enable-sbc-xq
Enable SBC-XQ codec (high quality SBC codec for A2DP).
This does not work on all headsets, so it is enabled based on the hardware
quirks database. By explicitly setting this option you can force it to be
enabled or disabled regardless.
:Default value: ``true``
:Type: boolean
.. describe:: bluez5.enable-hw-volume
Enable hardware volume controls.
This does not work on all headsets, so it is enabled based on the hardware
quirks database. By explicitly setting this option you can force it to be
enabled or disabled regardless.
:Default value: ``true``
:Type: boolean
.. describe:: bluez5.hfphsp-backend
HFP/HSP backend.
Available values: ``any``, ``none``, ``hsphfpd``, ``ofono`` or ``native``.
:Default value: ``native``
:Type: string
.. describe:: bluez5.hfphsp-backend-native-modem
Modem to use for native HFP/HSP backend ModemManager support. When enabled, Modem to use for native HFP/HSP backend ModemManager support. When enabled,
PipeWire will forward HFP commands to the specified ModemManager device. PipeWire will forward HFP commands to the specified ModemManager device.
This corresponds to the 'Device' property of the org.freedesktop.ModemManager1.Modem This corresponds to the 'Device' property of the
interface. May also be ``any`` to use any available modem device. ``org.freedesktop.ModemManager1.Modem`` interface. May also be ``any`` to
use any available modem device.
.. code-block:: :Default value: ``none``
:Type: string
bluez5.hw-offload-sco = false .. describe:: bluez5.hw-offload-sco
HFP/HSP hardware offload SCO support (default: false). Using this HFP/HSP hardware offload SCO support.
feature requires a custom WirePlumber script that handles audio
routing in a platform-specific way. See
``tests/examples/bt-pinephone.lua`` for an example.
.. code-block:: Using this feature requires a custom WirePlumber script that handles audio
routing in a platform-specific way. See ``tests/examples/bt-pinephone.lua``
for an example.
bluez5.default.rate = 48000 :Default value: ``false``
:Type: boolean
The bluetooth default audio rate. .. describe:: bluez5.default.rate
.. code-block:: The default audio rate for the A2DP codec configuration.
bluez5.default.channels = 2 :Default value: ``48000``
:Type: integer
The Bluetooth default number of channels. .. describe:: bluez5.default.channels
.. code-block:: The default number of channels for the A2DP codec configuration.
bluez5.dummy-avrcp-player = false :Default value: ``2``
:Type: integer
Register dummy AVRCP player. Some devices have wrongly functioning .. describe:: bluez5.dummy-avrcp-player
volume or playback controls if this is not enabled. Disabled by default.
.. code-block:: Register dummy AVRCP player. Some devices have wrongly functioning volume or
playback controls if this is not enabled. Disabled by default.
bluez5.enable-msbc = true, :Default value: ``false``
bluez5.enable-sbc-xq = true :Type: boolean
bluez5.enable-hw-volume = true
By default MSBC and SBC-XQ codecs and hardware volume is enabled, .. describe:: Opus Pro Audio mode settings
except if disabled by a hardware quirk database. You can force
them to be enabled regardless also for devices where the database disables
it with these options.
.. code-block:: .. code-block::
bluez5.a2dp.opus.pro.channels = 3 bluez5.a2dp.opus.pro.channels = 3
bluez5.a2dp.opus.pro.coupled-streams = 1 bluez5.a2dp.opus.pro.coupled-streams = 1
bluez5.a2dp.opus.pro.locations = "FL,FR,LFE" bluez5.a2dp.opus.pro.locations = [ FL,FR,LFE ]
bluez5.a2dp.opus.pro.max-bitrate = 600000 bluez5.a2dp.opus.pro.max-bitrate = 600000
bluez5.a2dp.opus.pro.frame-dms = 50 bluez5.a2dp.opus.pro.frame-dms = 50
bluez5.a2dp.opus.pro.bidi.channels = 1 bluez5.a2dp.opus.pro.bidi.channels = 1
bluez5.a2dp.opus.pro.bidi.coupled-streams = 0 bluez5.a2dp.opus.pro.bidi.coupled-streams = 0
bluez5.a2dp.opus.pro.bidi.locations = "FC" bluez5.a2dp.opus.pro.bidi.locations = [ FC ]
bluez5.a2dp.opus.pro.bidi.max-bitrate = 160000 bluez5.a2dp.opus.pro.bidi.max-bitrate = 160000
bluez5.a2dp.opus.pro.bidi.frame-dms = 400 bluez5.a2dp.opus.pro.bidi.frame-dms = 400
Options for a custom multichannel Opus codec, which can be used to Options for the PipeWire-specific multichannel Opus codec, which can be used
transport audio between devices running PipeWire. to transport audio over Bluetooth between devices running PipeWire.
* *MIDI Settings* MIDI Monitor Properties
-----------------------
Example: The BlueZ MIDI monitor SPA plugin (``api.bluez5.midi.enum``) may, in the future,
support properties that can be used to configure it when it is loaded. These
properties can be set in the ``monitor.bluez-midi.properties`` section of the
WirePlumber configuration file. At the moment of writing, there are no
properties that can be set there.
.. code-block:: In addition, the BlueZ MIDI monitor supports a list of MIDI server node names
that can be used to create Bluetooth LE MIDI service instances. These
server node names can be set in the ``monitor.bluez-midi.servers`` section of
the WirePlumber configuration file.
Example:
.. code-block::
monitor.bluez-midi.servers = [ "bluez_midi.server" ] monitor.bluez-midi.servers = [ "bluez_midi.server" ]
List of MIDI server node names. Each node name given will create a new instance .. note::
of a BLE MIDI service. Typical BLE MIDI instruments have on service instance,
so adding more than one here may confuse some clients. The node property matching
rules below apply also to these servers.
* *Rules* Typical BLE MIDI instruments have one service instance, so adding more than
one here may confuse some clients.
Example: Rules
-----
.. code-block:: When device and node objects are created by the BlueZ monitor, they can be
configured using rules. These rules allow matching the existing properties of
these objects and updating them with new values. This is the main way of
configuring Bluetooth device settings.
These rules can be set in the ``monitor.bluez.rules`` section of the WirePlumber
configuration file.
Example:
.. code-block::
monitor.bluez.rules = [ monitor.bluez.rules = [
{ {
matches = [ matches = [
{ {
# This matches the needed sound card. ## This matches all bluetooth devices.
device.name = "<bluez_sound_card_name>" device.name = "~bluez_card.*"
} }
] ]
actions = { actions = {
update-props = { update-props = {
# Apply all the desired device settings here. bluez5.auto-connect = [ hfp_hf hsp_hs a2dp_sink hfp_ag hsp_ag a2dp_source ]
bluez5.auto-connect = "[ hfp_hf hsp_hs a2dp_sink ]" bluez5.hw-volume = [ hfp_hf hsp_hs a2dp_sink hfp_ag hsp_ag a2dp_source ]
bluez5.a2dp.ldac.quality = "auto"
bluez5.a2dp.aac.bitratemode = 0
bluez5.a2dp.opus.pro.application = "audio"
bluez5.a2dp.opus.pro.bidi.application = "audio"
} }
} }
} }
{ {
matches = [ matches = [
# This matches the needed node.
{ {
node.name = "<node_name>" ## Matches all sources.
node.name = "~bluez_input.*"
}
{
## Matches all sinks.
node.name = "~bluez_output.*"
} }
] ]
actions = { actions = {
# Apply all the desired node specific settings here.
update-props = { update-props = {
bluez5.media-source-role = "input"
# Common node & audio adapter properties may also be set here
node.nick = "My Node" node.nick = "My Node"
priority.driver = 100 priority.driver = 100
priority.session = 100
node.pause-on-idle = false
resample.quality = 4
channelmix.normalize = false
channelmix.mix-lfe = false
session.suspend-timeout-seconds = 5 session.suspend-timeout-seconds = 5
monitor.channel-volumes = false
} }
} }
} }
] ]
This will set the auto-connect property to ``hfp_hf``, ``hsp_hs`` and Device properties
``a2dp_sink`` on bluetooth devices whose name matches the ``bluez_card.*`` ^^^^^^^^^^^^^^^^^
pattern.
A list of valid properties are: The following properties can be set on device objects:
.. code-block:: .. describe:: bluez5.auto-connect
bluez5.auto-connect = "[ hfp_hf hsp_hs a2dp_sink ]"
Auto-connect device profiles on start up or when only partial profiles have Auto-connect device profiles on start up or when only partial profiles have
connected. Disabled by default if the property is not specified. connected. Disabled by default if the property is not specified.
@@ -182,52 +313,99 @@ the Bluetooth devices and nodes created by WirePlumber.
Supported values are: ``hfp_hf``, ``hsp_hs``, ``a2dp_sink``, ``hfp_ag``, Supported values are: ``hfp_hf``, ``hsp_hs``, ``a2dp_sink``, ``hfp_ag``,
``hsp_ag`` and ``a2dp_source``. ``hsp_ag`` and ``a2dp_source``.
.. code-block:: :Default value: ``[]``
:Type: array of strings
bluez5.hw-volume = "[ hfp_ag hsp_ag a2dp_source ]" .. describe:: bluez5.hw-volume
Hardware volume controls (default: ``hfp_ag``, ``hsp_ag``, and ``a2dp_source``) Enable hardware volume controls on these profiles.
Supported values are: ``hfp_hf``, ``hsp_hs``, ``a2dp_sink``, ``hfp_ag``, Supported values are: ``hfp_hf``, ``hsp_hs``, ``a2dp_sink``, ``hfp_ag``,
``hsp_ag`` and ``a2dp_source``. ``hsp_ag`` and ``a2dp_source``.
.. code-block:: :Default value: ``[ hfp_ag hsp_ag a2dp_source ]``
:Type: array of strings
bluez5.a2dp.ldac.quality = "auto" .. describe:: bluez5.a2dp.ldac.quality
LDAC encoding quality. LDAC encoding quality.
Available values: ``auto`` (Adaptive Bitrate, default), Available values: ``auto`` (Adaptive Bitrate, default), ``hq`` (High
``hq`` (High Quality, 990/909kbps), ``sq`` (Standard Quality, 660/606kbps) and Quality, 990/909kbps), ``sq`` (Standard Quality, 660/606kbps) and ``mq``
``mq`` (Mobile use Quality, 330/303kbps). (Mobile use Quality, 330/303kbps).
.. code-block:: :Default value: ``auto``
:Type: string
bluez5.a2dp.aac.bitratemode = 0 .. describe:: bluez5.a2dp.aac.bitratemode
AAC variable bitrate mode. AAC variable bitrate mode.
Available values: 0 (cbr, default), 1-5 (quality level). Available values: 0 (cbr, default), 1-5 (quality level).
.. code-block:: :Default value: ``0``
:Type: integer
device.profile = "a2dp-sink" .. describe:: bluez5.a2dp.opus.pro.application
Profile connected first. Opus Pro Audio encoding mode.
Available values: ``audio``, ``voip``, ``lowdelay``.
:Default value: ``audio``
:Type: string
.. describe:: bluez5.a2dp.opus.pro.bidi.application
Opus Pro Audio encoding mode for bidirectional audio.
Available values: ``audio``, ``voip``, ``lowdelay``.
:Default value: ``audio``
:Type: string
.. describe:: device.profile
The profile that is activated initially when the device is connected.
Available values: ``a2dp-sink`` (default) or ``headset-head-unit``. Available values: ``a2dp-sink`` (default) or ``headset-head-unit``.
* *MIDI Rules* :Default value: ``a2dp-sink``
:Type: string
Example: Node properties
^^^^^^^^^^^^^^^
.. code-block:: The following properties can be set on node objects:
.. describe:: bluez5.media-source-role
Media source role, ``input`` or ``playback``. This controls how a media
source device, such as a smartphone, is used by the system. Defaults to
``playback``, playing the incoming stream out to speakers. Set to ``input``
to use the smartphone as an input for apps (like a microphone).
:Default value: ``playback``
:Type: string
MIDI Rules
----------
Similarly to the above rules, the BlueZ MIDI monitor also supports rules that
can be used to configure MIDI nodes when they are created.
These rules can be set in the ``monitor.bluez-midi.rules`` section of the
WirePlumber configuration file.
Example:
.. code-block::
monitor.bluez-midi.rules = [ monitor.bluez-midi.rules = [
{ {
matches = [ matches = [
{ {
node.name = "~bluez_midi*" node.name = "~bluez_midi.*"
} }
] ]
actions = { actions = {
@@ -237,21 +415,26 @@ the Bluetooth devices and nodes created by WirePlumber.
priority.session = 100 priority.session = 100
node.pause-on-idle = false node.pause-on-idle = false
session.suspend-timeout-seconds = 5 session.suspend-timeout-seconds = 5
monitor.channel-volumes = false
node.latency-offset-msec = 0 node.latency-offset-msec = 0
} }
} }
} }
] ]
Allows changing well-known node settings. .. note::
In addition, allows changing some MIDI-specific settings: It is possible to also match MIDI server nodes by testing the ``node.name``
property against the server node names that were set in the
``monitor.bluez-midi.servers`` section of the WirePlumber configuration file.
.. code-block:: MIDI-specific properties
^^^^^^^^^^^^^^^^^^^^^^^^
node.latency-offset-msec = 0 .. describe:: node.latency-offset-msec
Latency adjustment to apply on the node. Larger values add a Latency adjustment to apply on the node. Larger values add a
constant latency, but reduces timing jitter caused by Bluetooth constant latency, but reduces timing jitter caused by Bluetooth
transport. transport.
:Default value: ``0``
:Type: integer (milliseconds)

View File

@@ -1,4 +1,4 @@
## The WirePlumber BLUEZ configuration ## Template WirePlumber Bluetooth configuration
wireplumber.settings = { wireplumber.settings = {
## Whether to store state on the filesystem. ## Whether to store state on the filesystem.
@@ -24,10 +24,10 @@ monitor.bluez.properties = {
## a2dp_source (A2DP Audio Source) ## a2dp_source (A2DP Audio Source)
## bap_sink (LE Audio Basic Audio Profile Sink) ## bap_sink (LE Audio Basic Audio Profile Sink)
## bap_source (LE Audio Basic Audio Profile Source) ## bap_source (LE Audio Basic Audio Profile Source)
# bluez5.roles = "[ a2dp_sink a2dp_source bap_sink bap_source hsp_hs hsp_ag hfp_hf hfp_ag ]" # bluez5.roles = [ a2dp_sink a2dp_source bap_sink bap_source hsp_hs hsp_ag hfp_hf hfp_ag ]
## Enabled A2DP codecs (default: all). ## Enabled A2DP codecs (default: all).
# bluez5.codecs = "[ sbc sbc_xq aac ldac aptx aptx_hd aptx_ll aptx_ll_duplex faststream faststream_duplex ]" # bluez5.codecs = [ sbc sbc_xq aac ldac aptx aptx_hd aptx_ll aptx_ll_duplex faststream faststream_duplex ]
## These features do not work on all headsets, so they are enabled ## These features do not work on all headsets, so they are enabled
## by default based on the hardware database. They can also be ## by default based on the hardware database. They can also be
@@ -62,12 +62,12 @@ monitor.bluez.properties = {
## Opus Pro Audio mode settings ## Opus Pro Audio mode settings
# bluez5.a2dp.opus.pro.channels = 3 # bluez5.a2dp.opus.pro.channels = 3
# bluez5.a2dp.opus.pro.coupled-streams = 1 # bluez5.a2dp.opus.pro.coupled-streams = 1
# bluez5.a2dp.opus.pro.locations = "FL,FR,LFE" # bluez5.a2dp.opus.pro.locations = [ FL,FR,LFE ]
# bluez5.a2dp.opus.pro.max-bitrate = 600000 # bluez5.a2dp.opus.pro.max-bitrate = 600000
# bluez5.a2dp.opus.pro.frame-dms = 50 # bluez5.a2dp.opus.pro.frame-dms = 50
# bluez5.a2dp.opus.pro.bidi.channels = 1 # bluez5.a2dp.opus.pro.bidi.channels = 1
# bluez5.a2dp.opus.pro.bidi.coupled-streams = 0 # bluez5.a2dp.opus.pro.bidi.coupled-streams = 0
# bluez5.a2dp.opus.pro.bidi.locations = "FC" # bluez5.a2dp.opus.pro.bidi.locations = [ FC ]
# bluez5.a2dp.opus.pro.bidi.max-bitrate = 160000 # bluez5.a2dp.opus.pro.bidi.max-bitrate = 160000
# bluez5.a2dp.opus.pro.bidi.frame-dms = 400 # bluez5.a2dp.opus.pro.bidi.frame-dms = 400
} }
@@ -88,24 +88,11 @@ monitor.bluez-midi.servers = [
monitor.bluez.rules = [ monitor.bluez.rules = [
## The list of monitor rules ## The list of monitor rules
## The following are the default rules applied if none overrides them.
# {
# matches = [
# {
# device.name = "~bluez_card.*"
# }
# ]
# actions = {
# update-props = {
# }
# }
# }
## This rule example allows changing properties on all Bluetooth devices. ## This rule example allows changing properties on all Bluetooth devices.
# { # {
# matches = [ # matches = [
# { # {
# ## This matches all cards. # ## This matches all bluetooth devices.
# device.name = "~bluez_card.*" # device.name = "~bluez_card.*"
# } # }
# ] # ]
@@ -114,10 +101,10 @@ monitor.bluez.rules = [
# ## Auto-connect device profiles on start up or when only partial # ## Auto-connect device profiles on start up or when only partial
# ## profiles have connected. Disabled by default if the property # ## profiles have connected. Disabled by default if the property
# ## is not specified. # ## is not specified.
# bluez5.auto-connect = "[ hfp_hf hsp_hs a2dp_sink hfp_ag hsp_ag a2dp_source ]" # bluez5.auto-connect = [ hfp_hf hsp_hs a2dp_sink hfp_ag hsp_ag a2dp_source ]
# #
# ## Hardware volume control (default: [ hfp_ag hsp_ag a2dp_source ]) # ## Hardware volume control (default: [ hfp_ag hsp_ag a2dp_source ])
# bluez5.hw-volume = "[ hfp_hf hsp_hs a2dp_sink hfp_ag hsp_ag a2dp_source ]" # bluez5.hw-volume = [ hfp_hf hsp_hs a2dp_sink hfp_ag hsp_ag a2dp_source ]
# #
# ## LDAC encoding quality # ## LDAC encoding quality
# ## Available values: auto (Adaptive Bitrate, default) # ## Available values: auto (Adaptive Bitrate, default)
@@ -171,7 +158,7 @@ monitor.bluez.rules = [
] ]
monitor.bluez-midi.rules = [ monitor.bluez-midi.rules = [
## The list of monitor MIDI rules ## The list of MIDI monitor rules
## This rule example allows changing properties on all Bluetooth MIDI nodes. ## This rule example allows changing properties on all Bluetooth MIDI nodes.
# { # {
@@ -179,7 +166,7 @@ monitor.bluez-midi.rules = [
# ## Matches all bluez midi nodes. # ## Matches all bluez midi nodes.
# { # {
# ## Matches all sources. # ## Matches all sources.
# node.name = "~bluez_midi*" # node.name = "~bluez_midi.*"
# } # }
# ] # ]
# actions = { # actions = {
@@ -189,7 +176,6 @@ monitor.bluez-midi.rules = [
# priority.session = 100 # priority.session = 100
# node.pause-on-idle = false # node.pause-on-idle = false
# session.suspend-timeout-seconds = 5 # session.suspend-timeout-seconds = 5
# monitor.channel-volumes = false
# node.latency-offset-msec = 0 # node.latency-offset-msec = 0
# } # }
# } # }