如何使用 udev 設定 USB 鍵盤的重複率?

如何使用 udev 設定 USB 鍵盤的重複率?

如何獲得適用於熱插拔 USB 鍵盤的鍵盤重複率?

我做了一個udev規則來設定鍵盤重複延遲和速率,/etc/udev/rules.d/99-usb-keyboard.rules內容如下:

ACTION=="add", SUBSYSTEM=="usb", RUN+="/home/michael/bin/keyboard_settings.sh"

鍵盤設定.sh:

#!/bin/bash

# Set keyboard repeat delay and rate
xset -display :0.0 r rate 250 40

udev 似乎看到了這一點,使用指令udevadm test /sys/bus/usb/devices/3-2\:1.0/

read rules file: /etc/udev/rules.d/99-usb-keyboard.rules
rules contain 393216 bytes tokens (32768 * 12 bytes), 37438 bytes strings
31709 strings (264322 bytes), 28154 de-duplicated (230440 bytes), 3556 trie nodes used
IMPORT builtin 'hwdb' /lib/udev/rules.d/50-udev-default.rules:11
RUN '/home/myuser/bin/keyboard_settings.sh' /etc/udev/rules.d/99-usb-keyboard.rules:1
unable to create temporary db file '/run/udev/data/+usb:3-2:1.0.tmp': Permission denied
ACTION=add
DEVPATH=/devices/pci0000:00/0000:00:14.0/usb3/3-2/3-2:1.0
DEVTYPE=usb_interface
DRIVER=usbhid
ID_VENDOR_FROM_DATABASE=Hewlett-Packard
INTERFACE=3/1/1
MODALIAS=usb:v03F0p0325d0102dc00dsc00dp00ic03isc01ip01in00
PRODUCT=3f0/325/102
SUBSYSTEM=usb
TYPE=0/0/0
USEC_INITIALIZED=4145997461
run: '/home/myuser/bin/keyboard_settings.sh'

然而,這實際上並沒有改變重複率。筆記型電腦鍵盤的設定正確,但外接 USB 鍵盤的設定不正確。應用 udev 規則後,Xorg 是否會覆蓋設定?我怎麼才能找到答案?

我在 Xorg.0.log 中看到這一點,表明 X11 正在處理一些事情,但沒有任何規則/usr/share/X11/xorg.conf.d/對鍵盤做任何事情。

[164570.705] (II) config/udev: Adding input device Lite-On Technology Corp. HP Basic USB Keyboard (/dev/input/event6)
[164570.705] (**) Lite-On Technology Corp. HP Basic USB Keyboard: Applying InputClass "evdev keyboard catchall"
[164570.705] (**) Lite-On Technology Corp. HP Basic USB Keyboard: Applying InputClass "Keyboard Defaults"
[164570.705] (II) Using input driver 'evdev' for 'Lite-On Technology Corp. HP Basic USB Keyboard'
[164570.705] (**) Lite-On Technology Corp. HP Basic USB Keyboard: always reports core events
[164570.705] (**) evdev: Lite-On Technology Corp. HP Basic USB Keyboard: Device: "/dev/input/event6"
[164570.705] (--) evdev: Lite-On Technology Corp. HP Basic USB Keyboard: Vendor 0x3f0 Product 0x325
[164570.705] (--) evdev: Lite-On Technology Corp. HP Basic USB Keyboard: Found keys
[164570.705] (II) evdev: Lite-On Technology Corp. HP Basic USB Keyboard: Configuring as keyboard
[164570.705] (**) Option "config_info" "udev:/sys/devices/pci0000:00/0000:00:14.0/usb3/3-2/3-2:1.0/input/input34/event6"
[164570.705] (II) XINPUT: Adding extended input device "Lite-On Technology Corp. HP Basic USB Keyboard" (type: KEYBOARD, id 11)
[164570.705] (**) Option "xkb_rules" "evdev"
[164570.705] (**) Option "xkb_model" "pc105"
[164570.705] (**) Option "xkb_layout" "us"

答案1

不要為此使用 udev。


注意:以下僅適用於最新版本的 Xorg,請參閱這個變化從2020年開始。

對於較舊的 Xorg,您可以使用-ardelay-arinterval命令列選項;如果您正在使用xdm,則可以將這些選項新增至/etc/X11/xdm/Xservers.

如果您正在使用gdm3(正在使用硬連線的 Xorg 命令列),我只能為您感到難過。


只需使用一個xorg.conf片段並在那裡設置重複率即可。

% cat /etc/X11/xorg.conf.d/99-keyboard.conf
Section "InputClass"
        Identifier "system-keyboard"
        MatchIsKeyboard "on"
        # Option "XkbLayout"  set in /etc/default/keyboard
        # Option "XkbOptions" ditto
        Option "AutoRepeat" "250 50"
EndSection

答案2

因此,在網上挖掘了一年之後,我今天終於讓它工作了。

來源:https://newbedev.com/udev-rule-to-auto-load-keyboard-layout-when-usb-keyboard-plugged-in

xset是一個X11程式。因此,您必須對DISPLAYXAUTHORITYenv 變數進行硬編碼。

基本上,解決方法是在背景短暫延遲運行腳本。因此 udev 可以在 xset 鍵盤之前啟動鍵盤。在上面提到的解決方案中,udev 呼叫一個腳本,該腳本又在後台調用第二個腳本,然後該腳本調用xset.事實上,這可以縮短為一個腳本。

/home/michael/bin/keyboard_settings.sh

#!/usr/bin/env bash

(
    sleep 1

    DISPLAY=":0.0"
    XAUTHORITY="/home/your-profile/.Xauthority"
    export DISPLAY XAUTHORITY

    xset r rate 250 50
) &

相關內容