Редактировать: это сложнее, чем я впервые заметил. Я не только теряю возможность прокрутки при приостановке, она также теряется, когда система начинает энергосбережение. Я возился с параметрами энергосбережения, но безрезультатно. Я нашел решение, которое я опубликую в ответах ниже.
Я только что установил 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
;;
Похоже, я могу отсюда запустить что-нибудь, что позволит мне перезагрузить только мышь, а не всю подсистему?
Как я упоминал ранее, это происходит больше, чем просто выход из режима ожидания. Поэтому мне нужно, чтобы решение работало после того, как я выйду из режима ожидания, но я также могу сделать это вручную, когда энергосбережение активируется, не переходя полностью в режим ожидания.
Поскольку @ 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
Теперь я могу решить эту проблему одним щелчком мыши, после того как значок стал моим любимым на панели запуска.
Я просто хочу остановиться на вашем собственном ответе, потому что некоторые могут предпочесть более автоматизированный подход к этому. Итак, с самого начала:
Создайте скрипт /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
Это работает каждый раз, когда вы просыпаете свою машину. Однако я не пробовал отключать экран блокировки паролем.