2023年7月10日
By: Chase

解决linux不兼容罗技键盘

前言

为了实现高效办公, 我买了个罗技的mx mechanical键盘, 可实现两台电脑一键切换! 从此我的mac还有linux大麒麟系统一个键盘不分家!

但是, 罗技的键鼠适配对linux很不友好, 没有官方驱动. 我的altopt(win)是反的. 搜了下, 解决方案有用非官方版的logiops, 有建议用solaar的.

logiops死在了安装cmake的依赖上. 我是arm64版的大麒麟系统, 各种版本不对.

solaar同样死在了安装上, 大麒麟系统的apt源真是老的可以, 而python python3 python3.5 pip pip3等一套搞得我云里雾里.

最后打算用linux自带的xev, xmodmap解决问题.

本文就不截图了, 写blog的mac上没有这俩玩意.

xev

可以监听键盘的所有keycode. 命令行输入:

xev

此时如果按下当前系统可正常监听的a, b, c等按键, 会输出正确的KeyRelease, KeyPress等键盘事件, 事件中会标注出当前的keycode. 拿到之后去xmodmap中改映射值就可以.

xmodmap

wiki说明

查看单键

查看当前所有的键盘映射:

xmodmap -pke

也可以直接将映射输出到~目录, xmodmap -pke > ~/.Xmodmap.

每个按键按键一般有6个值映射, 比如

keycode 24 = q Q q Q q Q

分别对应 q,

Shift + q,

Mode_switch + q,

Shift + Mode_switch + q,

ISO_Level3_Shift + Key,

ISO_Level3_Shift + Shift + Key 据说还可以继续往后扩展到8个.

我查了下Mode_switch, ISO_Level3_Shift在我的系统上, keycode分别对应92和203, 我的84键盘上反正是没按出来这俩键. 所以我们关注前两个值的设定就好了.

我们下面可以改动测试一下, 把~/.Xmodmap下做个修改:

keycode 24 = 1 2 3 4 5 6

之后xmodmap ~/.Xmodmap让修改生效, 再按q,shift + q看看, 是不是直接就输出12了. 如果你的键盘不是84的, 可以多测测看能不能出来3 4 5 6.

查看复合键盘

如果涉及到组合键, 得看一个叫

xmodmap -pm

pm = print modifier, 理解了下这个modifier就是alt +, Ctrl + 都归他管.

比如上面的单键修改q这个按键, 直接改那一个keycode即生效.

像我的需要把altopt(win)换位置, 除了需要对调这两个按键本身, 还需要clear+add重新绑定设置一下modifier

下面是我的~/.Xmodmap最终修改diff:

...
keycode 64 = Super_L NoSymbol Super_L NoSymbol Super_L NoSymbol
...

keycode 133 = Alt_L Meta_L Alt_L Meta_L Alt_L Meta_L
...
clear mod1
clear mod4
add mod1 = Alt_L Alt_R Meta_L
add mod4 = Super_L Super_R Hyper_L

其中64133是我通过xev找到那俩返了的altopt(win)对应的keycode, 把他俩值互换了一下.

add的mod1mod4就是原始的xmodmap -pm中的值, 只是重新抄了一遍

xmodmap重设

如果瞎编辑xmodmap生效了, 且没有拷贝初始设置值, 可以重置

setxkbmap -option
Tags: linux