📚

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