Linux 启动脚本连接到蓝牙和 cron 以保持连接

D.R*_*.R. 5 linux bash bluetooth cron

我有一个迷你蓝牙键盘和一个运行基于 Debian 的发行版的 Raspberry Pi。我知道键盘的 MAC 地址,但对于这个问题,让我们使用AA:BB:CC:DD:EE:FF. 现在我必须连接有线键盘以及用于迷你键盘的蓝牙加密狗。在有线键盘上,我必须在设备启动时运行以下命令:

sudo hidd --connect AA:BB:CC:DD:EE:FF
Run Code Online (Sandbox Code Playgroud)

如果设备空闲时间过长,蓝牙就会断开连接,我必须拔出有线键盘并重新键入相同的命令。

我正在寻找的是一种在启动时运行该命令的方法,以及一种检测它是否断开连接以便自动重新连接的方法。

令人讨厌的是,当我运行该命令时,键盘必须处于配对模式(即使它已经配对),否则它会告诉我主机已关闭。因此,脚本可能需要防止它因不活动而断开连接,否则我将不得不将其重新置于配对模式以重新连接。

所以回顾一下:

  • 在启动时连接的脚本。我可以确保在打开键盘之前将键盘置于配对模式。
  • 防止它断开连接的脚本。也许某种信号每 60 秒发送一次?

Sam*_*mer 1

(代替XX:XX:XX:XX:XX:XX为您设备的蓝牙地址)

\n\n

安装蓝牙支持。

\n\n
# pacman -S bluez\n
Run Code Online (Sandbox Code Playgroud)\n\n

创建设备配置文件。

\n\n
# nano /etc/bluetooth/hcid.conf\ndevice XX:XX:XX:XX:XX:XX {\n  name "Apple Wireless Keyboard";\n  auth enable;\n  encrypt enable;\n}\n
Run Code Online (Sandbox Code Playgroud)\n\n

启用蓝牙。

\n\n
# nano /etc/conf.d/bluetooth\nDAEMON_ENABLE="true"\nHIDD_ENABLE="true"\n
Run Code Online (Sandbox Code Playgroud)\n\n

添加守护进程。确保 dbus 首先出现。

\n\n
# nano /etc/rc.conf\nDAEMONS=(\xe2\x80\xa6 dbus bluetooth)\n
Run Code Online (Sandbox Code Playgroud)\n\n

重启。

\n\n

测试连接(确保键盘可发现,否则将会失败)。

\n\n
# hidd --connect XX:XX:XX:XX:XX:XX\n
Run Code Online (Sandbox Code Playgroud)\n\n

为了在键盘进入睡眠模式后能够重新连接键盘,我们创建了自己的守护进程,该守护进程每秒检查键盘是否连接一次。如果是,则该周期不执行任何操作,否则它将尝试连接到中指定的地址address

\n\n

创建脚本来运行守护程序。

\n\n
# nano /etc/rc.d/connect-bt-devs\n#!/bin/bash\n/etc/rc.d/connect-bt-devs.sh &\nexit 0\n
Run Code Online (Sandbox Code Playgroud)\n\n

创建脚本。

\n\n
# nano /etc/rc.d/connect-bt-devs.sh\n\n#!/bin/bash\naddress="XX:XX:XX:XX:XX:XX"\nwhile (sleep 1)\ndo\n  connected=$(hidd --show) > /dev/null\n  if [[ ! $connected =~ .*${address}.* ]] ; then\n    hidd --connect ${address} > /dev/null 2>&1\n  fi\ndone\n
Run Code Online (Sandbox Code Playgroud)\n\n

使它们可执行。

\n\n
# chmod +x /etc/rc.d/connect-bt-devs\n# chmod +x /etc/rc.d/connect-bt-devs.sh\n
Run Code Online (Sandbox Code Playgroud)\n\n

添加守护进程。

\n\n
# nano /etc/rc.conf\nDAEMONS=(\xe2\x80\xa6 connect-bt-devs)\n
Run Code Online (Sandbox Code Playgroud)\n\n

重启。

\n\n

当我第一次这样做时,它在脚本首次连接时起作用,但每当自定义守护程序尝试与重新唤醒的键盘重新连接时,我都会在控制台上收到令人讨厌的崩溃报告。经过更多调查后发现,这是因为贝尔金加密狗有问题,并且在设备断电时没有与设备断开连接。我改用了一个无品牌的廉价加密狗,它工作得很好。

\n\n

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

\n