Wie kann ich die Wiederholungsrate einer USB-Tastatur mit udev einstellen?

Wie kann ich die Wiederholungsrate einer USB-Tastatur mit udev einstellen?

Wie kann ich meine Tastaturwiederholrate auf eine Hotplug-USB-Tastatur anwenden?

Ich habe eine Udev-Regel zum Festlegen der Wiederholungsverzögerung und -rate der Tastatur /etc/udev/rules.d/99-usb-keyboard.rulesmit folgendem Inhalt erstellt:

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

keyboard_settings.sh:

#!/bin/bash

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

udev scheint dies zu erkennen und verwendet den Befehludevadm 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'

Und doch ändert dies nicht wirklich die Wiederholungsrate. Die Laptop-Tastatur hat die richtigen Einstellungen, die externe USB-Tastatur jedoch nicht. Überschreibt Xorg die Einstellungen, nachdem die Udev-Regel angewendet wurde? Wie kann ich das herausfinden?

Ich erhalte dies im Xorg.0.log, was darauf hinweist, dass X11 Probleme hat, aber keine der darin enthaltenen Regeln hat /usr/share/X11/xorg.conf.d/Auswirkungen auf die Tastaturen.

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

Antwort1

Verwenden Sie hierfür NICHT udev.


BEACHTEN:Folgendes funktioniert nur in neueren Versionen von Xorg, siehedieser Wandelab 2020.

Bei einem älteren Xorg können Sie die Befehlszeilenoptionen -ardelayund verwenden. Wenn Sie verwenden , können Sie diese Optionen zu hinzufügen .-arintervalxdm/etc/X11/xdm/Xservers

Wenn Sie verwenden gdm3(was die Verwendung einer fest verdrahteten Xorg-Befehlszeile bedeutet), kann ich nur mit Ihnen mitfühlen.


Verwende einfach ein xorg.confSnippet und stelle dort die Wiederholungsrate ein.

% 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

Antwort2

Nachdem ich ein Jahr lang im Internet herumgesucht hatte, habe ich es heute endlich zum Laufen gebracht.

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

xsetist ein X11-Programm. Sie müssen also die DISPLAYUmgebungsvariablen XAUTHORITYfest codieren.

Der Workaround besteht im Wesentlichen darin, das Skript mit einer kurzen Verzögerung im Hintergrund auszuführen. So kann udev die Tastatur aktivieren, bevor Sie xset für die Tastatur verwenden. In der oben genannten Lösung ruft udev ein Skript auf, das wiederum ein zweites Skript im Hintergrund aufruft, das dann aufruft xset. Tatsächlich kann dies auf ein Skript verkürzt werden.

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

verwandte Informationen