You are not logged in.
Hi there,
I have a problem that I need help with to find a solution.
As stated in the subject I use a Lenovo ThinkPad E15 Gen 2 (AMD Ryzen 4700U) and I can get all my Fn-Keys (or at least those I care about like volume +-, screen brightness +-) to work _after_ I resume from suspend. This additionally affects e.g. the NumLock LED as well as Mic/Audio Mute LEDs which only reflect the current state after resuming from suspend. It does load the "ThinkPad Extra Buttons" already before that as can be seen here
$ rg -F libinput .local/share/xorg/Xorg.0.log
307:[ 16.329] (**) Power Button: Applying InputClass "libinput keyboard catchall"
308:[ 16.329] (II) LoadModule: "libinput"
309:[ 16.329] (II) Loading /usr/lib/xorg/modules/input/libinput_drv.so
310:[ 16.332] (II) Module libinput: vendor="X.Org Foundation"
314:[ 16.332] (II) Using input driver 'libinput' for 'Power Button'
327:[ 16.339] (**) Video Bus: Applying InputClass "libinput keyboard catchall"
328:[ 16.339] (II) Using input driver 'libinput' for 'Video Bus'
341:[ 16.341] (**) Power Button: Applying InputClass "libinput keyboard catchall"
342:[ 16.341] (II) Using input driver 'libinput' for 'Power Button'
358:[ 16.346] (**) Sleep Button: Applying InputClass "libinput keyboard catchall"
359:[ 16.346] (II) Using input driver 'libinput' for 'Sleep Button'
381:[ 16.352] (**) Razer Inc Razer Seiren X Consumer Control: Applying InputClass "libinput keyboard catchall"
382:[ 16.352] (II) Using input driver 'libinput' for 'Razer Inc Razer Seiren X Consumer Control'
395:[ 16.358] (**) HD Webcam C525: Applying InputClass "libinput keyboard catchall"
396:[ 16.358] (II) Using input driver 'libinput' for 'HD Webcam C525'
409:[ 16.364] (**) Lenovo ThinkPad USB-C Dock Gen2 USB Audio: Applying InputClass "libinput keyboard catchall"
410:[ 16.364] (II) Using input driver 'libinput' for 'Lenovo ThinkPad USB-C Dock Gen2 USB Audio'
423:[ 16.370] (**) HID 046a:0023: Applying InputClass "libinput keyboard catchall"
424:[ 16.370] (II) Using input driver 'libinput' for 'HID 046a:0023'
437:[ 16.379] (**) HID 046a:0023: Applying InputClass "libinput keyboard catchall"
438:[ 16.379] (II) Using input driver 'libinput' for 'HID 046a:0023'
446:[ 16.384] (II) libinput: HID 046a:0023: needs a virtual subdevice
456:[ 16.388] (**) Logitech Anywhere MX: Applying InputClass "libinput pointer catchall"
457:[ 16.388] (II) Using input driver 'libinput' for 'Logitech Anywhere MX'
477:[ 16.398] (**) Integrated Camera: Integrated C: Applying InputClass "libinput keyboard catchall"
478:[ 16.398] (II) Using input driver 'libinput' for 'Integrated Camera: Integrated C'
497:[ 16.401] (**) AT Translated Set 2 keyboard: Applying InputClass "libinput keyboard catchall"
498:[ 16.401] (II) Using input driver 'libinput' for 'AT Translated Set 2 keyboard'
511:[ 16.405] (**) ETPS/2 Elantech Touchpad: Applying InputClass "libinput touchpad catchall"
513:[ 16.405] (II) Using input driver 'libinput' for 'ETPS/2 Elantech Touchpad'
533:[ 16.410] (II) Using input driver 'libinput' for 'ETPS/2 Elantech Touchpad'
541:[ 16.410] (EE) libinput: ETPS/2 Elantech Touchpad: Failed to create a device for /dev/input/mouse1
543:[ 16.410] (II) UnloadModule: "libinput"
545:[ 16.410] (**) ETPS/2 Elantech TrackPoint: Applying InputClass "libinput pointer catchall"
546:[ 16.410] (II) Using input driver 'libinput' for 'ETPS/2 Elantech TrackPoint'
566:[ 16.415] (**) ThinkPad Extra Buttons: Applying InputClass "libinput keyboard catchall"
567:[ 16.415] (II) Using input driver 'libinput' for 'ThinkPad Extra Buttons'
579:[ 16.419] (**) HID 046a:0023: Applying InputClass "libinput keyboard catchall"
580:[ 16.419] (II) Using input driver 'libinput' for 'HID 046a:0023'
584:[ 16.420] (**) Option "_source" "_driver/libinput"
585:[ 16.420] (II) libinput: HID 046a:0023: is a virtual subdevice
and xinput shows it as well
$ xinput list
⎡ Virtual core pointer id=2 [master pointer (3)]
⎜ ↳ Virtual core XTEST pointer id=4 [slave pointer (2)]
⎜ ↳ HID 046a:0023 id=14 [slave pointer (2)]
⎜ ↳ Logitech Anywhere MX id=15 [slave pointer (2)]
⎜ ↳ ETPS/2 Elantech Touchpad id=18 [slave pointer (2)]
⎜ ↳ ETPS/2 Elantech TrackPoint id=19 [slave pointer (2)]
⎣ Virtual core keyboard id=3 [master keyboard (2)]
↳ Virtual core XTEST keyboard id=5 [slave keyboard (3)]
↳ Power Button id=6 [slave keyboard (3)]
↳ Video Bus id=7 [slave keyboard (3)]
↳ Power Button id=8 [slave keyboard (3)]
↳ Sleep Button id=9 [slave keyboard (3)]
↳ Razer Inc Razer Seiren X Consumer Control id=10 [slave keyboard (3)]
↳ HD Webcam C525 id=11 [slave keyboard (3)]
↳ Lenovo ThinkPad USB-C Dock Gen2 USB Audio id=12 [slave keyboard (3)]
↳ HID 046a:0023 id=13 [slave keyboard (3)]
↳ Integrated Camera: Integrated C id=16 [slave keyboard (3)]
↳ AT Translated Set 2 keyboard id=17 [slave keyboard (3)]
↳ ThinkPad Extra Buttons id=20 [slave keyboard (3)]
↳ HID 046a:0023 id=21 [slave keyboard (3)]
together with its props
$ xinput list-props 20
Device 'ThinkPad Extra Buttons':
Device Enabled (162): 1
Coordinate Transformation Matrix (164): 1.000000, 0.000000, 0.000000, 0.000000, 1.000000, 0.000000, 0.000000, 0.000000, 1.000000
libinput Send Events Modes Available (282): 1, 0
libinput Send Events Mode Enabled (283): 0, 0
libinput Send Events Mode Enabled Default (284): 0, 0
Device Node (285): "/dev/input/event6"
Device Product ID (286): 6058, 20564
Pressing the Fn key before suspending gives me the following output in xev
KeyPress event, serial 38, synthetic NO, window 0x4000001,
root 0x6be, subw 0x0, time 1362546, (500,1819), root:(3382,1840),
state 0x10, keycode 151 (keysym 0x1008ff2b, XF86WakeUp), same_screen YES,
XLookupString gives 0 bytes:
XmbLookupString gives 0 bytes:
XFilterEvent returns: False
KeyRelease event, serial 38, synthetic NO, window 0x4000001,
root 0x6be, subw 0x0, time 1362631, (500,1819), root:(3382,1840),
state 0x10, keycode 151 (keysym 0x1008ff2b, XF86WakeUp), same_screen YES,
XLookupString gives 0 bytes:
XFilterEvent returns: False
pressing any Fn-related key (like volume up) in combination does not show a different event.
After suspend I see the following (expected) output in xev
KeyPress event, serial 35, synthetic NO, window 0x4000001,
root 0x6be, subw 0x0, time 1791673, (362,1168), root:(3244,1189),
state 0x10, keycode 151 (keysym 0x1008ff2b, XF86WakeUp), same_screen YES,
XLookupString gives 0 bytes:
XmbLookupString gives 0 bytes:
XFilterEvent returns: False
KeyPress event, serial 36, synthetic NO, window 0x4000001,
root 0x6be, subw 0x0, time 1791737, (362,1168), root:(3244,1189),
state 0x10, keycode 123 (keysym 0x1008ff13, XF86AudioRaiseVolume), same_screen YES,
XLookupString gives 0 bytes:
XmbLookupString gives 0 bytes:
XFilterEvent returns: False
KeyRelease event, serial 36, synthetic NO, window 0x4000001,
root 0x6be, subw 0x0, time 1791824, (362,1168), root:(3244,1189),
state 0x10, keycode 123 (keysym 0x1008ff13, XF86AudioRaiseVolume), same_screen YES,
XLookupString gives 0 bytes:
XFilterEvent returns: False
KeyRelease event, serial 36, synthetic NO, window 0x4000001,
root 0x6be, subw 0x0, time 1791926, (362,1168), root:(3244,1189),
state 0x10, keycode 151 (keysym 0x1008ff2b, XF86WakeUp), same_screen YES,
XLookupString gives 0 bytes:
XFilterEvent returns: False
Outputs of xinput list and xinput list-props do not change as compared to the output before suspend.
Noteworthy might be that some Fn-combinations work though, like Fn-p for Pause, also I have Fn-Lock disabled in BIOS.
I have no idea where to look further what changes with either the process of suspeding and/or resuming (something has to change because it works afterwards) so I could hopefully coerce it into doing the same thing from the first start. Any help appreciated.
Cheers
Manuel
Offline
DSDT fix https://github.com/masksshow/Thinkpad-E … -Gen-2-FIX
It feels really wrong, but works okay, no issues.
Offline
I tried this and indeed it makes the Fn-keys work from the first boot. But then I tried something. I just loaded the original unmodified DSDT that was extracted and it still works. So the point here is to explicitly load the DSDT and not the modification applied by this script.
So is this maybe another hint to anyone? It works without loading the DSDT after resume from suspend. And it works when loading the DSDT dumped via acpidump from the first start. Will suspend and/or resume trigger loading/reevaluating the DSDT?
EDIT: I did forget to power-cylce in between tests and it was not reloading the original DSDT. So in fact the modification did fix it afterall.
Last edited by wilriker (2021-10-13 11:00:37)
Offline