Logitech MX Master

出自 ArchWiki

Logitech MX Master 是一个系列的电脑鼠标

用法

如果您使用购买时附带的 Unifying 接收器 USB 适配器,鼠标应该无需特殊配置即可工作。将适配器插入您的电脑。确保鼠标已设置为通道 1,方法是按下鼠标底部的 switch 按钮,然后按住该按钮直到它开始快速闪烁。几秒钟后,它应该变为常亮,现在就已连接。如果您想连接到未连接的接收器,请参阅 Logitech Unifying Receiver

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

该鼠标有 3 个主要版本,最新的迭代有 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

额外按钮的映射

安装 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 中。但该软件包不带任何配置。需要创建此文件,指定要使用的设备名称。要从 cli 启动获取该名称

# logid -v

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

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

示例

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

这个最小的配置文件只是使每个按钮都像普通的鼠标按钮一样工作,忽略手势。它将允许额外按钮正常使用,例如在游戏和 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 中,转到系统设置 > 快捷方式 > 全局快捷方式 > KWin > 显示所有桌面上的所有窗口。默认设置为 Ctrl+F10。将此操作设置为 Ctrl+Alt+Tab 并应用设置。
  • 默认情况下,Linux 中无法检测到滚轮下方的 “I” 按钮,但它可以用于在自由和棘轮模式之间切换滚轮。使用 logid 可以重新分配它以供使用。
  • Linux 中无法检测到 Logitech 手势(按下拇指按钮时向上/向下/向左/向右移动鼠标),但它们在软件中由 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,最好将其添加到桌面环境的自动启动列表中。

拇指按钮是特殊的。使用 Logitech 为 Windows 和 Mac 提供的软件,您可以将其映射到最多 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 表示始终处于逐击模式。

要更改灵敏度,请将此值更改为 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],查看为其他设备修补的怪癖列表。

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