Linux 屏蔽键盘某个按键 block a specified key on Linux

本文讲述了作者在安装Ubuntu20.04.1时遇到的键盘问题,表现为终端无法正常翻阅历史和出现^@字符。问题涉及笔记本键盘电路可能故障,通过观察xev和evtest,发现Rog键损坏导致频繁发送scancode。文章提供了一个临时解决方案,即通过udev配置将有问题的键映射到保留区。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

摘要 Abstract

本文记录笔者在安装Ubuntu时遇到的键盘频繁发送单一字符问题。
This blog aims to record the problem that the keyboard sends a single char while installing Ubuntu OS.
系统版本 system information :20.04.1-Ubuntu SMP Thu Nov 16 14:22:28 UTC 2023 x86_64 x86_64 x86_64 GNU/Linux
硬件 hardware :魔霸新锐2021 ROG-Strix-G513QM
安装过程参考
The installation procress reference at

华硕魔霸新锐2021安装ubuntu双系统踩坑记录


问题描述 Issue description

  1. 直观现象:笔者在安装Ubuntu20.04.6时,发觉终端无法向上翻找历史记录,始终被拉回最后一行。
    instantly problem: I found that I cannot scroll up to view history content at terminal.
  2. 切换至tty3以后,或关机以后,在终端上出现^@字符。
    If I switch to tty3 or before shutdown, it shows that I’m writing ^@char.
    终端出现字符 char at terminal
    图1. 终端出现字符
Figure 1. char at terminal
3. 其他相关现象:在windows下使用Armory Crate,按下任意一个按键均弹出奥创中心,而按下ROG键无响应。

Other issue:

原因分析:

推测可能性:笔记本自带键盘电路故障。
Probably reason : The keyboard had some circuit problem.

解决方案:

前置知识

解决步骤

使用命令xev查看键盘事件,发现serial 37会一直按下。
在这里插入图片描述

图2. keycode 37 被按下
Figure 2. keycode 37 pressed

使用evtest查找输入设备,如下
在这里插入图片描述

图3. 输入设备
Figure 3. input device

event7即Asus Keyboard,终端输入7,回车,即可看到对应的scancode ff310038 被按下,且频繁发送Event code 148 (自定义编程键盘)。这里可以看出是rog键损坏了造成的。
在这里插入图片描述

图4. scancode ff310038 被按下
Figure 4. scancode ff310038 pressed

因此,一个暂时的解决方法就是将这个键映射到保留区上,这样系统就不会对键盘作出响应。操作如下(各指令具体含义均在前置知识可找到):

nano /etc/udev/hwdb.d/99-personal-kdb.hwdb 

nano可以换成任何文本编辑器,添加一条映射关系,然后重启即可:

evdev:input:b0003*
 KEYBOARD_KEY_ff310038=reserved
### Linux 系统中的软键盘设置与使用 #### 屏幕键盘的选择 在 Linux 系统中有多个开源屏幕键盘可供选择,例如 GOK (Gnome 的屏幕键盘),kvkbd,onboard 和 Florence[^1]。 #### 打开系统自带的屏幕键盘 对于希望快速启动屏幕键盘的用户,在某些桌面环境中可以通过命令行工具实现这一操作。例如,通过在终端或者运行对话框中输入 `osk` 并回车来开启系统自带的小键盘[^2]。不过需要注意的是,并不是所有的Linux发行版都预装了名为`osk`的应用程序;具体名称可能依据不同的环境有所不同。 #### 修改软键盘参数以适应不同应用场景 针对特定场景下,默认大小的软键盘可能会显得过大而影响用户体验。此时可以考虑获取并调整软键盘源码的方式来自定义其外观和行为,特别是当目标设备为平板电脑或是ARM架构装置时更为重要[^3]。 #### 使用编程方式控制虚拟键盘 除了图形界面下的交互外,还可以借助第三方库如 virtkey 来实现在 Python 脚本里模拟物理键盘按键的效果。尽管有关此库的信息相对较少,但是它确实提供了必要的 API 接口用于开发人员创建自动化测试脚本或者其他需要模拟键入动作的应用程序[^4]。 #### 自动化显示软键盘于指定控件附近 为了改善用户界面上带有文本输入区域窗口的设计体验,开发者能够利用 Qt 框架所提供的机制让软键盘随着焦点变化自动显现出来而不至于覆盖原有组件。这通常涉及到对 Dialog 或者 Widget 样式的精心设计[^5]。 ```python import subprocess def launch_screen_keyboard(): """Launch the on-screen keyboard using a system command.""" try: subprocess.run(['matchbox-keyboard'], check=True) except FileNotFoundError: print("The specified screen keyboard application is not installed.") ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值