惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

Security Latest
Security Latest
Recorded Future
Recorded Future
人人都是产品经理
人人都是产品经理
S
SegmentFault 最新的问题
Hacker News - Newest:
Hacker News - Newest: "LLM"
C
CXSECURITY Database RSS Feed - CXSecurity.com
博客园 - 三生石上(FineUI控件)
博客园 - 聂微东
P
Privacy & Cybersecurity Law Blog
WordPress大学
WordPress大学
Know Your Adversary
Know Your Adversary
Spread Privacy
Spread Privacy
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
量子位
L
LINUX DO - 热门话题
L
Lohrmann on Cybersecurity
博客园 - Franky
酷 壳 – CoolShell
酷 壳 – CoolShell
T
Tor Project blog
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
雷峰网
雷峰网
阮一峰的网络日志
阮一峰的网络日志
V
Visual Studio Blog
T
Threatpost
T
Tenable Blog
有赞技术团队
有赞技术团队
大猫的无限游戏
大猫的无限游戏
Engineering at Meta
Engineering at Meta
GbyAI
GbyAI
C
Cisco Blogs
H
Heimdal Security Blog
Attack and Defense Labs
Attack and Defense Labs
A
About on SuperTechFans
Last Week in AI
Last Week in AI
N
News and Events Feed by Topic
T
Threat Research - Cisco Blogs
cs.AI updates on arXiv.org
cs.AI updates on arXiv.org
I
Intezer
V
V2EX
Cyberwarzone
Cyberwarzone
cs.CL updates on arXiv.org
cs.CL updates on arXiv.org
B
Blog RSS Feed
V
Vulnerabilities – Threatpost
N
Netflix TechBlog - Medium
T
The Blog of Author Tim Ferriss
CTFtime.org: upcoming CTF events
CTFtime.org: upcoming CTF events
U
Unit 42
PCI Perspectives
PCI Perspectives
P
Privacy International News Feed
D
Docker

mephisto.cc

修复rime-ice无法弹出候选框的问题 开机滚动字体显示优化 个人网站安全防护 树莓派上部署Vaultwarden 使用goaccess实时分析Caddy日志 个人网站监控 Hugo全站AVIF记 Linux下尝试使用Godot开发小游戏 Arch linux dae 透明代理 Airflow接管galler-dl下载任务 如何使用gallery-dl批量下载图像 Arch核显下如何愉快玩Dota2和CS2 Arch/labwc 环境网络相关设置 Rime添加dota2词库 Arch 重装记录 Supertuxkart iOS版终于发布了 打造自己的流媒体音乐服务 剪切板管理工具clipcat推荐 MangoHud性能监控 微信小程序开发记 Rofi试用 解决Arch下VSCode无法输入中文的问题 独立窗口管理器下无法录屏问题处理 上海市二手房成交数据监控 OpenLDAP监控 使用Git和Ansible管理配置文件 Arch Linux SSL VPN 客户端配置 简单获取celery任务实时结果 Arch linux下iNode客户端的安装和使用方法 券商费率调整记 迷你主机组装记 Labwc更换定制皮肤 树莓派跑分流代理 实用自动代理配置示例 九年老鼠标复活记 Openvpn示例 Mac下如何旋转webp图片 如何隐藏Vscode中Markdown PDF插件的头部内容 解决Linux下网络配置无法变更保存的问题 labwc环境启用wlogout Ubuntu下新官方微信尝鲜 简单检测用户是否开启广告屏蔽 Atuin ZFS下卡顿问题解决 Wine安装64位微信 Fish 和 Atuin使用记 Fastapi简单实现临时下载链接 Fastapi微信公众号开发简要 Hugo根据语种展示不同内容 如何修复Waybar微信图标错误 信封加密简要 Linux环境下维护公众号记录 快速隐藏和呼出终端 Wayland环境自动切换壁纸 SuperTuxKart 试玩 简单抓取雪球股票快讯 为什么你的kill命令不能列出信号表 Wine安装微信保姆教程 Hysteria科学上网简要 Ubuntu 23.10 钉钉无法启动解决方法 网站导航栏防止插入Adsense自动广告 Linux环境按键检测 Hugo文末添加最后修改时间 Wayland环境ksnip无法复制问题解决 我眼中的股票市场 Caddy简单图片防盗链 greetd和regreet使用教程 Wayland环境下截图加后期修改 Wayland 环境下gif录屏 Firefox的一些有趣功能 Ubuntu 切换系统语言 Firefox 标题栏高度调整 网站添加回到顶部功能 Hugo自定义字体 Labwc 便捷配置 Wofi使用教程 窗口管理器labwc使用记 文件共享软件Dufs推荐 Hugo静态站点接入Adsense广告 Fcitx5配置详解 Ubuntu安装chrome的方法总结 一种Xterm.js的全屏方案 Google网址收录api Python示例 手机听离线音乐 Snipe it资产导入 应用启动器yofi使用配置 Snipe it资产管理系统安装使用 Ubuntu开机启动加速 Vue3 vite TypeScript跨域等相关设置 Ubuntu手动升级Libreoffice Ubuntu设置alacritty为默认终端 简体文章批量转换为繁体 使用Inkscape调整svg图片大小 实用命令 使用mitmproxy给手机app抓包 Python中rstrip方法细解 Github同主机多仓库部署deploy key问题处理 Linux安装最新版本Python KeePassXC使用教程 Ubuntu 22.10连接蓝牙耳机报错br-connection-profile-unavailable解决方法 Caddy日志配置轮转和格式化
Arch linux如何顺畅连接蓝牙设备
2024-11-24 · via mephisto.cc

周末在家使用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]
1516 ├─ 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]
2223 ├─ 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]
2627 ├─ Filters:
2829 └─ Streams:
30
31Video
32 ├─ Devices:
3334 ├─ Sinks:
3536 ├─ Sources:
3738 ├─ Filters:
3940 └─ 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]
1617 ├─ 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]
2425 ├─ 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]
2829 ├─ Filters:
3031 └─ Streams:
32
33Video
34 ├─ Devices:
3536 ├─ Sinks:
3738 ├─ Sources:
3940 ├─ Filters:
4142 └─ 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 84node.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,喜欢命令行的感觉,除了内核,系统环境全部定制的,就好像很多人喜欢玩改装车一样,自己打造的工具才是最顺手的。

你这么雷锋,牺牲周末时间写文章,有什么目的吗?写文章扩大影响力,广告能搞钱(目前还没搞到大钱,赚够钱就退休,不卷其它牛马,回家到处玩),日积月累,顺带记录学习知识,升华一下,丰富了中文世界,还是有用的...

你的文章有多错别字,语句不是很顺通。证明是手敲的,我有时候很着急,牺牲周末时间很辛苦的,着急去干别的事情。