How to swap the "fn" use of Function keys on an Apple Keyboard in Linux

I have an apple slim keyboard (USB) and if I want to use one of the Function Key as-is, I also have to press "fn " key first. Otherwise, it will try to perform the other function of the key, such as increasing or decreasing the display intensity, change the volume/mute, etc....

As well, the fn key is actually in the position of the "insert" key for regular keyboards. How can I fix all of that ?

I really like this keyboard, as it make my typing much easier, and much more silent too. But some of those mappings that are different sometime bug me.

Thanks :-)


echo 0 > /sys/module/hid_apple/parameters/fnmode

Or, in case of permission issue:

echo 0 | sudo tee /sys/module/hid_apple/parameters/fnmode

This will prevent you from having to reboot. Adding the option is a good idea, so the change persists through reboots.

  • 0 = Fn key disabled
  • 1 = Fn key pressed by default
  • 2 = Fn key released by default

From /drivers/hid/hid-apple.c line 42:

Mode of fn key on Apple keyboards (0 = disabled, [1] = fkeyslast, 2 = fkeysfirst)


The answer above about what option to set in /etc/modprobe.d is a bit out of date. Fortunately there is detailed documentation on the Apple Keyboard support:

  1. Edit or create the file /etc/modprobe.d/hid_apple.conf, e.g.:

    gksudo gedit /etc/modprobe.d/hid_apple.conf

  2. Add this line to the previously open file.

    options hid_apple fnmode=2

  3. Save the file and execute the following command to notify hid_apple module to reload it's configuration.

    sudo update-initramfs -u

  4. Reboot

I'd personally recommend sudo update-initramfs -u -k all to update it for all your kernels (once you are confident the setting works as expected).

Setting the fnmode under /sys still works the same way:

sudo -s 'echo 2 > /sys/module/hid_apple/parameters/fnmode'

The values in both methods are as follows:

  • 0 = disabled : Disable the 'fn' key. Pressing 'fn'+'F8' will behave like you only press 'F8'
  • 1 = fkeyslast : Function keys are used as last key. Pressing 'F8' key will act as a special key. Pressing 'fn'+'F8' will behave like a F8.
  • 2 = fkeysfirst : Function keys are used as first key. Pressing 'F8' key will behave like a F8. Pressing 'fn'+'F8' will act as special key (play/pause)

From Here

how do we swap the function of the Fn key?

First edit /etc/modprobe.d/options

sudo nano /etc/modprobe.d/options

and make sure it has the line

options hid pb_fnmode=2

Then save and exit. Lastly, we need to update ramfs:

sudo update-initramfs -u -v -k uname -r

Then just reboot!