Logitech Marble Mouse
Logitech Marble Mouse 是一款带有四个按钮和轨迹球的鼠标,也被称为 Trackman Marble。Marble Mouse 可以左右手使用。需要一些配置才能使用轨迹球滚动。详细图像请参见:Logitech Marble Mouse (或 此处)。
安装
该鼠标在启动时或“热插拔”到已启动的系统时会自动检测到。无需特殊安装。
基本功能
Logitech Marble Mouse 具有一个轨迹球和四个按钮,分别是大左按钮、大右按钮、小左按钮和小右按钮。它没有滚轮,也没有中键(通常是放在“滚轮下方”的按钮)。因此,在严重依赖这些功能的现代系统和应用程序中,默认可用性很差。然而,通过一些简单的配置(参见#按钮映射和#滚动修饰键)可以启用这两个功能。
当未指定附加配置时,按钮映射到这些功能
| 按钮 | 结果 |
|---|---|
| 大左按钮 | 左键单击 |
| 两个大按钮 | 中键单击 1 |
| 大右按钮 | 右键单击 |
| 小左按钮 | 浏览器后退 |
| 小右按钮 | 浏览器前进 |
- 同时按下两个大按钮会创建一个中键单击的模拟事件。对于没有中键的指针设备,这是默认启用的。
| 操作 | 结果 |
|---|---|
| 向下滚动球 | 移动光标向下 |
| 向上滚动球 | 移动光标向上 |
| 向左滚动球 | 移动光标向左 |
| 向右滚动球 | 移动光标向右 |
默认情况下,Logitech Marble Mouse 没有执行滚动事件的方法。但是,可以通过分配一个滚动修饰键来实现滚动,即一个按住时轨迹球移动会转换为滚动事件的按钮。
按钮映射
在现代系统中,重新映射按钮的最佳方法是在 udev/hwdb 中配置直接应用于内核的映射(有关详细信息,请参见Map scancodes to keycodes)。
Logitech Marble Mouse 按钮的默认扫描码到事件映射如下:
| 按钮 | 扫描码 | 默认事件 |
|---|---|---|
| 大左按钮 | KEYBOARD_KEY_90001 |
btn_left
|
| 大右按钮 | KEYBOARD_KEY_90002 |
btn_right
|
| 小左按钮 | KEYBOARD_KEY_90004 |
btn_side
|
| 小右按钮 | KEYBOARD_KEY_90005 |
btn_extra
|
默认情况下没有为 btn_middle 事件进行映射,但可以将一个 KEYBOARD_KEY_9000x 扫描码重新映射到 btn_middle 事件,并使相应的按钮表现得像一个真正的中键。
例如,要将小左按钮重新映射为中键,请创建一个 .hwdb 文件,如下所示(请注意大小写和缩进):
/etc/udev/hwdb.d/99-logitech-marble-middle.hwdb
evdev:input:b0003v046DpC408* KEYBOARD_KEY_90004=btn_middle
之后,更新硬件数据库索引并手动强制 udev 触发新规则:
# systemd-hwdb update # udevadm trigger
可以使用 evtest 来检查每次按钮按下时触发的事件。如果重新映射成功,按下小左按钮应该会输出类似以下的事件:
# evtest /dev/input/by-id/usb-Logitech_USB_Trackball-event-mouse
Input driver version is 1.0.1
Input device ID: bus 0x3 vendor 0x46d product 0xc408 version 0x110
Input device name: "Logitech USB Trackball"
Supported events:
Event type 0 (EV_SYN)
Event type 1 (EV_KEY)
Event code 272 (BTN_LEFT)
Event code 273 (BTN_RIGHT)
Event code 274 (BTN_MIDDLE)
Event code 276 (BTN_EXTRA)
Event type 2 (EV_REL)
Event code 0 (REL_X)
Event code 1 (REL_Y)
Event type 4 (EV_MSC)
Event code 4 (MSC_SCAN)
Properties:
Testing ... (interrupt to exit)
Event: time 1747653343.971300, type 4 (EV_MSC), code 4 (MSC_SCAN), value 90004
Event: time 1747653343.971300, type 1 (EV_KEY), code 274 (BTN_MIDDLE), value 1
Event: time 1747653343.971300, -------------- SYN_REPORT ------------
Event: time 1747653344.043073, type 4 (EV_MSC), code 4 (MSC_SCAN), value 90004
Event: time 1747653344.043073, type 1 (EV_KEY), code 274 (BTN_MIDDLE), value 0
Event: time 1747653344.043073, -------------- SYN_REPORT ------------
scroll-wheel-emulation-button 设置为值 2)。libinput 限制故障排除
在某些系统中,Logitech Marble Mouse 的 libinput 配置包含一个“限制”,该限制会完全禁用 BTN_MIDDLE 事件。因此,在 hwdb 中将按钮重新映射到 btn_middle 后,该按钮将完全“停止工作”(即使 evtest 仍然报告 BTN_MIDDLE 事件)。可以通过运行 root 权限下的 libinput debug-events 来使用 libinput 进行检查,并确保点击重新映射的按钮不会输出任何事件。
要解决此问题,请创建如下的覆盖限制文件(如果文件已存在,请将以下内容附加到其末尾):
/etc/libinput/local-overrides.quirks
[Logitech Marble Mouse Trackball] MatchUdevType=mouse MatchBus=usb MatchVendor=0x046D MatchProduct=0xC408 AttrEventCode=+BTN_MIDDLE
然后重启以确保配置生效。
现在点击重新映射的按钮应该会输出类似以下的事件:
# libinput debug-events
event6 POINTER_BUTTON +9.968s BTN_MIDDLE (274) pressed, seat count: 1 event6 POINTER_BUTTON +10.072s BTN_MIDDLE (274) released, seat count: 0
滚动修饰键
Logitech Marble Mouse 的一个巨大限制是缺乏滚轮或滚动环。通过分配一个滚动修饰键来克服这一限制:一个鼠标按钮,允许轨迹球滚动。当按下滚动修饰键时,轨迹球移动将变成滚动事件。
定义滚动修饰键时,用于指定按钮的 ID 是与事件关联的数字,而不是硬件按钮本身。这意味着如果按钮在内核中被重新映射(#按钮映射),使用的 ID 将对应于重新映射的按钮。事件 ID 号(和默认按钮)如下表所示:
| 默认硬件按钮 | 事件 | 事件编号 |
|---|---|---|
| 大左按钮 | btn_left |
1 |
| (无) | btn_middle |
2 † |
| 大右按钮 | btn_right |
3 |
| 小左按钮 | btn_side |
8 |
| 小右按钮 | btn_extra |
9 |
- 数字 4 到 7 指的是滚动事件
- † 模拟中键单击(即两个大按钮同时单击)不是真实事件,不能用作滚动修饰键。为了使中键按钮也能兼作滚动修饰键,必须首先按照#按钮映射将其重新映射为一个真实按钮。
滚动修饰键在 libinput 中实现,但 libinput 的设计使得上层负责配置(有关详细信息,请参见libinput)。因此,正确的滚动修饰键定义方式取决于使用的是 Wayland 还是 X11,以及桌面环境。以下各节将展示如何在不同系统中配置滚动修饰键(以及其他设置)。
GNOME 3 和 Wayland
GNOME 提供了一系列有限的配置选项来启用滚动修饰键和调整鼠标光标的加速度行为。这些设置可以使用 gsettings 修改,也可以通过 dconf 在 /org/gnome/desktop/peripherals/trackball/ 下访问。
更改以下选项以分配一个按钮作为滚动修饰键:
$ gsettings set org.gnome.desktop.peripherals.trackball scroll-wheel-emulation-button <button_id>
其中,<button_id> 是应作为修饰键的 libinput 事件 ID(参见#滚动修饰键)。要停用滚动修饰键,将 <button_id> 设置为 0。
还可以通过设置来启用滚动修饰键锁定:
$ gsettings set org.gnome.desktop.peripherals.trackball scroll-wheel-emulation-button-lock true
Logitech Marble Mouse 默认启用中键单击模拟,无法在设置中禁用。但是,当 libinput 限制被修改以启用 BTN_MIDDLE 事件时,它将被禁用(参见#libinput 限制故障排除)。如果之后仍希望使用中键单击模拟,可以通过以下方式重新启用:
$ gsettings set org.gnome.desktop.peripherals.trackball middle-button-emulation true
轨迹球可以配置为使用“平坦”或“自适应”加速度曲线,或者仅使用其“默认”曲线。为此,请设置:
$ gsettings set org.gnome.desktop.peripherals.trackball accel-profile <profile>
为所需值。
Sway 和 Wayland
运行 Wayland 时,上述配置文件无效。Sway 提供了一系列有限的配置选项来启用鼠标滚轮模拟和调整鼠标光标的加速度行为。在您的 sway 配置文件中,添加以下部分以在按下小左按钮的同时启用 marble 滚动:
input "1133:50184:Logitech_USB_Trackball" {
scroll_method on_button_down
}
Hyprland
Hyprland 也支持有限数量的滚轮模拟选项。将以下块添加到您的配置中:
hyprland.conf
device {
name = logitech-usb-trackball
scroll_method = on_button_down
}
hyprctl devices 检查以确保您的设备名称与示例中的名称相同。您还可以根据Hyprland 输入文档配置 on_button_up 或 edge。
同时按下左右鼠标按钮进行模拟的中键单击似乎无需额外配置即可工作。
Plasma 和 Wayland
当在 Wayland 中运行 Plasma 桌面会话时,您可以使用 qdbus 进行滚动配置。您只需找到正确的事件编号,该编号可以从 /dev 中确定,例如:
event="$(basename $(readlink /dev/input/by-id/usb-Logitech_USB_Trackball-event-mouse))" qdbus org.kde.KWin /org/kde/KWin/InputDevice/$event org.kde.KWin.InputDevice.scrollOnButtonDown true
默认使用小左按钮。如果要使用小右按钮,请设置:
qdbus org.kde.KWin /org/kde/KWin/InputDevice/$event org.kde.KWin.InputDevice.scrollButton 276
对于其他按钮,请遵循下表:
| 按钮 | Kwin 按钮代码 | 功能(默认) |
|---|---|---|
| 大左按钮 | 272 | 普通单击 |
| 大右按钮 | 273 | 右键单击 |
| 小左按钮 | 275 | 浏览器前进 |
| 小右按钮 | 276 | 浏览器后退 |
X11
当使用基于 X11 的桌面时,可以使用 X11 配置文件和实用程序来配置 libinput。这要求安装 xf86-input-libinput。配置可以添加到文件 /etc/X11/xorg.conf.d/10-libinput.conf。如果文件存在,请将其内容追加到文件末尾。以下显示了一些基本的配置示例:
/etc/X11/xorg.conf.d/10-libinput.conf
Section "InputClass" Identifier "Marble Mouse" MatchProduct "Logitech USB Trackball" Driver "libinput" Option "ScrollMethod" "button" Option "ScrollButton" "8" Option "MiddleEmulation" "true" EndSection
此
- 通过按下并按住 BTN_SIDE 按钮(默认是小左按钮)并移动轨迹球,可启用水平和垂直滚动。
- 通过同时按下两个大按钮来启用中键单击模拟。
如果按照#按钮映射将一个真实按钮重新映射到 BTN_MIDDLE,则可以使用以下方法:
/etc/X11/xorg.conf.d/10-libinput.conf
Section "InputClass" Identifier "Marble Mouse" MatchProduct "Logitech USB Trackball" Driver "libinput" Option "ScrollMethod" "button" Option "ScrollButton" "2" EndSection
此
- 通过按下并按住 BTN_MIDDLE 事件(即已重新映射到该事件的真实按钮)并移动轨迹球,可启用水平和垂直滚动。
- 由于 BTN_MIDDLE 事件(ID 2)已启用并重新映射到真实按钮,因此无需“MiddleEmulation”。但是,如果需要,仍可以启用它。
其他一些值得注意的配置选项是:
Option "ScrollButtonLock" "true" # enable scroll modifier lock mode Option "LeftHanded" "true" # swap left and right buttons Option "HorizontalScrolling" "false" # disable horizontal scrolling
有关完整选项列表,请参见 libinput(4) § CONFIGURATION DETAILS。
其他调整
控制台 (gpm)
有关详细信息,请参见控制台鼠标支持。在控制台中,您可以使用 gpm,并将类型选项设置为 imps2。编辑 /etc/conf.d/gpm,使之如下:
GPM_ARGS="-m /dev/input/mice -t imps2"
这样您就可以使用大左按钮选择文本,右按钮扩展选择。小左按钮充当中键单击;它会粘贴所选内容。
参见
- Arch wiki 文档:Map scancodes to keycodes
- Arch wiki 文档:libinput
- libinput 文档:最新版