Arch linux如何顺畅连接蓝牙设备
周末在家使用Arch linux打游戏,需要连接 Airpdos Pro 或者蓝牙音箱,时间长了,积累了一些经验,特分享出来。
成熟的桌面环境如KDE、Gnome等,都有相关蓝牙连接GUI程序,实际上,个别情况下会出问题,还是要返回到命令行界面处理,我以前写过在Ubuntu上,无法连接蓝牙耳机的处理方法。
本文主要是写,在Arch + labwc自己定义环境下,如何保证始终能连上蓝牙设备的问题。
1. 如何连接蓝牙设备
我建议是直接一步到位,使用bluetoothctl命令行工具,可以说是Linux连接蓝牙设备的兜底方案。 Arch 先安装bluez包,这个软件包提供蓝牙协议栈, 而 bluez-utils 包提供 bluetoothctl 命令行工具,其他发行版类似,搜一下就知道。
蓝牙涉及控制模式的问题:
1➜ ~ grep ControllerMode -B3 /etc/bluetooth/main.conf
2# Restricts all controllers to the specified transport. Default value
3# is "dual", i.e. both BR/EDR and LE enabled (when supported by the HW).
4# Possible values: "dual", "bredr", "le"
5#ControllerMode = dual
分别是双向,传统的和低功耗模式,我问AI告诉我的😊,如果你的设备比较新,默认的dual就没有问题,实在不行尝试更换其他模式,修改配置要重启才会生效。
看上面的输出,我就是用默认的,实际我用AirPod Pro2,和 Aciton III 都可以正常连上。
以Action III为例(AirPods以前写过相关文章),演示过程如下。 首先,音箱接电源开启后,长按蓝牙匹配按钮,听到声响后:
1➜ ~ bluetoothctl
2[bluetooth]# Agent registered
3[bluetooth]# scan on
4[bluetooth]# SetDiscoveryFilter success
5[bluetooth]# Discovery started
6[bluetooth]# [CHG] Controller E4:C7:67:3F:6A:0A Discovering: yes
7[bluetooth]# [NEW] Device 77:FF:F0:47:08:D4 77-FF-F0-47-08-D4
8[bluetooth]# [NEW] Device C8:C2:E6:CC:9B:54 ACTON III [LE]
9[bluetooth]# [NEW] Device 7D:97:57:B3:41:3F 7D-97-57-B3-41-3F
10[bluetooth]# [NEW] Device 4B:40:4A:38:4F:92 4B-40-4A-38-4F-92
11[bluetooth]# [NEW] Device 50:5E:5C:95:0B:A4 ACTON III
12[bluetooth]# [NEW] Device 7A:02:E0:F1:DB:F6 7A-02-E0-F1-DB-F6
13[bluetooth]# connect [CHG] Device 7D:97:57:B3:41:3F RSSI: 0xffffffa4 (-92)
14[bluetooth]# connect 50:5E:5C:95:0B:A4
15Attempting to connect to 50:5E:5C:95:0B:A4
16[bluetooth]# [CHG] Device 7A:02:E0:F1:DB:F6 RSSI: 0xffffffa2 (-94)
17[ACTON III]# [CHG] Device 50:5E:5C:95:0B:A4 Connected: yes
18[ACTON III]# [CHG] Device 50:5E:5C:95:0B:A4 Modalias: bluetooth:v0094p0004d0100
19[ACTON III]# [CHG] Device 50:5E:5C:95:0B:A4 UUIDs: 00000000-0000-0000-0099-aabbccddeeff
20[ACTON III]# [CHG] Device 50:5E:5C:95:0B:A4 UUIDs: 00000000-deca-fade-deca-deafdecacaff
21[ACTON III]# [CHG] Device 50:5E:5C:95:0B:A4 UUIDs: 0000110b-0000-1000-8000-00805f9b34fb
22[ACTON III]# [CHG] Device 50:5E:5C:95:0B:A4 UUIDs: 0000110c-0000-1000-8000-00805f9b34fb
23[ACTON III]# [CHG] Device 50:5E:5C:95:0B:A4 UUIDs: 0000110e-0000-1000-8000-00805f9b34fb
24[ACTON III]# [CHG] Device 50:5E:5C:95:0B:A4 UUIDs: 00001200-0000-1000-8000-00805f9b34fb
25[ACTON III]# [CHG] Device 50:5E:5C:95:0B:A4 UUIDs: 0000ff01-0000-1000-8000-00805f9b34ff
26[ACTON III]# [CHG] Device 50:5E:5C:95:0B:A4 UUIDs: df21fe2c-2515-4fdb-8886-f12c4d67927c
27[ACTON III]# [CHG] Device 50:5E:5C:95:0B:A4 UUIDs: fa349b5f-8050-0030-0010-00001bbb231d
28[ACTON III]# [CHG] Device 50:5E:5C:95:0B:A4 ServicesResolved: yes
29[ACTON III]# [NEW] Device F9:83:83:EA:E2:D6 F9-83-83-EA-E2-D6
30[ACTON III]# [CHG] Device 50:5E:5C:95:0B:A4 Bonded: yes
31[ACTON III]# [CHG] Device 50:5E:5C:95:0B:A4 Paired: yes
32[ACTON III]# [NEW] Endpoint /org/bluez/hci0/dev_50_5E_5C_95_0B_A4/sep1
33[ACTON III]# [NEW] Transport /org/bluez/hci0/dev_50_5E_5C_95_0B_A4/sep1/fd0
34[ACTON III]# [CHG] Transport /org/bluez/hci0/dev_50_5E_5C_95_0B_A4/sep1/fd0 Delay: 0x05dc (1500)
35[ACTON III]# Connection successful
36[ACTON III]# [CHG] Transport /org/bluez/hci0/dev_50_5E_5C_95_0B_A4/sep1/fd0 Volume: 0x0013 (19)
37[ACTON III]# [NEW] Device 72:FF:AE:FE:20:06 72-FF-AE-FE-20-06
38[ACTON III]#
仔细看上面的输出,先 scan on
扫描蓝牙设备,[bluetooth]# [NEW] Device 50:5E:5C:95:0B:A4 ACTON III
表明已正确扫到 mac地址。
理所当然,[bluetooth]# connect 50:5E:5C:95:0B:A4
,接着的输出显示已经连接成功。
此外,还有 pair xxx, trust xxx,disconnet xxx,remove xxx等命令,xxx代表mac地址,看英文意思就能猜到是什么意思,还是比较好记的,按需选择就好。
绝大部分情况下,上述连接方式连接成功后,即可正常使用蓝牙设备(听到声音,调整音量),我手头的外接蓝牙设备只有这些,基本遇到问题很少。
对于AirPods Pro2,要想在各种通透、隔音模式下轻便使用,估计是想多了, 反正我只用打游戏听个响,主要还是在iOS设备下使用。 真实打 CS2 的时候,友方说一讲话就是很奇怪的电子颤抖音,我自己听不到,未成能有机会体验😅。
2. 遇到问题怎么办
上述步骤1,只是讲正常连上的时候,那万一遇到问题了呢?我目前的解决方式,罗列如下:
- 连着连着突然没声音了怎么办?
此时,蓝牙显示还是连接状态,但是没有声音,或者声音断续,这个问题在AirPods Pro2的确会遇到(Action III未遇到,买这个音箱的原因之一),不知道是我这个mini主机蓝牙模块发热的缘故,还是其它诡异原因。 我一般是重启再连,后来买独立音箱了,就没怎么使用过AirPods Pro2连接电脑玩游戏,带耳机玩游戏难受,而且电量还受限制。
重启后,重新走一遍连接流程,可以直接 connect your_mac_address
,至少Air Pods是可以的。
1sudo systemctl restart bluetooth.service
- 重启还是没声音怎么办
这个问题很关键,也是写这个文章的核心动力,我可是自己摸索了十几天知道的。可以说全中文网络,没有找到有相关分享,真没吹牛。
问题产生背景是,在没买音箱之前,我一直是用AirPdds连电脑听声音的,不知道从哪一天滚动升级 sudo pacman -Syu
后,整个套路不管用了,也就是说,我没有方式能听到电脑的声音。
后果很严重,打游戏听不到声音,长期被虐,我以为mini主机的蓝牙设备坏了,当时刚好双11快到了,所以顺带买个音箱试试看(还有个原因是想外放听音乐,音箱品质还可以)。
在音箱未到期间,我一直在和这个问题搏斗。各种招式都试过了,就是听不到响。 直到有一天,我发现,Sinks列表中,默认选择中的不是我的AirPods Pro2(设备前面的星号表示选中,当前的声音输出设备,该状况已无法重现)。
会不会就是这个问题呢?我有充分理由怀疑这个,以前正常使用的时候,瞄到过一眼。
1➜ ~ wpctl status
2PipeWire 'pipewire-0' [1.2.6, mephisto@minipc, cookie:3413408580]
3 └─ Clients:
4 32. WirePlumber [1.2.6, mephisto@minipc, pid:779]
5 33. pipewire [1.2.6, mephisto@minipc, pid:780]
6 46. WirePlumber [export] [1.2.6, mephisto@minipc, pid:779]
7 81. xdg-desktop-portal [1.2.6, mephisto@minipc, pid:953]
8 82. waybar [1.2.6, mephisto@minipc, pid:900]
9 83. wpctl [1.2.6, mephisto@minipc, pid:4354]
10
11Audio
12 ├─ Devices:
13 │ 47. Rembrandt Radeon High Definition Audio Controller [alsa]
14 │ 48. Family 17h/19h HD Audio Controller [alsa]
15 │
16 ├─ Sinks:
17 │ 52. Rembrandt Radeon High Definition Audio Controller HDMI / DisplayPort 4 Output [vol: 1.00]
18 │ 53. Rembrandt Radeon High Definition Audio Controller HDMI / DisplayPort 3 Output [vol: 1.00]
19 │ 54. Rembrandt Radeon High Definition Audio Controller HDMI / DisplayPort 2 Output [vol: 0.70]
20 │ 55. Rembrandt Radeon High Definition Audio Controller HDMI / DisplayPort 1 Output [vol: 1.00]
21 │ * 56. Family 17h/19h HD Audio Controller Line Output [vol: 0.50]
22 │
23 ├─ Sources:
24 │ 57. Family 17h/19h HD Audio Controller Front Stereo Microphone [vol: 1.00]
25 │ * 58. Family 17h/19h HD Audio Controller Digital Microphone [vol: 0.49]
26 │
27 ├─ Filters:
28 │
29 └─ Streams:
30
31Video
32 ├─ Devices:
33 │
34 ├─ Sinks:
35 │
36 ├─ Sources:
37 │
38 ├─ Filters:
39 │
40 └─ Streams:
41
42Settings
43 └─ Default Configured Devices:
44 0. Audio/Sink bluez_output.50_5E_5C_95_0B_A4.1
真是这个小细节拯救了我,这可能也是Linux用户的烦恼和快乐吧。
找到线索后,问题很快就解决了。
1pactl set-default-sink bluez_output.C0_95_6D_C0_A3_92.1
如果你遇到类似问题,上面一条命令即可救人于水火,意思就是设置你的默认输出设备,很离谱,Linux不能智能判定该使用那个设备输出!
当我分别设置耳机和音箱都为默认输出设备后,再也没有遇到听不到声响的问题了。
两个都设置为默认输出,不会有问题吗?不会,同一时间,正常人只会用一个设备听声响,不会冲突,大佬有特殊用法除外。
不明白上面的 Sinks、Sources是什么意思的,可以问问AI,我就是这么做的,管用。
还有个问题,bluez_output.C0_95_6D_C0_A3_92.1
这个地址咋来的?请看下面的操作。
1➜ ~ wpctl status
2PipeWire 'pipewire-0' [1.2.6, mephisto@minipc, cookie:3413408580]
3 └─ Clients:
4 32. WirePlumber [1.2.6, mephisto@minipc, pid:779]
5 33. pipewire [1.2.6, mephisto@minipc, pid:780]
6 46. WirePlumber [export] [1.2.6, mephisto@minipc, pid:779]
7 81. xdg-desktop-portal [1.2.6, mephisto@minipc, pid:953]
8 82. waybar [1.2.6, mephisto@minipc, pid:900]
9 89. wpctl [1.2.6, mephisto@minipc, pid:4651]
10
11Audio
12 ├─ Devices:
13 │ 47. Rembrandt Radeon High Definition Audio Controller [alsa]
14 │ 48. Family 17h/19h HD Audio Controller [alsa]
15 │ 83. ACTON III [bluez5]
16 │
17 ├─ Sinks:
18 │ 52. Rembrandt Radeon High Definition Audio Controller HDMI / DisplayPort 4 Output [vol: 1.00]
19 │ 53. Rembrandt Radeon High Definition Audio Controller HDMI / DisplayPort 3 Output [vol: 1.00]
20 │ 54. Rembrandt Radeon High Definition Audio Controller HDMI / DisplayPort 2 Output [vol: 0.70]
21 │ 55. Rembrandt Radeon High Definition Audio Controller HDMI / DisplayPort 1 Output [vol: 1.00]
22 │ 56. Family 17h/19h HD Audio Controller Line Output [vol: 0.50]
23 │ * 84. ACTON III [vol: 0.15]
24 │
25 ├─ Sources:
26 │ 57. Family 17h/19h HD Audio Controller Front Stereo Microphone [vol: 1.00]
27 │ * 58. Family 17h/19h HD Audio Controller Digital Microphone [vol: 0.49]
28 │
29 ├─ Filters:
30 │
31 └─ Streams:
32
33Video
34 ├─ Devices:
35 │
36 ├─ Sinks:
37 │
38 ├─ Sources:
39 │
40 ├─ Filters:
41 │
42 └─ Streams:
43
44Settings
45 └─ Default Configured Devices:
46 0. Audio/Sink bluez_output.50_5E_5C_95_0B_A4.1
47➜ ~ wpctl inspect 84
48id 84, type PipeWire:Interface:Node
49 api.bluez5.address = "50:5E:5C:95:0B:A4"
50 api.bluez5.codec = "sbc"
51 api.bluez5.profile = "a2dp-sink"
52 api.bluez5.transport = ""
53 bluez5.loopback = "false"
54 card.profile.device = "1"
55 * client.id = "46"
56 clock.quantum-limit = "8192"
57 device.api = "bluez5"
58 * device.id = "83"
59 device.routes = "1"
60 * factory.id = "12"
61 factory.name = "api.bluez5.a2dp.sink"
62 library.name = "audioconvert/libspa-audioconvert"
63 * media.class = "Audio/Sink"
64 media.name = "ACTON III"
65 * node.description = "ACTON III"
66 node.driver = "true"
67 node.loop.name = "data-loop.0"
68 * node.name = "bluez_output.50_5E_5C_95_0B_A4.1"
69 node.pause-on-idle = "false"
70 * object.serial = "97"
71 port.group = "stream.0"
72 * priority.driver = "1010"
73 * priority.session = "1010"
74 session.suspend-timeout-seconds = "0"
从 wpctl inspect 84
中 node.name = "bluez_output.50_5E_5C_95_0B_A4.1"
来的,84 是 sinks 设备的id,会动态变化,node.name一般不变。
仔细看上面输出的结尾部分,有个Default Configured Devices
,表明置是成功的。
wpctl是什么?是wireplumber的命令行工具。
wireplumber 是什么?WirePlumber 是一个用于管理 Linux 系统中音频和视频流的会话管理器。它取代了之前的 PulseAudio 会话管理器,主要负责处理多媒体流的路由和策略,感觉有点像互联网企业中网关的概念。
现在的Linux都使用PireWire,PipeWire是一个Linux系统上的用来处理音视频的底层多媒体框架。PipeWire开发出来的目的是为了替代PulseAudio,功能包括支持容器化应用的音频输出,和应对专业音频场景。 可以简单理解为,二者配套使用,名字都带个wire也就算是正常的。
- 经过上面的折腾后,我还是听不到响怎么办?
一般来说,极少遇到。遇到了,得保证设备能连上,sinks 里面选中的设备是对的。
在 bluetoothctl
命令行中,先disconnect xxx, 再remove xxx,然后重启bluetooth服务,重复连一次(ActionIII就会有类似机制,长时间不使用,会掉线,重连后即可)。
最后,你这么折腾,时间不要钱吗?我人穷,时间基本不值钱,能学到知识啊😅。躺雷急先锋,别人就不用挨炸了呀!真的有人写邮件感谢我的。总有人第一个吃螃蟹,况且真的能解决打游戏没有声音的问题。 你为什么不用Windows打游戏呢?我不喜欢Windows,喜欢命令行的感觉,除了内核,系统环境全部定制的,就好像很多人喜欢玩改装车一样,自己打造的工具才是最顺手的。
你这么雷锋,牺牲周末时间写文章,有什么目的吗?写文章扩大影响力,广告能搞钱(目前还没搞到大钱,赚够钱就退休,不卷其它牛马,回家到处玩),日积月累,顺带记录学习知识,升华一下,丰富了中文世界,还是有用的...
你的文章有多错别字,语句不是很顺通。证明是手敲的,我有时候很着急,牺牲周末时间很辛苦的,着急去干别的事情。
版权申明:
- 未标注来源的内容全部为原创,未经授权请勿转载(因转载后排版往往错乱、内容不可控、无法持续更新等);
- 非营利为目的,演绎本博客任何内容,请以'原文出处'或者'参考链接'等方式给出本站相关网页地址(方便读者)。
相关文章:
- Wayland 环境下gif录屏
- Ubuntu安装chrome的方法总结
- Linux安装最新版本Python
- Ubuntu 22.10连接蓝牙耳机报错br-connection-profile-unavailable解决方法
- Ubuntu连接AirPods耳机
- lvs端部署
- alacritty 终端使用
- 迷你主机组装记
- greetd和regreet使用教程
- 我的工具箱