跳转至内容

Logitech MX Master

来自 ArchWiki

Logitech MX Master 是一款 计算机鼠标 系列。

用法

如果使用随附的统一接收器 USB 接收器,鼠标应无需特别配置即可工作。将接收器插入 PC。确保鼠标设置为通道 1,方法是按下鼠标下方的 switch 按钮,然后按住该按钮直到它开始快速闪烁。它应该会在几秒钟后变成常亮,表示已连接。如果您想连接到未连接的接收器,请参阅 Logitech Unifying Receiver

要使用 蓝牙,请更改鼠标底部的通道,然后单击 connect 按钮。现在,使用您选择的蓝牙管理器搜索鼠标并配对。将来,当您的蓝牙激活时,切换到该通道即可连接。如果您在扫描时鼠标未显示,请参阅 Bluetooth#Device does not show up in scan

该鼠标有 4 个主要版本,第三代有 5 个修订版,但功能相同。

  • MX Master,
  • MX Master 2s,
  • MX Master 3
MX Master 3 变体
名称 释放 支持? 随附?
MX Master 3 2019 Unifying Unifying + USB A-C
MX Master 3 for Mac 2020 Unifying USB C-C
MX Master 3 for business 2021 Bolt Bolt + USB A-C
MX Master 3S 2022
MX Master 3S for Mac Bolt USB C-C
  • MX Master 4
MX Master 4 变体
名称 释放 支持? 随附?
MX Master 4 2025 Bolt Bolt + USB C-C
MX Master 4 for Mac 2025 Bolt Bolt + USB C-C

新款 MX Master 4 Haptic 缺少一些基本功能控制,例如 触觉反馈力感应 按钮,这些功能仅在主分支中可用,但应很快添加到发布版本中。通过 Bolt 接收器配对即可正常工作。

附加按钮映射

安装 solaarlogiopsAUR(logiops-gitAUR) 来自定义鼠标设置。

  • 易于编程的按钮。
  • DPI 选择。
  • 智能切换(超快和逐段滚轮模式)。
  • 高分辨率滚动。
  • 手势。

尽管 logiops 在 v0.3.0 中添加了对新型 Bolt 连接器的支持,但偶尔仍会出现问题。有关 bolt 设备列表,请参阅 Wikipedia:List of Logitech products。市场上所有基于 Bolt 的设备也都具有蓝牙连接功能。因此,使用蓝牙可以作为一种解决方法。

Solaar 完全支持基于 Bolt 的连接,包括设备配对。

可以使用 #Xbindkeys 并调整桌面快捷方式来实现一些自定义,但有一些注意事项(请参阅下面的说明)。

Logiops

可以通过命令行执行为应用程序:

# logid

或者作为 logid.service 启动

配置文件位于 /etc/logid.cfg。但软件包不附带任何配置。需要创建此文件,指定要使用的设备名称。从命令行启动以获取该名称:

# logid -v

将打印检测到的设备名称。

然后,您可以创建配置文件。

示例

有关更多详细信息,请参阅 配置格式文档,包括 CIDs(按钮代码)列表按键代码列表

这个最小的配置文件仅仅是让每个按钮正常工作,忽略手势。它将允许附加按钮正常使用,例如在游戏中以及通过 Xbindkeys(见下文)。

/etc/logid.cfg
devices: ({
  name: "Wireless Mouse MX Master 3";

  // A lower threshold number makes the wheel switch to free-spin mode
  // quicker when scrolling fast.
  smartshift: { on: true; threshold: 20; };

  hiresscroll: { hires: true; invert: false; target: false; };

  // Higher numbers make the mouse more sensitive (cursor moves faster),
  // 4000 max for MX Master 3.
  dpi: 1500;

  buttons: (

    // Make thumb button 10.
    { cid: 0x53; action = { type: "Keypress"; keys: ["KEY_FORWARD"]; }; },

    // Make top button 11.
    { cid: 0x56; action = { type: "Keypress"; keys: ["KEY_BACK"];    }; }

  );
});

有关更全面的配置,请参阅 logid.example.cfg 或此配置:

