staging.inyokaproject.org

Makrotasten einer Tastatur: Sind sie auf normale Tasten um zu wandeln?

Status: Ungelöst | Ubuntu-Version: Kubuntu 16.04 (Xenial Xerus)
Antworten |

Dark_Wolf

(Themenstarter)
Avatar von Dark_Wolf

Anmeldungsdatum:
12. August 2006

Beiträge: 2561

Das Script läuft an, Ausgabe gibt es keine, nur von USBMON direkt.

seahawk1986

Anmeldungsdatum:
27. Oktober 2006

Beiträge: 10978

Aber du lässt usbmon im Skript schon das richtige USB-Device auslesen?

seahawk1986

Anmeldungsdatum:
27. Oktober 2006

Beiträge: 10978

BTW: hast du mal mit evtest (aus dem gleichnamigen Paket) geschaut, ob es für die Makrotasten Scancodes gibt? Dann könnte man das ohne die Verrenkungen mit usbmon lösen.

Dark_Wolf

(Themenstarter)
Avatar von Dark_Wolf

Anmeldungsdatum:
12. August 2006

Beiträge: 2561

seahawk1986 schrieb:

Aber du lässt usbmon im Skript schon das richtige USB-Device auslesen?

Ja, da gibt es ja nur 0,1,2

Bus 002 Device 007: ID 09da:f68b A4Tech Co., Ltd. 
Bus 002 Device 006: ID 1131:1001 Integrated System Solution Corp. KY-BT100 Bluetooth Adapter
Bus 002 Device 005: ID 0738:1107 Mad Catz, Inc. 
Bus 002 Device 004: ID 051d:0002 American Power Conversion Uninterruptible Power Supply
Bus 002 Device 003: ID 046d:08ce Logitech, Inc. QuickCam Pro 5000
Bus 002 Device 002: ID 8087:0020 Intel Corp. Integrated Rate Matching Hub
Bus 002 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 001 Device 002: ID 8087:0020 Intel Corp. Integrated Rate Matching Hub
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Dachte zuerst das "Device 005" die Devicenummer ist. Wohl nicht. Auch werden die Codes von usbmon im Script ausgegeben. Hab dort ein echo eingebaut. Alles danach scheint nicht zu tun. 

seahawk1986 schrieb:

BTW: hast du mal mit evtest (aus dem gleichnamigen Paket) geschaut, ob es für die Makrotasten Scancodes gibt? Dann könnte man das ohne die Verrenkungen mit usbmon lösen.

Wenn ich das Programm auf dem event3 (Tastatur) laufen lasse und eine Makrotaste drücke, passiert überhaupt nichts. Aber das Programm selbst liest vorher codes aus. Hier die relevanten:

 Event code 92 (KEY_HENKAN)
    Event code 93 (KEY_KATAKANAHIRAGANA)
    Event code 94 (KEY_MUHENKAN)
    Event code 95 (KEY_KPJPCOMMA)
    Event code 96 (KEY_KPENTER)
    Event code 97 (KEY_RIGHTCTRL)
    Event code 98 (KEY_KPSLASH)
    Event code 99 (KEY_SYSRQ)
    Event code 183 (KEY_F13)
    Event code 184 (KEY_F14)
    Event code 185 (KEY_F15)
    Event code 186 (KEY_F16)
    Event code 187 (KEY_F17)
    Event code 188 (KEY_F18)
    Event code 189 (KEY_F19)
    Event code 190 (KEY_F20)
    Event code 191 (KEY_F21)
    Event code 192 (KEY_F22)
    Event code 193 (KEY_F23)
    Event code 194 (KEY_F24)

Hilft mir das weiter? Was ist mit xmodmap hilft das event. ?

seahawk1986

Anmeldungsdatum:
27. Oktober 2006

Beiträge: 10978

Dark_Wolf schrieb:

Auch werden die Codes von usbmon im Script ausgegeben. Hab dort ein echo eingebaut.

An welcher Stelle? Kannst du mal einen Beispieldatensatz posten, was da bei dir von usbmon kommt? Eventuell passt der reguläre Ausdruck zum Filtern nicht.

}}} seahawk1986 schrieb:

BTW: hast du mal mit evtest (aus dem gleichnamigen Paket) geschaut, ob es für die Makrotasten Scancodes gibt? Dann könnte man das ohne die Verrenkungen mit usbmon lösen.

Wenn ich das Programm auf dem event3 (Tastatur) laufen lasse und eine Makrotaste drücke, passiert überhaupt nichts.

Das würde ich ggf. noch mal mit gestopptem X-Server probieren - das wäre ja schön, wenn das einfach ganz normale Keys sind.

