Ich stecke oft eine USB-Tastatur in meinen Laptop (zusätzlich zu einem externen Monitor und einer Maus, die meinen Laptop virtuell in einen Desktop-Computer verwandeln) und bevorzuge dann die Verwendung eines anderen Tastaturlayouts.
Ich muss das aktuelle Tastaturlayout jedes Mal manuell ändern, wenn ich diese USB-Tastatur einstecke.
Und ich würde gerne eine automatisierte Methode verwenden, wenn dies möglich ist.
Radus Antwort auf die Frage hier gibt einige Hinweise, aber es scheint, dass ich ein Startskript für diese Aufgabe benötige, da sich die Geräte-ID für meine USB-Tastatur jedes Mal ändert, wenn der Computer gestartet wird.
Dieses Startskript enthält wahrscheinlich zuerst den Befehl xinput -list | grep "USB Keyboard"
und einen weiteren Befehl, um die erste angezeigte USB-Tastatur-ID-Nummer abzurufen und dann im letzten Befehl das von mir gewählte Layout für diese USB-Tastatur wie folgt festzulegen:
setxkbmap -device <NUMBER> -layout <LAYOUT>
quelle
Antworten:
Nach ein wenig Recherche habe ich eine Lösung gefunden, obwohl ich immer noch offen für andere (wahrscheinlich bessere) Antworten bin.
Hier ist ein Startskript (das zu Startup Applications hinzugefügt werden kann ), das die maually eingegebene usbkbd_layout- Variable auf die in der xinput-Liste gefundene usbkbd- Geräte- ID setzt :
Dieses Skript ist sehr nützlich (und stabiler) für Szenarien, in denen der Benutzer den Laptop auf einem Desktop-Setup (mit externer Tastatur, Maus und Monitor usw.) verwendet. Es kann auch manuell ausgeführt werden, wenn die externe USB-Tastatur angeschlossen ist ...
=============================================== =======================
DIE BESSERE (fast perfekte) LÖSUNG - gefunden dank MinimusHeximus und den jeweiligen Mitwirkenden zu dem Thread, den er in seinem Kommentar unten erwähnt hat:
Ich kann jetzt einfach meine USB-Tastatur anschließen und das andere Tastaturlayout (TR-F) automatisch anwenden, wobei das Standard-Tastaturlayout (TR-Q) auf meinem Laptop erhalten bleibt!
Hier sind die Dateien und deren Inhalte, die dies ermöglichen:
/etc/udev/rules.d/00-usb-keyboard.rules
/home/sadi/.bin/usb-keyboard-in_udev
/home/sadi/.bin/usb-keyboard-in
/home/sadi/.bin/usb-keyboard-out_udev
/home/sadi/.bin/usb-keyboard-out
Anmerkungen:
chmod - 755 /home/sadi/.bin/usb-keyboard-*
UM DIESES SETUP AN VERSCHIEDENE ANFORDERUNGEN ANZUPASSEN:
lsusb
(zum Beispiel meinerlsusb
Ausgabe hat dies für meine USB - Tastatur:Bus 001 Device 006: ID 09da:0260 A4 Tech Co., Ltd
)xinput -list | grep "USB Keyboard"
gibt mir beispielsweise zwei Zeilen;↳ USB Keyboard id=14 [slave keyboard (3)]
und↳ USB Keyboard id=16 [slave keyboard (3)]
; die dann gefiltert werden,awk
indem "=" als Feldbegrenzer verwendet und der zweite Teil erfasst wird; dann nur der die ersten beiden Ziffern und dann nur den Wert in der ersten Zeile verwenden)quelle
IF
musste ich anstelle einer eine verwendenFOR
. Es funktioniert jetzt für mich, danke! gist.github.com/zvictor/193b567c14b5b6a679feInnerhalb der udev-Regel können X11-Treiberoptionen angegeben werden, es sind keine benutzerdefinierten Skripte erforderlich. Als Beispiel hier der Inhalt meiner /etc/udev/rules.d/99-usb-kbd.rules
Diese Regel stellt sicher, dass eine bestimmte USB-Tastatur in Xorg ein US-amerikanisches Layout verwendet (die interne Tastatur meines Laptops ist deutsch und dies ist auch mein primäres Layout). Wichtige Punkte:
idVendor
undidProduct
Ihr Gerät herausfindenlsusb
evtest
/usr/share/X11/xkb/symbols
. Achten Sie darauf, sowohl ein gültiges Layout als auch eine gültige Variante anzugeben./lib/udev/rules.d/64-xorg-xkb.rules
quelle
/var/log/Xorg.0.log
nach möglichen Problemen. Sie können auchudevadm info
überprüfen, ob die Einstellungen korrekt angewendet wurden.gsettings set org.gnome.settings-daemon.plugins.keyboard active false
. Wenn Sie auch eine solche Notiz hinzufügen möchten , werde ich versuchen , Ihnen so zu markieren , die Antwort (statt dieser plumpen, langer und steiniger Weg ;-)/usr/share/X11/xkb/rules/evdev.lst
Ich habe diese Lösung gerade für eine bépo Typematrix-Tastatur (französische Version von Optimized Excellent Dvorak) und in einem breiten Systemkontext (es wird vorausgesetzt, dass Sie einen Root-Zugriff auf die Maschine haben) verbessert. Es werden nur 3 Dateien benötigt, um zu arbeiten. Sie können eine Protokolldatei konsultieren, wenn Sie nicht herausfinden, was fehlerhaft ist.
/etc/udev/96-usb-keyboard.rules
/etc/udev/bepo-typematrix-kbd.sh (unbedingt erforderlich, um ein intermediäres Hintergrundskript zu verwenden)
/ etc / udev / bepo-typematrix-kbd
quelle
Nachdem ich viel rumgespielt habe, ist es das, was ich jetzt laufen habe. Vielleicht schreibe ich einen kompletten Artikel und veröffentliche den Code in einem Repository, wenn das von Interesse wäre.
Richten Sie einen neuen Regelsatz für udev ein:
Die Regel soll ein Shell-Skript aufrufen, wenn eine Aktion von einem Gerät mit der angegebenen Kombination aus Anbieter- und Produkt-ID ausgelöst wird.
Starten Sie den udev-Dienst nach dem Hinzufügen des neuen Regelsatzes neu:
Hinweis: Ich konnte keine zuverlässigen Ergebnisse erzielen, indem ich spezifischere Übereinstimmungsregeln in dieser Datei angegeben habe. Am wichtigsten ist, dass das Hinzufügen einer
ACTION
Übereinstimmungsregel nicht funktioniert hat. Soweit ich das beurteilen kann, wurde das Skript trotzdem ausgelöst. Beim HinzufügenACTION=="add"
wird das Skript beim Entfernen des Geräts weiterhin aufgerufen. Sehr seltsam und verwirrend.Die Aktion, die die udev-Regel ausgelöst hat, steht dem aufgerufenen Skript jedoch zur Verfügung (siehe unten).
Als nächstes das Skript selbst. Nicht ganz. Beachten Sie das
wrapper
Suffix im Dateinamen. Dies zeigt an, dass dies nicht das eigentliche Skript ist, sondern ein Wrapper, der das Skript aufruft und im Hintergrund ausführt, damit udev seinen Prozess beenden kann.~/.bin/switch-kb-layout-wrapper.sh
:Die Variable
ACTION
enthält die udev-Aktion, die vom Gerät ausgelöst wurde. Es liefert Werte wieadd
(Gerät wurde eingesteckt) undremove
(Gerät wurde entfernt). Wir werden diese später verwenden.~/.bin/switch-kb-layout.sh
:Ersetzen Sie meinen Benutzernamen durch Ihren, wenn Sie die
HOME
Variable setzen ($(whoami)
funktioniert hier nicht, da dies nicht von Ihrem Benutzer, sondern von aufgerufen wirdroot
).Zu Testzwecken habe ich einige Zeilen hinzugefügt, die bestimmte Ereignisse in einer Datei in meinem Ausgangsverzeichnis protokollieren, um festzustellen, ob alles funktioniert. Sie können diese sicher entfernen.
Schließlich müssen diese Skripte über Ausführungsberechtigungen verfügen. Es kann auch wichtig sein, zu beachten, dass diese Skripte vom
root
Benutzer aufgerufen werden. Seien Sie also vorsichtig, was Sie dort tun.quelle
gsettings set org.gnome.settings-daemon.plugins.keyboard active false
nicht wie vorgesehen funktioniert, da das Skript von ausgeführt wirdroot
. In meinen Tests hatte die Linie keinen Einfluss auf diese Einstellung.gsettings set org.gnome.settings-daemon.plugins.keyboard active false
ein für alle Mal als Benutzer auszuführen und dann dieses Skript ohne diegsettings set
Befehle zu verwenden ...Ich hatte ein Berechtigungsproblem mit dem von udev ausgeführten Skript. Ich habe mich mit sudo wie folgt aufgelöst:
Stellen Sie die Tastaturbelegung für jedes Gerät ein
quelle
Sie können es auch in einer Xorg-Konfigurationsdatei definieren.
Sie ist in dieser Stapelaustauschantwort aufgeführt: /superuser//a/946575/437492
quelle
/etc/X11/xorg.conf.d/
(das ist der richtige Ort).