
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.rules
mit 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 -ardelay
und verwenden. Wenn Sie verwenden , können Sie diese Optionen zu hinzufügen .-arinterval
xdm
/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.conf
Snippet 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
xset
ist ein X11-Programm. Sie müssen also die DISPLAY
Umgebungsvariablen XAUTHORITY
fest 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
) &