IMWheel
IMWheel 是一个用于调整鼠标滚轮行为的工具,可以基于每个程序进行设置。它可以将鼠标滚轮输入映射到键盘输入,提高鼠标滚轮速度,并支持修饰键。
安装
配置
参见 imwheel(1)。
IMWheel 使用正则表达式匹配窗口类字符串,以决定将调整应用于哪些窗口。要找到正在匹配的特定类字符串,请杀死所有其他 IMWheel 进程,然后运行此命令
$ imwheel -d --debug --kill
这将在前台以调试模式运行 IMWheel。当您使用鼠标和键盘时,您将能够看到 IMWheel 尝试匹配的窗口属性值。
编辑你的配置文件
创建或编辑 ~/.imwheelrc
。在此配置文件中,可以为每个要调整鼠标滚轮行为的程序添加行。
转换定义的语法如下
<Key Modifiers Input>, <Mouse Action Input>, <Key Action Output> Key Modifiers Input: Alt_L, Alt_R, Meta_L, Meta_R, Control_L, Control_R, Shift_L, Shift_R or None Mouse Action Input: Up, Down, Left, Right, Thumb Key Action Output: KeySym [, Output Repetitions[, Delay Before KeyUp Event [, Delay Before Next KeyPress Event]]]
以下示例将提高文档查看器 zathura 的鼠标滚轮速度
# Speed up scrolling for the document viewer "^org\.pwmt\.zathura$" None, Up, Button4, 4 None, Down, Button5, 4
此示例为所有应用程序启用后退/前进拇指按钮,并提高 Chromium 中的滚动速度
"^chromium$" None, Up, Button4, 3 None, Down, Button5, 3
".*" None, Thumb1, Alt_L|Left None, Thumb2, Alt_L|Right
请记住,某些值(如窗口标题)是 Unicode。这可能会在尝试编写正则表达式来匹配它们时导致困难。例如,破折号 (—) 看起来很像标准破折号 (-),但在正则表达式中被认为是三个“字符”,而不是一个。
Up
和 Down
可以分别代替鼠标滚轮的 Button4
和 Button5
使用。
匹配所有程序(使用 “.*”)可能会在某些程序中导致意外行为;由于 IMWheel 为用户进行的每个滚动操作模拟多次滚动操作,因此绑定到鼠标滚轮的操作的程序将执行的操作次数超出预期。
例如,终端模拟器中,滚动选择历史记录中的命令将每次滚动跳转多个项目。
IMWheel 捕获受监控鼠标按钮的修饰键,要进一步传递它们,您需要显式配置它来执行此操作。在下面的示例中,左 Ctrl
和鼠标滚轮组合被传递到 Chromium 以进行放大/缩小,而不会倍增
# Speed up scrolling for chromium and pass unchanged for zoom "^chromium$" None, Up, Button4, 4 None, Down, Button5, 4 Shift_L, Up, Shift_L|Button4, 4 Shift_L, Down, Shift_L|Button5, 4 Control_L, Up, Control_L|Button4 Control_L, Down, Control_L|Button5
要在终端中匹配特定程序,请在程序启动前使用 Bash 在窗口标题中设置程序名称。请参阅 Bash/Prompt customization#Customizing the terminal window title。您可能需要重新配置终端模拟器以允许 shell 中运行的程序设置窗口标题。某些终端(如 Konsole 和 GNOME Terminal)会自动执行此操作。
运行 IMWheel
只需像这样运行 IMWheel
$ imwheel
该程序将打印其 PID 并在后台运行。
使用服务在启动时运行 IMWheel
为了避免手动启动 IMWheel,您可以将其作为 systemd 启动的一部分运行。
示例
~/.config/systemd/user/imwheel.service
[Unit] Description=IMWheel Wants=display-manager.service After=display-manager.service [Service] Type=simple #Next line is only required for Xorg, should be removed for Wayland Environment=XAUTHORITY=%h/.Xauthority ExecStart=/usr/bin/imwheel -d ExecStop=/usr/bin/pkill imwheel RemainAfterExit=yes [Install] WantedBy=graphical-session.target
在创建上述服务后,重新加载 调用用户的 systemd 管理器配置,并启动/启用 imwheel.service
用户单元。通过检查其单元状态或通过检查日志来验证用户服务是否正在运行。
使用 shell 脚本在启动时运行 IMWheel
或者,您可以在 /etc/profile.d/
中创建一个 startup.sh
脚本
#!/bin/sh imwheel
然后,在重启时,它将自动读取并运行该文件。始终在手动测试脚本后再将其放入 /etc/profile.d
通过连接设备运行 IMWheel
当设备(例如蓝牙鼠标)连接和断开连接时,也可以启动和停止 IMWheel。例如,可以在连接外部鼠标时调整滚动速度。
必须更新设备名称以匹配 systemd 设备。运行以下命令以获取可能的设备列表
$ systemctl --all --full -t device
示例
~/.config/systemd/user/imwheel.service
[Unit] Description=IMWheel BindsTo=sys-subsystem-bluetooth-devices-hci0:1234.device [Service] Type=simple #Next line is only required for Xorg, should be removed for Wayland Environment=XAUTHORITY=%h/.Xauthority ExecStart=/usr/bin/imwheel -d ExecStop=/usr/bin/imwheel -k RemainAfterExit=true [Install] WantedBy=sys-subsystem-bluetooth-devices-hci0:1234.device
启用和验证服务与启动服务相同。启用服务后,它将在下次连接设备时激活 IMWheel。
故障排除
后退/前进按钮不工作
您可能需要限制 IMWheel,使其仅影响滚轮,以防止其破坏其他鼠标输入,例如后退/前进按钮。您可以使用 -b 选项执行此操作。
$ imwheel -b "45"
另请参阅 Ask Ubuntu 上的相关问题。
当我悬停在目标窗口上方时,滚动速度不受影响
为了使 IMWheel 影响窗口的滚动速度,它必须是聚焦的。未聚焦窗口的滚动速度将保持不变。
在 Chrome 和 Firefox 中滚动 Amazon.com 时卡顿
据推测,Amazon.com 运行 JavaScript,该 JavaScript 基于用户在页面上假定的滚动点加载内容,而没有考虑 IMWheel。这会导致页面内容丢失、CPU 使用率增加以及其他错误。
您可以考虑为这些浏览器禁用 IMWheel,而是使用浏览器扩展程序解决问题,例如 Chrome Web Store 中的 Fast Scroll(将“amazon.com”添加到黑名单,否则会发生类似的错误),或 Firefox 的 FoxScroller。