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

44

27

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 :-)

jfmessier

Posted 2009-12-07T13:01:49.290

Reputation: 2 530

Answers

60

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)

Cynyr

Posted 2009-12-07T13:01:49.290

Reputation: 616

1@Kieveli when people say apple keyboard they don't mean it generically, they mean as in apple hardware. if the hardware is not apple then you won't be using apple's driver. you gotta find out which driver you're first – DallaRosa – 2014-10-05T03:47:55.220

5For Ubuntu 14.04.3, answer by @cynyr does not works. You get "permission denied". Working one is here: echo 2 | sudo tee /sys/module/hid_apple/parameters/fnmode – akikara – 2015-08-20T12:27:54.700

for issues with permission, see http://askubuntu.com/questions/103643/cannot-echo-hello-x-txt-even-with-sudo

– Diogo – 2017-03-23T23:17:22.167

1It seems I'm not using an apple driver, so this isn't working for me. I have an off-brand apple keyboard (Razor Black Widow). – Kieveli – 2013-05-08T14:26:25.047

35

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)

wuputah

Posted 2009-12-07T13:01:49.290

Reputation: 461

Bonus: If you want to make your ~ key work, you should also set iso_layout=0. My hid_apple.conf looks like this: options hid_apple fnmode=2 iso_layout=0 – Thales Ceolin – 2015-05-12T09:40:45.373

Thanks - I've added this method to my Linux Mint setup scripts at https://github.com/duncan-bayne/mint-setup

– Duncan Bayne – 2014-04-03T22:52:42.377

All you need is to run as root (on Fedora distro at least) echo 2 > /sys/module/hid_apple/parameters/fnmode to make FN as primary and Mac controls secondary. Oh, yeah!! Thanks, wuputah!! – Ilia Rostovtsev – 2014-05-22T20:21:17.513

5

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!

joe

Posted 2009-12-07T13:01:49.290

Reputation: 11 615

1

This worked for me on Fedora 24

  1. Create a new file for SystemD to start.

    gedit /usr/lib/systemd/system/mac-keyboard.service

    Ensure the file contains the following

    [Unit]
     Description=mac-keyboard
    [Service]
     Type=oneshot
     ExecStart=/bin/sh -c "echo 2 > /sys/module/hid_apple/parameters/fnmode"
     ExecStop=/bin/sh -c "echo 1 > /sys/module/hid_apple/parameters/fnmode"
     RemainAfterExit=yes
    [Install]
     WantedBy=multi-user.target
    
  2. Reload SystemD to read your new file

    systemctl --system daemon-reload

  3. Start the SystemD service.

    systemctl start mac-keyboard.service

  4. Enable service to start on boot.

    systemctl enable mac-keyboard.service

Reference: https://www.dalemacartney.com/2013/06/14/changing-the-default-function-key-behaviour-in-fedora/

FDisk

Posted 2009-12-07T13:01:49.290

Reputation: 131

0

sudo add-apt-repository ppa:daniel.pavel/solaar
sudo apt-get update
sudo apt-get install solaar
solaar

with a mac keyboard youll get a radio button to toggle fn

http://i.stack.imgur.com/9omc6.png

user2167582

Posted 2009-12-07T13:01:49.290

Reputation: 195