K780 doesn't have a hard switch to lock the function keys. Logitech provides a utility to do this on Windows and iOS but not on Linux. You need to manually remap the keys.
Below works for Arch Linux, other systemd based distros should be about the same.
There's a problem with the F1-F3 keys as they're hardware specific and don't emit an event if pressed on their own and therefore can't be remapped. I might be wrong as I haven't spend any time on researching that.
Edit: about htat, see @tangruize comments below https://gist.github.com/andrejcremoznik/e56234138305226abd41fe4d1d2561a3#gistcomment-3390489
# Logitech K780 map:
# Fn + F4/F5/F6 ==> F4/F5/F6
evdev:input:b0003v046Dp405B*
KEYBOARD_KEY_c0223=f4
KEYBOARD_KEY_70065=f5
KEYBOARD_KEY_c0224=f6
sudo systemd-hwdb update
sudo udevadm trigger
Make sure the ConditionNeedsUpdate=/etc
is commented out in /usr/lib/systemd/system/systemd-hwdb-update.service
. If it isn't create an override:
sudo systemctl edit --full systemd-hwdb-update.service
Comment out:
#ConditionNeedsUpdate=/etc
This creates a replacement systemd unit file in /etc/systemd/system/systemd-hwdb-update.service
. If some update breaks anything related to this, remove it and recreate with systemctl edit
like before.
I spent some time to research this problem. F1 and F3 are frequently used but key map doesn't support to invert it. And I think @HoinzeyBear's method won't work. @adriankontny's method is useful if you use a Logitech unifying receiver. However, Solaar doesn't support Bluetooth. I learned how to analyze the communication to the HID device. And here is my workaround:
SCRIPT_FILE=/usr/local/bin/logi-fn-swap.pl
vim $SCRIPT_FILE
chmod +x $SCRIPT_FILE
Now, connect your K780 (via Bluetooth or Logitech unifying USB receiver) and check if this script works:
$SCRIPT_FILE on
It should work if you use a K780/K760/K810 keyboard (but only K780 supports unifying USB). If it works, you can add an action to udev:
vim /etc/udev/rules.d/00-k780.rules
You should replace
$SCRIPT_FILE
with your path. Now restart udev:sudo service udev restart
It should work automatically when you disconnect and reconnect. Enjoy!