Ubuntu22.04はスリープやサスペンドなどの後にたまにBluetoothが不安定になり、勝手に接続が切れてしまうことがあります。
マウスもキーボードもBluetooth接続にしていると、毎回有線キーボードをつないで再接続するか、PCを再起動しないといけません。
または、カーネルを更新したら安定するという記事も見かけますが、もっとお手軽に済ませたいなということもあって、備忘録で残しておきます。
下記のシェルスクリプトは、Bluetoothに最低2個接続していない場合はBluetoothを再起動するというシェルスクリプトです。2個というのは、マウスとキーボードですね。
#!/bin/bash
# Bluetoothデバイスが接続されているかチェックする関数
check_connected_devices() {
connected_count=0
while read -r line; do
device=$(echo "$line" | awk '{print $2}')
info=$(bluetoothctl info "$device")
if echo "$info" | grep -q "Connected: yes"; then
((connected_count++))
fi
done < <(bluetoothctl devices)
echo "$connected_count"
}
# 接続チェックとBluetoothの再起動を試みる関数
attempt_reconnect() {
for i in {1..3}; do
connected_devices=$(check_connected_devices)
if [ "$connected_devices" -ge 2 ]; then
echo "2台以上のBluetoothデバイスが接続されています。"
return 0
else
echo "接続されているBluetoothデバイスが足りません。再起動を試みます... ($i 回目)"
systemctl restart bluetooth
sleep 10 # 再接続に少し時間を与える
fi
done
echo "Bluetoothデバイスの接続を確立できませんでした。"
return 1
}
# 接続試行を開始
attempt_reconnect
このシェルスクリプトを/root/check-bluetooth.shという感じで配置して、rootのcrontabに下記のように毎分チェックするように設定を追加します。
* * * * * /bin/bash /root/check-bluetooth.sh
これで毎分Bluetoothをチェックして、2個以上の接続がない場合は自動でbluetoothを再起動し、再接続するという設定ができました。
Ubuntu22.04自体はとても良いディストリなので楽しんでいきましょう!
ちなみにシェルスクリプトはChatGPTに書いてもらいました笑