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.