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

Tob*_*ght 7 linux debian keyboard-layout

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

然而,我的大多数同事更喜欢 Qwerty 布局,这是结对编程的障碍。我确实有一些可用的 USB 键盘可供选择以完成此任务,但它们在插入时都会采用我的 Dvorak 布局。

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

我的系统是 Debian Testing,udev 版本为 232。当我在磁盘故障后重新安装时,它感染了 systemd,所以我习惯的标准(SysV 风格)方法将不起作用。

类似的问题每个键盘的不同键盘布局对我没有任何帮助。

dir*_*rkt 5

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

我最近了解到每个/dev/input/event*设备都有自己的扫描码到键码的映射。这些映射可以由 iotcls ( EVIOCGKEYCODE_V2, EVIOCSKEYCODE_V2)读取和更改,但有趣的是,似乎没有通用工具可用于访问这些映射(我很快编写了一个简单的 C 程序转储它,因为我很好奇)。

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

因此,如果您想要虚拟控制台上键盘之间的差异,剩下的唯一选择是使用扫描码到键码的映射。对于 Dvorak 与 Qwerty,这实际上可能有效,只要您只是重新映射字母键,并且不想以不同的方式重新映射处于移位和非移位状态的符号。

最新版本的 udev 使用硬件数据库 ( /etc/udev/hwdb.d) 来初始化特殊的扫描码到键码映射,您可以添加自己的自定义版本

另一种方法是在虚拟控制台上使用 Dvorak 或 Qwerty,但将 X 设置为对每个使用不同的键码到键符映射,如您链接的答案中所述,但对您没有帮助(可能是因为您没有想要这个变种)。这种方法的优点是您还可以以不同的方式映射符号、死键、组合等。