Ich arbeite häufig an Pairing-Stationen, auf denen mehrere Tastaturen installiert sind. Ich kann setxkbmap
mit -device <ID>
das Layout für eine bestimmte Tastatur festlegen (unter Verwendung einer ID vonxinput
), aber oft ist nicht klar, auf welcher Tastatur ich mich befinde. Es ist besser, das Hin und Her zu vermeiden, beide Tastaturen auszuprobieren. Daher möchte ich ein schnelles Tool schreiben, um diese Informationen zu erhalten setxkbmap
. Ich würde einen typischen Anwendungsfall wie den folgenden erwarten:
$ setxkbmap -device "$(get-keyboard-id)" -layout gb
Press Enter to detect keyboard ID
Welche Schnittstelle bietet diese Informationen unter Linux? Idealerweise sollte es ohne X funktionieren, aber das ist keine Voraussetzung (es scheint nicht viele Tools zu geben, die dies ohne X unterstützen).
Bisherige Ergebnisse:
- Linux muss wissen, auf welcher Tastatur ich tippe, um verschiedene Layouts für mehrere Tastaturen gleichzeitig zu unterstützen.
xinput
→ list.c →list_xi2
→XIQueryDevice
liefert Geräte-IDs, die von verwendet werden könnensetxkbmap
.showkey
undxev
drucken Sie keine Tastatur-IDs.xinput list-props $ID
Zeigt an, wohin Tastaturereignisse gesendet werden . Verwendung jedoch Code aus einer anderen Antwort scheint es , dieses Gerät nichts druckt die Tastatur zu identifizieren.Eine fast mögliche Lösung besteht darin,
xinput --test <ID> &
für jede Tastatur-ID zu prüfen, welche zuerst etwas zurückgibt. Das Problem dabei ist, herauszufinden, welche "Tastaturen" tatsächlich Tastaturen sind:$ xinput | grep keyboard ⎣ Virtual core keyboard id=3 [master keyboard (2)] ↳ Virtual core XTEST keyboard id=5 [slave keyboard (3)] ↳ Power Button id=6 [slave keyboard (3)] ↳ Video Bus id=7 [slave keyboard (3)] ↳ Power Button id=8 [slave keyboard (3)] ↳ Sleep Button id=9 [slave keyboard (3)] ↳ WebCam SC-13HDL10931N id=10 [slave keyboard (3)] ↳ AT Translated Set 2 keyboard id=11 [slave keyboard (3)]
less -f /dev/input/eventX
eine Taste auf der entsprechenden Tastatur drücken, sollte "Garbage" angezeigt werden, sodass Ihre Tastendrücke in der Tat in eine Dev-Datei und nicht in die anderen geleitet werden.Antworten:
Gerät deaktivieren
Hier ist eine Idee, um herauszufinden, welche Tastatur welche ist. Mit dem Befehl xinput können Sie Geräte aktivieren und deaktivieren.
Beispiel
Die obige Ausgabe zeigt die verschiedenen Geräte, die ich auf meinem Thinkpad-Laptop habe. Ich habe nur 1 Tastatur angeschlossen, diese:
Sehen Sie sich nun die Eigenschaften an, die über dieses Gerät verfügbar sind:
Anhand der obigen Abbildung können Sie sehen, dass es aktiviert ist. Deaktivieren Sie es also:
So aktivieren Sie es:
Die Idee?
Mit diesem Befehl können Sie eine der Tastaturen deaktivieren, um festzustellen, auf welcher Sie sich befinden.
Verweise
quelle
Die Frage klingt etwas widersprüchlich, da Sie X-Tools zitieren, aber nach einer Lösung fragen, die "idealerweise ohne X funktionieren sollte".
Über Ihre 4 th Befund:
xinput
gibt Ihnen die KorrespondenzZumindest mit der folgenden Version
Erster Schritt: Erkennen des Tastaturereignisgeräts in C
Vielen Dank an diese Seite . Ich habe die meisten Sicherheitsüberprüfungen aus dem Code entfernt, den ich dort aus Gründen der Klarheit ausgeliehen habe. In echtem Code möchten Sie sie wahrscheinlich haben.
Beachten Sie, dass die Tastendrücke wiederholt werden. Sie können den Benutzer also auffordern, eine Modifikatortaste (Umschalttaste, Steuerungstaste ...) anstelle einer beliebigen Taste zu drücken.
Zweiter Schritt: Verwenden Sie xinput, um die X-ID aus dem Gerätenamen abzurufen
Kompilieren Sie die obige C-Quelle und verwenden Sie diese Methode:
xinput list --id-only "keyboard:$(sudo ./a.out /dev/input/event*)"
quelle
/dev/input/by-id
/dev/input/event*
- ich habe es versucht,tail
aber ohne Erfolg.Mehr Graben ergab eine andere Lösung mit einfachen Bash und einem normalen Benutzerkonto. Skript :
quelle