首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >键盘布局与xmodmap的关系

问键盘布局与xmodmap的关系
EN

Unix & Linux用户
提问于 2011-05-03 09:17:27
回答 1查看 4.5K关注 0票数 13

我在用Xubuntu。登录前,我可以选择键盘布局。我使用xmodmap来重新映射一些键。

我对两件事感兴趣:

  1. 键盘映射的状态是如何变化的:(a)当我打开笔记本电脑时,(b)在启动过程中,(c)登录到系统(在这三个阶段),以及在使用系统时(登录)。
  2. 什么原因将显示在屏幕上的符号(和控制键发送)在各个阶段。当我按下某些键时,它会向键盘驱动程序发送一些信号(?)然后必须有一些决策过程(应用程序和配置文件)来确定将显示哪些符号。这个问题的答案应该是那些配置文件的应用程序和路径列表(我对Ubuntu (基于Debian的系统)特别感兴趣,但是您可以描述一些其他的系统,但是Ubuntu是首选的)。
EN

回答 1

Unix & Linux用户

回答已采纳

发布于 2011-05-03 11:39:49

这里有两个层,KEYSYM映射和KEYSYM到文本映射的关键代码。如果计算内核的话,还有更多的层,内核必须将AT键盘扫描代码映射到XT风格的密钥,或者将USB键盘隐藏的代码映射到密钥。密钥代码只是一个8位的无符号整数,操作系统的内核将该整数传递给X11服务器。它可以在Linux和Solaris等操作系统之间发生变化。在Linux上,这些密钥代码通常与旧XT PC键盘上使用的数字相同。带有AT、PS/2或USB键盘的较新计算机通常只需将这些键盘映射到旧的XT代码,以保持简单的生活。

原始键盘代码,无论是XT、AT、PS/2还是USB,都表示键盘上的物理位置。XT键盘在按下键或释放键时只发送一个8位数字.美国/英国XT键盘上的Q键发出数字16。在法语键盘上,同样的物理键被标记为a,但它仍然发送16。操作系统中的较高层赋予了它真正的意义。当在XT键盘上释放一个键时,会发送相同的键码加上128。对于这个例子,当q被按下时,一个16被发送,但是在发布时,数字142 (16+128)被发送。在键盘上使用扫描码,这是一系列的数字,可以得到相当长。密钥释放会添加额外的代码。例如,暂停的扫描代码是E1、1D、45、E1、9D、C5。大多数操作系统,包括DOS、Windows、Linux、FreeBSD和BIOS,都将扫描代码映射到简单得多的XT样式扫描代码中。它还保持了更容易支持使用不同代码的更新键盘,如发送HID代码的USB键盘。在X11或应用程序看到这些代码之前,操作系统会将所有代码映射到相同的一致代码集。

X11不了解这个过程的这一部分,它只是从内核获取密钥代码,并应用自己的映射将该密钥代码转换为KEYSYM。Xmodmap是控制映射的标准工具。键盘映射的许多行为是可配置的,但是有几种特殊情况,如Num锁、模式切换和Caps /Shift锁,它们都是硬编码到X11中的。其他方面,如Shift实际上是可配置的。任何键都可以映射为shift,不像模式开关或Num锁。

密钥代码表示操作系统内核发送的物理密钥。每个关键代码都可以映射到8个可能的KEYSYM。只有4被使用,有时被称为1-4级.级别1指定在没有修饰符处于活动状态时打印的KEYSYM。这些通常是小写字母和数字。修饰符是在修饰符处于活动状态(按下或切换)时修改由其他密钥代码生成的KEYSYM的键码。修饰符键码也通过Xmodmap进行控制。级别2指定按下shift修饰符时要发送的KEYSYM。每当按下模式开关KEYSYM时,第3级就会被激活。当shift键和模式开关都处于活动状态时,第4级被激活。

一旦生成了KEYSYM,这可能会被直接解释,但大多数情况下会被转换为文本。并非所有的KEYSYM都会变成文本,或者可能只影响未来的KEYSYM。当然,Shift_L就是一个例子,它没有文本表示,但也有许多KEYSYM用于组成另一个字符。我的系统上有一个列表,列在/usr/share/X11/locale/en_US.UTF-8/Compose下面。其中一个例子是dead_acute KEYSYM,当按下它时,它将尝试将下一个KEYSYM转换为一个尖锐的重音字母。有一个将KEYSYM转换为Unicode的标准映射。

现在已经说了所有这些,请注意,Xmodmap已经过时,取而代之的是更加复杂的XKB。这会影响如何将密钥代码映射到KEYSYM,但不会影响内核如何生成密钥代码,也不会影响如何将KEYSYM转换为文本或仍然相同的组合。可以禁用XKB还原Xmodmap行为。它还有一个兼容层来支持Xmodmap,但是它可能会出现问题,因为它并不完全兼容。XKB规则在/usr/share/X11/xkb/下,而且要复杂得多。在其他地方有一些很好的文档,说明如何生成键盘布局,以便将密钥代码映射到KEYSYM。

至于Linux,它有自己的键盘布局,这些布局存储在/usr/share/keymaps中,并带有loadkeys命令。在BIOS和更早的引导加载程序阶段(包括GRUB2 )中,键盘映射是BIOS决定将键映射到的任何数字。

票数 28
EN
页面原文内容由Unix & Linux提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://unix.stackexchange.com/questions/12510

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档