Das Script läuft an, Ausgabe gibt es keine, nur von USBMON direkt.
Makrotasten einer Tastatur: Sind sie auf normale Tasten um zu wandeln?
(Themenstarter)
![]() Anmeldungsdatum: Beiträge: 2561 |
|
Anmeldungsdatum: Beiträge: 10978 |
Aber du lässt usbmon im Skript schon das richtige USB-Device auslesen? |
Anmeldungsdatum: 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. |
(Themenstarter)
![]() Anmeldungsdatum: Beiträge: 2561 |
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.
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. ? |
Anmeldungsdatum: Beiträge: 10978 |
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.
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.
Zeigt xev denn etwas, wenn du die Makrotasten drückst? |
(Themenstarter)
![]() Anmeldungsdatum: Beiträge: 2561 |
#!/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"
Nein da tut sich nichts.
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? |
Anmeldungsdatum: 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) |
(Themenstarter)
![]() Anmeldungsdatum: Beiträge: 2561 |
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 |
(Themenstarter)
![]() Anmeldungsdatum: 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. |
Anmeldungsdatum: 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 |
(Themenstarter)
![]() Anmeldungsdatum: 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. |