Hilft mir das weiter? Was ist mit xmodmap hilft das event. ?

Zeigt xev denn etwas, wenn du die Makrotasten drückst?

Dark_Wolf

(Themenstarter)
Avatar von Dark_Wolf

Anmeldungsdatum:
12. August 2006

Beiträge: 2561

seahawk1986 schrieb:

Dark_Wolf schrieb:

Auch werden die Codes von usbmon im Script ausgegeben. Hab dort ein echo eingebaut.

An welcher Stelle? Kannst du mal einen Beispieldatensatz posten, was da bei dir von usbmon kommt? Eventuell passt der reguläre Ausdruck zum Filtern nicht.

#!/bin/bash

USBDEV=2

read -t 1 TEST #test if pipe can be read
if [ "$TEST" == "" ]; then #no pipe
 usbmon -i $USBDEV -f0 | $0 & #pipe output to itself
 exit #done
fi

while read LINE ; do #read output of USB mon

echo $LINE

{
 if [[ $LINE =~ [0-f]+\ [0-9]+\ C\ [A-z]+:[0-9]+:[0-9]+\ 0\ 3\ =\ [0-9]+ ]]; then #only allow valid lines (ffff88022e422180 1759824841 C Ii:002:02 0 3 = 020000)
 {
  CODE=${LINE:47} #get key code from static position 

  case $CODE in #map key code
   20100)
    CODE="ctrl+F1"

Das würde ich ggf. noch mal mit gestopptem X-Server probieren - das wäre ja schön, wenn das einfach ganz normale Keys sind.

Nein da tut sich nichts.

Zeigt xev denn etwas, wenn du die Makrotasten drückst?

Ja das wär schön gewesen.

Das wär jetzt zweimal auf eine Makrotaste drücken und loslassen:

ffff880035210cc0 1877590091 C Ii:005:02 0 3 = 020400
ffff880035210cc0 1877590109 S Ii:005:02 -115 3 <
ffff880035210cc0 1877702094 C Ii:005:02 0 3 = 020000
ffff880035210cc0 1877702110 S Ii:005:02 -115 3 <
ffff880035210cc0 1877926095 C Ii:005:02 0 3 = 020400
ffff880035210cc0 1877926112 S Ii:005:02 -115 3 <
ffff880035210cc0 1878014123 C Ii:005:02 0 3 = 020000

Der Code stimmt mit dem im Script überein. die 20000 wird ignoriert.

Nachtrag: #only allow valid lines (ffff88022e422180 1759824841 C Ii:002:02 0 3 = 020000) Muss das mit dem oben übereinstimmen? Also das ffff88022e422180?

seahawk1986

Anmeldungsdatum:
27. Oktober 2006

Beiträge: 10978

Nimm mal statt

  if [[ "$LINE" =~ [0-f]+\ [0-9]+\ C\ [A-z]+:[0-9]+:[0-9]+\ 0\ 3\ =\ [0-9]+ ]]; then #only allow valid lines (ffff88022e422180 1759824841 C Ii:002:02 0 3 = 020000)

diese Prüfbedingung (die POSIX-Charakterklassen sind eine sauberere Lösung):

   if [[ "$LINE" =~ [[:xdigit:]]+\ [[:digit:]]+\ C\ [[:alpha:]]+:[[:digit:]]+:[[:digit:]]+\ 0\ 3\ =\ [[:digit:]]+ ]]; then #only allow valid lines (ffff88022e422180 1759824841 C Ii:002:02 0 3 = 020000)

Dark_Wolf

(Themenstarter)
Avatar von Dark_Wolf

Anmeldungsdatum:
12. August 2006

Beiträge: 2561

seahawk1986 schrieb:

Nimm mal statt

  if [[ "$LINE" =~ [0-f]+\ [0-9]+\ C\ [A-z]+:[0-9]+:[0-9]+\ 0\ 3\ =\ [0-9]+ ]]; then #only allow valid lines (ffff88022e422180 1759824841 C Ii:002:02 0 3 = 020000)

diese Prüfbedingung (die POSIX-Charakterklassen sind eine sauberere Lösung):

   if [[ "$LINE" =~ [[:xdigit:]]+\ [[:digit:]]+\ C\ [[:alpha:]]+:[[:digit:]]+:[[:digit:]]+\ 0\ 3\ =\ [[:digit:]]+ ]]; then #only allow valid lines (ffff88022e422180 1759824841 C Ii:002:02 0 3 = 020000)

Oh mein Gott das war's! 👍 Vielen Dank, ist wirklich ein schönes Weihnachtsgeschenk das dieses Teil jetzt endlich funktioniert. Ich lass es jetzt mal offen mitlaufen, einmal ist es abgekackt, aber ich glaub das liegt am Standbymodus. Das verträgt das Script wohl nicht ganz. ☺

GLG Dark Wolf

Dark_Wolf

(Themenstarter)
Avatar von Dark_Wolf

Anmeldungsdatum:
12. August 2006

Beiträge: 2561

So, Zwischenbericht. Es funktioniert zwar, aber nach ein paar Stunden kommen nur mehr diese Meldungen daher:

Unmatched key code 1ec00
Unmatched key code 64f05
Unmatched key code 64f05

Wenn man dann den Prozess killt und das Script neu startet gehts noch immer nicht, erst wenn man die Konsole schließt und ne neue öffnet. Hab dann das gesehen.

ps ax | grep usb
29379 pts/1    S      0:00 usbmon -i 2 -f0
29476 pts/1    S      0:00 usbmon -i 2 -f0
29690 pts/1    S      0:00 usbmon -i 2 -f0
29919 pts/1    S      0:00 usbmon -i 2 -f0

Den sollte es aber nur einmal geben. Anscheinend kommt es nach einiger Zeit hier zum Problem. Keine Ahnung ob es wirklich Zeit ist, oder Anschläge.

Also anscheinend sinds die Anschläge... aber ist nur ne Vermutung. Also am Anfang sieht man immer schön die Keycodes, aber dann mit der Zeit kommen immer falsche, auch wenn man die Tastatur garnicht berührt.

Key code ctrl+F4
Key code ctrl+F4
Key code ctrl+F4
Key code ctrl+F4
Key code ctrl+F4
Key code ctrl+F4
Key code ctrl+F4
Key code ctrl+F4
Key code ctrl+F3
Key code ctrl+F2
Unmatched key code 1ec00
Unmatched key code 64f05
Unmatched key code 64f05
Unmatched key code 1ec00
Unmatched key code 64f05
Unmatched key code 64f05
Unmatched key code 1ec00
Unmatched key code 64f05
Unmatched key code 64f05
Unmatched key code 1ec00
Unmatched key code 64f05
Unmatched key code 64f05
Unmatched key code 1ec00
Unmatched key code 64f05
Unmatched key code 64f05
Key code ctrl+F8
Unmatched key code 1ec00
Unmatched key code 64f05
Unmatched key code 64f05
Unmatched key code 1ec00
Unmatched key code 64f05
Unmatched key code 64f05
Key code ctrl+F5
Unmatched key code 1ec00
Unmatched key code 64f05
Unmatched key code 64f05

Irgendwann gehts dann nicht mehr. Ich habs dann glaub ich gut 10 mal neu gestartet, sogar Kernelmodul neu geladen. Keine Chance, immer nur unmatched key code. Irgndwann dann nach dem zwanzigsten mal starten funktionierte es wieder.

Event. hilft als USBdevice nur die Tastatur anzugeben. Aber anscheinend hängen die USBgeräte irgendwie zusammen. Da es wesentlich weniger Anschlüsse auf DEV gibt als es wirklich auf dem Board gibt.

seahawk1986

Anmeldungsdatum:
27. Oktober 2006

Beiträge: 10978

Ist da nicht eher das Problem, dass du mehrere usbmon-Prozesse hast, die alle auf den Filedeskriptor 0 schreiben wollen? Hast du mal versucht am Anfang des Skripts ggf. vorhandene usbmon-Prozesse aufzuräumen?

killall usbmon

Dark_Wolf

(Themenstarter)
Avatar von Dark_Wolf

Anmeldungsdatum:
12. August 2006

Beiträge: 2561

Nachdem ich das Teil jetzt doch schon einige Zeit am laufen habe dann ich nur sagen es verhält sich komisch. Also Fakt ist das dieses Script richtig ausliest. Aber nach einiger Zeit, und tatsächlich nur Zeit (denn wenn man nichts tut, hörst auch auf zu arbeiten) funktioniert es nicht mehr. Die Meldungen mit "Unmatched key code" kommen immer häufiger und irgendwann ist es aus.

Das wie vorher gedacht das es an den USBmon Proszessen liegt stimmt so wohl auch nicht. Man kann die ganzen Prozesse löschen, Kernelmodul entladen und wieder laden, es wird trotzdem nicht mehr funktionieren. Auch hier gilt wieder warten, warten und warten, wenn man es nach langer Zeit... ca. 15-30 Minuten wieder startet, arbeitet es auch wieder. Oder man startet den Rechner neu, dann gehts auch wieder. Alles sehr undurchsichtig.

Antworten |