¿Cómo puedo configurar la velocidad de repetición del teclado USB con udev?

¿Cómo puedo configurar la velocidad de repetición del teclado USB con udev?

¿Cómo puedo hacer que la frecuencia de repetición de mi teclado se aplique a un teclado USB conectado en caliente?

Hice una regla udev para configurar el retardo y la velocidad de repetición del teclado, /etc/udev/rules.d/99-usb-keyboard.rulescon el siguiente contenido:

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

configuración_teclado.sh:

#!/bin/bash

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

udev parece ver esto, usando el comandoudevadm 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'

Y, sin embargo, esto en realidad no cambia la tasa de repetición. El teclado del portátil tiene la configuración correcta, pero el teclado USB externo no. ¿Xorg sobrescribe la configuración después de aplicar la regla udev? ¿Cómo puedo saberlo?

Recibo esto en Xorg.0.log, lo que indica que X11 está trabajando con cosas, pero ninguna de las reglas /usr/share/X11/xorg.conf.d/hace nada con los teclados.

[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"

Respuesta1

NO uses udev para eso.


AVISO:lo siguiente sólo funciona en versiones recientes de Xorg, consulteeste cambioa partir de 2020.

Con un Xorg antiguo, puedes usar las opciones de línea de comando -ardelayy ; -arintervalSi estás usando xdm, puedes agregar esas opciones a /etc/X11/xdm/Xservers.

Si estás usando gdm3(que está usando una línea de comando Xorg cableada), solo puedo sentir por ti.


Simplemente use un xorg.conffragmento y establezca la tasa de repetición allí.

% 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

Respuesta2

Finalmente, después de buscar en la red durante un año, lo logré funcionar hoy.

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

xsetes un programa X11. Entonces tendrás que codificar las variables DISPLAYy XAUTHORITYenv.

Básicamente, la solución es ejecutar el script en segundo plano con un breve retraso. Entonces udev puede activar el teclado antes de configurarlo. En la solución mencionada anteriormente, udev llama a un script que a su vez llama a un segundo script en segundo plano que luego llama xset. De hecho, esto se puede reducir a un solo guión.

/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
) &

información relacionada