如何防止 XF86RFKill 按键启用 Linux 的飞行模式?

Utk*_*rma 5 keyboard-shortcuts kernel-modules x11 i3 asus

我在我的 ASUS FX505DT 上运行 Kubuntu 19.10(KDE + i3wm)。

\n\n

问题

\n\n

我可以XF86RFKill使用 i3wm 绑定密钥bindsym,但此绑定似乎不会取消 Linux 切换飞行模式的内置绑定。

\n\n

问题的行为

\n\n

这是xev我按Fn+时返回的内容F12,应该触发XF86RFKill

\n\n
MappingNotify event, serial 48, synthetic NO, window 0x0,\n    request MappingKeyboard, first_keycode 8, count 248\n\nFocusOut event, serial 48, synthetic NO, window 0x7a00001,\n    mode NotifyGrab, detail NotifyAncestor\n\nFocusOut event, serial 48, synthetic NO, window 0x7a00001,\n    mode NotifyUngrab, detail NotifyPointer\n\nFocusIn event, serial 48, synthetic NO, window 0x7a00001,\n    mode NotifyUngrab, detail NotifyAncestor\n\nKeymapNotify event, serial 48, synthetic NO, window 0x0,\n    keys:  1   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   \n           0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   \n
Run Code Online (Sandbox Code Playgroud)\n\n

当我测试各种东西时,我发现我的笔记本电脑有一个用于此功能键的单独输入设备,如下所示xinput list

\n\n
$ xinput list\n\xe2\x8e\xa1 Virtual core pointer                          id=2    [master pointer  (3)]\n\xe2\x8e\x9c   \xe2\x86\xb3 Virtual core XTEST pointer                id=4    [slave  pointer  (2)]\n\xe2\x8e\x9c   \xe2\x86\xb3 ELAN1200:00 04F3:30BA Mouse               id=12   [slave  pointer  (2)]\n\xe2\x8e\x9c   \xe2\x86\xb3 ELAN1200:00 04F3:30BA Touchpad            id=13   [slave  pointer  (2)]\n\xe2\x8e\xa3 Virtual core keyboard                         id=3    [master keyboard (2)]\n    \xe2\x86\xb3 Virtual core XTEST keyboard               id=5    [slave  keyboard (3)]\n    \xe2\x86\xb3 Power Button                              id=6    [slave  keyboard (3)]\n    \xe2\x86\xb3 Asus Wireless Radio Control               id=7    [slave  keyboard (3)]\n    \xe2\x86\xb3 Video Bus                                 id=8    [slave  keyboard (3)]\n    \xe2\x86\xb3 Power Button                              id=9    [slave  keyboard (3)]\n    \xe2\x86\xb3 Sleep Button                              id=10   [slave  keyboard (3)]\n    \xe2\x86\xb3 USB2.0 HD UVC WebCam: USB2.0 HD           id=11   [slave  keyboard (3)]\n    \xe2\x86\xb3 Asus WMI hotkeys                          id=14   [slave  keyboard (3)]\n    \xe2\x86\xb3 AT Translated Set 2 keyboard              id=15   [slave  keyboard (3)]\n\n
Run Code Online (Sandbox Code Playgroud)\n\n

我通过在命令期间按Fn+进一步确认了这一点,它已正确注册:F12xinput test 7

\n\n
$ xinput test 7\nkey press   255 \nkey release 255 \nkey press   255 \nkey release 255 \n
Run Code Online (Sandbox Code Playgroud)\n\n

我想要的是

\n\n

Fn我想将+键的键绑定F12,或者XF86RFKill从 Linux 转移到i3wm. 我有用于切换飞行模式的脚本,并且我已使用以下方式绑定它:

\n\n
bindsym XF86RFKill exec --no-startup-id toggle-airplane\n
Run Code Online (Sandbox Code Playgroud)\n\n

i3 绑定有效,但问题是,**Linux 和i3wm按下按键时都会切换飞行模式,因此由于连续两次切换,导致什么也不做。

\n\n
\n

当前由 KDE 实现的飞行模式实际上是有问题的,因为它不记得在打开飞行模式之前关闭的设备,因此它会在禁用飞行模式后打开所有无线电设备,即使它们最初被关闭模式。我编写了一个 bash 脚本来实现我的目标,因此也是手动绑定此密钥的动机。

\n
\n\n

更新1:

\n\n

经过一些研究和探索后,我发现asus_wireless内核模块对这种行为负责。只需将模块列入黑名单即可,但我的笔记本电脑不再检测到按键。是否可以以某种方式保留按键以禁用热键?

\n

小智 1

不是这个主题的专家,但这对我有用。也许它也可以帮助你。要禁用启用飞行模式的输入,请在终端中运行:

xmodmap -e 'keycode 255='
Run Code Online (Sandbox Code Playgroud)

来源:如何在 Linux (Ubuntu) 中禁用键盘按键?

此外,该命令xmodmap -pke显示所有键盘映射的列表