gnome-keyboard-properties中的“选择第5级密钥”有什么作用?


18

gnome-keyboard-properties(系统设置中“硬件”下的“键盘”)中,有一个选项可以指定用于访问键盘第5级的键:

对话框的屏幕截图

但是,如果我将第五级设置为AltGr,将第三级Right Ctrl设置为,并且将键54设置如下:

xmodmap -e "keycode 54 = 1 2 3 4 5 6 7 8"

通过按下不同的变体,我得到以下结果:

keycode 54 = 1
keycode 54 + right ctrl = 5
keycode 54 + right ctrl + shift = 6
keycode 54 + shift = 2
keycode 54 + AltGr = 1
keycode 54 + AltGr + shift = 2
  1. 那么第5级修饰符有什么作用?

  2. 我该如何设定,让我可以得到5个或六个不同的角色了一个键(通过修改的ShiftAlt GrRight Ctrl举例)?

Answers:


15

“ 1。那么第5级修饰符有什么作用?”

它选择第五级。第二级修饰符(仅常规变速)选择第二级,而第三级选择第三级。

第5级修饰符选择第5级而不是第4级(在第3级修饰符之后)的原因是,这三种修饰符可以以不同的方式组合以选择8种不同的级(包括不使用任何修饰符,只是按下一个没有任何此类修饰符的键)。自2↑3 = 8以来,共有八种组合。对于前两个修饰符,有四种组合:

  • 无修饰符(1级)
  • 2级修饰符,又名shift(2级)
  • 3级修饰符(3级)
  • 2 + 3修饰符(4级)

添加第三个修饰符(第5级)会增加四个级别。

“ 2。我该如何设定,让我可以得到5个或六个不同的角色了单个键(按住Shift键修改,Alt GrRight Ctrl举例)?”

首先,您需要一个布局,每个键使用五个或更多字符。您可以选择一个现有的布局,但是如果您只是想向当前使用的布局添加更多级别,那可能不是最佳选择。例如,有一个Neo键盘布局(†1),但是“针对德语进行了优化”,因此对于大多数说英语的人来说并不是很好。

尽管如此,看看Neo为Level 5修改器选择了哪些键还是有启发性的。

新布局

Neo显然将第5级修饰符称为“ Mod4”。如您所见,它使用了左shift键(LSGT)和右alt键/ AltGr键右边的键。这是在欧洲键盘(105键)上,而在美国键盘(104键)上具有窄的左移键和高而细的返回键。对于基于美式键盘的键盘布局,可能不得不(或倾向于)选择其他键。

选择5级修饰键

在sup的回答中,他选择使用Xmodmap。如今,建议在Xmodmap上使用Setxkbmap之类的工具。Xkb带有许多预定义的选项,可用于选择5级修饰符。如果咨询 man xkeyboard-config并进行搜索,lv5则会找到以下选项:

┌──────────────────────┬───────────────────────────────────────────────────┐
│ Option               │ Description                                       │
├──────────────────────┼───────────────────────────────────────────────────┤
│ lv5:lsgt_switch_lock │ <Less/Greater> chooses 5th level; acts as onetime │
│                      │ lock when pressed together with another 5th level │
│                      │ chooser                                           │
├──────────────────────┼───────────────────────────────────────────────────┤
│ lv5:ralt_switch_lock │ Right Alt chooses 5th level; acts as onetime lock │
│                      │ when pressed together with another 5th level      │
│                      │ chooser                                           │
├──────────────────────┼───────────────────────────────────────────────────┤
│ lv5:lwin_switch_lock │ Left Win chooses 5th level; acts as onetime lock  │
│                      │ when pressed together with another 5th level      │
│                      │ chooser                                           │
├──────────────────────┼───────────────────────────────────────────────────┤
│ lv5:rwin_switch_lock │ Right Win chooses 5th level; acts as onetime lock │
│                      │ when pressed together with another 5th level      │
│                      │ chooser                                           │
└──────────────────────┴───────────────────────────────────────────────────┘

因此,记录的选项是LSGT键,右alt键,右Windows键和左Windows键。如我们所见,Neo使用前两个选项。

