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

推荐订阅源

博客园 - 司徒正美
大猫的无限游戏
大猫的无限游戏
腾讯CDC
J
Java Code Geeks
博客园 - 【当耐特】
Microsoft Azure Blog
Microsoft Azure Blog
V
Visual Studio Blog
人人都是产品经理
人人都是产品经理
博客园 - Franky
博客园 - 聂微东
阮一峰的网络日志
阮一峰的网络日志
美团技术团队
云风的 BLOG
云风的 BLOG
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
U
Unit 42
雷峰网
雷峰网
B
Blog RSS Feed
博客园_首页
量子位
F
Fortinet All Blogs
罗磊的独立博客
H
Hackread – Cybersecurity News, Data Breaches, AI and More
酷 壳 – CoolShell
酷 壳 – CoolShell
C
Check Point Blog

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监控 Arch linux如何顺畅连接蓝牙设备 使用Git和Ansible管理配置文件 Arch Linux SSL VPN 客户端配置 简单获取celery任务实时结果 Arch linux下iNode客户端的安装和使用方法
Wayland合成器下快速连接蓝牙设备
2026-06-24 · via mephisto.cc

如果你使用 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

逻辑非常简单,点一下连接,再点一下断开,音箱没通电或者没开机等,弹出提示。

效果截图

bluetooth all

细心的朋友可能会问,这样不是只能连接一个蓝牙设备吗?是的,主要在家里只用连接音箱,很少需要去连接别的设备,所以对我来说够用,简单直接。

那如果要连接多设备呢?当然也可以回退到命令行。

还可以用下面的方式。

2. 使用 orbit 这个 GUI 工具管理蓝牙设备

其实 Linux 管理蓝牙设备的 GUI 工具也有好多,比如 blueman、blueberry 等,都特么丑得哭,完全看不上眼。

我自己搜索了下,orbit 是最近几个月才冒出来的工具,Rust 写的,UI 用的 GTK4,整个界面看其还挺美观协调。

示例图片:

orbit

它不光能管理蓝牙,还能管理 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 也是不错的,按需取舍即可。