跳转至内容

Logitech Marble Mouse

来自 ArchWiki

Logitech Marble Mouse 是一款带有四个按钮和轨迹球的鼠标,也被称为 Trackman Marble。Marble Mouse 可以左右手使用。需要一些配置才能使用轨迹球滚动。详细图像请参见:Logitech Marble Mouse (或 此处)。

安装

该鼠标在启动时或“热插拔”到已启动的系统时会自动检测到。无需特殊安装。

基本功能

Logitech Marble Mouse 具有一个轨迹球和四个按钮,分别是大左按钮大右按钮小左按钮小右按钮。它没有滚轮,也没有中键(通常是放在“滚轮下方”的按钮)。因此,在严重依赖这些功能的现代系统和应用程序中,默认可用性很差。然而,通过一些简单的配置(参见#按钮映射#滚动修饰键)可以启用这两个功能。

当未指定附加配置时,按钮映射到这些功能

默认按钮操作
按钮  结果                
大左按钮 左键单击
两个大按钮 中键单击 1
大右按钮 右键单击
小左按钮 浏览器后退
小右按钮 浏览器前进
  1. 同时按下两个大按钮会创建一个中键单击的模拟事件。对于没有中键的指针设备,这是默认启用的。
非按钮输入操作
操作     结果                
向下滚动球 移动光标向下
向上滚动球 移动光标向上
向左滚动球 移动光标向左
向右滚动球 移动光标向右

默认情况下,Logitech Marble Mouse 没有执行滚动事件的方法。但是,可以通过分配一个滚动修饰键来实现滚动,即一个按住时轨迹球移动会转换为滚动事件的按钮。

按钮映射

在现代系统中,重新映射按钮的最佳方法是在 udev/hwdb 中配置直接应用于内核的映射(有关详细信息,请参见Map scancodes to keycodes)。

注意 仍然可以在上层(例如 libinput X11 配置)重新映射按钮功能,但这样做不被推荐,因为它可能导致行为不一致。

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 ------------
注意 在 hwdb 中重新映射按钮将使上层将其视为真正的中键单击。因此,之后在引用该按钮时,请使用中键标识符(例如,在 GNOME gsettings 中,将 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_upedge

同时按下左右鼠标按钮进行模拟的中键单击似乎无需额外配置即可工作。

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"

这样您就可以使用大左按钮选择文本,右按钮扩展选择。小左按钮充当中键单击;它会粘贴所选内容。

参见