首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何用udev设定USB键盘的重复频率?

如何用udev设定USB键盘的重复频率?
EN

Unix & Linux用户
提问于 2014-03-27 21:41:36
回答 2查看 2.6K关注 0票数 6

如何使我的键盘重复率应用于热插拔USB键盘?

我制定了一个udev规则来设置键盘重复延迟和速率,/etc/udev/rules.d/99-usb-keyboard.rules的内容如下:

代码语言:javascript
运行
复制
ACTION=="add", SUBSYSTEM=="usb", RUN+="/home/michael/bin/keyboard_settings.sh"

keyboard_settings.sh:

代码语言:javascript
运行
复制
#!/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/

代码语言:javascript
运行
复制
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键盘没有。Xorg是否在应用udev规则之后覆盖设置?我怎么知道呢?

我在Xorg.0.log中得到了这样的结果,这表明X11对事情很挑剔,但是/usr/share/X11/xorg.conf.d/中的任何规则都不会对键盘做任何事情。

代码语言:javascript
运行
复制
[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"
EN

回答 2

Unix & Linux用户

发布于 2021-09-20 13:33:49

不要使用udev。

注意:以下内容仅适用于Xorg的最新版本,请参阅2020年的这一变化

使用旧的Xorg,可以使用-ardelay-arinterval命令行选项;如果使用xdm,则可以将这些选项添加到/etc/X11/xdm/Xservers中。

如果您使用的是gdm3 (它使用的是硬连接的Xorg命令行),我只能感觉到您的感受。

只需使用一个xorg.conf片段,并在那里设置重复频率。

代码语言:javascript
运行
复制
% 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
票数 4
EN

Unix & Linux用户

发布于 2021-09-20 11:13:09

最后,在网络上挖了一年之后,我终于让它今天开始工作了。

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

xset是一个X11程序。因此,您必须硬编码DISPLAYXAUTHORITY env变量。

基本上,解决办法是在后台运行脚本,延迟时间很短。所以udev可以在你设置键盘之前激活键盘。在上面提到的解决方案中,udev调用脚本,然后调用后台的第二个脚本,然后调用xset。实际上,这可以缩短为一个脚本。

/home/michael/bin/keysetings.sh

代码语言:javascript
运行
复制
#!/usr/bin/env bash

(
    sleep 1

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

    xset r rate 250 50
) &
票数 1
EN
页面原文内容由Unix & Linux提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://unix.stackexchange.com/questions/121858

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档