最近装了个Windows和Arch的双系统,但是在Arch下使用鼠标时感觉有些卡顿,上Arch wiki也没有解决。
我们知道,Windows下有着Logi官方的驱动软件,但是没有Linux版的。通过上网搜索,发现了一个开源的替代驱动logiOps(https://github.com/PixlOne/logiops)。以下是我的配置过程。
一、使用环境
1. 操作系统
ArchLinux x86_64 Kernel:linux 6.9.10
2. 鼠标
Logi POP Mouse
二、兼容设备
以下摘自logiops/TESTED.md at main · PixlOne/logiops · GitHub
This is currently only compatible with HID++ >2.0 devices.
This is not by any means an exhaustive list. Many more devices are supported but these devices are the ones that are confirmed to be working. To add to this list, submit a pull request adding your device.(翻译:这绝不是一份详尽的清单。支持更多设备,但这些设备已确认可以正常工作。若要添加到此列表,请提交添加设备的拉取请求。)
Device Compatible? Config Name MX Master 3S Yes MX Master 3S
MX Master 3 Yes Wireless Mouse MX Master 3
MX Master 3 for Mac Yes MX Master 3 for Mac
MX Master 2S Yes Wireless Mouse MX Master 2S
MX Master Yes Wireless Mouse MX Master
MX Anywhere S2 Yes Wireless Mobile Mouse MX Anywhere 2S
MX Anywhere 3 Yes MX Anywhere 3
MX Vertical Yes MX Vertical Advanced Ergonomic Mouse
MX Ergo Yes MX Ergo Multi-Device Trackball
MX Ergo M575 Yes ERGO M575 Trackball
M720 Yes M720 Triathlon Multi-Device Mouse
M590 Yes M585/M590 Multi-Device Mouse
T400 Yes Zone Touch Mouse T400
MX Keys Yes MX Keys Wireless Keyboard
M500s Yes Advanced Corded Mouse M500s
尽管我使用的Logi Pop Mouse并不在上面的列表中,但是也是同样支持的。
三、安装过程
1. 对于Arch用户
在AUR中就有LogiOps,所以安装过程十分简单,直接用paru或者yay安装即可。
示例:
paru -S logiops
2. 对于其他Linux发行版用户
请参考LogiOps项目的README.md文件。
或者参考这篇博客logiops,在 Linux下设置罗技鼠标的按键和手势。
3. 设置开机自启
sudo systemctl enable logid
四、配置过程
LogiOps的配置主要是修改 /etc/logid.cfg 中的内容
1. 准备工作
连接鼠标后,首先关闭logid进程:
sudo systemctl stop logid
然后执行 sudo logid -v 打印Debug信息(记得先关闭logid进程)
我的打印结果如下:
根据输出的信息,可以知道鼠标的名称和各按键的CID及一些特征信息(注意每种鼠标的CID对应的按键可能不同,可以根据鼠标的特征进行判断,且一般前两个是左右键。如果不知道具体是哪个可以先继续往后看,知道整个配置流程后可以试出来)。
有了以上信息,接下来就是正式对 /etc/logid.cfg 的配置了。
2. 对 logid.cfg 的配置
这里展示我的配置:
devices: (
{
// 鼠标名
name: "Logi POP Mouse";
// 和滚动相关的设置
hiresscroll:
{
hires: false;
invert: false;
target: false;
};
// 鼠标默认dpi
dpi: 2000;
// 按键设置
buttons: (
{
// 根据按键cid确定是鼠标上哪个按键
cid: 0x108;
action =
{
// 动作类型:手势
type: "Gestures";
gestures: (
{
direction: "Up"; // 按住向上移动
mode: "OnRelease"; // 按键松开时触发
action =
{
// 相当于按下键盘上的按键:KEY_VOLUMEUP(音量+)
type: "Keypress";
keys: ["KEY_VOLUMEUP"];
};
},
{
direction: "Down";
mode: "OnRelease";
action =
{
type: "Keypress";
keys: ["KEY_VOLUMEDOWN"];
};
},
{
direction: "Left";
mode: "OnRelease";
action =
{
type: "Keypress";
keys: ["KEY_PREVIOUSSONG"];
};
},
{
direction: "Right";
mode: "OnRelease";
action =
{
type: "Keypress";
keys: ["KEY_NEXTSONG"];
}
},
{
direction: "None"
mode: "OnRelease";
action =
{
type: "Keypress";
keys: ["KEY_MUTE"];
}
}
);
};
}
);
}
);
通过以上配置的效果如下:
dpi | 2000 |
cid | 0x108 |
手势(按住向上) | 音量+ |
手势(按住向下) | 音量- |
手势(按住向左) | 上一首 |
手势(按住向右) | 下一首 |
手势(只点击) | 静音 |
如果想实现类似 ctrl + alt + A 这样的多按键,可以写成这样:
keys: ["KEY_LEFTCTRL", "KEY_LEFTALT", "KEY_A"];
3. 启动 logid 进程
最后不要忘记启动 logid 进程
sudo systemctl start logid
4. 附:Linux 下键盘按键对应宏定义
可以在Bootlin中查阅自己使用的Linux内核版本对应的源码中的 input-event-codes.h (示例)
这里粘贴6.10内核版本的部分内容供参考:
#define KEY_RESERVED 0
#define KEY_ESC 1
#define KEY_1 2
#define KEY_2 3
#define KEY_3 4
#define KEY_4 5
#define KEY_5 6
#define KEY_6 7
#define KEY_7 8
#define KEY_8 9
#define KEY_9 10
#define KEY_0 11
#define KEY_MINUS 12
#define KEY_EQUAL 13
#define KEY_BACKSPACE 14
#define KEY_TAB 15
#define KEY_Q 16
#define KEY_W 17
#define KEY_E 18
#define KEY_R 19
#define KEY_T 20
#define KEY_Y 21
#define KEY_U 22
#define KEY_I 23
#define KEY_O 24
#define KEY_P 25
#define KEY_LEFTBRACE 26
#define KEY_RIGHTBRACE 27
#define KEY_ENTER 28
#define KEY_LEFTCTRL 29
#define KEY_A 30
#define KEY_S 31
#define KEY_D 32
#define KEY_F 33
#define KEY_G 34
#define KEY_H 35
#define KEY_J 36
#define KEY_K 37
#define KEY_L 38
#define KEY_SEMICOLON 39
#define KEY_APOSTROPHE 40
#define KEY_GRAVE 41
#define KEY_LEFTSHIFT 42
#define KEY_BACKSLASH 43
#define KEY_Z 44
#define KEY_X 45
#define KEY_C 46
#define KEY_V 47
#define KEY_B 48
#define KEY_N 49
#define KEY_M 50
#define KEY_COMMA 51
#define KEY_DOT 52
#define KEY_SLASH 53
#define KEY_RIGHTSHIFT 54
#define KEY_KPASTERISK 55
#define KEY_LEFTALT 56
#define KEY_SPACE 57
#define KEY_CAPSLOCK 58
#define KEY_F1 59
#define KEY_F2 60
#define KEY_F3 61
#define KEY_F4 62
#define KEY_F5 63
#define KEY_F6 64
#define KEY_F7 65
#define KEY_F8 66
#define KEY_F9 67
#define KEY_F10 68
#define KEY_NUMLOCK 69
#define KEY_SCROLLLOCK 70
提示:可以搜索其中以“KEY_”开头的宏定义