解决linux不兼容罗技键盘
前言
为了实现高效办公, 我买了个罗技的mx mechanical键盘, 可实现两台电脑一键切换! 从此我的mac还有linux大麒麟系统一个键盘不分家!
但是, 罗技的键鼠适配对linux很不友好, 没有官方驱动. 我的alt和opt(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
查看单键
查看当前所有的键盘映射:
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看看, 是不是直接就输出1和2了. 如果你的键盘不是84的, 可以多测测看能不能出来3 4 5 6.
查看复合键盘
如果涉及到组合键, 得看一个叫
xmodmap -pm
pm = print modifier, 理解了下这个modifier就是alt +, Ctrl + 都归他管.
比如上面的单键修改q这个按键, 直接改那一个keycode即生效.
像我的需要把alt和opt(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
其中64和133是我通过xev找到那俩返了的alt与opt(win)对应的keycode, 把他俩值互换了一下.
add的mod1 和 mod4就是原始的xmodmap -pm中的值, 只是重新抄了一遍
xmodmap重设
如果瞎编辑xmodmap生效了, 且没有拷贝初始设置值, 可以重置
setxkbmap -option