解决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