
¿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.rules
con 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 -ardelay
y ; -arinterval
Si 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.conf
fragmento 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
xset
es un programa X11. Entonces tendrás que codificar las variables DISPLAY
y XAUTHORITY
env.
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
) &