linux命令行连接蓝牙键盘

news/2024/11/15 3:41:53/

在KDE的图形界面连接蓝牙设备非常的方便,图形化点点就行了。

图形化连接

基础

#安装 
sudo pacman -S bluez bluez-utils
#开机启动
sudo systemctl enable bluetooth.service
#立即开启
sudo systemctl start bluetooth.service

蓝牙图形化管理工具安装

sudo pacman -S bluedevil

安装了以上内容后,在KDE的图形界面就可以连接蓝牙设备了。非常方便。

命令行连接

既然图形化的连接已经非常的方便了,那么为什么还在搞命令行的连接呢?我有苦衷啊,我用的i3wm直接调用KDE的设置中的蓝牙连接,怎么也连接不上。那也只能从命令行连接了。
参考wiki:https://wiki.archlinux.org/title/Bluetooth_(%E7%AE%80%E4%BD%93%E4%B8%AD%E6%96%87)

加载btusb内核模块

通用蓝牙驱动是 btusb 内核模块。检查 模块是否加载了。如果没有就先加载模块。
我这边是要手动加载的

modprobe btusb

每次开机要手动加载,太麻烦了。设置自动加载方法:

cd /etc/modules-load.d
nvim btusb.conf

文件内容如下:

btusb

自动加载内核模块参考:
https://wiki.archlinux.org/title/Kernel_module_%28%E7%AE%80%E4%BD%93%E4%B8%AD%E6%96%87%29#%E4%BD%BF%E7%94%A8systemd%E8%87%AA%E5%8A%A8%E5%8A%A0%E8%BD%BD%E6%A8%A1%E5%9D%97

bluetoothctl

因为上面图形化的连接方便,已经安装了一些包,所以我可以直接 使用以下命令了。如果你的电脑中没有以下命令请安装一下上面的一些包试试。

下面内容是直接复制wiki上的内容的。

运行 bluetoothctl 交互命令。输入 help 来获取帮助。

  1. (可选操作) 选择一个默认的蓝牙接收器select MAC_address.
  2. 使用命令 power on 打开蓝牙,蓝牙默认是关闭的,并且重启之后默认也会关闭,参照 #开机后自动启动.
  3. 使用命令 agent on (推荐)选择要连接的设备类型或者去选择一个特定的类型: 如果你在 agent 命令后按下两次tab键, 你应该看到一些可以使用的类型列表,比如 DisplayOnly KeyboardDisplay NoInputNoOutput DisplayYesNo KeyboardOnly off on.
  4. 使用命令 default-agent 去确认并完成要连接的设备类型
  5. 使用命令 devices 去获得想要去配对的设备MAC地址
  6. 如果设备没有出现在上一步的列表中,使用命令 scan on 去搜索发现所有可配对的设备
  7. 使用命令 pair MAC_address 去配对设备(tab键可以自动补全MAC地址)
  8. 如果配对设备不需要配对码(PIN), 那么你可能需要手动将给设备添加到信任列表,使用命令 trust MAC_address
  9. 使用命令 connect MAC_address 去确认最后的连接
    以下为一个交互实例:
# bluetoothctl 
[NEW] Controller 00:10:20:30:40:50 pi [default]
[bluetooth]# agent KeyboardOnly 
Agent registered
[bluetooth]# default-agent 
Default agent request successful
[bluetooth]# power on
Changing power on succeeded
[CHG] Controller 00:10:20:30:40:50 Powered: yes
[bluetooth]# scan on
Discovery started
[CHG] Controller 00:10:20:30:40:50 Discovering: yes
[NEW] Device 00:12:34:56:78:90 myLino
[CHG] Device 00:12:34:56:78:90 LegacyPairing: yes
[bluetooth]# pair 00:12:34:56:78:90
Attempting to pair with 00:12:34:56:78:90
[CHG] Device 00:12:34:56:78:90 Connected: yes
[CHG] Device 00:12:34:56:78:90 Connected: no
[CHG] Device 00:12:34:56:78:90 Connected: yes
Request PIN code
[agent] Enter PIN code: 1234
[CHG] Device 00:12:34:56:78:90 Paired: yes
Pairing successful
[CHG] Device 00:12:34:56:78:90 Connected: no
[bluetooth]# connect 00:12:34:56:78:90
Attempting to connect to 00:12:34:56:78:90
[CHG] Device 00:12:34:56:78:90 Connected: yes
Connection successful

我根据这个操作实例成功的连接了我的蓝牙设备了。有了 这个命令连接蓝牙键盘的经历,以为就算在命令行中,我也会连接蓝牙了。

以下是我实现录入命令,把关键的命令和结果显示出来,方便命令的复制

#进入蓝牙设备交互程序
bluetoothctl
#选择要连接的设备类型
agent KeyboardOnly
default-agent
#打开蓝牙,蓝牙默认是关闭的,并且重启之后默认也会关闭
power on
#扫描可以连接的蓝牙设备
scan on
#[CHG] Controller 8C:B8:7E:E7:2C:27 Discovering: yes
#[NEW] Device F4:73:35:40:04:F4 Keyboard K380
#连接上面搜到的蓝牙键盘的MAC地址,会有个提示输入PassKey按蓝牙键盘的相应按钮
pair F4:73:35:40:04:F4
#[agent] Passkey: 258038
#[CHG] Device F4:73:35:40:04:F4 Paired: yes
#Pairing successful
#配对成功以后,需要进行connect 连接后才可以正常连接蓝牙设备
connect F4:73:35:40:04:F4
#[CHG] Device F4:73:35:40:04:F4 Connected: yes
#Connection successful

信任设备

