[RESPONDED] Fn Lock broken - 13th gen

Hello! I just received my 13th Gen Framework 13 today, and so far am incredibly pleased with both the system and the resources available online.

However, I’ve come across the same issue as in this thread: Fn lock broken. Didn’t want to revive a dead thread which is marked as solved and is for a different gen CPU (that thread seems to focus on 11th gen Intel CPUs, but I have a 13th gen Intel CPU), so I’m creating this new thread.

The issue is that the function keys interact weirdly with fn lock. As described in the other post, when fn lock is enabled, pressing a function key correctly sends the appropriate command (e.g play/pause, or volume up/down) and pressing fn + a function key correctly sends the appropriate F-key (e.g F5 or F11). However, when fn lock is disabled (toggle with fn+escape), I cannot get the key to send the appropriate F-key whether fn is pressed or not.

For example for the following sequence of key presses (starting with fn lock enabled):
1 - F5
2 - Fn + F5
3 - Fn + Escape
4 - F5
5 - Fn + F5

I would expect to see Play/Pause, followed by F5 (then toggle fn lock, but this does not appear as a key press), followed by F5, followed by Play/Pause.

However, using evtest to record what the system receives:

Event: time 1714856296.644310, type 4 (EV_MSC), code 4 (MSC_SCAN), value a2
Event: time 1714856296.644310, type 1 (EV_KEY), code 164 (KEY_PLAYPAUSE), value 1
Event: time 1714856296.644310, -------------- SYN_REPORT ------------
Event: time 1714856296.690826, type 4 (EV_MSC), code 4 (MSC_SCAN), value a2
Event: time 1714856296.690826, type 1 (EV_KEY), code 164 (KEY_PLAYPAUSE), value 0
Event: time 1714856296.690826, -------------- SYN_REPORT ------------
Event: time 1714856297.027071, type 4 (EV_MSC), code 4 (MSC_SCAN), value 3f
Event: time 1714856297.027071, type 1 (EV_KEY), code 63 (KEY_F5), value 1
Event: time 1714856297.027071, -------------- SYN_REPORT ------------
Event: time 1714856297.095002, type 4 (EV_MSC), code 4 (MSC_SCAN), value 3f
Event: time 1714856297.095002, type 1 (EV_KEY), code 63 (KEY_F5), value 0
Event: time 1714856297.095002, -------------- SYN_REPORT ------------
Event: time 1714856298.363619, type 4 (EV_MSC), code 4 (MSC_SCAN), value a2
Event: time 1714856298.363619, type 1 (EV_KEY), code 164 (KEY_PLAYPAUSE), value 1
Event: time 1714856298.363619, -------------- SYN_REPORT ------------
Event: time 1714856298.429039, type 4 (EV_MSC), code 4 (MSC_SCAN), value a2
Event: time 1714856298.429039, type 1 (EV_KEY), code 164 (KEY_PLAYPAUSE), value 0
Event: time 1714856298.429039, -------------- SYN_REPORT ------------
Event: time 1714856298.702649, type 4 (EV_MSC), code 4 (MSC_SCAN), value a2
Event: time 1714856298.702649, type 1 (EV_KEY), code 164 (KEY_PLAYPAUSE), value 1
Event: time 1714856298.702649, -------------- SYN_REPORT ------------
Event: time 1714856298.761264, type 4 (EV_MSC), code 4 (MSC_SCAN), value a2
Event: time 1714856298.761264, type 1 (EV_KEY), code 164 (KEY_PLAYPAUSE), value 0
Event: time 1714856298.761264, -------------- SYN_REPORT ------------

The actual received sequence is Play/Pause, F5, Play/Pause, Play/Pause.

I first noticed this on a plain Arch Linux installation under Sway, and have tried the solutions listed in the thread I linked earlier, as well as trying on Ubuntu with the fixes to no avail. The things I tried:

  • Using a different DE (tried Gnome and KDE Plasma)
  • Using a different display server (switched to Xorg from Wayland, tried Gnome and Plasma again)
  • echo "blacklist cros_ec_lpcs" | sudo tee -a /etc/modprobe.d/no_cros_ec.conf, as suggested in the linked thread
  • blacklist hid_sensor_hub, which was also suggested in the linked thread
  • Switching to LTS kernel, trying all of the above again
  • Switching distros to Ubuntu 24.04, first trying with no changes, and then again with blacklist cros_ec_lpcs
    All to no avail.

Please let me know if I can provide any more details/test anything on my system that might get us closer to a solution :slight_smile:

hi @Mylo_Fawcett , welcome to the community. :slight_smile:

Just having a hunch that this could an inherent issue with sway, just to rule that out,
do try out Ubuntu 22.04 or Fedora 39 live and see if you’re seeing same issue with Fn Lock or not.

cheers! let us know :slight_smile:

Hi!

I’ve already tried other desktops besides sway, other display servers, other kernels and other distributions as listed at the bottom of my post.

I still have all the environments set up, so let me know if there’s anything you need to check. I’ll do so when I get back home later today.

Hi @Mylo_Fawcett ,

