联想LXH-JME2209U键盘Linux下解锁F1-F12

部分联想键盘F1-F12的问题

可能是因为F1-F12对非程序员用处不大,部分键盘会在F1-F12的位置定义一些功能键,如调节音量、屏幕亮度等,日常需要同时按下Fn和相应的键才能触发F1-F12的功能。笔记本内置键盘和绝大多数的外接键盘都在硬件层面实现了FnLk的功能,即通过同时按下Esc+Fn的方式切换这些键的默认行为,就像大小写锁定一样。但是联想的许多键盘的这种切换是通过Windows驱动来实现的,这就意味着macOS和Linux无法方便地进行这个切换。对于程序员而言,功能键可有可无,但是F1-F12显然是必要的,也就是要把这些键的默认行为切换到F1-F12。

解决方法

所幸,GitHub仓库 github.com/lentinj/tp-... 已经提供了解决某些型号键盘的工具,基本原理是抓包分析驱动向键盘发出的指令,然后通过终端命令发出同样的指令,或者编写相应的udev规则。目前确认可行的键盘有:

  • USB键盘:
    • Thinkpad Compact USB keyboard with Trackpoint (KU-1255)
    • Lenovo Low Profile USB Keyboard (LXH-JME2209U)
  • 蓝牙键盘

我实际测试的就是上面的LXH-JME2209U。首先拉取仓库,在tp-compact-usb-keyboard下,执行make,就得到了可执行文件tp-compact-usb-keyboard。由于修改键盘的默认行为始终需要root权限,这里我推荐将可执行文件移动到/usr/local/bin下,这样就可以直接在终端中执行了。在有多个键盘时(比如对笔记本使用外接键盘),可以在/dev下查看并进行尝试,确认键盘的设备名:

bash 复制代码
# 编译并移动到/usr/local/bin
make
sudo mv tp-compact-usb-keyboard /usr/local/bin

# 查看键盘设备名,以下是我的输出,其中hidraw2是目标键盘
ls /dev | grep hidraw
hidraw0
hidraw1
hidraw2
hidraw3

# 执行命令,确认是否生效(第一次需要依次尝试确认是哪个名称)
sudo tp-compact-usb-keyboard /dev/hidraw2

然后,我们就可以编写相应的udev规则,使得键盘在插入时自动执行这个命令。在/etc/udev/rules.d下新建一个文件,如99-custom-keyboard.rules,写入以下内容(需要替换其中的/path/to,如我上述的/usr/local/bin):

bash 复制代码
SUBSYSTEM=="hidraw", ATTRS{idVendor}=="17ef", ATTRS{idProduct}=="6018", RUN+="/path/to/tp-compact-usb-keyboard %E{DEVNAME}"

对于我的键盘,不需要修改前面的参数。具体的参数可以通过lsusb查看,如下所示:

bash 复制代码
udevadm info -a -p $(udevadm info -q path -n /dev/hidraw2) | grep -E "SUBSYSTEM|idVendor|idProduct"

    SUBSYSTEM=="hidraw"
    SUBSYSTEMS=="hid"
    SUBSYSTEMS=="usb"
    SUBSYSTEMS=="usb"
    ATTRS{idProduct}=="6018"
    ATTRS{idVendor}=="17ef"
    SUBSYSTEMS=="usb"
    ATTRS{idProduct}=="0002"
    ATTRS{idVendor}=="1d6b"
    SUBSYSTEMS=="pci"
    SUBSYSTEMS=="pci"
    SUBSYSTEMS==""

跟在hidraw子系统后的确实是6018和17ef的参数值,说明我们的udev规则是正确的。然后,我们刷新udev规则,就可以在插入键盘时自动执行命令了:

bash 复制代码
sudo udevadm control --reload-rules
sudo udevadm trigger

这样的结果是,键盘每次插入后都会自动切换成使用F1-F12的模式,而不是功能键。实现两者切换的逻辑更加复杂,但我暂时没有需求,就不再深入研究了。

本文由博客一文多发平台 OpenWrite 发布!

相关推荐
Ribou33 分钟前
Ubuntu 24.04.2安装k8s 1.33.4 配置cilium
linux·ubuntu·kubernetes
tan180°1 小时前
Boost搜索引擎 网络库与前端(4)
linux·网络·c++·搜索引擎
Mr. Cao code2 小时前
Docker:颠覆传统虚拟化的轻量级革命
linux·运维·ubuntu·docker·容器
抓饼先生2 小时前
Linux control group笔记
linux·笔记·bash
挺6的还3 小时前
25.线程概念和控制(二)
linux
您的通讯录好友3 小时前
conda环境导出
linux·windows·conda
代码AC不AC4 小时前
【Linux】vim工具篇
linux·vim·工具详解
码农hbk4 小时前
Linux signal 图文详解(三)信号处理
linux·信号处理
bug攻城狮4 小时前
Skopeo 工具介绍与 CentOS 7 安装指南
linux·运维·centos
宇宙第一小趴菜5 小时前
08 修改自己的Centos的软件源
linux·运维·centos