Software Fn Lock
June 8, 2019
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 xmodmap configuration.
First, I listed the default mappings.
xmodmap -pke
My keyboard have the following mappings by default:
XF86MonBrightnessDown)XF86MonBrightnessUp)XF86ScreenSaver)XF86AudioMiute)XF86AudioLowerVolume)XF86AudioRaiseVolume)If not sure based on what’s written on the keyboard, you can also use
the 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.