
























如果你使用 Wayland Compositor(比如 Labwc、Sway、Niri 等)打造的轻量 Linux 桌面环境,在日常使用中,总会碰到连接蓝牙耳机或者蓝牙音箱的问题。
本文主要介绍在 Arch + Labwc 环境下,如何快速连接蓝牙耳机或者音箱(下文已音箱为例)。
这是我目前在使用的方式,在此之前,我是直接使用命令行连接的:
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 为断开连接。看起来简单朴实,没什么毛病。
我以前也的确是这么操作的,随着时间的推移,慢慢就觉得不对劲:
由于上述操作链路过长,有记忆负担,最终放弃使用。
我想到的替换方案是,使用 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
逻辑非常简单,点一下连接,再点一下断开,音箱没通电或者没开机等,弹出提示。
效果截图

细心的朋友可能会问,这样不是只能连接一个蓝牙设备吗?是的,主要在家里只用连接音箱,很少需要去连接别的设备,所以对我来说够用,简单直接。
那如果要连接多设备呢?当然也可以回退到命令行。
还可以用下面的方式。
其实 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 也是不错的,按需取舍即可。
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。