Ubuntu22.04でBluetoothが不安定な時、自動で再接続する設定

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に書いてもらいました笑