假设您要在lv5:ralt_switch_lock某些布局中使用该选项。此命令us使用此5级修饰键设置布局:

setxkbmap -option "lv5:ralt_switch_lock" us

因此,对于中记录的任何选项man xkeyboard-config,请将该参数用作-option使用Setxkbmap时的参数。

如果这些选项还不够,并且您想将另一个键定义为5级修饰符,那么查看这些选项的声明将很有帮助。他们似乎在 /usr/share/X11/xkb/symbols/level5。的声明 lv5:ralt_switch_lock如下所示:

partial modifier_keys
xkb_symbols "ralt_switch_lock" {
  include "level5(lock)"
  key <RALT> {
    type[Group1] = "EIGHT_LEVEL",
    symbols[Group1] = [ ISO_Level5_Shift, ISO_Level5_Shift, ISO_Level5_Shift, ISO_Level5_Shift,
                        ISO_Level5_Lock, ISO_Level5_Lock, ISO_Level5_Lock, ISO_Level5_Lock ]
  };
};

的右侧symbols[Group1]声明密钥的每个级别应产生什么密钥或字符。这将使用所有八个可能的级别,因为当与另一个5级切换键一起按下时应该锁定 5级修饰符。因此,ISO_Level5_Lock由于按住5级换档和其他Shift键的组合(对于所有这些键都不用),可以访问5-8 级。如果您只想要换档行为,而不想要两次按下锁的行为,则可以进行更简单的声明(来自同一文件):

// The right Alt key (while pressed) chooses the fifth shift level.
partial modifier_keys
xkb_symbols "ralt_switch" {
  key <RALT> {
    type[Group1]="ONE_LEVEL",
    symbols[Group1] = [ ISO_Level5_Shift ]
  };
  include "level5(modifier_mapping)"
};

向布局添加额外的关卡

Xkb布局是相当模块化的。您可以包括现有布局并进行更改。因此,我们可以选择一个少于5个级别的现有布局,并为其添加一些级别。

您可以通过将带有布局的文件复制/usr/share/X11/xkb/symbols/到来创建新的布局,或者将Xkb工具查找布局的位置复制到新 位置。但这需要sudo特权,因此它不是最佳解决方案。或者,您可以复制的目录结构,xkb/ 并将布局放在的相应目录下xkb/,即 symbols/。所以说你已经做了一个文件xkb-tree/symbols/my-layouts。为了使用此文件中定义的布局,您可以使用-print 选项,setxkbmap然后将输出通过管道传输到xkbcomp。该包装器脚本将布局作为输入:

#!/bin/sh

# `-option ""` resets all options.
setxkbmap -option "" -layout "$1" \
    -print |
    xkbcomp -I"<path-to-project>/xkb-tree" - "$DISPLAY"

就具有布局的文件而言,假设我们要扩展使用四个级别的“美国国际”布局。首先,我们以与Neo相同的方式设置3级和5级移位键:

partial alphanumeric_keys
xkb_symbols "mine" {
    // US international
    include "us(intl)"
    // Set up level 3 modifiers.
    include "level3(modifier_mapping)"
    include "level3(bksl_switch)"
    include "level3(caps_switch)"
    // Set up level 5 modifiers.
    include "level5(modifier_mapping)"
    include "level5(lsgt_switch)"
    include "level5(ralt_switch)"
};

现在我们要添加一些额外的字符。让我们仅以Qwerty布局的前四个键为例。这些键是Qto R,对应<AD01><AD04>。首先,我们需要使密钥能够使用多达八个级别:

key.type[Group1] = "EIGHT_LEVEL";

对于前四个级别,为了不重新定义它们,我们将它们映射到NoSymbol。然后我们添加两个级别。在级别5上,我们添加箭头←↓↑→(†2)。在6级上,我们添加了方向键。我们的布局最终看起来像这样:

