我有一个迷你蓝牙键盘和一个运行基于 Debian 的发行版的 Raspberry Pi。我知道键盘的 MAC 地址,但对于这个问题,我们只使用AA:BB:CC:DD:EE:FF
。现在我必须连接有线键盘以及用于迷你键盘的蓝牙适配器。在有线键盘上,我必须在设备启动时运行以下命令:
sudo hidd --connect AA:BB:CC:DD:EE:FF
如果设备空闲时间过长,蓝牙就会断开连接,我必须拿出有线键盘并重新输入相同的命令。
我正在寻找一种在启动时运行该命令的方法,以及一种感知它是否断开连接以便它自动重新连接的方法。
令人讨厌的是,当我运行该命令时,键盘必须处于配对模式(即使它已经配对),否则它会告诉我主机已关闭。因此,也许脚本需要防止它不会因为不活动而断开连接,否则我必须将其重新置于配对模式才能重新连接。
总结一下:
- 启动时连接的脚本。我可以确保在打开键盘之前将其置于配对模式。
- 一个防止其断开连接的脚本。也许每 60 秒向其发送某种信号或类似的东西?
答案1
(替换XX:XX:XX:XX:XX:XX
为您设备的蓝牙地址)
安装蓝牙支持。
# pacman -S bluez
创建设备配置文件。
# nano /etc/bluetooth/hcid.conf
device XX:XX:XX:XX:XX:XX {
name "Apple Wireless Keyboard";
auth enable;
encrypt enable;
}
启用蓝牙。
# nano /etc/conf.d/bluetooth
DAEMON_ENABLE="true"
HIDD_ENABLE="true"
添加守护进程。确保 dbus 首先出现。
# nano /etc/rc.conf
DAEMONS=(… dbus bluetooth)
重启。
测试连接(确保键盘可发现,否则将失败)。
# hidd --connect XX:XX:XX:XX:XX:XX
为了在键盘进入睡眠模式后重新连接,我们创建了自己的守护进程,每秒检查一次键盘是否连接。如果是,则它在该循环中不执行任何操作,否则它将尝试连接到 中指定的地址address
。
创建脚本来运行守护进程。
# nano /etc/rc.d/connect-bt-devs
#!/bin/bash
/etc/rc.d/connect-bt-devs.sh &
exit 0
创建脚本。
# nano /etc/rc.d/connect-bt-devs.sh
#!/bin/bash
address="XX:XX:XX:XX:XX:XX"
while (sleep 1)
do
connected=$(hidd --show) > /dev/null
if [[ ! $connected =~ .*${address}.* ]] ; then
hidd --connect ${address} > /dev/null 2>&1
fi
done
使它们可执行。
# chmod +x /etc/rc.d/connect-bt-devs
# chmod +x /etc/rc.d/connect-bt-devs.sh
添加守护进程。
# nano /etc/rc.conf
DAEMONS=(… connect-bt-devs)
重启。
我第一次这样做时,脚本首次连接时它可以正常工作,但之后每当自定义守护进程尝试使用重新唤醒的键盘重新连接时,控制台上都会出现令人讨厌的崩溃报告。经过进一步调查,发现这是因为 Belkin 加密狗存在错误,并且在设备关机时没有与设备断开连接。我换了一个无品牌的廉价加密狗,它工作得很好。
答案2
旧帖,但我搜索了整个网络以寻找可接受的解决方案。这里就是……快速又简单
创建设备配置文件。
# nano /etc/bluetooth/hcid.conf
device XX:XX:XX:XX:XX:XX {
name "Apple Wireless Keyboard";
auth enable;
encrypt enable;
}
运行并将此行添加到您的 /etc/rc.local
# hidd --server