Auto-enable FN-toggling for the first N FN keys
How can I auto-enable FN-toggling for the first N FN keys? F7-F12 on my keyboard are used for audio control, while, many games that I play, use the lower FN keys. Therefore, I'd like to relieve myself of the need to hold down the FN key for F1-F6. In other words, I'd like to change the default FN key state for those keys only.
2 answers
It is true that Fn combinations are usually implemented in hardware, but in X11 (not Wayland of course!) you can circumvent this issue for most or all your keys.[1]
For example, my F3 -> F3
and my Fn+F3 -> {Switch monitor}
.
Find out the keycodes of the keys
In a terminal, launch xev
. Press Fn+F3 and see the output in the terminal:
KeyRelease event, serial 32, synthetic NO, window 0x1400001,
root 0x25a, subw 0x0, time 11205128, (-592,394), root:(2,689),
state 0x0, keycode 235 (keysym 0x1008ff59, XF86Display), same_screen YES,
So the keycode for Fn+F3 is 235. Repeat the steps for F3 to determine that the keycode for F3 is 69.
Dump your XKB map to a file
xkbcomp "$DISPLAY" xkb
Swap the keycodes in the map
Open the created xkb
file in your text editor.
In the xkb_keycodes
section of the file, swap the keycode 69 <-> 235. I.e., if the section looks like this initially,
<FK01> = 67;
<FK02> = 68;
<FK03> = 69;
[...]
<I235> = 235;
<I236> = 236;
<I237> = 237;
it should look like this afterwards:
<FK01> = 67;
<FK02> = 68;
<FK03> = 235;
[...]
<I235> = 69;
<I236> = 236;
<I237> = 237;
Load your new XKB map
xkbcomp xkb "$DISPLAY"
Now F3 -> {Switch monitor}
and Fn+F3 -> F3
.
Further reading
- X keyboard extension (xkb) on the Arch wiki
-
This won't work for combinations that also work directly via hardware, for example, in my computer Fn+F2 will turn the screen on or off. If
xev
doesn't detect the combination, you are out of luck — unless it is detected byacpi_listen
and you can contrive something... food for thought, I really did not try. ↩︎
I don't think you can. AFAIK the fn key behaviour is implemented in hardware, the OS is not aware if a key has been pressed with or without fn key.
You can check for a BIOS setting, but I've never seen one apart from reversing the behaviour for all or no keys.
1 comment thread