/etc/logid.cfg
devices: (
{
    name: "Wireless Mouse MX Master 3";
    smartshift:
    {
        on: true;
        threshold: 30;
    };
    hiresscroll:
    {
        hires: true;
        invert: false;
        target: false;
    }; 
    

    thumbwheel:
    {
        divert: true;
        invert: false;

        left: {
                mode: "OnInterval";
                interval: 2;
                action: {
                        type: "Keypress";
                        keys: ["KEY_VOLUMEDOWN"];
                };
        };
        right: {
                mode: "OnInterval";
                interval: 2;
                action: {
                        type: "Keypress";
                        keys: ["KEY_VOLUMEUP"];
                };
        };
    
        tap: {
            type: "Keypress";
            keys: ["KEY_MUTE"];
        };

    };
    dpi: 1000;

    buttons: (
        {
            cid: 0xc3;
            action =
            {
                type: "Gestures";
                gestures: (
                    {
                        direction: "Up";
                        mode: "OnRelease";
                        action =
                        {
                            type: "Keypress";
                            keys: ["KEY_LEFTCTRL", "KEY_F10"];
                        };
                    },
                    {
                        direction: "Down";
                        mode: "OnRelease";
                        action =
                        {
                            type: "Keypress";
                            keys: ["KEY_LEFTCTRL", "KEY_F7"];
                        };
                    },
#                    {
#                        direction: "Left";
#                        mode: "OnRelease";
#                        action =
#                        {
#                            type: "CycleDPI";
#                            dpis: [50, 500, 1000, 1500, 2000, 3000, 4000];
#                        };
#                    },
                    {
                        direction: "Left";
                        mode: "OnRelease";
                        action =
                        {
                            type: "Keypress";
                            keys: ["KEY_LEFTMETA", "KEY_LEFT"];
                        };
                    },

#                    {
#                        direction: "Right";
#                        mode: "OnRelease";
#                        action =
#                        {
#                            type = "ToggleHiresScroll";
#                        }
#                    },
                    {
                        direction: "Right";
                        mode: "OnRelease";
                        action =
                        {
                            type: "Keypress";
                            keys: ["KEY_LEFTMETA", "KEY_RIGHT"];
                        }
                    },

                    {
                        direction: "None"
                        mode: "NoPress"
                    }
                );
            };
        },
        {
            cid: 0xc4;
            action =
            {
                type = "ToggleSmartshift";
            };
        },
        {
            # Next tab instead of fwd in history, Comment to default behavior
            cid: 0x53;
            action =
            {
                type :  "Keypress";
                keys: ["KEY_LEFTCTRL", "KEY_PAGEUP"];
            };
        },
        {
            # Previous tab instead of back in history, Comment to default behavior
            cid: 0x56;
            action =
            {
                type :  "Keypress";
                keys: ["KEY_LEFTCTRL", "KEY_PAGEDOWN"];
            };
        }
    );
},
{
# Another device to configure
name: "Other Logitech USB Receiver";

}
);

Xbindkeys

鼠标发送的事件列表

物理操作 默认设置 使用上面的最小 logid
配置
左键 按钮 1 按钮 1
按住滚轮 按钮 2 按钮 2
右键 按钮 3 按钮 3
滚轮向上 按钮 4 按钮 4
滚轮向下 按钮 5 按钮 5
水平滚轮右(向上) 按钮 6 按钮 6
水平滚轮左(向下) 按钮 7 按钮 7
底部侧键 按钮 8 按钮 8
顶部侧键 按钮 9 按钮 9
拇指按钮 Ctrl+Alt+Tab 按钮 10
按下滚轮下方的“i”按钮 xbindkeys 未检测到 按钮 11

