Ich habe eine Datei namens ~ / .speedswapper, die Folgendes enthält:
! Swap caps lock and escape
remove Lock = Caps_Lock
keysym Escape = Caps_Lock
keysym Caps_Lock = Escape
add Lock = Caps_Lock
... wenn ich renne xmodmap ~/.speedswapper
, werden die Tasten escund umgeschaltet Caps Lock. Ich habe diese Zeile in meinem ~ / .profile, so dass bei jeder Anmeldung diese Schlüssel gewechselt werden.
Allerdings , wenn ich in einer externen USB - Tastatur anschließen, ist diese Einstellung nicht scheinen , bestehen bleiben. Die Tastatur meines Laptops funktioniert einwandfrei, aber ich muss den Befehl erneut ausführen, damit die externe Tastatur die beiden Tasten wechselt. Glücklicherweise scheint dies die Tastatur meines Laptops nicht zu beeinträchtigen - sie scheinen sich zu synchronisieren.
Eine Lösung wäre, einen Weg zu finden, um diesen xmodmap-Befehl auszuführen, wenn eine externe Tastatur angeschlossen ist, aber ich wäre offen für eine andere Tastenwechsellösung, wenn sie robuster wäre. Betriebssystem ist Ubuntu 13.04.
Angesichts des Kommentars von justbrowsing sieht es so aus, als ob dies durch das Schreiben einer udev-Regel erreicht werden kann. Ich denke, ich muss die RUN-Option verwenden und sie sollte auf / dev / hidraw0 oder / dev / hidraw1 ausgelöst werden erscheint, wenn ich meine Tastatur anschließe ... aber ich versuche immer noch, mich mit dem Konzept zu beschäftigen, daher würde ich mich über jede Hilfe von jemandem freuen, der weiß, was er mit udev macht.
Antworten:
Da Sie diesen Befehl in Ihrem haben
~/.profile
, wird er beim Anmelden nur einmal ausgeführt. Eine nicht sehr elegante Lösung besteht darin, den Befehl~/.bashrc
stattdessen in Ihren Befehl einzufügen, damit er jedes Mal ausgeführt wird, wenn Sie ein Terminal öffnen.Eine bessere Lösung wäre, eine
udev
Regel zu definieren , die ausgeführt wird,xmodmap
wenn Ihre USB-Tastatur eingesteckt wird (ich verwende die für meine USB-Tastatur zurückgegebenen Werte, Sie müssen diese Lösung bearbeiten, um sie an Ihre anzupassen):Holen Sie sich die Details Ihrer USB-Tastatur. Führen Sie diesen Befehl mit angeschlossener Tastatur aus:
Um
udev
Regeln zu schreiben , müssen Sie wissen, mit welchen Regeln sie übereinstimmen sollen. Sie können dies erreichen, indem Sie die Ausgabe vonudevadm info --export-db
nach demevent6
Eintrag durchsuchen oder ihn direkt wie folgt analysieren:Das gibt mehrere Textzeilen zurück, einschließlich der folgenden, die wir verwenden werden:
udev
wird kompliziert bei der Verwendung von X-Programmen wiexmodmap
, ich konnte es beim Exportieren nicht einmal zum Laufen bringen$DISPLAY
und$XAUTHORITY
. Wie auch immer, ich konnte es nicht mit Ihrer Methode zum Laufen bringen, also verwendet meine Lösungkeymap
stattdessen. Zuerst müssen Sie die Schlüsselcodes für Escund herausfinden, und Caps LockSie können dies tun, indem Sie ausführenund dann die entsprechenden Tasten drücken. Auf meinem System gibt dies Folgendes zurück:
Erstellen Sie eine neue Keymap-Regel mit folgenden Zeilen:
und speichern Sie es als
/lib/udev/keymaps/speedswap
.Definieren Sie eine neue
udev
Regel. Erstellen Sie eine Datei mit dem Namen/etc/udev/rules.d/95-speedswap.rules
und fügen Sie diese Zeilen hinzu:Das sollte es tun, zumindest auf meinem System, wenn ich meinen externen USB-Anschluss anschließe, verhält Esces sich wie Caps Lockund umgekehrt .
quelle
udevadm info --export-db
mit ein paar Tastaturen zu versuchen und zu sehen, was sie gemeinsam haben. VielleichtID_MODEL=USB_Keykoard
oderID_USB_DRIVER=usbhid
aber das könnte auch die Regel mit dem falschen Gerät auslösen. Wie du willst.