我目前遇到了 MSI Creator 17 B11UG 上的功能键问题。每次 Ubuntu 更新(目前为 23.04)时,情况都越来越糟,我特别想让网络摄像头重新工作,因为它显然只是卡在了“硬件禁用状态”。有些功能键可以工作(静音、音量调高/调低、键盘灯),有些在升级后停止工作,有些将错误记录到 dmesg 中,有些可以工作但未在 上注册showkey -k
。详细的表格描述了功能键当前的行为方式:
更新:我最初创建了一个 markdown 表,在预览中看起来非常漂亮,但是发布时由于某种原因变得混乱,所以我创建了一个图像。
showkey -k
单独按下功能键或同时按下 Fn 键时,检测到的代码完全相同。我还检查了 BIOS 设置,没有任何设置可以改变 Fn 键的工作方式。
sudo udevadm info /dev/input/by-path/platform-i8042-serio-0-event-kbd
给出了这个输出:
P: /devices/platform/i8042/serio0/input/input3/event3
M: event3
R: 3
U: input
D: c 13:67
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=5374008
E: KEYBOARD_KEY_a0=mute
E: KEYBOARD_KEY_ae=volumedown
E: KEYBOARD_KEY_b0=volumeup
E: KEYBOARD_KEY_b2=www
E: KEYBOARD_KEY_c2=ejectcd
E: KEYBOARD_KEY_df=sleep
E: KEYBOARD_KEY_e2=bluetooth
E: KEYBOARD_KEY_e4=f21
E: KEYBOARD_KEY_ec=email
E: KEYBOARD_KEY_ee=camera
E: KEYBOARD_KEY_f6=wlan
E: KEYBOARD_KEY_f7=brightnessdown
E: KEYBOARD_KEY_f8=brightnessup
E: KEYBOARD_KEY_f9=search
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: XKBMODEL=pc105
E: XKBLAYOUT=us,ru
E: XKBVARIANT=,
E: XKBOPTIONS=grp:alt_shift_toggle,lv3:ralt_alt,compose:caps,terminate:ctrl_alt_bksp,grp_led:scroll
E: BACKSPACE=guess
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:
所有的诊断方法(见上表)似乎都给了我矛盾的结果,例如 F8 有效并改变了键盘灯光,但showkey
没有注册任何内容并dmesg
记录错误,有些键会产生Unknown event received
,有些会产生Unknown key pressed
,有些则两者都会产生。
udevadm info
显然指出了键盘识别错误(因为输出包含E: KEYBOARD_KEY_f9=search
例如而我没有该键),所以我尝试摆弄/lib/udev/hwdb.d
:
我编辑了/lib/udev/hwdb.d/90-keyboard-ubuntu.hwdb
:
# Dell G16 microphone mute
evdev:name:Dell WMI hotkeys:dmi:bvn*:bvr*:bd*:svnDell*:pnDellG16*:*
KEYBOARD_KEY_100150=f20
evdev:atkbd:dmi:bvn*:bvr*:bd*:svnMicro-Star*:pn*pnCreator17B11UG*:*
KEYBOARD_KEY_ee=camera # Fn+F6 camera disable
也就是说,我添加了最后两行,其他一切都在之前。然后我应用了更改:systemd-hwdb update
和udevadm trigger --verbose --sysname-match="event*"
。之后 F6 键的行为似乎没有任何变化。我还尝试了一些其他随机操作,例如将 更改camera
为!camera
或其他十六进制键而不是KEYBOARD_KEY_ee
,但似乎没有任何变化。
由于并没有showkey -k
给dmesg
我任何关于 F6 键的实际十六进制值的提示,因此我尝试sudo evtest
:
No device specified, trying to scan all of /dev/input/event*
Available devices:
/dev/input/event0: Lid Switch
/dev/input/event1: Sleep Button
/dev/input/event10: HDA NVidia HDMI/DP,pcm=7
/dev/input/event11: HDA NVidia HDMI/DP,pcm=8
/dev/input/event12: HDA NVidia HDMI/DP,pcm=9
/dev/input/event13: Video Bus
/dev/input/event14: Video Bus
/dev/input/event15: sof-hda-dsp Mic
/dev/input/event16: sof-hda-dsp Headphone
/dev/input/event17: sof-hda-dsp HDMI/DP,pcm=3
/dev/input/event18: sof-hda-dsp HDMI/DP,pcm=4
/dev/input/event19: sof-hda-dsp HDMI/DP,pcm=5
/dev/input/event2: Power Button
/dev/input/event3: AT Translated Set 2 keyboard
/dev/input/event4: SynPS/2 Synaptics TouchPad
/dev/input/event5: FX-2
/dev/input/event6: FX-2 Keyboard
/dev/input/event7: MSI WMI hotkeys
/dev/input/event8: gpio-keys
/dev/input/event9: HDA NVidia HDMI/DP,pcm=3
Select the device event number [0-19]: 7
Input driver version is 1.0.1
Input device ID: bus 0x19 vendor 0x0 product 0x0 version 0x0
Input device name: "MSI WMI hotkeys"
Supported events:
Event type 0 (EV_SYN)
Event type 1 (EV_KEY)
Event code 113 (KEY_MUTE)
Event code 114 (KEY_VOLUMEDOWN)
Event code 115 (KEY_VOLUMEUP)
Event code 148 (KEY_PROG1)
Event code 149 (KEY_PROG2)
Event code 224 (KEY_BRIGHTNESSDOWN)
Event code 225 (KEY_BRIGHTNESSUP)
Event code 240 (KEY_UNKNOWN)
Event type 4 (EV_MSC)
Event code 4 (MSC_SCAN)
Properties:
Testing ... (interrupt to exit)
^C
它识别了/dev/input/event7: MSI WMI hotkeys
,但在实际测试中,当我按顺序按下所有功能键(带或不带 Fn 键)时,它没有任何输出。但它适用于普通键盘。
如果您能提供任何关于如何进一步调查甚至如何修复此问题的建议,我将不胜感激。作为一种解决方法,我还想听听您关于如何交替启用网络摄像头的建议(即以其他方式模拟按 Fn + F6 或类似方法)。
答案1
我在 Creator 17 2020 上。Ubuntu 22.04:
当我sudo evtest
在 MSI 上执行命令时,我发现
事件 7:MSI WMI 热键 - 不会显示键码
事件 4:AT Translated Set 2 键盘可以解决问题 - 它会显示按键代码