====== What? ====== Just some notes around the Sony WH-1000XM2 * pro: wireless: bluetooth profiles for headset and High Fidelity playback (A2DP) * pro: quite good noise cancelling * pro: build in rechargable battery * con: when the cable is used, only headphone functionality is available. No microphone signal goes over the analog cable. * con: after 60min of wearing, I need to take the headset off ===== Links ===== * [[https://www.youtube.com/watch?v=VnzIIhLNHqg|Queen - Bohemian Rhapsody - AUDIO 3DD]] * [[https://lineageos.org/engineering/Bluetooth-SBC-XQ/|LineageOS implements now SBC XQ, comparable to aptX and aptX HD]] * https://wiki.archlinux.org/index.php/PipeWire -- Archlinux great PipeWire docs * [[/hardwarerelated/headset/sony_wh-1000xm2_pa|Sony WH-1000XM2 pulseaudio notes]] (newer distros have pipewire) ====== Bluetooth profiles ====== As of Fedora34 with pipewire, following bluetooth profiles which are supported on Fedora34 can also be used with the Sony WH-1000XM2. First is the name as seen in 'pactl list cards', then a description. * **These modes provide pure audio, and do not transport the microphone signal to the computer** * a2dp-sink: High Fidelity Playback (A2DP Sink), good audio quality * a2dp-sink-sbc: High Fidelity Playback (A2DP Sink, codec SBC), good audio quality * a2dp-sink-sbc_xq: High Fidelity Playback (A2DP Sink, codec SBC-XQ), better audio quality * a2dp-sink-aac: High Fidelity Playback (A2DP Sink, codec AAC), better audio quality * a2dp-sink-ldac: High Fidelity Playback (A2DP Sink, codec LDAC), best audio quality * **These modes provide audio + micro channel, so for example useful for chats and conferences** * headset-head-unit: Headset Head Unit (HSP/HFP), bad quality * headset-head-unit-cvsd: Headset Head Unit (HSP/HFP, codec CVSD), bad quality, 16KHz/16 bit * headset-head-unit-msbc: Headset Head Unit (HSP/HFP, codec mSBC), better quality, 48KHz/16 bit "Hands-Free Profile (HFP) Version 1.6 adds optional support for wide band speech with the mSBC codec, a 16 kHz monaural configuration of the SBC codec mandated by the A2DP profile." That is usable on Fedora34, it was implemented in Pulsaudio 15 and pipewire 0.3.23. For headset-head-unit-msbc, it might be required to modify a config file as follows: $ mkdir -p /etc/pipewire/media-session.d/ $ cp /usr/share/pipewire/media-session.d/bluez-monitor.conf /etc/pipewire/media-session.d/ $ vi /etc/pipewire/media-session.d/bluez-monitor.conf ### set this: bluez5.msbc-support = true bluez5.sbc-xq-support = true ===== Fedora 34 and later / pipewire based setups ===== ### Let's install the required packages. $ sudo dnf install -y pipewire-alsa pipewire-pulseaudio pipewire ### Now ensure dbus and pipewire are running as your user, and enabled. $ systemctl --user restart dbus pipewire-pulse pipewire $ systemctl --user enable dbus pipewire-pulse pipewire $ systemctl --user status dbus pipewire-pulse pipewire $ sudo systemctl status bluetooth.service $ bluetoothctl Agent registered [CHG] Controller XX:XX:XX:XX:XX:B7 Pairable: yes [LE_WH-1000XM2]# scan on Discovery started [CHG] Controller XX:XX:XX:XX:XX:B7 Discovering: yes [CHG] Device XX:XX:XX:XX:XX:85 RSSI: -48 [CHG] Device XX:XX:XX:XX:XX:85 TxPower: 4 [CHG] Device XX:XX:XX:XX:XX:85 Name: WH-1000XM2 [CHG] Device XX:XX:XX:XX:XX:85 Alias: WH-1000XM2 [NEW] Device XX:XX:XX:XX:XX:6D XX:XX:XX:XX:XX:6D [LE_WH-1000XM2]# trust XX:XX:XX:XX:XX:85 Changing XX:XX:XX:XX:XX:85 trust succeeded [LE_WH-1000XM2]# connect XX:XX:XX:XX:XX:85 Attempting to connect to XX:XX:XX:XX:XX:85 Connection successful [CHG] Device XX:XX:XX:XX:XX:85 RSSI: -59 [CHG] Device XX:XX:XX:XX:XX:85 Name: LE_WH-1000XM2 $ sudo bluetoothctl [bluetooth]# power on [bluetooth]# agent on [bluetooth]# default-agent [bluetooth]# scan on [NEW] Device XX:XX:XX:XX:XX:XX WH-1000XM2 [bluetooth]# scan off [bluetooth]# trust XX:XX:XX:XX:XX:XX [bluetooth]# pair XX:XX:XX:XX:XX:XX Attempting to pair with XX:XX:XX:XX:XX:XX [CHG] Device XX:XX:XX:XX:XX:XX Connected: yes [CHG] Device XX:XX:XX:XX:XX:XX UUIDs: ... [CHG] Device XX:XX:XX:XX:XX:XX UUIDs: ... [CHG] Device XX:XX:XX:XX:XX:XX Paired: yes Pairing successful [CHG] Device XX:XX:XX:XX:XX:XX Connected: no [bluetooth]# connect XX:XX:XX:XX:XX:XX Attempting to connect to XX:XX:XX:XX:XX:XX [CHG] Device XX:XX:XX:XX:XX:XX Connected: yes Connection successful [bluetooth]# quit ### Which codec is currently active? $ pactl info $ pactl list sinks [..] Sink #199 [..] Description: WH-1000XM2 Driver: PipeWire Sample Specification: s16le 2ch 48000Hz [..] Properties: api.bluez5.transport = "" api.bluez5.profile = "a2dp-sink" api.bluez5.codec = "sbc" [..] OR api.bluez5.codec = "aac" (aac codec, high quality) OR api.bluez5.codec = "ldac" (for low latency) OR api.bluez5.codec = "cvsd" (for headset use, with micro on) ### Change profile, way 1 $ sudo dnf install -y pavucontrol $ pavucontrol ### Change profile, way 2 $ pactl list cards Card #197 Name: bluez_card.70_26_05_9D_31_85 Driver: module-bluez5-device.c Owner Module: n/a Properties: [..] Profiles: off: Off (sinks: 0, sources: 0, priority: 0, available: yes) a2dp-sink: High Fidelity Playback (A2DP Sink) (sinks: 1, sources: 0, priority: 0, available: yes) headset-head-unit: Headset Head Unit (HSP/HFP) (sinks: 1, sources: 1, priority: 0, available: yes) a2dp-sink-sbc: High Fidelity Playback (A2DP Sink, codec SBC) (sinks: 1, sources: 0, priority: 0, available: yes) a2dp-sink-aac: High Fidelity Playback (A2DP Sink, codec AAC) (sinks: 1, sources: 0, priority: 0, available: yes) a2dp-sink-ldac: High Fidelity Playback (A2DP Sink, codec LDAC) (sinks: 1, sources: 0, priority: 0, available: yes) headset-head-unit-cvsd: Headset Head Unit (HSP/HFP, codec CVSD) (sinks: 1, sources: 1, priority: 0, available: yes) headset-head-unit-msbc: Headset Head Unit (HSP/HFP, codec mSBC) (sinks: 1, sources: 1, priority: 0, available: yes) Active Profile: a2dp-sink-ldac [..] $ pactl set-card-profile bluez_card.70_26_05_9D_31_85 a2dp-sink-sbc ===== Errors & solutions ===== == Problem == * 'blueman-applet' says when trying to connect to the headset "protocol not available. * bluetoothctl reports this: [chris@電脳 ~]$ bluetoothctl Agent registered [CHG] Controller 34:E1:2D:7C:61:B7 Pairable: yes [bluetooth]# scan on Discovery started [CHG] Controller 34:E1:2D:7C:61:B7 Discovering: yes [..] [CHG] Device 70:26:05:9D:31:85 Name: LE_WH-1000XM2 [CHG] Device 70:26:05:9D:31:85 Alias: LE_WH-1000XM2 [bluetooth]# trust 70:26:05:9D:31:85 Changing 70:26:05:9D:31:85 trust succeeded [NEW] Device 4D:E9:CA:BF:05:3B 4D-E9-CA-BF-05-3B [bluetooth]# connect 70:26:05:9D:31:85 Attempting to connect to 70:26:05:9D:31:85 Failed to connect: org.bluez.Error.Failed * When trying to connect in 'blueman-applet', error "unknown protocol" appears, and "systemctl status bluetooth.service" reports: bluetoothd[23]: src/service.c:btd_service_connect() a2dp-sink profile connect failed for 70:26:05:9D:31:85: Protocol not available bluetoothd[23]: src/service.c:btd_service_connect() a2dp-sink profile connect failed for 70:26:05:9D:31:85: Protocol not available == Solution 1 (pulseaudio based setups only) == * Ensure package pulseaudio-module-bluetooth-freeworld or pulseaudio-module-bluetooth is installed. * If you installed the package after starting pulseaudio or your Xorg session, then do this as user: killall pulseaudio pulseaudio --start == Solution 2 == Install package blueman and run 'blueman-manager', for me that frontend was able to connect when 'bluetoothctl' could not.