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

3
我正在设计柬埔寨语键盘布局,在项目的最后一步遇到了问题。
柬埔寨语有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个回答

2

我不知道为什么组合键不能注册,但作为替代解决方案,可以考虑利用更多级别的按键,例如使用level5(通过将某个键映射到level5修饰符中的符号定义之一),并使用八级类型(如EIGHT_LEVELEIGHT_LEVEL_ALPHABETIC)定义键映射。


1
我猜测你的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切换到终端,或者至少在布局中绑定一些键以进行XF86Switch_VT_1。
您可能还希望区分Alt和AltGr,后者在xkb中命名为ISO_Level3_Shift。
如果您想在键盘上创建和使用ISO_Level5_Switch按钮,则可以使用“EIGHT_LEVEL”类型或类似类型来识别所有组合(无修饰符),level3和level5,共8个级别。
(我将Alt_L绑定到左侧Alt按钮,将ISO_Level3_Shift绑定到右侧Alt按钮,并将ISO_Level5_Shift绑定到右侧“Windows”按钮)
您的键位映射可能需要从其他地方导入某些键类型。在.xkb文件的xkb_types部分中,添加以下行:
augment "level5" 

要将“LEVEL_EIGHT”和其他类似类型包含到您的布局中。

/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"将使您可以访问诸如“EIGHT_LEVEL”之类的类型,但在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文件是否都包含这些部分,或者这只是我的文件。
如果您更喜欢,通常可以通过某种GUI方式在设置布局时包括level3、level5等,而不是在布局文件本身中进行设置。 如果您想深入了解,我可以推荐类似 https://www.charvolant.org/doug/xkb/ 这样的东西。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接