📚

Linux MintでBluetoothが起動しなくなったときにやったこと

2023/04/10に公開

起動時にBluetoothが起動しなかったことがあったので、その時のことを書きます。

環境

使用OSはLinux Mint 20 Ulyana です。
といってもUbuntu系なのでおそらく対応はUbuntuと同じ対応になると思います。

起こったこと

  • OSが立ち上がった後に本来なら自動的にBluetoothも起動するのに、Bluetooth接続しているデバイスが動かない。
  • Bluetoothのserviceそのものは動いているけど、デバイス検知ができなくなっていた。
  • 再起動してみたが治らず。

解決までにやったこと

サービスの生存確認

bluetoothのサービスが生きているかをsystemctl status bluetoothコマンドで確認をしました。

$ systemctl status bluetooth
● bluetooth.service - Bluetooth service
     Loaded: loaded (/lib/systemd/system/bluetooth.service; enabled; vendor preset: enabled)
     Active: active (running) since Sun 2023-04-09 21:18:36 JST; 8min ago
       Docs: man:bluetoothd(8)
   Main PID: 1087 (bluetoothd)
     Status: "Running"
      Tasks: 1 (limit: 47282)
     Memory: 1.5M
     CGroup: /system.slice/bluetooth.service
             └─1087 /usr/lib/bluetooth/bluetoothd

結果としては**Status: "Running"**と表示されているので、サービスはちゃんと生きている模様。

Bluetoothアダプタの状態確認

とりあえずサービスは生きてそうですが、デバイス認識は出来ない状態。
なので今度はhciconfig -aコマンドでBluetoothアダプタの状態を確認します。

$ hciconfig -a
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
  Features: 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
  Packet type: DM1 DH1 HV1 
  Link policy: 
  Link mode: SLAVE ACCEPT 

結果の3行目がDOWNとなっているのでアダプタが無効になっています。
そのため、BDAddressも取れていない状態なのがわかりました。
なのでまずはhciconfig upコマンドでアダプタを有効にしてみました。

sudoをつけて、アダプタ名のhci0も指定して有効にします。

$sudo hciconfig hci0 up

再度、hciconfig -aコマンドでBluetoothアダプタの状態を確認

hci0: Type: Primary  Bus: USB
  BD Address: 78:2B:46:4D:E1:66  ACL MTU: 1021:4  SCO MTU: 96:6
  UP RUNNING 
  RX bytes:19465 acl:0 sco:0 events:3117 errors:0
  TX bytes:769488 acl:0 sco:0 commands:3116 errors:0
  Features: 0xbf 0xfe 0x0f 0xfe 0xdb 0xff 0x7b 0x87
  Packet type: DM1 DM3 DM5 DH1 DH3 DH5 HV1 HV2 HV3 
  Link policy: RSWITCH SNIFF 
  Link mode: SLAVE ACCEPT 
  Name: ''
  Class: 0x000000
  Service Classes: Unspecified
  Device Class: Miscellaneous, 
  HCI Version: 5.1 (0xa)  Revision: 0x100
  LMP Version: 5.1 (0xa)  Subversion: 0x100
  Manufacturer: Intel Corp. (2)

UP RUNNINGと表示されたのでとりあえずはアダプタは起動しました。
ただ、結局これだけではデバイスの認識しませんでした。

最終的にやったこと

さきほどのとおり、結局アダプタを起動しただけではダメです。
UP RUNNINGと表示されていますが、最終的にはUP RUNNING PSCAN ISCAN INQUIRYと表示されている必要が有ります。

あとから調べたらPSCAN ISCAN INQUIRYhciconfigコマンドでそれぞれ有効にすることも出来たのですが、
手っ取り早くbtusbの読み込み直しする方法でやりました。
btusbはBluetoothアダプタをLinuxカーネルが操作するためのドライバーになります。

  • まずはアダプタを無効化します。
sudo hciconfig hci0 down
  • つぎにbtusbをカーネルからアンロードします。
sudo rmmod btusb
  • btusbをカーネルに再ロードします。
sudo modprobe btusb
  • 最後にアダプタを再度有効にします。
sudo hciconfig hci0 up
  • hciconfig -aコマンドでBluetoothアダプタの状態を確認
$ hciconfig -a
hci0: Type: Primary  Bus: USB
  BD Address: 78:2B:46:4D:E1:66  ACL MTU: 1021:4  SCO MTU: 96:6
  UP RUNNING PSCAN ISCAN INQUIRY
  RX bytes:2839440 acl:105640 sco:0 events:148407 errors:0
  TX bytes:127591828 acl:148080 sco:0 commands:200 errors:0
  Features: 0xbf 0xfe 0x0f 0xfe 0xdb 0xff 0x7b 0x87
  Packet type: DM1 DM3 DM5 DH1 DH3 DH5 HV1 HV2 HV3 
  Link policy: RSWITCH SNIFF 
  Link mode: SLAVE ACCEPT 
  Name: '(PCにつけてる名前)'
  Class: 0x1c010c
  Service Classes: Rendering, Capturing, Object Transfer
  Device Class: Computer, Laptop
  HCI Version: 5.1 (0xa)  Revision: 0x100
  LMP Version: 5.1 (0xa)  Subversion: 0x100
  Manufacturer: Intel Corp. (2)

まとめ

Bluetooth製品を多く使ってると、いきなり繋がらなくなると仕事にならないこともあるので復旧方法は要しておかないとと思いました。
(今回トラックボール使えなくなってめちゃくちゃ困った・・・・)
手っ取り早く治すのはカーネルリロードのが楽かもですが、hciconfigコマンドだけでなんとかなったかもしれないです。
もし、次回同じ現象起きたらためしてみようかなと思います。

参考

Linuxメモ: Bluetooth 関連コマンドのメモ (hciconfig, bluetoothctl)

Discussion