Wayland合成器下快速連接藍牙設備
如果你使用 Wayland Compositor(比如 Labwc、Sway、Niri 等)打造的輕量 Linux 桌面環境,在日常使用中,總會碰到連接藍牙耳機或者藍牙音箱的問題。
本文主要介紹在 Arch + Labwc 環境下,如何快速連接藍牙耳機或者音箱(下文已音箱爲例)。
1. 通過 Waybar 觸發腳本連接
這是我目前在使用的方式,在此之前,我是直接使用命令行連接的:
1➜ ~ abbr | grep acton3
2abbr -a -- acton3 'bluetoothctl connect 50:5E:5C:95:0B:A4'
3abbr -a -- dis-acton3 'bluetoothctl disconnect 50:5E:5C:95:0B:A4'
看上面 Fish 的 abbr,所謂 abbr 是 fish 內置縮寫(abbreviation)工具,區別於傳統 alias:輸入縮寫按空格 / 回車會實時展開完整命令,可編輯後再執行,歷史記錄存完整命令,可以簡單理解爲 alias 變種。
上面的配置意思是:輸入 acton3 連接藍牙音箱 ACTON III,反之 dis-acton3 爲斷開連接。看起來簡單樸實,沒什麼毛病。
我以前也的確是這麼操作的,隨着時間的推移,慢慢就覺得不對勁:
- 每次需要先打開終端;
- 然後還要輸入命令;
- 要記住這個 alias 縮寫,每當你長假歸來打開電腦,你可能會忘記別名。
由於上述操作鏈路過長,有記憶負擔,最終放棄使用。
我想到的替換方案是,使用 waybar 的藍牙模塊,觸發腳本自動連接。
示例配置如下:
1"bluetooth": {
2 "format": "{status}",
3 "format-on": "{status}|none",
4 "format-off": "{status}",
5 "format-disabled": "{status}",
6 "format-connected": "{device_alias}",
7 "format-connected-battery": " {device_alias} {device_battery_percentage}%",
8 // "format-device-preference": [ "device1", "device2" ], // preference list deciding the displayed device
9 "tooltip-format": "{controller_alias}\t{controller_address}\n{num_connections} connected",
10 "tooltip-format-connected": "{controller_alias}\t{controller_address}\n{num_connections} connected\n{device_enumerate}",
11 "tooltip-format-enumerate-connected": "{device_alias}\t{device_address}",
12 "tooltip-format-enumerate-connected-battery": "{device_alias}\t{device_address}\t{device_battery_percentage}%",
13 "on-click": "~/.config/waybar/scripts/bluetooth-toggle.sh"
14},
在 Waybar 中,on-click 屬性用於爲狀態欄模塊添加鼠標點擊交互事件。
| 事件屬性 | 觸發條件 |
|---|---|
| on-click | 鼠標 左鍵 單擊 |
| on-click-release | 釋放鼠標 左鍵 |
| on-click-right | 鼠標 右鍵 單擊 |
| on-click-middle | 鼠標 中鍵(滾輪)單擊 |
| on-double-click | 鼠標 左鍵 雙擊 |
| on-triple-click | 鼠標 左鍵 三擊 |
| on-scroll-up | 鼠標滾輪 向上 滾動 |
| on-scroll-down | 鼠標滾輪 向下 滾動 |
從上述配置可看出,我選的單擊左鍵觸發腳本連接藍牙音箱。
腳本示例如下:
1➜ ~ cat ~/.config/waybar/scripts/bluetooth-toggle.sh
2#!/bin/bash
3BLUETOOTH_MAC="50:5E:5C:95:0B:A4"
4WAIT=0.2
5
6notify() {
7 notify-send -i audio-speakers "$1" "$2"
8}
9
10# 確保藍牙已開啓
11if ! bluetoothctl show | grep -q "Powered: yes"; then
12 notify "藍牙未開啓" "正在開啓..."
13 bluetoothctl power on >/dev/null 2>&1
14 sleep $WAIT
15fi
16
17# 獲取當前連接狀態
18info=$(bluetoothctl info "$BLUETOOTH_MAC")
19
20if echo "$info" | grep -q "Connected: yes"; then
21 # 已連接 → 斷開
22 bluetoothctl disconnect "$BLUETOOTH_MAC" >/dev/null 2>&1
23 notify "已斷開⏹️" "$BLUETOOTH_MAC"
24else
25 # 嘗試連接
26 bluetoothctl connect "$BLUETOOTH_MAC" >/dev/null 2>&1
27 sleep $WAIT
28
29 # 驗證結果
30 if bluetoothctl info "$BLUETOOTH_MAC" | grep -q "Connected: yes"; then
31 notify "連接成功✅" "$BLUETOOTH_MAC"
32 else
33 notify "連接失敗❌" "藍牙設備未開機或不在附近"
34 exit 1
35 fi
36fi
邏輯非常簡單,點一下連接,再點一下斷開,音箱沒通電或者沒開機等,彈出提示。
效果截圖

細心的朋友可能會問,這樣不是隻能連接一個藍牙設備嗎?是的,主要在家裏只用連接音箱,很少需要去連接別的設備,所以對我來說夠用,簡單直接。
那如果要連接多設備呢?當然也可以回退到命令行。
還可以用下面的方式。
2. 使用 orbit 這個 GUI 工具管理藍牙設備
其實 Linux 管理藍牙設備的 GUI 工具也有好多,比如 blueman、blueberry 等,都特麼醜得哭,完全看不上眼。
我自己搜索了下,orbit 是最近幾個月才冒出來的工具,Rust 寫的,UI 用的 GTK4,整個界面看其還挺美觀協調。
示例圖片:

它不光能管理藍牙,還能管理 Wi-Fi 和 VPN,也可以和 waybar 結合使用,還可以
1orbit toggle --tab [wifi|bluetooth|vpn]
這樣聚焦到某個子 tab,看起來這個作者是很懂非完整 DE 痛點的。
完整的說明使用方式請看 https://github.com/LifeOfATitan/orbit 的 README 文件,懶得寫了,簡單易用,還是值得推薦的。
要說不足,那就是使用要多啓動一個進程😅(話說,沒有進程怎麼提供功能?bluetoothctl 還要 bluetoothd 呢?沒毛病啊!)
1systemctl --user enable --now orbit
說這麼多,你爲什麼不用?我用上面 1 的方式就足夠了,簡單明瞭,wifi 等我都用 waybar 顯示,tui 管理的。如果你需要[wifi|bluetooth|vpn]三合一的工具,爲什麼不用呢?
綜上所術,如果你想簡單,不連接多設備,就用 waybar 的藍牙模塊配合自定義腳本;如果想同時管理[wifi|bluetooth|vpn],或者更喜歡 GUI 操作,使用 Orbit 也是不錯的,按需取捨即可。

版權申明:
- 未標註來源的內容皆為原創,未經授權請勿轉載(因轉載後排版往往錯亂、內容不可控、無法持續更新等);
- 非營利為目的,演繹本博客任何內容,請以'原文出處'或者'參考鏈接'等方式給出本站相關網頁地址(方便讀者)。
相關文章:
- Rofi試用
- 我的工具箱
- Arch 重裝記錄
- Labwc更換定製皮膚
- 網站導航欄防止插入Adsense自動廣告
- 截圖標記工具Satty推薦
- 修復rime-ice無法彈出候選框的問題
- 開機滾動字體顯示優化
- 樹莓派上部署Vaultwarden
- 使用goaccess即時分析Caddy日誌