部屋の模様替えをしてUbuntu周りのケーブルの配線をやり直したところ
Ubuntuの設定でBluetoothの設定画面を開き、右上のスライドをオンにしても数秒でオフになってしまう。
という現象が起きたので対処方法を列挙しておきます。
まずはBluetoothのサービスが起動しているか確認
サービスが動いていないとどうにもなりませんね
$ sudo systemctl status bluethooth
● bluetooth.service - Bluetooth service
Loaded: loaded (/usr/lib/systemd/system/bluetooth.service; enabled; preset: enabled)
Active: active (running) since Sun 2024-09-15 09:00:00 JST; 13min ago
Docs: man:bluetoothd(8)
Main PID: 1543 (bluetoothd)
Status: "Running"
Tasks: 1 (limit: 18929)
Memory: 3.3M (peak: 3.7M)
CPU: 52ms
CGroup: /system.slice/bluetooth.service
サービスが起動していない場合は systemctl start bluetoothで起動します。起動できない場合は/var/log/syslogで原因を調べます。
Failed to set mode : vlocked through rfkill
というメッセージが出ている場合は無線が無駄な電気を使用しないようにデバイスを無効化している可能性が有るのでRFkillの状態を確認します。
$ rfkill list
1: phy0: Wireless LAN
Soft blocked: no
Hard blocked: no
2: hci0: Bluetooth
Soft blocked: yes
Hard blocked: no
上記のようにBluetoothがソフト的にブロックされている場合ブロックを解除します。
$ rfkill unblock bluetooth
毎回このコマンドを入力するのは大変なので、ログインする際に有効にします。
$ vi ~/.profile
最後に以下の一文を追加
rfkill unblock bluetooth
キーボードがBluetoothの場合はログインすらできません。その場合は起動時にbluetoothが有効になるようにサービスファイルを作成します。
デバイスを認識できているか確認する
サービスが起動していることがわかったらデバイスを認識できているか確認します。
$ bluetoothctl scan on
No default controller available ←認識できていない。
SetDiscoveryFilter success ←認識できている
認識できていない場合はHCIの確認をします。HCI(Host Cotntroller Interface)は物理的なBluetoothチップとBluetoothアンテナを接続している部分です。
$ hciconfig
hci0: Type: Primary Bus: USB
BD Address: 00:00:00:00:00:00 ACL MTU: 0:0 SCO MTU: 0:0 DOWN
RX bytes:0 acl:0 sco:0 events:0 errors:0
TX bytes:4 acl:0 sco:0 commands:1 errors:0
HCIがダウンしている場合はUPしてあげます
$ sudo hciconfig hci0 up
ここでCan't init device hci0: Connection timed out (110) と表示されるか、ステータスがUP RUNNING PSCANにならない場合はカーネルがBluetoothのモジュールをちゃんと読み込めていないのでモジュールをリロードします。
$ sudo rmmod btusb
$ sudo modprobe btusb
リロードが成功すると自動でHCIが再起動します
$ hciconfig
hci0: Type: Primary Bus: USB
BD Address: 8C:C6:81:D0:1D:D9 ACL MTU: 1021:4 SCO MTU: 96:6 UP RUNNING PSCAN
RX bytes:26598 acl:0 sco:0 events:3608 errors:0
TX bytes:821023 acl:0 sco:0 commands:3492 errors:0
この状態になればBluetoothが使えるようになるはず。