每次重新连接后如何将速度和加速度设置应用于 Apple Magic Mouse

每次重新连接后如何将速度和加速度设置应用于 Apple Magic Mouse

我有一台 Apple Magic Mouse 鼠标和一台 Dell Latitude E7440(运行 Ubuntu 16.04 LTS),它有一个奇怪的习惯,就是时不时断开连接 [我必须手动重新连接](或断开连接,仍然不确定谁是罪魁祸首)。

不仅如此,每次重新连接鼠标时,鼠标 [指针] 速度设置都会消失!xinput每次重新连接鼠标时,我都必须 [手动] 重新应用配置。

Ubuntu 的鼠标和触摸板设置没有任何效果:我已将加速度一直向下滑动,但它仍然太快了。

问题:xinput --set-prop每次鼠标重新连接时,有没有办法使用 [应用] 这些设置?(这种情况 - 每次鼠标重新连接时都必须应用这些设置 - 这是不可接受的,因为鼠标每天都会断开并重新连接几次!]


长版、语境化版本:

我发现了许多解决这种间歇性断线问题的建议(这里这里),但他们未能彻底解决问题。断线仍然时有发生,可能频率稍微低一些(但这可能是一种偏见)。

滚动速度 [太慢,需要加快] 已修复,如下所示为了使其确定性(在重新启动后仍然存在),一行 modprobe 配置文件解决了它:

 /etc/modprobe.d/hid_magicmouse.conf:
 options hid_magicmouse scroll-speed=40 scroll-acceleration=1

另一个问题是鼠标指针移动太快;解决方案已经找到这里。但这不是一个明确的解决方案,因为每次重新启动计算机时,配置就会消失,需要重新应用配置——手动。

 xinput --set-prop 'Apple Magic Mouse' "Device Accel Constant Deceleration" 2
 xinput --set-prop 'Apple Magic Mouse' "Device Accel Velocity Scaling" 1

但是每次鼠标断开连接时,设置就会消失,需要再次手动重新应用。

我想使它更加明确,即每次鼠标重新连接时自动重新应用。

udev 框架/机制看起来非常合适。将此脚本连接到 udev 规则(因此每次连接鼠标时都会重新应用设置)。

(udev 规则)

/etc/udev/rules.d/71-applemagicmouse.rules

 SUBSYSTEMS=="input", ATTRS{name}=="Apple Magic Mouse", ACTION=="add", ENV{DISPLAY}=":0.0", ENV{XAUTHORITY}="/home/cfeng01/.Xauthority", RUN+="/bin/su cfeng01 -c /home/cfeng01/bin/set_apple_mouse_speed.sh"

(以及剧本)
/home/cfeng01/bin/set_apple_mouse_speed.sh

 #!/bin/sh
 # references:
 # * about udev and running scripts after the device is plugged in [or recognized by Linux]
 #   https://askubuntu.com/questions/686144/run-a-shell-command-after-a-bluetooth-input-device-is-detected
 #
 # * about how the need of XDISPLAY and XAUTHORITY env variables 
 #   https://ubuntuforums.org/showthread.php?t=2334004&page=2

 # for debugging purposes
 #set -x

 while [ ! "$(/usr/bin/hcitool info 1C:1A:C0:D6:74:10 2>&1 > /dev/null; echo $?)" ]; do
   sleep 0.1
 done

 # the xinput requires X [to acessible] and since this script will be triggered by udev, 
 # there won't be these X-related variables;
 # However, exporting here (in the script) doesn't work!
 #
 # export XDISPLAY=:0
 # export XAUTHORITY=/home/cfeng01/.Xauthority
 #
 # It only worked when I added in the udev rule:
 # 
 # SUBSYSTEMS=="input", ATTRS{name}=="Apple Magic Mouse", ACTION=="add", ENV{DISPLAY}=":0.0", ENV{XAUTHORITY}="/home/cfeng01/.Xauthority", RUN+="/bin/su cfeng01 -c /home/cfeng01/bin/set_apple_mouse_speed.sh"

 while [ ! "$(xinput query-state 'Apple Magic Mouse' 2>&1 > /dev/null; echo $?)" ]; do
   sleep 0.1
 done

 MOUSE_ID=`xinput --list | grep "Apple Magic Mouse" | awk 'BEGIN {FS = " "}; { print $6}' | awk 'BEGIN {FS = "="}; { print $2}'`
 if [ "${MOUSE_ID}" != "" ]; then
     logger $0 Magic Mouse found, updating the mouse speed settings.
     # para desacelerar o Apple Magic Mouse
     xinput --set-prop ${MOUSE_ID} "Device Accel Constant Deceleration" 2
     xinput --set-prop ${MOUSE_ID} "Device Accel Velocity Scaling" 1
 else
     logger $0 Magic Mouse not found, skipping.

 fi

然而,反复循环“禁用蓝牙 > 启用蓝牙 > 激活鼠标”没有任何效果。分析/var/log/syslog[并比较“定时”xinput list输出] 看起来鼠标只是“连接”到 Xudev 完成运行脚本[当 udev 脚本尚未完成时,Magic Mouse 不会出现在输出中xinput list]。

我推断,在设备实际连接到 X 之前,xinput 无法对其执行任何操作。

因此,需要某种机制来解决这个问题。也许是某种回调?

有谁能解释一下吗?

相关内容