部分聯(lián)想鍵盤F1-F12的問題
可能是因?yàn)镕1-F12對非程序員用處不大翼闽,部分鍵盤會(huì)在F1-F12的位置定義一些功能鍵母剥,如調(diào)節(jié)音量漱办、屏幕亮度等苇羡,日常需要同時(shí)按下Fn和相應(yīng)的鍵才能觸發(fā)F1-F12的功能绸吸。筆記本內(nèi)置鍵盤和絕大多數(shù)的外接鍵盤都在硬件層面實(shí)現(xiàn)了FnLk的功能,即通過同時(shí)按下Esc+Fn
的方式切換這些鍵的默認(rèn)行為,就像大小寫鎖定一樣锦茁。但是聯(lián)想的許多鍵盤的這種切換是通過Windows驅(qū)動(dòng)來實(shí)現(xiàn)的攘轩,這就意味著macOS和Linux無法方便地進(jìn)行這個(gè)切換。對于程序員而言码俩,功能鍵可有可無度帮,但是F1-F12顯然是必要的,也就是要把這些鍵的默認(rèn)行為切換到F1-F12稿存。
解決方法
所幸笨篷,GitHub倉庫 https://github.com/lentinj/tp-compact-keyboard 已經(jīng)提供了解決某些型號(hào)鍵盤的工具,基本原理是抓包分析驅(qū)動(dòng)向鍵盤發(fā)出的指令瓣履,然后通過終端命令發(fā)出同樣的指令率翅,或者編寫相應(yīng)的udev規(guī)則。目前確認(rèn)可行的鍵盤有:
- USB鍵盤:
- Thinkpad Compact USB keyboard with Trackpoint (KU-1255)
- Lenovo Low Profile USB Keyboard (LXH-JME2209U)
- 藍(lán)牙鍵盤
我實(shí)際測試的就是上面的LXH-JME2209U袖迎。首先拉取倉庫冕臭,在tp-compact-usb-keyboard
下,執(zhí)行make
燕锥,就得到了可執(zhí)行文件tp-compact-usb-keyboard
辜贵。由于修改鍵盤的默認(rèn)行為始終需要root權(quán)限,這里我推薦將可執(zhí)行文件移動(dòng)到/usr/local/bin
下归形,這樣就可以直接在終端中執(zhí)行了念颈。在有多個(gè)鍵盤時(shí)(比如對筆記本使用外接鍵盤),可以在/dev
下查看并進(jìn)行嘗試连霉,確認(rèn)鍵盤的設(shè)備名:
# 編譯并移動(dòng)到/usr/local/bin
make
sudo mv tp-compact-usb-keyboard /usr/local/bin
# 查看鍵盤設(shè)備名榴芳,以下是我的輸出,其中hidraw2是目標(biāo)鍵盤
ls /dev | grep hidraw
hidraw0
hidraw1
hidraw2
hidraw3
# 執(zhí)行命令跺撼,確認(rèn)是否生效(第一次需要依次嘗試確認(rèn)是哪個(gè)名稱)
sudo tp-compact-usb-keyboard /dev/hidraw2
然后窟感,我們就可以編寫相應(yīng)的udev規(guī)則,使得鍵盤在插入時(shí)自動(dòng)執(zhí)行這個(gè)命令歉井。在/etc/udev/rules.d
下新建一個(gè)文件柿祈,如99-custom-keyboard.rules
,寫入以下內(nèi)容(需要替換其中的/path/to
哩至,如我上述的/usr/local/bin
):
SUBSYSTEM=="hidraw", ATTRS{idVendor}=="17ef", ATTRS{idProduct}=="6018", RUN+="/path/to/tp-compact-usb-keyboard %E{DEVNAME}"
對于我的鍵盤躏嚎,不需要修改前面的參數(shù)。具體的參數(shù)可以通過lsusb
查看菩貌,如下所示:
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
子系統(tǒng)后的確實(shí)是6018和17ef的參數(shù)值卢佣,說明我們的udev規(guī)則是正確的。然后箭阶,我們刷新udev規(guī)則虚茶,就可以在插入鍵盤時(shí)自動(dòng)執(zhí)行命令了:
sudo udevadm control --reload-rules
sudo udevadm trigger
這樣的結(jié)果是戈鲁,鍵盤每次插入后都會(huì)自動(dòng)切換成使用F1-F12的模式,而不是功能鍵嘹叫。實(shí)現(xiàn)兩者切換的邏輯更加復(fù)雜婆殿,但我暫時(shí)沒有需求,就不再深入研究了罩扇。
本文由博客一文多發(fā)平臺(tái) OpenWrite 發(fā)布婆芦!