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 .
- Sie sollten
rizumu
ersetzen mit Ihrem Benutzernamen, da ich festgestellt habe, dass dies nicht möglich ist, ohne explizit zu sein. - Stellen Sie sicher, dass Sie die
your
eingeben Tastaturname. - Verwenden Sie
lsusb
um die Hardware-ID zu ermitteln, die Sie in der udev-Regel festlegen müssen. Meine Das-Tastatur sieht so ausBus 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.