Опыт использования Bluetooth мышки и клавиатуры (Logitech M590, K380) на Linux (Mint)

Недавно купил ноут Lenovo L340, и Bluetooth мышь (Logitech M590) к нему, потому что USB портов всего два (+ один C). И заодно есть клавиатура Logitech K380.

Установил Linux Mint 20, особых проблем нет, только в дистрибутив не был включен драйвер WiFi (RTL8821CE), пришлось подключать USB WiFi адаптер, чтобы установить драйвер (сначала установил с гитхаба, потом заметил, что он был в Driver Manager Минта :laughing:).

Включил мышку, выбрал её в стандартном приложении для управления Bluetooth — заработало.

image

Но после сна или перезагрузки она не подключилась автоматически, пришлось снова подключать её с тачпада (и потом еще приложение почему-то пару раз как-то зависало/не давало подключить).

В гугле посоветовали взять другое приложение

sudo apt remove blueberry -y && apt install blueman

и пометить там устройство как доверенное (trust).

Еще советовали в /etc/bluetooth/input.conf добавить

UserspaceHID=true

И еще в pin-code-database.xml добавить что-то типа

<device oui="DB:D9:1D:" name="M585/M590" type="mouse" pin="0000"/>

Все варианты не сильно помогли, иногда мышь подключалась сама (возможно не из-за этих изменений), и вроде бы при нажатии кнопки поиска устройств в blueman.

После экспериментов с bluetoothctl понял, что для переподключения достаточно команды connect MAC_мышки. Нашел тут этот Питоновский скрипт, который отправляет её автоматически:

Установил так:

  1. git clone https://github.com/jrouleau/bluetooth-autoconnect.git
  2. Скопировать скрипт в /usr/bin (этот путь по умолчанию указан в сервисе):
    sudo cp bluetooth-autoconnect/bluetooth-autoconnect /usr/bin/
  3. Установить и запустить сервис:
    sudo cp bluetooth-autoconnect/bluetooth-autoconnect.service /etc/systemd/system/
    sudo systemctl enable bluetooth-autoconnect.service
    sudo systemctl start bluetooth-autoconnect.service
    

Но это тоже не полностью помогло. Сначала подумал, что скрипт не срабатывает при выходе из сна (проверял в основном с помощью сна) потому что в readme пишут, что скрипт в режиме сервиса реагирует только на включение bluetooth адаптера, и даже создал по этому примеру сервис bluetooth-autoconnect-after-sleep.service

[Unit]
Description=Bluetooth autoconnect after sleep service
After=suspend.target hibernate.target hybrid-sleep.target suspend-then-hibernate.target

[Service]
Type=simple
ExecStart=/usr/bin/bluetooth-autoconnect -v

[Install]
WantedBy=bluetooth.service suspend.target hibernate.target hybrid-sleep.target suspend-then-hibernate.target

Но потом в логах сервиса (systemctl status bluetooth-autoconnect.service) увидел, что и исходный сервис срабатывал при выходе из сна. И увидел, что при подключении мышки выдаются странные ошибки типа Software caused connection abort. При просто вызове из терминала bluetoothctl connect ошибок никогда не было, так что решил, что надо просто вызывать чуть позже.

Добавил в сервис

ExecStartPre=/bin/sleep 15

и вроде бы пока работает. :soidet:

Наверно надо отправить баг-репорт куда-нибудь, может исправят что-то или помогут понять причину )


С клавиатурой K380 таких проблем не было, переподключалась сама. :+1:
Только blueman почему-то не выводил рандомный PIN, который надо ввести на клавиатуре при первом подключении. Не знаю работает ли это в стандартном приложении.

Решил подключением через bluetoothctl:

  1. scan on и подождать пока появится клавиатура и её MAC (XX:XX:XX:XX:XX:XX).
  2. pair MAC_клавиатуры, появится PIN, ввести на подключаемой клавиатуре и нажать Enter.
  3. trust MAC_клавиатуры
  4. connect MAC_клавиатуры
1 Симпатия