Ubuntu 20.04 (Focal) での Bluetoothマウス (ドングル式Bluetoothレシーバー) の使用
Ubuntu20.04 でBluetoothマウス、生半可な対応では動きません。認識しません。とにかくイライラがものすごいです。 つながった! と思いきや、10秒後に強制的に切断されてしまいます。Stack Overflowなどの投稿内容を参考にアレコレ試しましたが症状が悪化したり、場合によってはドングルを全く認識しなくなってしまいました。
試行錯誤の末、下記の記事を参考にしてようやくBluetoothマウスを正常に動作させることに成功しました。
下記のものは役に立ちませんでしたし、
下記のものも役に立ちませんでした。 上記2つはお使いの環境にもよると思いますが症状が悪化することがあります。下記に私が成功した方法を日本語で要約します。同じように対応に行き詰まってしまってお悩みの方のお役に立てれば嬉しいです。
1. Environtment
- Ubuntu 20.04 x86_64 デスクトップPC、Bluetoothアダプタ非内蔵
- Bluetooth Mouse + USBドングル
2. Procedure
powertop
というアプリをインストールして起動します。
$ sudo apt install -y powertop
$ sudo powertop
キーボードの Tab
を数回押して Tunables
に表示を切り替えます。
表示されている一覧の中からUSBドングルのデバイスを探します。私の場合は Autosuspend for USB device USB1.1-A [1-11.2]
と表記されているものがそのものでした。 Autosuspend
と表示のあるものが複数ある場合は、ドングルを抜いてキーボードの R
キー を押し、表示内容をリフレッシュしてみたときに表示が消えたものがドングルです。確認が終わったらもう一度ドングルをUSBポートへ挿入しなおしてください。
あらためてキーボードの上下矢印キーで Autosuspend for USB device USB1.1-A [1-11.2]
を選び、キーボードの Enter
キーを押します。 USB1.1-A
の部分はお使いのドングルによって表示が異なります。
キーボードの Enter
キーを押すと、>> Good
と表示されていた部分が切り替わり、 >> Bad
という表示に変わります。 Bad
はサスペンドが無効の状態を表し、 Good
はサスペンドが有効の状態を表します。 今回、BluetoothのUSBドングルの調子が悪かったのは、USBドングルがサスペンド状態へ勝手に移行してしまうことにより、Bluetoothの接続がたびたび切断されてしまうことが原因でした。 ちなみに、Ubuntu18.04 の頃はこのような事象が発生しませんでした。Ubuntu20.04のカーネルの不具合のような気がします。あらためて Bad
に切り替わったことを確認してください。また、 Bad
へ切り替えた直後にコンソールの上部に表示されるプロンプトをコピーしてどこかにメモしておいてください。後ほどの作業で使用します。
私の環境では下図のように >> echo 'on' > '/sys/bus/usb/devices/1-11.2/power/control';
と表示されました。
キーボードの Esc
キーを押し、 powertop
を終了します。 Esc
を押してから終了するまでにかなり時間が掛かりますので気長に待ちましょう。
下記のコマンドを実行し、空のファイルを開きます。
$ sudo nano /usr/bin/disable-bt-mouse-autosuspend
開いた空のファイルに下記を入力して保存し、nano を終了します。 1-11.2
の部分は直前でメモしておいた文字列の中の /power
の直前に表示されていた数字の部分に読み替えてください。 私の場合は 1-11.2
でしたが、皆さんの場合は異なる数字の羅列になっていると思います。 ちなみに、nanoの保存は Ctrl
+ O
、 nanoの終了は Ctrl
+ X
です。
#!/bin/sh
# Disable USB auto-suspend for my mouse on startup
sleep 5;
MOUSE="/sys/bus/usb/devices/1-11.2/power/control";
if [ -f "$MOUSE" ]; then
echo 'on' > $MOUSE;
fi
続いて、作成したスクリプトに実行権限を付与します。下記のコマンドを実行します。
$ sudo chmod u+x /usr/bin/disable-bt-mouse-autosuspend
続いて、systemd へサービスとして登録します。 下記のコマンドを実行し、空のファイルを開きます。
$ sudo nano /etc/systemd/system/disable-bt-mouse-autosuspend.service
下記の文字列を入力し、保存してnanoを終了します。
[Unit]
Description=Disable USB auto-suspend for bluetooth mouse
[Service]
ExecStart=/usr/bin/disable-bt-mouse-autosuspend
[Install]
WantedBy=multi-user.target
続いて、下記のコマンドを実行し、サービスを起動します。
$ sudo systemctl start disable-bt-mouse-autosuspend
$ sudo systemctl enable disable-bt-mouse-autosuspend
続いて、パソコンがサスペンドから復帰したあとでも正常に再接続できるようにするためのスクリプトを作成します。 下記のコマンドを実行し、空のファイルを開きます。
$ sudo nano /lib/systemd/system-sleep/00disable-bt-mouse-autosuspend
下記の内容を入力し、保存してnanoを終了します。
#!/bin/sh
# restart the service after suspend
if [ $1 = post ] && [ $2 = suspend ]
then systemctl start disable-bt-mouse-autosuspend.service
fi
続いて、下記のコマンドを実行してスクリプトの実行権限を付与します。
$ sudo chmod u+x /lib/systemd/system-sleep/00disable-bt-mouse-autosuspend
最後にパソコンを再起動したら手順終わりです。
Discussion