如何在Logitech K760 Bluetooh键盘上将function键设为默认值?

我曾希望solaar会有所帮助,但它似乎只适用于使用罗技专有方案的罗技无线设备。 我有蓝牙键盘(K760)。 我知道默认情况下可以使用function键(而不是媒体键),因为我可以使用Logitech的软件在OS X下进行操作。 只是重新映射密钥不起作用,因为F1,F2和F3是特殊的,因为它们切换我连接的蓝牙设备并且密钥不会发送到操作系统。

嗨,我有k760键盘,我也试图找到一种方法来做到这一点。 这似乎是一个很好的起点http://www.spinics.net/lists/linux-input/msg24280.html

他设法让它为k810工作。 如果您可以获得k760的设定点代码,您应该能够修改此代码,使其适用于k760,假设它们相似。

更新:我搞定了! 使用链接中描述的相同过程。

#define HID_VENDOR_ID_LOGITECH (__u32)0x046d #define HID_DEVICE_ID_K810 (__s16)0xb316 const char k810_seq_fkeys_on[] = {0x10, 0xff, 0x05, 0x14, 0x00, 0x00, 0x00}; const char k810_seq_fkeys_off[] = {0x10, 0xff, 0x05, 0x14, 0x01, 0x00, 0x00}; 

看起来对来自另一个答案的C代码的更改确实有效(但关闭function键,我曾想过会这样做)。 我想扩展代码为我自动检测键盘,并且无法想到用C编写文件搜索代码,所以我将代码移植到Perl 5:

 #!/usr/bin/perl use strict; use warnings; use constant HIDIOCGRAWINFO => 2148026371; use constant BUS_BLUETOOTH => 5; use constant HID_VENDOR_ID_LOGITECH => 1133; use constant HID_DEVICE_ID_K760 => -19690; use constant HID_DEVICE_ID_K760_ALT => -19688; use constant HID_DEVICE_ID_K810 => -19687; my %message = ( HID_DEVICE_ID_K760() => { on => (pack "C*", 0x10, 0xff, 0x05, 0x14, 0x00, 0x00, 0x00), off => (pack "C*", 0x10, 0xff, 0x05, 0x14, 0x01, 0x00, 0x00), }, HID_DEVICE_ID_K760_ALT() => { on => (pack "C*", 0x10, 0xff, 0x05, 0x14, 0x00, 0x00, 0x00), off => (pack "C*", 0x10, 0xff, 0x05, 0x14, 0x01, 0x00, 0x00), }, HID_DEVICE_ID_K810() => { on => (pack "C*", 0x10, 0xff, 0x06, 0x15, 0x00, 0x00, 0x00), off => (pack "C*", 0x10, 0xff, 0x06, 0x15, 0x01, 0x00, 0x00), }, ); #die # "usage: $0 [on|off]\n", # "\ton makes the media keys the default\n", # "\toff makes the function keys the default\n" #unless @ARGV == 1 and my ($choice) = $ARGV[0] =~ /^(on|off)$/; my ($choice) = @ARGV ? $ARGV[0] =~ /^(on|off)$/ : "off"; my $device; # find the first device we can set the option on # TODO: add a parameter to directly specify a device # TODO: add a parameter to make it set all devices FILE_SEARCH: for my $file () { open my $fh, "<", $file or do { warn "could not open $file: $!\n"; next; }; while (<$fh>) { if (/HID_NAME=Logitech K(76|81)0/) { my ($hid_raw_name) = $file =~ m{(hidraw[^/]+)}; $device = "/dev/$hid_raw_name"; last FILE_SEARCH; } } } die "sorry, could not find a suported device on your machine\n" unless $device; # re-exec with sudo if we can't open the device unless (-r $device and -w $device) { # unless we are already root exec "sudo", $^X, $0, @ARGV unless $> == 0; } open my $dev, "+<", $device or die "could not open device $device: $!\n"; my $success = ioctl $dev, HIDIOCGRAWINFO, my $struct = ""; die "could not determine if $device is supported\n" unless $success; my ($bus_type, $vendor, $product) = unpack "Lss", $struct; die "detected device $device is not a Bluetooth device\n" unless $bus_type == BUS_BLUETOOTH; die "detected device $device is not a Logitech product\n" unless $vendor == HID_VENDOR_ID_LOGITECH; die "detected device $device is not a supported product\n" unless exists $message{$product}; syswrite $dev, $message{$product}{$choice}; close $dev; 

更新:快速而肮脏的解决方案,K760有多个设备ID。