XKB方法

XKB方法

我安装了全新的 vanilla 18.04 LTS,使用 gnome-shell 3.28.4。我使用的是有线 Apple 铝制键盘:

在此处输入图片描述 我想将顶行 F 键用作各种终端用户应用程序(Firefox、CLion 等)的键盘快捷键,但每当我按下其中任何一个键时,gnome/X11 堆栈中的某些东西(我猜)都会拦截它们并将它们解释为“媒体”键。据我所知,此类 F 行按键不会传递给任何应用程序。

例如,如果我按 F5,我希望 Firefox 重新加载当前网页,或者让 CLion 触发构建,但相反,唯一发生的事情是屏幕上覆盖了以下巨大图标:

在此处输入图片描述

我尝试了gnome-tweaks设置应用程序,但无济于事。我也查看了dconf-editor,但我不熟悉它,也没有更改其中的任何内容,因为我不知道自己在做什么。

我搜索了很多,但得到的结果似乎都是来自媒体无法正常工作的人(他们希望媒体能够正常工作)。说清楚一点,我想禁用完全媒体键。

有人知道怎么做吗?谢谢!

更新 1:输出cat /usr/share/X11/xkb/symbols/pc

daniel@legolas:~$  cat /usr/share/X11/xkb/symbols/pc
default  partial alphanumeric_keys modifier_keys
xkb_symbols "pc105" {

    key <ESC>  {    [ Escape        ]   };

    // The extra key on many European keyboards:
    key <LSGT> {    [ less, greater, bar, brokenbar ] };

    // The following keys are common to all layouts.
    key <BKSL> {    [ backslash,    bar ]   };
    key <SPCE> {    [    space      ]   };

    include "srvr_ctrl(fkey2vt)"
    include "pc(editing)"
    include "keypad(x11)"

    key <BKSP> {    [ BackSpace, BackSpace  ]   };

    key  <TAB> {    [ Tab,  ISO_Left_Tab    ]   };
    key <RTRN> {    [ Return        ]   };

    key <CAPS> {    [ Caps_Lock     ]   };
    key <NMLK> {    [ Num_Lock      ]   };

    key <LFSH> {    [ Shift_L       ]   };
    key <LCTL> {    [ Control_L     ]   };
    key <LWIN> {    [ Super_L       ]   };

    key <RTSH> {    [ Shift_R       ]   };
    key <RCTL> {    [ Control_R     ]   };
    key <RWIN> {    [ Super_R       ]   };
    key <MENU> {    [ Menu          ]   };

    // Beginning of modifier mappings.
    modifier_map Shift  { Shift_L, Shift_R };
    modifier_map Lock   { Caps_Lock };
    modifier_map Control{ Control_L, Control_R };
    modifier_map Mod2   { Num_Lock };
    modifier_map Mod4   { Super_L, Super_R };

    // Fake keys for virtual<->real modifiers mapping:
    key <LVL3> {    [ ISO_Level3_Shift  ]   };
    key <MDSW> {    [ Mode_switch       ]   };
    modifier_map Mod5   { <LVL3>, <MDSW> };

    key <ALT>  {    [ NoSymbol, Alt_L   ]   };
    include "altwin(meta_alt)"

    key <META> {    [ NoSymbol, Meta_L  ]   };
    modifier_map Mod1   { <META> };

    key <SUPR> {    [ NoSymbol, Super_L ]   };
    modifier_map Mod4   { <SUPR> };

    key <HYPR> {    [ NoSymbol, Hyper_L ]   };
    modifier_map Mod4   { <HYPR> };
    // End of modifier mappings.

    key <OUTP> { [ XF86Display ] };
    key <KITG> { [ XF86KbdLightOnOff ] };
    key <KIDN> { [ XF86KbdBrightnessDown ] };
    key <KIUP> { [ XF86KbdBrightnessUp ] };
};

hidden partial alphanumeric_keys
xkb_symbols "editing" {
    key <PRSC> {
    type= "PC_ALT_LEVEL2",
    symbols[Group1]= [ Print, Sys_Req ]
    };
    key <SCLK> {    [  Scroll_Lock      ]   };
    key <PAUS> {
    type= "PC_CONTROL_LEVEL2",
    symbols[Group1]= [ Pause, Break ]
    };
    key  <INS> {    [  Insert       ]   };
    key <HOME> {    [  Home         ]   };
    key <PGUP> {    [  Prior        ]   };
    key <DELE> {    [  Delete       ]   };
    key  <END> {    [  End          ]   };
    key <PGDN> {    [  Next         ]   };

    key   <UP> {    [  Up           ]   };
    key <LEFT> {    [  Left         ]   };
    key <DOWN> {    [  Down         ]   };
    key <RGHT> {    [  Right        ]   };
};

答案1

键盘多媒体按键有区别吗?

是的,这些键有点不同。当按下其他键时,它们可能会报告单个键代码或多个键代码,例如Fn。此外,使用实用程序(例如)通常很难识别它们的键代码xev。这取决于键盘制造商的配置。

多媒体键通常具有以下配置的键代码:XF86键名称。这些名称各不相同,但以XF86类似XF86MonBrightnessUpXF86MonBrightnessDown等开头。


