更新:升级到 Ubuntu 20.04.1 现在已经永久解决了这个问题。
编辑:这比我最初提到的要复杂得多。我不仅在挂起时失去了滚动功能,而且在系统开始省电时也失去了滚动功能。我摆弄了省电选项,但无济于事。我找到了一个解决方案,我将在下面的答案中发布。
我刚刚在我的戴尔笔记本电脑(Latitude 1790)上安装了 Ubuntu 19.04,并且正在使用 Microsoft Arc Mouse。当笔记本电脑挂起然后恢复时,Arc Mouse 继续工作,但触摸表面的滚动功能停止工作。
重新启动笔记本电脑可重新启用滚动功能。但是,停止并重新启动蓝牙并重新配对鼠标不会重新启用滚动功能。
我怀疑与这个问题相关的一些内容可能会解决这个问题:
不幸的是,我不知道如何确定鼠标设备,将其放入脚本中以重新探测设备并重新开始滚动。有人能告诉我如何确定设备吗?或者,还有其他方法可以解决这个问题吗?
我查看了 lsmod,但没有任何明显的东西。以下是提到蓝牙的两行。
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 是启动和关闭蓝牙服务的脚本。这似乎是相关部分。
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
;;
我可以从这里运行任何东西,以便让我只重置鼠标而不是整个子系统?
答案1
我只是想补充一下你自己的答案,因为有些人可能更喜欢采用更自动化的方法。所以从一开始:
创建脚本/usr/local/sbin/restart-bluetooth.sh
#!/bin/bash
service bluetooth restart
然后(从回答)在 sleep 目录中创建脚本/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
每次唤醒机器时,此方法都有效。不过,我还没有尝试过禁用密码锁屏。
答案2
正如我之前提到的,这种情况不仅仅发生在退出挂起状态时。因此,我需要解决方案在退出挂起状态后仍然有效,而且还能够在省电模式激活时手动执行此操作,而无需完全进入挂起状态。
正如@WinEunuuchs2Unix 和我在评论中提到的,最简单的解决方案就是使用 重启蓝牙sudo services bluetooth restart
。这将关闭并打开蓝牙,并重新启用鼠标滚动。总是在命令行中执行此操作有点烦人,所以我决定让自己轻松一点。
根据找到的信息这里/usr/local/sbin/restart_bluetooth.sh
,我创建了包含以下内容的脚本。
#!/bin/bash
service 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
现在,我将图标添加到启动器上的收藏夹后,只需单击一下即可解决问题。