备注

  • 按下拇指按钮时无法移动鼠标光标,但可以使用其他操作(按下按钮和滚动滚轮)。释放拇指按钮后才会发送 Ctrl+Alt+Tab 事件。使用 logid 重新分配此按钮可消除此限制。
  • 如果您愿意,可以获得在 Windows 或 Mac 上使用拇指按钮的体验。在 KDE 中,前往 System settings > Shortcuts > Global Shortcuts > KWin > Show all windows from all desktops。默认设置为 Ctrl+F10。为此操作设置 Ctrl+Alt+Tab 并应用设置。
  • 滚轮下方的“i”按钮在 Linux 上默认不可检测,但它起到在自由滚动模式和逐段滚动模式之间切换的作用。使用 logid 可以重新分配它以便使用。
  • Logitech 手势(按下拇指按钮时向上/下/左/右移动鼠标)在 Linux 上不可检测,但由 logid 在软件中实现。

垂直滚轮及其附近的两个按钮应能立即工作,但拇指按钮需要一些特殊处理,并且您可能需要重新映射其他按钮。

要重新映射鼠标按钮,您可以使用软件包 xbindkeysxautomation

xbindkeys 将重定向按钮,而 xte(包含在 xautomation 中)将执行自定义按键。要做到这一点,请在您的主目录中创建一个名为 .xbindkeysrc 的配置文件。

以下是垂直滚轮及其附近两个按钮的示例配置:

# thumb wheel up => increase volume and unmute
"amixer -D pulse set Master 4000+ unmute"
   b:6
# thumb wheel down => lower volume
"amixer -D pulse set Master 4000-"
   b:7
# backward button => previous song
"xte 'key XF86AudioPrev'"
   b:8
# forward button => next song
"xte 'key XF86AudioNext'"
   b:9

