Microsoft Arc Mouse (Bluetooth) перестает прокручивать после приостановки Ubuntu 19.04

Редактировать: это сложнее, чем я впервые заметил. Я не только теряю возможность прокрутки при приостановке, она также теряется, когда система начинает энергосбережение. Я возился с параметрами энергосбережения, но безрезультатно. Я нашел решение, которое я опубликую в ответах ниже.

Я только что установил Ubuntu 19.04 на свой ноутбук Dell (Latitude 1790) и использую мышь Microsoft Arc. Когда ноутбук приостанавливается, а затем возобновляет работу, Arc Mouse продолжает работать, но при этом сенсорная поверхность перестает функционировать.

Перезагрузка ноутбука снова включает прокрутку. Однако остановка и перезапуск Bluetooth и повторное сопряжение мыши не позволяют повторно включить прокрутку.

Я подозреваю, что что-то, связанное с этим вопросом, может решить проблему:

Прокрутка не работает после приостановки, в поисках постоянного решения

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

Я посмотрел в lsmod, но нет ничего очевидного. Вот две строки, в которых упоминается Bluetooth.

bluetooth             557056  43 btrtl,btintel,btbcm,bnep,btusb,rfcomm
ecdh_generic           28672  2 bluetooth

Вот все перечисленные выше устройства lsmod или содержащие bt.

dell_rbtn              20480  0
btusb                  49152  0
btrtl                  20480  1 btusb
btbcm                  16384  1 btusb
btintel                24576  1 btusb
bluetooth             557056  43 btrtl,btintel,btbcm,bnep,btusb,rfcomm

Ноутбук также имеет сенсорную панель, и после приостановки продолжает работать прокрутка на сенсорной панели. Я думаю, что это означает, что проблема изолирована от Arc Mouse.

Углубившись немного глубже, я обнаружил, что /etc/init.d/ содержит сценарии для служб, а /etc/init.d/bluetooth - это сценарий, который вызывает и отключает службу bluetooth. Похоже, что это соответствующая часть.

start)
        log_daemon_msg "Starting $DESC"

        if test "$BLUETOOTH_ENABLED" = 0; then
                log_progress_msg "disabled. see /etc/default/bluetooth"
                log_end_msg 0
                exit 0
        fi

        start-stop-daemon --start --background $SSD_OPTIONS
        log_progress_msg "${DAEMON##*/}"

        run_sdptool || :

        if test "$HID2HCI_ENABLED" = 1; then
                enable_hci_input
        fi

        log_end_msg 0
  ;;
  stop)
        log_daemon_msg "Stopping $DESC"
        if test "$BLUETOOTH_ENABLED" = 0; then
                log_progress_msg "disabled."
                log_end_msg 0
                exit 0
        fi
        if test "$HID2HCI_UNDO" = 1; then
                disable_hci_input
        fi
        start-stop-daemon --stop $SSD_OPTIONS
        log_progress_msg "${DAEMON}"
        log_end_msg 0
  ;;

Похоже, я могу отсюда запустить что-нибудь, что позволит мне перезагрузить только мышь, а не всю подсистему?

2
задан 8 May 2019 в 21:45

2 ответа

Как я упоминал ранее, это происходит больше, чем просто выход из режима ожидания. Поэтому мне нужно, чтобы решение работало после того, как я выйду из режима ожидания, но я также могу сделать это вручную, когда энергосбережение активируется, не переходя полностью в режим ожидания.

Поскольку @ WinEunuuchs2Unix и я пришли в комментариях, самое простое решение - просто перезапустить Bluetooth с помощью sudo services bluetooth restart. Это снимает и вызывает Bluetooth и повторно включает прокрутку мыши. Необходимость делать это в командной строке все время отчасти раздражала, поэтому я решил немного облегчить себе жизнь.

Следуя информации, найденной здесь , я создал сценарий в /usr/local/sbin/restart_bluetooth.sh со следующим содержанием.

#!/bin/bash
services bluetooth restart

Это можно сделать для запуска без пароля, отредактировав файл sudoers с помощью sudo visudo. После строки %sudo ALL=(ALL:ALL) ALL я добавил информацию для скрипта, используя свое имя пользователя.

username  ALL=(ALL) NOPASSWD: /usr/local/sbin/restart_bluetooth.sh

Теперь у меня есть рабочий скрипт, который не требует пароля. Я установил значок на моем модуле запуска, используя это руководство , установив gnome-desktop-item-edit с помощью команды sudo apt install --no-install-recommends gnome-panel. Затем я создал новый файл .desktop, запустив gnome-desktop-item-edit ~/Desktop/ --create-new. Окончательный файл .desktop выглядит следующим образом.

[Desktop Entry]
Version=1.0
Type=Application
Terminal=false
Icon[en_US]=/usr/share/icons/ubuntu-mono-dark/status/24/bluetooth-active.svg
Name[en_US]=Restart Bluetooth
Comment[en_US]=Restarts bluetooth service to fix scrolling issue.
Exec=sudo /usr/local/sbin/restart_bluetooth.sh
Comment=Restarts bluetooth service to fix scrolling issue.
Name=Restart Bluetooth
Icon=bluetooth

Теперь я могу решить эту проблему одним щелчком мыши, после того как значок стал моим любимым на панели запуска.

0
ответ дан 8 May 2019 в 21:45

Я просто хочу остановиться на вашем собственном ответе, потому что некоторые могут предпочесть более автоматизированный подход к этому. Итак, с самого начала:

Создайте скрипт /usr/local/sbin/restart-bluetooth.sh

#!/bin/bash
service bluetooth restart

Затем (из Ответа ) создайте скрипт в каталоге сна / lib / systemd / system-sleep / 00restart-bluetooth.sh

#!/bin/sh
if [ $1 = post ] && [ $2 = suspend ]
then /usr/local/sbin/restart-bluetooh.sh
fi

Затем убедитесь, что сценарий является исполняемым.

chmod a+x /lib/systemd/system-sleep/00restart-bluetooh.sh

Это работает каждый раз, когда вы просыпаете свою машину. Однако я не пробовал отключать экран блокировки паролем.

4
ответ дан 1 February 2020 в 22:00

Другие вопросы по тегам:

Похожие вопросы: