2015年10月27日火曜日

bluetoothctl と expect で無線キーボードに定期的に接続するスクリプト

概要

RaspberryPi に無線キーボードの設定をしたあとで無線キーボードからの入力が一定時間ないと bluetooth が切断されてしまう現象が発生しました
切断のたびに bluetoothctl コマンドを実行するのは面倒なので、cron を使って一定間隔で bluetoothctl を実行させるようにしてみました

環境

  • Raspberry Pi Type B Single Board Computer 512MB
  • Raspbian 8.0 (Jessie)
  • Kernel Version 4.1.10
  • expect 5.45

スクリプト

とりあえず expect スクリプトの全貌です

#!/usr/bin/expect -f

set timemout 5
set prompt "#"
spawn sudo bluetoothctl -a
expect -re $prompt
send "connect xx:xx:xx:xx:xx:xx\r"
expect -re $prompt
send "quit\r"
expect eof

Mac アドレスの部分は接続する無線キーボードの Mac アドレスを入力してください

デプロイする

pi ユーザで実行しています

  • cd
  • mkdir script
  • cd script
  • touch connect_keyboard.sh
    • 上記のスクリプトを記載
  • chmod 755 connect_keyboard.sh
  • crontab -e
    • */1 * * * * /home/pi/script/connect_keyboard.sh

で1分おきに connect の命令が実行されます
切断されたキーボード側をペアリング状態にしておけば5分以内には再接続されて使えるようになるはずです

Tips

postfix のインストール

postfix がインストールされていない場合 cron のログに以下のようなエラーが出てうまく cron が動かないことがあります

CRON[2369]: (CRON) info (No MTA installed, discarding output)

この場合は素直に postfix をインストールしましょう
途中設定するために config 画面に切り替わりますが、ローカル用で設定すればOKです

  • sudo apt-get -y install postfix

また cron のメールが送られているのが嫌な場合は crontab -e の設定に以下を追記してください

MAILTO=”“

手動でスクリプトを実行する場合

最後の expect eof を interact に書き換えて実行してください
それ用のスクリプトを準備しておくのがいいかもしれません

0 件のコメント:

コメントを投稿