如果使用 PulseAudio(更多信息 此处

# thumb wheel up => increase volume
"pactl set-sink-volume @DEFAULT_SINK@ +2%"
   b:6
# thumb wheel down => lower volume
"pactl set-sink-volume @DEFAULT_SINK@ -2%"
   b:7

如果您更喜欢获得音量级别变化的视觉反馈,可以使用以下几行代替(在 GNOME 和 KDE 中测试过):

# thumb wheel up => increase volume
"xte 'key XF86AudioRaiseVolume'"
   b:6
# thumb wheel down => lower volume
"xte 'key XF86AudioLowerVolume'"
   b:7

现在启动 xbindkeys,最好将其添加到您的桌面环境的自动启动列表中。

拇指按钮比较特殊。使用适用于 Windows 和 Mac 的 Logitech 软件,您可以为其映射多达 5 个操作:通过按下按钮或按下按钮并向四个方向之一移动鼠标。截至 2015 年 11 月,在 Arch 上没有办法启用方向功能。

如果您查看按钮触发的按键,您会注意到它发送了一系列按键,这会混淆 xbindkeys。您需要在此处添加一个短暂的延迟,这样 xbindkeys 只会对发送的第一个按键做出反应,这样我们至少可以为其映射一个操作。

# thumb button => play/pause music
# Credit to gregmuellegger https://bbs.archlinux.org/viewtopic.php?pid=1551271#p1551271
# We need a sleep here since the button triggers a few more key codes.
# It also triggers Control+Mod2+Control_L and Alt+Mod2+Alt_L. The sleep
# prevents that X receives those keypresses simultaniously. Therefore they
# might interfere and trigger unwanted actions. By the sleep we make sure that
# the Alt+Left is receive as distinct event.
"sleep 0.1 && xte 'key XF86AudioPlay'" 
   m:0xc + c:23

请记住,对 ~/.xbindkeysrc 的所有更改都需要重启 xbindkeys 进程。

$ pkill xbindkeys && xbindkeys

电源

电池状态可以按照 Logitech Unifying Receiver 中的描述读取。例如,Solaar(solaar)有一个系统托盘实用程序。

智能切换

智能切换是指滚轮根据旋转速度自动在逐段滚动和流畅滚动之间切换。

Logiops

可以将任何鼠标按钮分配给模式切换。默认设置是智能切换阈值约为 20,并且使用顶部按钮(滚轮正下方)在始终流畅和智能切换(仅在慢速滚动时为逐段)之间切换。增加阈值数字需要滚轮旋转得更快,然后才会切换到流畅滚动模式。

要重现默认设置,请在配置文件中使用此代码段,如上所示:

/etc/logid.cfg
...
  smartshift: { on: true; threshold: 20; };
  buttons: (
    // Make top button (0xc4) switch modes
    { cid: 0xc4; action = { type = "ToggleSmartshift"; }; },
...

根据需要更改阈值或使用不同的按钮(cid)。

Solaar

除了 logid,还可以使用 Solaar 来更改鼠标滚轮模式(在超快和逐段之间)的灵敏度,安装 solaar。会出现一个滑块,可以在 0 到 50 之间设置(包含)。0 表示始终处于超快模式,50 表示始终处于逐段模式。

要更改灵敏度,请在 0 到 50 之间更改此值。

故障排除

蓝牙模式下鼠标移动卡顿

请参阅 Bluetooth mouse#Mouse lag

蓝牙模式下闲置几秒后鼠标卡死

请参阅 Power management#USB autosuspend 以将您的设备列入黑名单。

滚轮水平滚动行为与Windows下不同(反向)

这是 libinput 中添加的一个已知行为([1]),用于纠正该鼠标(以及许多其他 Logitech 产品)的垂直/水平滚轮配置方式的不同。但是,如果您经常在不同操作系统上使用此鼠标,并且发现此自动校正行为不便,则可以将其关闭。

/etc/libinput/local-overrides.quirks
...
[Logitech MX Master 3]
MatchVendor=0x46D
MatchProduct=0x4082
ModelInvertHorizontalScrolling=0

# MX Master 3 has a different PID on bluetooth
[Logitech MX Master 3]
MatchVendor=0x46D
MatchProduct=0xB023
ModelInvertHorizontalScrolling=0
...

另请参阅 [2] 获取其他设备修补的 quirk 列表。

MX Master 3 滚动事件丢失

当滚轮处于逐段模式,并且用户立即切换滚动方向(向上滚动两步,向下滚动一步)时,最后一步可能不会被捕获。这可能导致在禁用平滑滚动时 Firefox 滚动不可预测,或者当使用滚轮在基于 Qt 小部件的应用程序中切换标签页时。这是因为 MX Master 3 被注册为高分辨率滚动设备,即使在逐段模式下也会继续发送高分辨率事件 [3][4]

要过滤掉高分辨率事件,请使用:

/etc/libinput/local-overrides.quirks
...
[Logitech MX Master 3]
MatchVendor=0x46D
MatchProduct=0x4082
AttrEventCode=-REL_WHEEL_HI_RES;-REL_HWHEEL_HI_RES;
...

要查找产品 ID(因为它们在制造批次和连接类型之间有所不同),请先找到设备节点:

# libinput list-devices | grep "MX Master 3" -A 5 | grep Kernel | awk '{print $2}'
/dev/input/event9

然后查询设备节点获取其 ID:

# udevadm info -a /dev/input/event9 | grep id/
    ATTRS{id/product}=="4082"
    ATTRS{id/vendor}=="046d"

id/vendorid/product ID 复制到 MatchVendorMatchProduct 字段中,并在前面加上 0x 前缀,如下所示。

高分辨率滚动

Logitech MX Master 3S 通过其电磁滚轮支持高分辨率(分数)滚动。在 Arch Linux 上,高分辨率滚动是否可用取决于所使用的连接方法。

通过 Logitech Bolt 接收器连接时,MX Master 3S 仅公开标准鼠标滚轮事件。在此模式下,libinput 报告固定的滚动步长(例如 15/120),并且没有平滑或分数滚动可用。这是内核驱动程序的限制,它不会通过 Bolt 接收器公开该设备的高分辨率滚动事件。[5]

通过蓝牙连接时,MX Master 3S 正确公开分数滚动事件。在此配置中,libinput debug-events 报告较小的滚动增量(例如 2.00/16.0),并且高分辨率滚动按预期工作。因此,建议使用此连接方法的用户获得平滑滚动行为。

当非常缓慢地滚动时,用户仍可能会注意到一个小的死区或偶尔的跳跃。此行为是由机械 FreeSpin 滚轮和 HID 报告的粒度引起的,被认为是正常的。