私はヘッドフォンのBluetooth体験のさまざまな側面を制御するBluetoothスクリプトを作成しています。
その一環として、Bluetoothアダプタをリセットしたいと思います。私は以下を使用しています:
rfkill block bluetooth
rfkill unblock bluetooth
これは切り替える必要があり、動作しますが、毎回そのようなものではありません。うまくいかないときもパターンはありません。時々(通常約60%)タイムアウトが発生します。
ログを確認すると、以下が表示されます。
良い例:
Product: Bluetooth USB Host Controller
Manufacturer: Atheros Communications
SerialNumber: Alaska Day 2006
Adapter /org/bluez/4100/hci0 has been enabled
Endpoint registered: sender=:1.25 path=/MediaEndpoint/HFPAG
Endpoint registered: sender=:1.25 path=/MediaEndpoint/HFPHS
Endpoint registered: sender=:1.25 path=/MediaEndpoint/A2DPSource
Endpoint registered: sender=:1.25 path=/MediaEndpoint/A2DPSink
悪い場合(タイムアウト):
Product: Bluetooth USB Host Controller
Manufacturer: Atheros Communications
SerialNumber: Alaska Day 2006
Bluetooth: hci0 command 0x1003 tx timeout
Bluetooth: hci0 command 0x1001 tx timeout
このタイムアウトを増やす方法はありますか? BASHを使用して失敗し、タイムアウトを確認してループを実行します。動作するまで再試行してください。なぜなら、rfkillブロックを使用してアダプタが完全にリセットされると、最終的に動作するからです。
答え1
これら2つのコマンドrfkill
の間にsleepステートメントを追加してみてはいかがでしょうか?
rfkill block bluetooth
sleep 5
rfkill unblock bluetooth
これには数秒しかかかりません。調整して役立つことを確認してください。