Ich versuche, einen Minitel in einen Computer mit einem Himbeer-Pi zu verwandeln.
Dies ist ein Minitel:
Also habe ich die Matrix der Minitel-Tastatur auf eine USB-Tastatur-Platine gelötet:
Alles funktioniert in Ordnung, ich erhalte einige Tasten von meiner benutzerdefinierten Tastatur. Ich muss nur die Tasten entsprechend neu zuordnen.
Daher versuche ich, ein Programm zu erstellen, das mich a
auffordert, den entsprechenden Schlüsselcode zu drücken und einzufangen und dann mit allen Tasten meiner benutzerdefinierten Tastatur eine xmodmap-Datei zu erstellen.
Das einzige Problem, das ich habe, ist, dass ich nicht herausfinden kann, wie ich diesen Schlüsselcode bekommen kann (und nur das!). Ich habe es versucht, xev
aber es werden zu viele Daten angezeigt, um sie herauszufiltern.
Ich weiß, dass ich alle Schlüsselcodes von Hand verfolgen kann, aber ich werde 10 Minitels umwandeln, also würde ich einen schnelleren Weg bevorzugen!
quelle
Antworten:
Ich gehe davon aus, dass Sie versuchen, dies in Shell oder ähnlichem zu tun (ansonsten würden Sie die X-Bibliotheken direkt verwenden). In diesem
xinput --test «device-name»
Fall ist das Parsen möglicherweise viel einfacher.Leider ist es wirklich nicht Shell-Scripting-freundlich. Aber Sie können damit arbeiten
stdbuf
. Es läuft, bis Sie es töten, aber Ihr Shell-Skript könnte es weiterleitenread
.Sie können also Folgendes tun:
Sie müssen den richtigen Tastaturnamen anstelle von "AT Translated Set 2 keyboard" verwenden. Sie finden es mit
xinput list
:Leider müssen Sie ein bestimmtes Gerät verwenden - Sie können die Haupttastatur nicht verwenden.
(Außerdem müssen Sie einen Weg finden, um die Eingabe von x zu beenden, oder sich damit zufrieden geben, Control-C zu drücken, wenn Sie alle Schlüssel eingegeben haben. Wahrscheinlich möchten Sie mehr Schlüssel als qwerty auflisten. )
quelle
id
Tastatur anstelle ihres Namens verwendet, weil ich Konflikte mit zwei gleichen Namen hatte. Also,xinput test 18
wo 18 ist die ID meiner Tastatur.test.c
, wie die relevante Funktion aussiehtprint_events
. Vielleicht würde xorg einen Patch nehmen, um eine Flagge hinzuzufügen, die nach n Ereignissen stoppt ?xinput --query-state
gibt den aktuellen Status an und verlässt ihn sofort. Sie könnten eine Besetztschleife ausführen.