在XKB键盘布局中使用移位功能键

时间:2013-10-18 05:30:06

标签: layout unicode keyboard shift keymapping

我正在处理高棉键盘布局,而且在项目的最后一步遇到了问题。

高棉语有33个辅音字符,24个元音变音符号和另外14个独立元音字符。最重要的是,我在ALT和SHIFT-ALT级别的布局中包含了每个角色对应的国际音标字符符号,所以我很快就没空了。

为了缓解这一点,我计划将24个元音变音符号映射到F1-F12和SHIFT F1-F12(在ALT和SHIFT / ALT级别具有相应的IPA字符),但是SHIFT + FN,ALT + FN和SHIFT / ALT + FN组合未注册。我在不同的文本编辑器,浏览器和终端中尝试了这些组合但没有工作。这似乎是一个系统问题。

我正在运行Ubuntu 10.04。

以下是我的布局中与FN键有关的部分:

key <FK01> { [ 0x10017b6,       0x10017c2,      voidsymbol, voidsymbol  ] };
key <FK02> { [ 0x10017b7,       0x10017c3,      voidsymbol, voidsymbol  ] };
key <FK03> { [ 0x10017b8,       0x10017c4,      voidsymbol, voidsymbol  ] };
key <FK04> { [ 0x10017b9,       0x10017c5,      voidsymbol, voidsymbol  ] };
key <FK05> { [ 0x10017ba,       voidsymbol,     voidsymbol, voidsymbol  ] };
key <FK06> { [ 0x10017bb,       voidsymbol,     voidsymbol, voidsymbol  ] };
key <FK07> { [ 0x10017bc,       voidsymbol,     voidsymbol, voidsymbol  ] };
key <FK08> { [ 0x10017bd,       voidsymbol,     voidsymbol, voidsymbol  ] };
key <FK09> { [ 0x10017be,       voidsymbol,     voidsymbol, voidsymbol  ] };
key <FK10> { [ 0x10017bf,       voidsymbol,     voidsymbol, voidsymbol  ] };
key <FK11> { [ 0x10017c0,       voidsymbol,     voidsymbol, voidsymbol  ] };
key <FK12> { [ 0x10017c1,       voidsymbol,     voidsymbol, voidsymbol  ] };

正如你所看到的那样,到目前为止我只填写了SHIFT F1-F4,如果我让这些按键正常工作,我会做其余的工作。

希望你们中的一些人能指出我正确的方向。

2 个答案:

答案 0 :(得分:2)

我不知道为什么这些组合没有注册,但作为替代解决方案,可能会想到每个密钥使用更多级别,例如使用level5(通过包含其中一个符号定义)将某些键映射到level5修饰符)并使用八级类型定义键映射,例如EIGHT_LEVELEIGHT_LEVEL_ALPHABETIC

答案 1 :(得分:1)

我的猜测是默认的后退&#34;类型&#34;您的FN密钥不包括足够的密钥。例如,如果你有

key <FK01> { type = "TWO_LEVEL", [FirstKey,SecondKey,ThirdKey,...]}

然后只能生成FirstKey和SecondKey。如果你有

key <FK01> { type = "CTRL+ALT", [FirstKey,SecondKey,ThirdKey,...]}

然后应该识别alt和ctrl和ctrl + alt等级,给你5个等级,其中4个你可能想要改变(你可能不想改变ctrl等级)。请记住,您可能希望能够在紧急情况下使用CTRL + ALT + FN将X切换到终端,或者至少在布局中的某处将某些键绑定到XF86Switch_VT_1。

您可能还想区分Alt和AltGr,后者在xkb中命名为ISO_Level3_Shift。

如果要在键盘上的某个位置创建和使用ISO_Level5_Switch按钮,可以使用类型&#34; EIGHT_LEVEL&#34;或类似地识别(无修饰语),等级3和等级5的所有组合,总共8个等级。

(我将Alt_L绑定到我的左Alt按钮,ISO_Level3_Shift绑定到我的右Alt按钮,ISO_Level5_Shift绑定到我的右边&#34; windows&#34;按钮)

您的keymap可能需要从其他地方导入一些密钥类型。在.xkb文件的xkb_types部分中,添加行

augment "level5" 

包括&#34; LEVEL_EIGHT&#34;和其他类似的类型到你的布局。

/usr/share/X11/xkb/types/中的文件应显示系统中可用的类型,以及需要使用扩充行添加到.xkb文件中的文件以使用该类型。 (它们可能位于系统的不同目录中,因为我使用Gentoo;在终端中键入locate level5以查找目录所在的位置。)如果您觉得有需要,还可以直接构建自己的类型在扩充行之后进入.xkb文件的xkb_types部分。查看/usr/share/X11/xkb/types/中的文件以查看类型定义的语法。

您还希望将该行添加到xkb_compatibility部分,而不仅仅是xkb_types部分; xkb_types提供了类型,xkb_compatibility定义了修饰键的行为,因此xkb_types中的augment "level5"将允许您访问类似&#34; EIGHT_LEVEL&#34;等类型,xkb_compatibility中的augment "level5"将生成键绑定到ISO_Level5_Shift实际上充当修饰符。

为了给你一个想法,我自己的xkb_compatibility部分看起来像这样:

 xkb_compatibility "complete" {

     // "pc" would only set Alt, need "pc98" for NumLock
     include  "pc98" // Numlock
     augment "misc" // Alt,Meta,Super,Hyper ... 
     augment "ledscroll(group_lock)" // Set scroll lock on group switch
     augment "xfree86" // Switch out to terminal
     augment "caps" // Simple caps thing
     augment "iso9995" // level3,groups
     augment "level5" // level5
 };

我不确定所有.xkb文件是否包含这些部分,或者它是否只是我的。 IIRC,当您设置布局而不是布局文件本身时,通常会有一些GUI方式包含level3,level5和喜欢的内容,如果这更符合您的喜好。

如果你想更深入,我可以推荐像https://www.charvolant.org/doug/xkb/

这样的东西