I have an external ThinkPad USB keyboard: $ lsusb | grep -i keyboard Bus 003 Device 022: ID 17ef:6047 Lenovo ThinkPad Compact Keyboard with TrackPoint The Linux kernel exposes a fn_lock attribute in sysfs for this keyboard: $ cat sys/devices/pci0000:00/0000:00:14.0/usb3/3-5/3-5.4/3-5.4.3/3-5.4.3:1.1/0003:17EF:6047.000F/fn_lock 1 However, this attribute appears inverted for this particular keyboard: it seems to be 1 when FnLock is *disabled* and 0 when FnLock is *enabled*. In order to enable FnLock, I have to write 0 to this file. (Also, separately from that, it would be nice if the kernel could handle fn_lock toggling *internally*, rather than expecting userspace to do it. As far as I can tell, it does handle similar things for some keyboards, but not this one.)