我有一台罗技蓝牙多设备键盘 K480,安装后只需按照蓝牙配对,默认设置会将功能键映射为多媒体键,因此我必须按住才能fn访问F1、F2、F3等。
这对我来说非常违反直觉,我想重新映射它,以便我可以直接访问功能并使用多媒体键fn
这是F1不按住fn再按住。
KeyPress event, serial 37, synthetic NO, window 0x4e00001,
root 0xd6, subw 0x0, time 63445847, (-438,408), root:(284,460),
state 0x10, keycode 180 (keysym 0x1008ff18, XF86HomePage), same_screen YES,
XLookupString gives 0 bytes:
XmbLookupString gives 0 bytes:
XFilterEvent returns: False
KeyRelease event, serial 37, synthetic NO, window 0x4e00001,
root 0xd6, subw 0x0, time 63445922, (-438,408), root:(284,460),
state 0x10, keycode 180 (keysym 0x1008ff18, XF86HomePage), same_screen YES,
XLookupString gives 0 bytes:
XFilterEvent returns: False
KeyPress event, serial 37, synthetic NO, window 0x4e00001,
root 0xd6, subw 0x0, time 63446510, (-438,408), root:(284,460),
state 0x10, keycode 67 (keysym 0xffbe, F1), same_screen YES,
XLookupString gives 0 bytes:
XmbLookupString gives 0 bytes:
XFilterEvent returns: False
KeyRelease event, serial 37, synthetic NO, window 0x4e00001,
root 0xd6, subw 0x0, time 63446597, (-438,408), root:(284,460),
state 0x10, keycode 67 (keysym 0xffbe, F1), same_screen YES,
XLookupString gives 0 bytes:
XFilterEvent returns: False
答案1
罗技似乎在 Linux 以外的各种操作系统上提供了一个特殊的驱动程序,它通过向键盘发送一个未记录的魔术命令来完成这种交换。
有些人监视了通信,以找到发送到其他一些类似罗技键盘的代码,例如 第760章 和 810。你可以尝试其中之一。
如果失败,您可以使用xmodmap
交换键分配。我们看到您的键盘根据是否按下 Fn 发送 2 个不同的键码。用于xmodmap -pke
列出文件中的所有键映射,然后仅保留引用所需键码的键映射。例如你会有
keycode 67 = F1 F1 F1 F1 F1 F1 XF86Switch_VT_1
keycode 180 = XF86HomePage NoSymbol XF86HomePage
等等。简单地反转数字:
keycode 180 = F1 F1 F1 F1 F1 F1 XF86Switch_VT_1
keycode 67 = XF86HomePage NoSymbol XF86HomePage
然后将此文件名作为参数传递以xmodmap
使其更新映射。
答案2
您可以将此代码放入名为“/home/youruser/k480”的脚本中并运行它。将重新映射您的罗技按键。
xmodmap -e "keycode 180 = F1 F1 F1 F1 F1 F1"
xmodmap -e "keycode 23 = F2 F2 F2 F2 F2 F2"
xmodmap -e "keycode 135 = F3 F3 F3 F3 F3 F3"
xmodmap -e "keycode 166 = F4 F4 F4 F4 F4 F4"
xmodmap -e "keycode 225 = F5 F5 F5 F5 F5 F5"
xmodmap -e "keycode 173 = F6 F6 F6 F6 F6 F6"
xmodmap -e "keycode 172 = F7 F7 F7 F7 F7 F7"
xmodmap -e "keycode 171 = F8 F8 F8 F8 F8 F8"
xmodmap -e "keycode 121 = F9 F9 F9 F9 F9 F9"
xmodmap -e "keycode 122 = F10 F10 F10 F10 F10 F10"
xmodmap -e "keycode 123 = F11 F11 F11 F11 F11 F11"
xmodmap -e "keycode 118 = F12 F12 F12 F12 F12 F12"
答案3
我找到了这个博客,Ubuntu 上的 Logitech K480 和“fn 按钮”默认行为,这似乎解决了与您描述的相同的问题:
默认情况下,此键盘(据我所知,罗技的类似键盘)默认启用“媒体按钮”,即 f1-f12 将充当媒体按钮,并且通过按 fn 按钮 + f1-f12 可以访问功能按钮。对于工作来说,这确实是不能接受的。我根据 Mario Scholz 对 K810 的工作对 Logitech K480 进行了此修复。源代码在这里:
我所做的就是重新跟踪他的步骤,在运行win7的虚拟机中,我安装了罗技的SetPoint软件,并调试了蓝牙设备的输出。对于 K480,我得到:
on (bingo!) > to keyboard ffff8801d2173000 2960870190 S Bo:2:013:2 -115 16 = 0c200c00 08004200 a210ff08 1c000000 < from keyboard ffff8801ed13b000 1204929370 C Bi:2:013:2 0 29 = 0c201900 15004200 a111ff08 1b000100 00000000 00000000 00000000 00 off > to keyboard ffff88062b7db0c0 3001832891 S Bo:2:013:2 -115 16 = 0c200c00 08004200 a210ff08 1c010000 < from keyboard ffff8801ed368b40 1227979618 C Bi:2:013:2 0 29 = 0c201900 15004200 a111ff08 1b010100 00000000 00000000 00000000 00
请注意,发送至键盘的消息以十六进制“a2”开头,来自键盘的消息以“a1”字节开头。总而言之,它工作正常,我也将设备 ID 更新为 0xb330,而 K810 为 0x319。就我个人而言,我喜欢这个键盘,它的按键“下降”效果很好,而且间距恰到好处——非常适合快速编写代码:)。