partial alphanumeric_keys
xkb_symbols "mine" {
    // US international
    include "us(intl)"
    // Set up level 3 modifiers.
    include "level3(modifier_mapping)"
    include "level3(bksl_switch)"
    include "level3(caps_switch)"
    // Set up level 5 modifiers.
    include "level5(modifier_mapping)"
    include "level5(lsgt_switch)"
    include "level5(ralt_switch)"

    // Make the following keys capable of using eight levels.
    key.type[Group1] = "EIGHT_LEVEL";

    key <AD01> { [
        NoSymbol, NoSymbol, NoSymbol, NoSymbol,
        leftarrow, Left
    ] };
    key <AD02> { [
        NoSymbol, NoSymbol, NoSymbol, NoSymbol,
        downarrow, Down
    ] };
    key <AD03> { [
        NoSymbol, NoSymbol, NoSymbol, NoSymbol,
        uparrow, Up
    ] };
    key <AD04> { [
        NoSymbol, NoSymbol, NoSymbol, NoSymbol,
        rightarrow, Right
    ] };

};

为了使用它,我们可以使用我们制作的包装器脚本:

./setxkbmap-wrapper "my-layouts(mine)"

†1:Neo为de(neo)Xkb;setxkbmap "de(neo)"

†2:为了找到Xkb使用的符号名,请搜索名为的文件keysymdef.h。它应该在名为的目录下X11/。您也可以使用Unicode名称,例如U2192U + 2192。


1
感谢您抽出宝贵的时间来撰写此答案。一段时间以来,我一直在寻找一种将JKLI键用作箭头键的方法,因此这非常方便。请享受这些额外的50分!(我明天应该可以分配赏金。)
Glutanimate

1
好吧,谢谢,这是一个很好的选择,即使它来得有点晚,但这也正是我一直在寻找的东西(但是现在GNOME实际上不支持设置修饰符-但是只要使用配置文件就可以了,所有很好)。
sup

8

好吧,经过一番挖掘:

(1)选择5级的关键是做了一些与我想做的事情无关的奇怪的事情(关于某些法国布局)。基本上,它设置哪个键将充当ISO_Level5_Shift。ISO_Level5_Shift用于某些晦涩的布局。该答案基于google搜索“ ISO_Level5_Shift”时给出的结果数以及这些 链接

(2)它不能用于从一个物理密钥中获取6个符号。实现此目的的一种方法是使用$ HOME目录中的文件.xmodmap。

一,命令

xmodmap -pm

给出按键符号充当各种修饰符的作用。在我的系统上,如下所示:

xmodmap:  up to 4 keys per modifier, (keycodes in parentheses):

shift       Shift_L (0x32),  Shift_R (0x3e)
lock        Caps_Lock (0x9)
control     Control_L (0x25),  Control_R (0x69)
mod1        Alt_L (0x40),  Meta_L (0xcd)
mod2        Num_Lock (0x4d)
mod3        
mod4        Super_L (0x85),  Super_R (0x86),  Super_L (0xce),  Hyper_L (0xcf)
mod5        ISO_Level3_Shift (0x5c)

必须设置mod3才能使用一个键使用6个符号。这需要放置到.xmodmap文件中:

clear mod3
clear mod5
keycode 94 = Mode_switch
add mod3 = Mode_switch
add mod5 = ISO_Level3_Shift

然后xmodmap -pm给了我:

shift       Shift_L (0x32),  Shift_R (0x3e)
lock        Caps_Lock (0x9)
control     Control_L (0x25),  Control_R (0x69)
mod1        Alt_L (0x40),  Meta_L (0xcd)
mod2        Num_Lock (0x4d)
mod3        Mode_switch (0x5e),  Mode_switch (0xcb)
mod4        Super_L (0x85),  Super_R (0x86),  Super_L (0xce),  Hyper_L (0xcf)
mod5        ISO_Level3_Shift (0x5c),  ISO_Level3_Shift (0x6c)

我选择键代码94是作为mod3的键。可以使用命令行工具xev找到各种物理键的键代码(只需运行它并按各种键,就会显示键代码)。

然后,如果我放入.xmodmap文件

keycode 54 = 1 2 3 4 5 6

或跑步

xmodmap -e "keycode 54 = 1 2 3 4 5 6"

通过使用altgr,shift和键码94(在我的物理布局上左移旁边是一个无用的键),我从一个键中得到了六个不同的符号。

更新:如果只需要五个符号,则像这样设置它很方便:

keycode 54 = 1 2 3 3 5 6

我偶尔会得到4分,而不是3分。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.