for confirmation, Just needs to look at fedora 39 live or Ubuntu 22.04 live.
and let’s do evtest like so sudo su -c ‘sleep 1; timeout -k5 10 evtest --grab /dev/input/event2’

provided event2 is your keyboard device in this case

then let’s do fn + esc, f5, then fn + f5
the output should look like this

Testing … (interrupt to exit)
Event: time 1715184191.279551, type 4 (EV_MSC), code 4 (MSC_SCAN), value a2
Event: time 1715184191.279551, type 1 (EV_KEY), code 164 (KEY_PLAYPAUSE), value 1
Event: time 1715184191.279551, -------------- SYN_REPORT ------------
Event: time 1715184191.350659, type 4 (EV_MSC), code 4 (MSC_SCAN), value a2
Event: time 1715184191.350659, type 1 (EV_KEY), code 164 (KEY_PLAYPAUSE), value 0
Event: time 1715184191.350659, -------------- SYN_REPORT ------------
Event: time 1715184194.352432, type 4 (EV_MSC), code 4 (MSC_SCAN), value 3f
Event: time 1715184194.352432, type 1 (EV_KEY), code 63 (KEY_F5), value 1
Event: time 1715184194.352432, -------------- SYN_REPORT ------------
Event: time 1715184194.435670, type 4 (EV_MSC), code 4 (MSC_SCAN), value 3f
Event: time 1715184194.435670, type 1 (EV_KEY), code 63 (KEY_F5), value 0
Event: time 1715184194.435670, -------------- SYN_REPORT ------------

Hi @Loell_Framework,

I’m currently downloading images for Ubuntu 22.04 LTS and Fedora 39 so I can test again on those versions.

I do just want to point out that when fn lock is enabled, everything works fine (which is what I understand you are trying to get me to test) - pressing F5 inputs KEY_PLAYPAUSE and pressing Fn+F5 inputs KEY_F5, which is correct.

The bad behaviour is when fn lock is disabled, where pressing F5 inputs KEY_PLAYPAUSE (when it should input KEY_F5) and pressing Fn+F5 also inputs KEY_PLAYPAUSE (which is correct).

I’ll get back to you once I’ve tried on Ubuntu 22.04 LTS and Fedora 39.

Alright, I’ve tried both Ubuntu 22.04 and Fedora 39 Workstation, using the exact command you sent.

With fn lock on, the output matches what you said it should be:

Event: time 1715201560.860291, type 4 (EV_MSC), code 4 (MSC_SCAN), value a2
Event: time 1715201560.860291, type 1 (EV_KEY), code 164 (KEY_PLAYPAUSE), value 1
Event: time 1715201560.860291, -------------- SYN_REPORT ------------
Event: time 1715201560.915680, type 4 (EV_MSC), code 4 (MSC_SCAN), value a2
Event: time 1715201560.915680, type 1 (EV_KEY), code 164 (KEY_PLAYPAUSE), value 0
Event: time 1715201560.915680, -------------- SYN_REPORT ------------
Event: time 1715201561.666815, type 4 (EV_MSC), code 4 (MSC_SCAN), value 3f
Event: time 1715201561.666815, type 1 (EV_KEY), code 63 (KEY_F5), value 1
Event: time 1715201561.666815, -------------- SYN_REPORT ------------
Event: time 1715201561.725129, type 4 (EV_MSC), code 4 (MSC_SCAN), value 3f
Event: time 1715201561.725129, type 1 (EV_KEY), code 63 (KEY_F5), value 0
Event: time 1715201561.725129, -------------- SYN_REPORT ------------

(identical output on both Ubuntu 22.04 and Fedora 39)

However, with fn lock off, the output is still broken:

Event: time 1715201612.489184, type 4 (EV_MSC), code 4 (MSC_SCAN), value a2
Event: time 1715201612.489184, type 1 (EV_KEY), code 164 (KEY_PLAYPAUSE), value 1
Event: time 1715201612.489184, -------------- SYN_REPORT ------------
Event: time 1715201612.578149, type 4 (EV_MSC), code 4 (MSC_SCAN), value a2
Event: time 1715201612.578149, type 1 (EV_KEY), code 164 (KEY_PLAYPAUSE), value 0
Event: time 1715201612.578149, -------------- SYN_REPORT ------------
Event: time 1715201613.377105, type 4 (EV_MSC), code 4 (MSC_SCAN), value a2
Event: time 1715201613.377105, type 1 (EV_KEY), code 164 (KEY_PLAYPAUSE), value 1
Event: time 1715201613.377105, -------------- SYN_REPORT ------------
Event: time 1715201613.447991, type 4 (EV_MSC), code 4 (MSC_SCAN), value a2
Event: time 1715201613.447991, type 1 (EV_KEY), code 164 (KEY_PLAYPAUSE), value 0
Event: time 1715201613.447991, -------------- SYN_REPORT ------------

I pressed F5 followed by Fn+F5 in this case (so the received keys should have been KEY_F5 and then KEY_PLAYPAUSE). The output is also identical on Ubuntu 22.04 and Fedora 39 (and is also no different to all the other combinations of distro, version and DE I’ve tried).

Hope this gives you enough information to look into it.

Thanks!