以上操作完成以后,发现每次蓝牙断开重新连接,就会有一个提示信息。如果不确认设备就无法正常连接。这对于蓝牙键盘很不方便。询问信息如下:

[CHG] Device F4:73:35:40:04:F4 Connected: yes
Authorize service
[agent] Authorize service 00001124-0000-1000-8000-00805f9b34fb (yes/no): yes

后来根据测试,是因为设备没有被信任导致的。
trust 设备MAC地址

trust F4:73:35:40:04:F4

查询设备信息

info F4:73:35:40:04:F4

设置开机后自动启动

蓝牙在重启后默认不会自动启动。你只需要将 AutoEnable=true 添加在 /etc/bluetooth/main.conf 底部的 [Policy] 下面:

nvim /etc/bluetooth/main.conf

内容如下:

[Policy]
AutoEnable=true

删除重新连接

因为我是windows和Linux双系统,平时大多时间在linux中使用蓝牙键盘。但是偶尔在windows连接过蓝牙键盘后,就会发现回到linux时,蓝牙键盘已经无法连接了。

我的目前解决办法比较愚笨一些。就是把设备删除了重新连接。至少能解决问题,更好的解决办法以后有空在尝试吧。

#删除已经配对的蓝牙设备
remove F4:73:35:40:04:F4
#重新配对方法与之前一致,我也写一下方便我以后直接复制。
pair F4:73:35:40:04:F4
connect F4:73:35:40:04:F4
trust F4:73:35:40:04:F4

以上删除重新连接,有时会遇到怎么也配对不上的问题。这样的问题,我的解决办法:

  1. 尝试关闭键盘,重新开启键盘。
  2. 尝试切换其他的连接端(比较我的K380可以同时连接3个设备,切成别的试试)

经过折腾彻底解决了,蓝牙键盘多系统中切换的问题。
《windows11 + linux 蓝牙连接问题》 https://blog.csdn.net/lxyoucan/article/details/125594711

总结

完成以上操作,终于可以开机自动启动并自动连接蓝牙键盘啦。这下方便了不少。

这么折腾的主要原因是我这台笔记本电脑自带的键盘目前没找到驱动的方法。每次只能先用鼠标点软键盘onboard然后连接蓝牙键盘。

一劳永逸,舒服。

参考

https://wiki.archlinux.org/title/Bluetooth_(%E7%AE%80%E4%BD%93%E4%B8%AD%E6%96%87)
https://wiki.gentoo.org/wiki/Bluetooth


http://www.ppmy.cn/news/554519.html

相关文章

【85 backtrader-cs因子测试的一些高级技巧-2】使用cython、c语言和c++加速某些函数的计算

在上一篇文章:【85 backtrader-cs因子测试的一些高级技巧】使用numba加速某些函数的计算中,使用了numba改进某些函数,实现加速,在这一篇文章中,尝试接着上一篇文章的主题,继续尝试用cython,c语言和c++尝试改进decayliear函数的计算速度。 结论: 从图上似乎可以得到下面…

【数据库必备知识】索引和事务

数据库系列文章 1. 零基础带你快速上手SQL语言2. 玩转表及其数据3. 上手表设计 4. 索引和事务 目录 📖前言 1. 索引 1.1 索引的概念 1.2 索引的作用 1.3 索引的使用场景 1.4 索引的使用 1.5 索引背后的数据结构(B树) 2. 事务 2.1 事务的概念 2.2 数据库使…

BZOJ 4311 向量

留坑 转载于:https://www.cnblogs.com/zzyer/p/8504519.html

4311 编写递归函数getPower计算x的y次方

【题目描述】 编写递归函数getPower计算x的y次方&#xff0c;在同一个程序中针对整型和实型实现两个重载的函数(当y<0时&#xff0c;返回0)&#xff1a; int getPower(int x, int y); //整型版本 double getPower(double x, int y); //实型版本 在主程序中实现输入输出&…

bzoj4311: 向量(线段树分治+凸包)

传送门 题意&#xff1a; 支持插入一个向量&#xff0c;删去某一个现有的向量&#xff0c;查询现有的所有向量与给出的一个向量的点积的最大值。 思路&#xff1a; 考虑线段树分治。 先对于每个向量处理出其有效时间放到线段树上面&#xff0c;然后考虑查询&#xff1a;对于两个…

2019.02.26 bzoj4311: 向量(线段树分治+凸包)

传送门 题意&#xff1a; 支持插入一个向量&#xff0c;删去某一个现有的向量&#xff0c;查询现有的所有向量与给出的一个向量的点积的最大值。 思路&#xff1a; 考虑线段树分治。 先对于每个向量处理出其有效时间放到线段树上面&#xff0c;然后考虑查询&#xff1a;对于两个…

洛谷P4311 士兵占领

题目链接&#xff1a;https://www.luogu.org/problemnew/show/P4311 知识点&#xff1a;  最大流 解题思路&#xff1a; 对于每一行&#xff0c;建立一条从源点到该行的边&#xff0c;容量为这一行能不放置士兵的点数&#xff1b; 对于每一列&#xff0c;建立一条从该列到汇点…

hdu_4311_Meeting point-1(曼哈顿距离)及其拓展

hdu_4311_Meeting point-1(曼哈顿距离&#xff09;及其拓展 题目链接 题目描述 给定n个点&#xff0c;找出其中一个点&#xff0c;使得其他点到这个点的曼哈顿距离和最小&#xff0c;求这个最小距离和。 Sample Input 4 6 -4 -1 -1 -2 2 -4 0 2 0 3 5 -2 6 0 0 2 0 -5 -2 2 …