代码之家  ›  专栏  ›  技术社区  ›  Bobby

创建自定义setxkbmap选项

  •  6
  • Bobby  · 技术社区  · 7 年前

    奇怪的是,这似乎应该是以前做过的事情:我想交换 符号 1.

    • 当我击中 6. * 6
    • 当我击中 转移 + 号码 6. * .

    setxkbmap caps:swapescape ,例如)。


    鉴于上述情况,这是一个由三部分组成的问题:

    1. 在我的键盘最上面一行有交换数字和符号的选项吗?
    2. *.lst *.xml 文件位于 /usr/share/X11/xkb/rules/ ?
    3. 最后,如果我要为 setxkbmap

    • 我试图创建选项,但没有成功( setxkbmap 默默地失败了,我甚至对自己的方法没有信心)。
    • 除了 man setxkbmap
    1 回复  |  直到 7 年前
        1
  •  10
  •   Bobby    7 年前

    问题2:

    对于所有可用选项的列表,您可以执行 localectl list-x11-keymap-options XKB *.lst 文件夹:

    for f in /usr/share/X11/xkb/rules/*.lst; do sed -ne '/^\! option$/{s///; :a' -e 'n;p;ba' -e '}' $f; done | sort -u
    

    (sed reference) *

    如果您正在寻找与交换数字相关的内容,可以附加 | grep -i num ,显示了使用numpad/keypad的几个选项。不幸的是,我认为所有的布局都在相关的模板中列出了数字 字符,这意味着它们内置于区域布局本身(或变体,在 dvorak

    问题1:

    你可以采取三种方法。

    使用替代布局 xmodmap

    .Xmodmap 如Arch Wiki上所述,在家中创建文件以覆盖映射 here .

    以下是配置示例: https://github.com/karma0/layouts/blob/master/home/.Xmodmap

    步骤:

    1. xmodmap $HOME/.Xmodmap 给你的 .profile

    1. xkbcomp -xkb $DISPLAY xkbmap xkbmap 其中包含您当前的配置。
    2. 修改它以匹配所需的配置。举个例子:

    原件:

    key <AE01> {         [               1,          exclam ] };                                                                                                       
    key <AE02> {         [               2,              at ] };                                                                                                       
    key <AE03> {         [               3,      numbersign ] };                                                                                                       
    key <AE04> {         [               4,          dollar ] };                                                                                                       
    key <AE05> {         [               5,         percent ] };                                                                                                       
    key <AE06> {         [               6,     asciicircum ] };                                                                                                       
    key <AE07> {         [               7,       ampersand ] };                                                                                                       
    key <AE08> {         [               8,        asterisk ] };                                                                                                       
    key <AE09> {         [               9,       parenleft ] };                                                                                                       
    key <AE10> {         [               0,      parenright ] };
    

    key <AE01> {         [               exclam,        1 ] };                                                                                                         
    key <AE02> {         [               at,            2 ] };                                                                                                         
    key <AE03> {         [               numbersign,    3 ] };                                                                                                         
    key <AE04> {         [               dollar,i       4 ] };                                                                                                         
    key <AE05> {         [               percent,       5 ] };                                                                                                         
    key <AE06> {         [               asciicircum,   6 ] };                                                                                                         
    key <AE07> {         [               ampersand,     7 ] };                                                                                                         
    key <AE08> {         [               asterisk,      8 ] };                                                                                                         
    key <AE09> {         [               parenleft,     9 ] };                                                                                                         
    key <AE10> {         [               parenright,    0 ] };
    
    1. 执行命令 xkbcomp -w 0 xkbmap $DISPLAY 加载新配置。
    2. 使用获取启动时运行的命令 xinitrc

    修改布局并添加新变体

    1. /usr/share/X11/xkb/symbols ). 我们将使用 us 文件。
    2. 在文件中查找您最喜欢的变体; workman-intl 如果你像我一样。
    3. 布局,您可以复制该部分,并像我在这里所做的那样对其进行修改(注意,这是从 intl
     partial alphanumeric_keys                                                                                      
     xkb_symbols "workman-programmer" {
         include "us(workman-intl)"
         name[Group1]= "English (Workman, intl., with dead keys and num/sym swapped)";
    
         key <AE01> { [ exclam,         1,    exclamdown, onesuperior ] };
         key <AE02> { [ at,             2,   twosuperior, dead_doubleacute ] };
         key <AE03> { [ numbersign,     3, threesuperior, dead_macron ] };
         key <AE04> { [ dollar,         4,      currency, sterling ] };
         key <AE05> { [ percent,        5,      EuroSign, dead_cedilla ] };
         key <AE06> { [ dead_circumflex,6,    onequarter, asciicircum ] };
         key <AE07> { [ ampersand,      7,       onehalf, dead_horn ] };
         key <AE08> { [ asterisk,       8, threequarters, dead_ogonek ] };
         key <AE09> { [ parenleft,      9, leftsinglequotemark, dead_breve ] };
         key <AE10> { [ parenright,     0, rightsinglequotemark, dead_abovering ] };
    };
    

    这个 xkb_symbols 变异 ; 这个 include 工人国际 变化 布局)。然后,你想要的定义如下。 /usr/share/xkb/rules/base.xml 直到最后 variantList 标签这是我用过的一个:

            <variant>                                                                                              
              <configItem>                                                                                         
                <name>workman-programmer</name>                                                                    
                <description>English (Workman, intl., with dead keys and num/sym swapped)</description>                  
               </configItem>                                                                                       
             </variant>
    
    1. ! variant 第节 /usr/share/X11/xkb/rules/base.lst
          workman-programmer    us: English (Workman, intl., with dead keys and num/sys swapped)'
    
    1. 设置 setxkbmap 使用新变体运行的命令。下面是本演示的示例: setxkbmap -layout us -variant workman-programmer -option

    尽管您可能会尝试,但在开始查找之前,您不会找到文档 xkb xorg 生态系统

    最好的评论可能是:

    https://www.charvolant.org/doug/xkb/html/index.html

    在你读这篇文章之前,请理解我从来都不想写这篇文章,因为我的资格太低了,但我一直想读它,这是唯一的方法。

    此外,这里还有一个链接列表,用于开始学习 xkb : https://www.x.org/wiki/XKB/

    xkb 因为它安装在您的系统上。这通常低于 /usr/share/X11/xkb


    xorg公司 ,它在此处提供开发人员文档: https://www.x.org/wiki/guide/ https://www.x.org/wiki/Development/