IMWheel

出自 ArchWiki

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。这可能会在尝试编写正则表达式来匹配它们时导致困难。例如,破折号 (—) 看起来很像标准破折号 (-),但在正则表达式中被认为是三个“字符”,而不是一个。

UpDown 可以分别代替鼠标滚轮的 Button4Button5 使用。

匹配所有程序(使用 “.*”)可能会在某些程序中导致意外行为;由于 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 中运行的程序设置窗口标题。某些终端(如 KonsoleGNOME 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