我是靠谱客的博主 积极小蜜蜂,最近开发中收集的这篇文章主要介绍内核报错Unknown key released (translated set 2, code 0xbb on isa0060/serio0)问题描述排除思路解决方法,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

问题描述

在使用dmesg命令时总是发现大多日志内容都为以下内容

[ 1507.534145] atkbd serio0: Unknown key pressed (translated set 2, code 0xbb on isa0060/serio0).
[ 1507.534155] atkbd serio0: Use 'setkeycodes e03b <keycode>' to make it known.
[ 1507.540552] atkbd serio0: Unknown key released (translated set 2, code 0xbb on isa0060/serio0).
[ 1507.540561] atkbd serio0: Use 'setkeycodes e03b <keycode>' to make it known.

经过反复观察发现当我使用笔记本键盘上的功能键Fn + 时内核日志中就会出现大量上面的内容,以上功能键用于调整我笔记本屏幕上面的亮度。

排除思路

经过查阅大量资料才知道这是因为键盘上的扫描码没有和对应的键做映射,所以atkbd会进行提示。
再经过学习了解才知道键盘上每个按键都会有一个扫描码(scancode),扫描码对应着一个键码(keycode),键码再对应一个字符或控制符号,计算机就知道我们按键的键对应哪个字符啦。

解决方法

既然没有映射,那我们给他映射就可以啦,映射有两种方式,一种是使用setkeycodes命令进行,另一种就是使用systemd-udevd组件。

获取扫描码和键码

  • 扫描码可以通过内核日志dmes得到或查看/var/log/message日志文件。
  • 键盘码可以通过命令xmodmap -pke进行查看所有的键盘码设置,找到想设置的功能
    $ xmodmap -pke | grep Brightness    
    keycode 232 = XF86MonBrightnessDown NoSymbol XF86MonBrightnessDown
    keycode 233 = XF86MonBrightnessUp NoSymbol XF86MonBrightnessUp
    keycode 237 = XF86KbdBrightnessDown NoSymbol XF86KbdBrightnessDown
    keycode 238 = XF86KbdBrightnessUp NoSymbol XF86KbdBrightnessUp
    keycode 251 = XF86MonBrightnessCycle NoSymbol XF86MonBrightnessCycle
    

1、setkeycodes

我们可以按照atkbd的提示进行设置,其中e03b就是当前键盘的扫描码,可以像下面进行设置:

setkeycodes e03b 233

需要使用超级管理员权限

经过上面的设置,再次按下就不会再有提示了,但下次重启还会提示,所以我们要把上面命令写入到系统自启动脚本中或系统环境变量中。
1). 创建自启动服务/etc/systemd/system/custom.service文件,内容如下

[Unit]
Description=Keymap Custom
Requires=gdm.service
After=gdm.service

[Service]
Type=oneshot
ExecStart=/usr/bin/setkeycodes e03b 233
ExecStart=/usr/bin/setkeycodes e03d 232

[Install]
WantedBy=graphical.target

2).启用服务

systemctl enable custom.service

3). 开机自起

systemctl enable custom.service

2、systemd-udevd

systemd-udevd会将按键的映射规则存放在路径/etc/udev/hwdb.bin中,我们只要编写规则存放在路径/etc/udev/hwdb.d路径中,文件名称可以这样命名90-custom-keyboard.hwdb,后缀以.hwdb为结束,文件内容如下:
1).创建文件/etc/udev/hwdb.d/90-custom-keyboard.hwdb

evdev:atkbd:dmi:bvn*:bvr*:bd*:svn*:pn*  
 KEYBOARD_KEY_e03b=233			# Fn+Up Brightness Up  
 KEYBOARD_KEY_e03c=232			# Fn+Down Brightness Down 

内容解释:
第一行是用来匹配设备的
evdev :表示设备输入事件
atkbd :表示键盘驱动
dmi :桌面管理界面(Desktop Management Interface, DMI)
bvn :BIOS版本(bios_version)
bvr :BIOS供应商(bios vendor)
bd :BISO生产日期(bios date)
svn : 设备厂商(sys vendor)
pn :型号
*:号表示通配
第二行和第三行用于按键映射
e03be03c对应键盘的屏幕亮度控制扫描码
233232是我的键码(这里实质无法控制屏幕亮度,控制屏幕的程序会监听该键码来进行控制)

查看设备详细信息

cat /sys/class/dmi/id/modalias

2). 更新/etc/udev/hwdb.bin数据库文件

systemd-hwdb update

3). 重新加载硬件数据库

udevadm trigger

3). 查看注册信息

udevadm info /dev/input/by-path/platform-i8042-serio-0-event-kbd
-----------------------------------------------------------------
P: /devices/platform/i8042/serio0/input/input3/event3
N: input/event3
L: 0
S: input/by-path/platform-i8042-serio-0-event-kbd
E: DEVPATH=/devices/platform/i8042/serio0/input/input3/event3
E: DEVNAME=/dev/input/event3
E: MAJOR=13
E: MINOR=67
E: SUBSYSTEM=input
E: USEC_INITIALIZED=5675887
E: KEYBOARD_KEY_bb=brightnessup
E: KEYBOARD_KEY_bc=brightnessdown
E: KEYBOARD_KEY_e03b=brightnessup
E: KEYBOARD_KEY_e03c=brightnessdown
E: ID_INPUT=1
E: ID_INPUT_KEY=1
E: ID_INPUT_KEYBOARD=1
E: ID_BUS=i8042
E: ID_SERIAL=noserial
E: ID_PATH=platform-i8042-serio-0
E: ID_PATH_TAG=platform-i8042-serio-0
E: LIBINPUT_DEVICE_GROUP=11/1/1:isa0060/serio0
E: DEVLINKS=/dev/input/by-path/platform-i8042-serio-0-event-kbd
E: TAGS=power-switch
E: CURRENT_TAGS=power-switch

这样内核就不会给出大量提示日志了,可能其他人是其他按键报错,可以按照这种方式进行映射,当然也可根据自己的需要将按键映射成其他功能或字符。

参考资料

  1. hwdb手册说明
  2. wikiarch
  3. stackexchange
  4. jveweb

最后

以上就是积极小蜜蜂为你收集整理的内核报错Unknown key released (translated set 2, code 0xbb on isa0060/serio0)问题描述排除思路解决方法的全部内容,希望文章能够帮你解决内核报错Unknown key released (translated set 2, code 0xbb on isa0060/serio0)问题描述排除思路解决方法所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(47)

评论列表共有 0 条评论

立即
投稿
返回
顶部