【问题标题】:Using shifted function keys in XKB keyboard layout在 XKB 键盘布局中使用移位功能键
【发布时间】:2013-10-18 05:30:06
【问题描述】:

我正在研究高棉键盘布局,但在项目的最后一步遇到了问题。

高棉语有 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,当这些键正常工作时,我会完成剩下的工作。

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

【问题讨论】:

    标签: layout unicode keyboard shift keymapping


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

      我的猜测是您的 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 按钮,您可以使用“EIGHT_LEVEL”类型或类似类型来识别(无修饰符)、level3 和 level5 的所有组合,共 8 个级别。

      (我的左 Alt 按钮绑定了 Alt_L,我的右 Alt 按钮绑定了 ISO_Level3_Shift,我的右“Windows”按钮绑定了 ISO_Level5_Shift)

      您的键盘映射可能需要从其他地方导入一些键类型。在 .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 文件都包含这些部分,或者它是否只是我的。 IIRC,当您设置布局而不是布局文件本身时,通常有一些 GUI 方式包括 level3、level5 等,如果这更符合您的喜好。

      如果你想更深入,我可以推荐https://www.charvolant.org/doug/xkb/之类的东西

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-07-21
        • 2010-11-19
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-09-12
        相关资源
        最近更新 更多