yumetodoの旅とプログラミングとかの記録

旅や登山の記録やプログラミング関連の話とかフリーソフト紹介とか

第二次 Ubuntu環境のBluetoothの不安定さをどうにかするべく戦った

症状

PCにbluetoothのドングルを刺し、マウスとbluetooth接続しようとしている。一度は接続できるのだが、スリープになったり再起動すると接続できなくなるという問題が生じていた。

経緯

Windowsにおいてはbluetoothのドングルの電力が省電力を理由に勝手に消されることが要因だった。

yumetodo.hateblo.jp

ではbluezとbluemanの最新版をビルドして入れたことで解決したかに見えたが、そうではなかった

しばらくするとなぜか再発したのだ。

しかしなんとなくWindowsとは別の理由の気がする。

Ubuntu 18.04に上げる

それまでUbuntu 16.04だったのをUbuntu 18.04に上げてみた。これで治らないかなぁ?とおもったが治らない。

Ask Ubuntuに投げる

そろそろお手上げだったので

askubuntu.com

質問を投げたが、回答が来なかった。

udevの設定を書く

Bluetooth ヘッドセット - ArchWiki#自動接続の設定

を参考に、/etc/udev/rules.d/10-local.rules

# Set bluetooth power up
ACTION=="add", SUBSYSTEM=="bluetooth", KERNEL=="hci[0-9]*", RUN+="/usr/bin/hciconfig %k up"

を記述し、再起動した。しばらくはうまく行ったが、いつのまにか動かなくなった。というかなぜかjournalctlhci69はない、とか言われた。しかもbluetoothctlで手動接続しようとすると

Failed to connect: org.bluez.Error.Failed

とかいわれ、またjournalctlhci69はない、とか言われた。

Bluezの最新版をビルドして入れる

Ubuntuを上げたときに前にビルドしたのは消えたのでもう一度Bluezのみやり直した。すなわち、

$ sudo apt install libical-dev libreadline-dev python-gi-dev cython cython3 libdbus-1-dev libudev-dev python3-pip
$ wget http://www.kernel.org/pub/linux/bluetooth/bluez-5.50.tar.xz
$ tar -xf bluez-5.50.tar.xz
$ wget https://ftp.osuosl.org/pub/blfs/conglomeration/bluez/bluez-5.50-obexd_without_systemd-1.patch
$ cd bluez-5.50
$ patch -Np1 -i ../bluez-5.50-obexd_without_systemd-1.patch
$ ./configure --prefix=/usr --mandir=/usr/share/man --sysconfdir=/etc --localstatedir=/var --enable-library
$ make -j4
$ sudo porg -lD make install

して再起動した。しかしうまくいかない。

Kernel Patchを当てる

何気なくubuntu 18.04 bluetoothctlで検索したところ、

askubuntu.com

がヒットした。

カーネル2.6.11から4.13までで貢献度の高い上位3人の開発者の一人であるTakashi Iwai氏のパッチ

github.com

をあてろ、というものだった。指示通り

$ git clone https://github.com/jeremyb31/newbtfix-4.15.git
$ sudo dkms add ./newbtfix-4.15
$ sudo dkms install btusb/4.0

して、再起動したところ、一回目の再起動では成功した。

しばらく様子を見てみたい。またひょっこりマウスが動かなくなるかもしれないからな。