Linux 启动脚本连接蓝牙并使用 cron 保持连接

Linux 启动脚本连接蓝牙并使用 cron 保持连接

我有一个迷你蓝牙键盘和一个运行基于 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 加密狗存在错误,并且在设备关机时没有与设备断开连接。我换了一个无品牌的廉价加密狗,它工作得很好。

的组合来自 arch wiki 的信息Benny Bottema 的博客文章

答案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

相关内容