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耳機
- Ubuntu連接AirPods耳機
- lvs端部署
- alacritty 終端使用
- 迷你主機組裝記
- greetd和regreet使用教程