web-dev-qa-db-ja.com

Bluetoothとcronに接続して接続を維持するLinux起動スクリプト

私はミニBluetoothキーボードとDebianベースのディストリビューションを実行しているRaspberryPiを持っています。キーボードのMACアドレスは知っていますが、この質問にはAA:BB:CC:DD:EE:FFを使用しましょう。今は、有線キーボードとミニキーボード用のBluetoothドングルを接続する必要があります。有線キーボードでは、デバイスの起動時に次の手順を実行する必要があります。

Sudo hidd --connect AA:BB:CC:DD:EE:FF

デバイスが長時間アイドル状態になると、Bluetoothが切断され、有線キーボードを引き出して同じコマンドを再入力する必要があります。

私が探しているのは、起動時にそのコマンドを実行する方法と、コマンドが切断されたかどうかを検知して自動再接続する方法です。

厄介なのは、そのコマンドを実行するときにキーボードがペアリングモードになっている必要があることです(すでにペアリングされている場合でも)。そうでない場合は、ホストがダウンしていると通知されます。したがって、おそらくスクリプトはprevent非アクティブによる切断を防ぐ必要があります。そうでない場合は、再接続するためにペアリングモードに戻す必要があります。

要約すると:

  • 起動時に接続するスクリプト。キーボードをオンにする前に、必ずペアリングモードにすることができます。
  • 切断を防ぐためのスクリプト。たぶん、60秒ごとに送信する何らかの信号か何か?
5
D.R.

XX:XX:XX:XX:XX:XXをデバイスのBluetoothアドレスに置き換えます)

Bluetoothサポートをインストールします。

# pacman -S bluez

デバイス構成ファイルを作成します。

# nano /etc/bluetooth/hcid.conf
device XX:XX:XX:XX:XX:XX {
  name "Apple Wireless Keyboard";
  auth enable;
  encrypt enable;
}

Bluetoothを有効にします。

# 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

キーボードがスリープモードに入った後にキーボードからの再接続を有効にするために、キーボードが1秒に1回接続されているかどうかを確認する独自のデーモンを作成します。そうである場合、そのサイクルは何も実行しません。そうでない場合は、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のブログ投稿 の組み合わせ。

1
Samuel Harmer