系统相关
首页 > 系统相关> > linux – 我可以给两个键盘不同的布局吗?

linux – 我可以给两个键盘不同的布局吗?

作者:互联网

我更喜欢Dvorak布局,所以我有一个很好的USB Das键盘,我已经为它分配了一个适用于虚拟控制台和X11的布局.我使用了loadkeys和install-keymap来安排它从启动开始生效,我对此非常满意.

但是,我的大多数同事更喜欢Qwerty布局,这是结对编程的障碍.我确实有一些可用于此任务的可用USB键盘选择,但是当它们插入时它们都会选择我的Dvorak布局.

有没有办法告诉udev(甚至只是X11)为我的附加键盘使用Qwerty布局?它们具有不同的USB供应商和设备标识符,我可以用来区分它们.

我的系统是Debian Testing,udev版本为232.当我在磁盘发生故障后重新安装时,它被systemd感染了,所以我习惯的标准(SysV风格)方法无效.

类似的问题Different keyboard layout for each keyboard对我没有任何帮助.

解决方法:

一般背景:键被分配三组不同的“代码”,首先是扫描码(任意硬件相关数字代表键盘上的键),然后是键码(代表特定键的更抽象的数字,例如shift或1 /! ),最后是keysym(键符号,实际符号,如á由键或组合键产生).

我最近了解到每个/ dev / input / event *设备都带有自己的scancode-to-keycode映射.这些映射可以通过iotcls来读取和修改(EVIOCGKEYCODE_V2,EVIOCSKEYCODE_V2),但有趣的是,似乎没有可用于访问这些映射的通用工具(我很快写了一个简单的C程序转储它,因为我很好奇).

然后,Linux内核和X都将密钥代码映射到密钥.对于内核,只有一个全局映射,kbd处理程序(或者至少一个非常虚拟控制台的全局映射,我不确定不同的虚拟控制台是否可以有不同的映射). X维护每个设备的映射.

因此,如果您想要在虚拟控制台上的键盘之间存在差异,那么剩下的唯一选择就是使用scancode-to-keycode映射.对于Dvorak vs. Qwerty,只要您重新映射字母键,并且不希望以不同方式重新映射移位和非移位状态的符号,这实际上就可以工作.

更新版本的udev使用硬件数据库(/etc/udev/hwdb.d)初始化特殊的扫描码到密钥代码映射,您可以添加自己的custom versions.

另一种方法是在虚拟控制台上使用Dvorak或Qwerty,但设置X为每个使用不同的keycode-to-keysym映射,如您链接的答案所述,这对您没有帮助(可能是因为您没有想要这个变种).此方法的优点是您还可以不同地映射符号,死键,合成等.

标签:linux,debian,keyboard-layout
来源: https://codeday.me/bug/20190810/1637560.html