暂停 Ubuntu 19.04 后,Microsoft Arc Mouse(蓝牙)停止滚动

暂停 Ubuntu 19.04 后,Microsoft Arc Mouse(蓝牙)停止滚动

更新:升级到 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

现在,我将图标添加到启动器上的收藏夹后,只需单击一下即可解决问题。

相关内容