我使用 gnome-shell 3.28.4 安装了全新的 vanilla 18.04 LTS。我正在使用有线 Apple 铝制键盘:
我想在各种最终用户应用程序(Firefox、CLion 等)中使用顶行 F 键作为键盘快捷键,但每当我按下其中任何一个时,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 ] };
};
键盘多媒体键是否不同?
是的,这些键有点不同。例如,当与其他键一起按下时,它们可能会报告单个键码或多个键码Fn。此外,通常很难使用
xev
. 这取决于键盘制造商的配置。多媒体按键的按键代码通常配置为XF86按键名称。这些名称不同,但以
XF86
like 等XF86MonBrightnessUp
开头XF86MonBrightnessDown
。如何禁用/重新配置键盘多媒体键?
XKB
方法最简单的方法是编辑 XKB 配置文件,如下所示:
/usr/share/X11/xkb/symbols/pc
通过在终端中运行以下命令来编辑 XKB文件:sudo nano /usr/share/X11/xkb/symbols/pc
查找包含
XF86
如下内容的行:key <KEY_CODE> { [ XF86MonBrightnessDown ] };
通过在它们之前添加注释掉
//
它们,如下所示://key <KEY_CODE> { [ XF86MonBrightnessDown ] };
按Ctrl+保存文件并退出编辑器,X然后按Y。
通过在终端中运行以下命令来清除 XKB 缓存:
sudo rm -rf /var/lib/xkb/*
重新启动系统以激活新的 XKB 配置,或者您可以避免重新启动并尝试通过在终端中使用以下命令设置 XKB 映射布局来重新加载新的 XKB 配置:
setxkbmap -layout us
测试你的钥匙。
如果制造商将键盘多媒体键配置为报告单个键代码,则上述解决方案可能会禁用它们,并使键可以自由用于其他目的。
但是,如果情况并非如此,那么您将需要处理
xmodmap
.xmodmap
方法该
xmodmap
方法有点不同,您不能只使用此方法禁用多媒体键并将它们分配给任何东西,xmodmap -e 'keycode Number ='
因为这通常会使它们无法使用,因此您需要将它们重新分配给所需的功能。您还需要采取一些机制来维护您在重新启动和注销/登录之间的更改。要实现此方法,请按照以下步骤操作:
通过在终端中运行以下命令来显示当前键盘映射:
xmodmap -pke
检查输出并识别符号后面
XF68
包含的行,如下所示:=
例如,上面的行显示代码编号为232的键当前配置为触发
XF86MonBrightnessDown
,这将降低显示器的亮度,您可以通过为其分配不同的值来更改此行为,如下所示xmodmap -e 'keycode 232 = New_Value'
。例如,要将F11功能分配给此多媒体键,请在终端中运行以下命令:新功能将立即生效。但是,重新启动或注销/登录后,此功能更改将丢失。
注意:在终端中运行命令并在您按下实际物理键时监视输出可能会有所帮助,
acpi_listen
然后将其与您获得的输出进行比较,xmodmap -pke
以便您确认键码是您想要的。您也可以尝试该xev
实用程序,但不幸的是,它在处理多媒体或供应商特定密钥时并不总是返回密钥代码。要在重新启动和注销/登录后保留更改,您需要执行以下操作:
通过在终端中运行以下命令,在主目录中创建和编辑脚本文件:
nano ~/.Modify_Multimedia_Keys.sh
在第一行添加这个
#!/bin/bash
,然后在第一行下面添加你的xmodmap -e 'keycode Number = New_Value'
命令(每个命令都在一个新行中),如下所示:按Ctrl+保存脚本文件并退出编辑器,X然后按Y。
通过在终端中运行以下命令使脚本文件可执行:
chmod +x ~/.Modify_Multimedia_Keys.sh
让脚本文件在每次启动时执行,方法是通过 GUI 将其添加到您的启动应用程序中,或者将一个
Modify_Multimedia_Keys.desktop
文件放在~/.config/autostart/
包含以下内容的目录中,替换YOUR_USERNAME
为您的实际用户名:对于后代,这里是 shell 脚本,其中包含在
xmodmap
这种情况下将键码映射到键所需的命令:我按照此答案
xev
中的描述确定了键码。请注意,Apple 铝键盘从 F 键一直到 F19(!),上面的脚本中没有介绍,因为我并没有真正使用它们。应该可以用来确定这些键的键码是什么并将它们添加到脚本中(如果需要)。xev