Software Fn Lock
June 8, 2019
Most laptops feature a way to lock the function keys (Fn Lock), often by pressing Fn + Esc or changing some BIOS or UEFI settings.
However, my laptop (ASUS VivoBook, X510UA-BB51-CB) does not have any way
to lock the function keys, forcing me to press the
Fn key every time I
want to, for instance, change the screen brightness or the audio volume.
Since I use those much more than the F1 to F12 keys, I had to find a software way to invert the function of those keys.
While I couldn’t come up with a perfect automatic solution, I resorted
to a custom
First, I listed the default mappings.
My keyboard have the following mappings by default:
If not sure based on what’s written on the keyboard, you can also use
xev program to find out what is the default association.
Then, filtering the output of
xmodmap -pke for those keys, I found the
currently associated keycodes:
keycode 71 = F5 F5 F5 F5 F5 F5 XF86Switch_VT_5 keycode 72 = F6 F6 F6 F6 F6 F6 XF86Switch_VT_6 keycode 73 = F7 F7 F7 F7 F7 F7 XF86Switch_VT_7 keycode 76 = F10 F10 F10 F10 F10 F10 XF86Switch_VT_10 keycode 95 = F11 F11 F11 F11 F11 F11 XF86Switch_VT_11 keycode 96 = F12 F12 F12 F12 F12 F12 XF86Switch_VT_12 keycode 232 = XF86MonBrightnessDown NoSymbol XF86MonBrightnessDown keycode 233 = XF86MonBrightnessUp NoSymbol XF86MonBrightnessUp keycode 160 = XF86ScreenSaver NoSymbol XF86ScreenSaver keycode 121 = XF86AudioMute NoSymbol XF86AudioMute keycode 122 = XF86AudioLowerVolume NoSymbol XF86AudioLowerVolume keycode 123 = XF86AudioRaiseVolume NoSymbol XF86AudioRaiseVolume
I then just have to make a
~/.xmodmaprc that inverts the keys:
keycode 71 = XF86MonBrightnessDown keycode 232 = F5 keycode 72 = XF86MonBrightnessUp keycode 233 = F6 keycode 73 = XF86ScreenSaver keycode 160 = F7 keycode 76 = XF86AudioMute keycode 121 = F10 keycode 95 = XF86AudioLowerVolume keycode 122 = F11 keycode 96 = XF86AudioRaiseVolume keycode 123 = F12
Make sure to add
xmodmap ~/.xmodmaprc to your
.xinitrc or whatever
you use to configure your X11 session.