GNU/Linux >> LINUX-Kenntnisse >  >> Linux

udev-Regel zum automatischen Laden des Tastaturlayouts, wenn eine USB-Tastatur angeschlossen ist

Ich habe einen Weg gefunden, dies zu umgehen, obwohl es ein wenig hackig ist.

Ich bin heute genau an den gleichen Punkt gekommen, als ich versuchte, zwei Tastaturen mit udev, setxkbmap und xinput --list einzurichten und sie mit USB-Hotplugging zu betreiben. Ich vertausche die Tasten, ohne das Layout zu ändern, aber es ist alles gleich, sobald Sie Ihre Tastatur auf einem Hotplug identifiziert haben und setxkbmap bedingt aufrufen können, sollten Sie in der Lage sein, die Sprache nur der von Ihnen angegebenen Tastatur einzustellen . Die Liste der Tastaturlayouts finden Sie hier ls -l /usr/share/kbd/keymaps/i386/ und Sie können Ihren Gerätenamen mit xinput -list finden .

  1. Sie sollten rizumu ersetzen mit Ihrem Benutzernamen, da ich festgestellt habe, dass dies nicht möglich ist, ohne explizit zu sein.
  2. Stellen Sie sicher, dass Sie die your eingeben Tastaturname.
  3. Verwenden Sie lsusb um die Hardware-ID zu ermitteln, die Sie in der udev-Regel festlegen müssen. Meine Das-Tastatur sieht so aus Bus 002 Device 009: ID 04d9:2013 Holtek Semiconductor, Inc.

Ich richte zuerst die udev-Regel ein, um die Tastatur automatisch zu erkennen, indem ich eine udev-Regel erstelle:

In der Datei /etc/udev/rules.d/00-usb-keyboards.rules :

ACTION=="add", ATTRS{idVendor}=="04d9", ATTRS{idProduct}=="2013", RUN+="/home/rizumu/bin/kbd_udev", OWNER="rizumu"

Ich habe zwei Dateien ~/bin/kbd und ~/bin/kbd_udev. Stellen Sie sicher, dass sie die richtigen Berechtigungen haben chmod 755 ~/bin/kbd*

Die ~/bin/kbd_udev Skript enthält:

#!/bin/bash
/home/rizumu/bin/kbd &

Und Sie werden feststellen, dass es nur ~/bin/kbd aufruft im Hintergrund, damit udev seinen Vorgang abschließen und die Tastatur aktivieren kann. Innerhalb der ~/bin/kbd Skript schlafen wir für eine Sekunde, weil wir warten müssen, bis die Tastatur aktiviert wird, damit wir die Geräte-ID mit xinput erhalten können. Um dies zu erreichen, habe ich einige Variablen gesetzt und exportiert, damit xinput setxkbmap ihre Arbeit erledigen kann:DISPLAY , XAUTHORITY , HOME , und ein daskb_id für die id meines daskeyboards:

#!/bin/bash
sleep 1
DISPLAY=":0.0"
HOME=/home/rizumu/
XAUTHORITY=$HOME/.Xauthority
export DISPLAY XAUTHORITY HOME
daskb_id=`xinput -list | grep -i 'daskeyboard' | grep -o id=[0-9]. | grep -o [0-9]. | head -1`

xset r rate 200 30
setxkbmap -layout colemak
setxkbmap -option ctrl:nocaps
if [ "${daskb_id}" ]; then
    setxkbmap -device "${daskb_id}" -option altwin:swap_lalt_lwin
fi

Abhängig von Ihrer Distribution haben Sie möglicherweise bereits eine udev-Regel für Tastaturen in /lib/udev/rules.d/64-xorg-xkb.rules. Unter Ubuntu importiert dies /etc/default/keyboard, das ungefähr folgende Optionen hat:

XKBMODEL="pc105"
XKBLAYOUT="us"
XKBVARIANT=""
XKBOPTIONS=""

Bei meinem Setup stellte ich fest, dass diese integrierte Regel nach meiner benutzerdefinierten udev-Regel ausgeführt wurde und meine Einstellungen überschrieb. Stattdessen habe ich XKBOPTIONS in /etc/default/keyboard geändert in:

XKBOPTIONS="-option ctrl:nocaps"

Um das "Caps Lock is Control"-Verhalten zu erhalten, das ich auf allen Tastaturen haben wollte.


Wenn Sie GNOME ausführen, müssen Sie das Plugin für die Tastaturverwaltung deaktivieren, damit es Ihre Layoutänderungen nicht überschreibt.

gconftool-2 --toggle /apps/gnome_settings_daemon/plugins/keyboard/active

Führen Sie denselben Befehl erneut aus, um ihn wie gewünscht zu aktivieren.


Linux
  1. Wie löst man ein Ereignis im Shell-Skript aus, wenn ein USB-Gerät entfernt wird?

  2. Zusammenhang von Tastaturlayout und Xmodmap?

  3. So führen Sie ein Skript aus, wenn USB-Geräte mit UDEV angeschlossen oder entfernt werden

  4. Linux:Ändern Sie das Tastaturlayout im Handumdrehen

  5. Xephyr-Tastaturlayout

Touchpad automatisch deaktivieren, wenn Maus in GNOME verbunden ist

Korrigieren Sie das falsche Tastaturlayout in Ubuntu

Notify-Send von einer Udev-Regel aufrufen?

Mit welchem ​​Tastaturlayout kann ich ç eingeben?

Verwenden von udev-Regeln zum Ausführen eines Skripts beim USB-Einstecken

Ändern Sie das Tastaturlayout von GRUB in Stufe 1