Gentoo 蓝牙耳机配置

内核配置 #

CONFIG_BT           : 启用蓝牙,必须启用
BT_BREDR            : 经典蓝牙协议栈,必须启用
CONFIG_BT_RFCOMM    : 模拟 RS-232 串口,纯听歌可不启用,设备控制或数据传输要启用
CONFIG_BT_HIDP      : 蓝牙 HID 协议栈,键鼠、手柄等 HID 设备要启用
CONFIG_BT_LE        : 低功耗蓝牙,纯听歌可不启用,传感器/穿戴等低功耗设备要启用
CONFIG_BT_HCIBTUSB  : USB 蓝牙适配器驱动,无线网卡的蓝牙模块大多走 USB 连接
CONFIG_RFKILL       : 用于管理无线射频设备(Wi-Fi、蓝牙、移动网络等)的开关状态

设备 Intel AX210 无线网卡 + 蓝牙耳机 ,仅启用以下:

CONFIG_BT
BT_BREDR
CONFIG_BT_HCIBTUSB
CONFIG_RFKILL

安装 BlueZ #

# emerge -av net-wireless/bluez

OpenRC 启动 #

# rc-update add bluetooth default

连接耳机 #

交互模式,配对与连接:

$ bluetoothctl
[进入交互模式]
> power on
> scan on
> devices
Device 01:10:C4:71:BC:23 SIMGOT EH500
> scan off
> pair 01:10:C4:71:BC:23
> trust 01:10:C4:71:BC:23
> connect 01:10:C4:71:BC:23

非交互模式,查看已连接的设备:

$ bluetoothctl devices Connected
Device 01:10:C4:71:BC:23 SIMGOT EH500

PipeWire 切换设备 #

media-video/pipewire 需启用 USE 标志 bluetoothsound-server

$ pactl list sinks short 
53   alsa_output.pci-0000_c6_00.6.analog-stereo    PipeWire	s32le 2ch 48000Hz	SUSPENDED
149  bluez_output.01_10_C4_71_BC_23.1              PipeWire	s16le 2ch 48000Hz	RUNNING
$ pactl set-default-sink bluez_output.01_10_C4_71_BC_23.1

Rfkill #

$ rfkill 
ID  TYPE       DEVICE       SOFT       HARD
 0  wlan       phy0    unblocked  unblocked
 1  bluetooth  hci0    unblocked  unblocked
$ rfkill block 1       # 关闭蓝牙,可用 bluetooth 代替 1
$ rfkill unblock 1     # 开启蓝牙

HARD 是物理开关不用理会,unblock 后需要手动连接蓝牙。

Udev 规则 #

$ ls /sys/class/bluetooth
hci0  hci0:256
$ udevadm info --attribute-walk --path=/sys/class/bluetooth/hci0:256
looking at device '/devices/pci0000:00/0000:00:08.1/0000:c6:00.3/usb1/1-5/1-5:1.0/bluetooth/hci0/hci0:256':
  KERNEL=="hci0:256"
  SUBSYSTEM=="bluetooth"
  DRIVER==""
  ATTR{power/control}=="auto"
  ATTR{power/runtime_active_time}=="0"
  ATTR{power/runtime_status}=="unsupported"
  ATTR{power/runtime_suspended_time}=="0"

由于没有能标识设备唯一性的 ATTR 属性,所以只能对所有蓝牙设备应用以下规则:

文件/etc/udev/rules.d/88-bluetooth.rules
# 当蓝牙设备连接时触发
ACTION=="add", SUBSYSTEM=="bluetooth", RUN+="/usr/bin/su king /home/king/.config/sway/scripts/bluetooth-connected.sh"
# 当蓝牙设备断开时触发
ACTION=="remove", SUBSYSTEM=="bluetooth", RUN+="/usr/bin/su king /home/king/.config/sway/scripts/bluetooth-disconnected.sh"
# udevadm control --reload

参考链接 #