如何禁用/重新配置键盘多媒体键?

XKB方法

最简单的方法是像这样编辑 XKB 配置文件:

  1. /usr/share/X11/xkb/symbols/pc通过在终端中运行以下命令来编辑 XKB文件:

    sudo nano /usr/share/X11/xkb/symbols/pc

  2. XF86查找包含以下内容的行:

    key <KEY_CODE> { [ XF86MonBrightnessDown ] };

  3. //通过在它们前面添加以下内容来注释它们:

    //key <KEY_CODE> { [ XF86MonBrightnessDown ] };

  4. Ctrl按+X然后按 保存文件并退出编辑器Y

  5. 通过在终端中运行以下命令清除 XKB 缓存:

    sudo rm -rf /var/lib/xkb/*

  6. 重新启动系统以激活新的 XKB 配置,或者您可以避免重新启动并尝试通过在终端中使用以下命令设置 XKB 地图布局来重新加载新的 XKB 配置:

    setxkbmap -layout us

  7. 测试你的钥匙。

如果制造商将键盘多媒体键配置为报告单个键代码,则上述解决方案可能会禁用它们并使这些键可以自由用于其他目的。

然而,如果情况并非如此,那么您将需要处理xmodmap

xmodmap方法

方法xmodmap略有不同,您不能使用此方法禁用多媒体键并将它们分配为空,xmodmap -e 'keycode Number ='因为这通常会使它们无法使用,因此您需要将它们重新分配给所需的功能。您还需要实施某种机制来在重新启动和注销/登录之间保留您的更改。

要实现此方法,请按照以下步骤操作:

  1. 通过在终端中运行以下命令来显示当前键盘映射:

    xmodmap -pke

  2. 检查输出并识别包含符号XF68后的行=,如下所示:

keycode 232 = XF86MonBrightnessDown NoSymbol XF86MonBrightnessDown NoSymbol XF86MonBrightnessDown

例如,上面一行显示带有代码号的密钥232当前配置为触发XF86MonBrightnessDown,这将降低显示器的亮度,您可以通过为其分配不同的值来更改此行为,如下所示xmodmap -e 'keycode 232 = New_Value'。例如,分配F11此多媒体键的功能,请在终端中运行以下命令:

xmodmap -e 'keycode 232 = F11'

新功能将立即生效。但是,此功能更改将在重启或注销/登录后失效。

注意:acpi_listen在终端中运行命令并在按下实际物理按键时监控输出,然后将其与所获得的输出进行比较,可能会有所帮助,xmodmap -pke这样您就可以确认按键代码是否适合您。您也可以尝试该xev实用程序,但不幸的是,在处理多媒体或特定于供应商的按键时,它并不总是会返回按键代码。

为了在重新启动和注销/登录后保存更改,您需要执行以下操作:

  1. 通过在终端中运行以下命令,在主目录中创建并编辑脚本文件:

    nano ~/.Modify_Multimedia_Keys.sh

  2. #!/bin/bash在第一行添加此命令,然后xmodmap -e 'keycode Number = New_Value'在第一行下方添加命令(每个命令占一行),如下所示:

#!/bin/bash
xmodmap -e 'keycode 232 = F11'
xmodmap -e 'keycode 122 = F2'
  1. 保存脚本文件并按Ctrl+X然后按退出编辑器Y

  2. 通过在终端中运行以下命令使脚本文件可执行:

    chmod +x ~/.Modify_Multimedia_Keys.sh

  3. 通过 GUI 将脚本文件添加到启动应用程序,或者将包含以下内容的Modify_Multimedia_Keys.desktop文件放置在目录中并替换为您的实际用户名,从而使脚本文件在每次启动时执行:~/.config/autostart/YOUR_USERNAME

[Desktop Entry]
Type=Application
Exec=/home/YOUR_USERNAME/.Modify_Multimedia_Keys.sh
Hidden=false
X-GNOME-Autostart-enabled=true
Name=Modify Multimedia Keys
Comment=This modifies keyboard multimedia keys

答案2

为了方便以后参考,下面是 shell 脚本,其中包含xmodmap将键码映射到此情况下的键所需的命令:

#!/bin/bash

# fix the common F keys
xmodmap -e 'keycode 128 = F3'
xmodmap -e 'keycode 212 = F4'
xmodmap -e 'keycode 237 = F5'
xmodmap -e 'keycode 238 = F6'
xmodmap -e 'keycode 173 = F7'
xmodmap -e 'keycode 172 = F8'
xmodmap -e 'keycode 171 = F9'
xmodmap -e 'keycode 121 = F10'
xmodmap -e 'keycode 122 = F11'
xmodmap -e 'keycode 123 = F12'

# fix the '=' on the numeric keypad
xmodmap -e 'keycode 125 = equal' 

xev我使用如下方法确定了密钥代码这个答案。请注意,Apple 铝制键盘有 F 键一直到 F19 (!),上面的脚本未涵盖这些键,因为我实际上并不使用它们。应该可以使用它来xev确定这些键的键码是什么,并将它们添加到脚本中(如果需要)。

相关内容