Auf Tastendrücke von Spezieller Tastatur reagieren
-
Grüß euch!
Ist es mit C (oder jeder anderen Sprache) möglich, dass man auf einen Tastendruck von einer speziellen Tastatur reagiert?
Ich habe eine Maus, für die es keine Linux Treiber gibt und somit ich nicht auf die Sondertasten der Maus reagieren kann (Razer Naga / Noch von meiner Windows "Karriere").
D.h.: Das Programm müsste im Hintergrund laufen und jeden Tastendruck abfragen (auch, wenn das Fenster nicht fokusiert ist), wenn der Druck dann von der Maus kommt, dann sollte er darauf reagieren.
Ich hoffe es weiß jemand.Andere Möglichkeit:
Es gibt schon ein Programm dass genau dass macht, was oben beschrieben wurde -> halt damit man es Einstellen kann was passiert.
mfg
weini (debian wheezy)
-
weini37 schrieb:
Es gibt schon ein Programm dass genau dass macht, was oben beschrieben wurde -> halt damit man es Einstellen kann was passiert.
Ich habe zwar keine solche Maus und kann es nicht testen, aber Google flüstert mir, dass razercfg vielleicht was für dich wäre.
-
SeppJ schrieb:
razercfg
Schon fast richtig
Laut http://bues.ch/cms/hacking/razercfg.html
kann man bei der Razer Naga "nur":
Profile bearbeiten
Frequenz wechseln
DPI wechseln
Leds ein/ausschaltenaber noch keine Buttons remappen
Ich kann es bestätigen, es gibt noch kein Buttonremapping für die Naga
-
Aber was ist mit der auf der Tool-Seite vorgeschlagenen Kombination mit xmodmap & Co. um die Belegung der Tasten zu ändern? Oder reichen dir die Möglichkeiten davon nicht?
-
Mit xinput kann man nur die Buttonreihenfolge umändern.
Xmodmap kann nur jeweils ein Profil laden (also entweder ich stelle das gesammte System um oder gar nichts).
Andere habe ich nicht gefundenmfg
weini
-
Dann bin ich mit meinem (geringen) Wissen leider am Ende. Dann muss wohl wirklich ein eigenes Programm her. Aber das Vorhaben ist schon ein bisschen ambitioniert. Möglicherweise gibt es sogar noch unbekannte Hindernisse, die der Grund sind, warum es das noch nicht gibt.
Ich kann dir jedenfalls nicht beantworten, ob das auf X11-Ebene geht oder ob du dafür sogar runter auf die Device-Ebene musst.
Aber ich hätte noch die Idee, dass dein Programm einfach verschiedene xmodmap-Profile verwaltet und zwischen diesen umschalten kann. Ist das nicht, was der Windowstreiber auch macht? Oder reagiert die Mausbelegung in Windows sogar auf die derzeit aktive Anwendung? Das derzeit fokussierte Fenster ließe sich bestimmt auch noch irgendwie herausfinden über X11. Wird aber sicherlich nicht einfach. Dafür wirst du der Held der Razercommunity, wenn du das durchziehst.
-
So hab jetzt was herausgefunden, was vielleicht hilft:
xinput list | sed -n 's/.*Naga.*id=\([0-9]*\).*keyboard.*/\1/p'
Das erkennt, welche ID die Naga hat.
Danach könnte man irgendwie mit
setxkbmap -device <code>
Etwas umändern
in etwa so:$id = xinput list | sed -n 's/.*Naga.*id=\([0-9]*\).*keyboard.*/\1/p' setxkbmap -device $id <mach was>
Vielleicht hilft das weiter
src: https://bbs.archlinux.org/viewtopic.php?pid=1181482
Die benutzten das:
remote_id=$( xinput list | sed -n 's/.*Naga.*id=\([0-9]*\).*keyboard.*/\1/p' ) [ "$remote_id" ] || exit mkdir -p /tmp/xkb/symbols cat >/tmp/xkb/symbols/custom <<\EOF xkb_symbols "remote" { key <AE01> { [F1, F1] }; key <AE02> { [F2, F2] }; key <AE03> { [F3, F3] }; key <AE04> { [F4, F4] }; key <AE05> { [F5, F5] }; key <AE06> { [F6, F6] }; key <AE07> { [F7, F7] }; key <AE08> { [F8, F8] }; key <AE09> { [F9, F9] }; key <AE10> { [F10, F10] }; key <AE11> { [F11, F11] }; key <AE12> { [F12, F12] }; }; EOF setxkbmap -device $remote_id -print | sed 's/\(xkb_symbols.*\)"/\1+custom(remote)"/' | xkbcomp -I/tmp/xkb -i $remote_id -synch - $DISPLAY 2>/dev/null
Wobei dieser Code bei mir nicht funktioniert
mfg
weini
-
Das Script funktioniert jetzt -
Keine Ahnung, was vorher nicht gegangen istSo ich setzte mich mal ran und programmiere ein kleines Java Tool, welches diese so eine Konfigurations Datei erstellt und eventuell noch ausführt
-
So da hätten wir die jar:
http://www.weini.at/other/razerNagaKeyBinder.jar
http://www.weini.at/other/preview.png
Bei mir funktioniert sie.Was man machen muss:
Wenn du das Programm startest, findest du in der oberen hälfte den Output von xinput --listDort musst du unter "Virtual core keyboard" deine Razer Naga raussuchen.
Bei mir wäre das der Output von xinput --list⎡ Virtual core pointer id=2 [master pointer (3)] ⎜ ↳ Virtual core XTEST pointer id=4 [slave pointer (2)] ⎜ ↳ Razer Razer Naga id=10 [slave pointer (2)] ⎜ ↳ ETPS/2 Elantech Touchpad id=14 [slave pointer (2)] ⎣ 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)] ↳ Sleep Button id=8 [slave keyboard (3)] ↳ USB 2.0 Camera id=9 [slave keyboard (3)] ↳ Razer Razer Naga id=11 [slave keyboard (3)] ↳ Asus Laptop extra buttons id=12 [slave keyboard (3)] ↳ AT Translated Set 2 keyboard id=13 [slave keyboard (3)] ↳ ACPI Virtual Keyboard Device id=15 [slave keyboard (3)]
Dementsprechend ist die id von der Razer Naga 11 (Nicht 10, da 10 bei Virtual Core Pointers ist)
Nachdem du das gemacht hast, trage die id in die Textbox ein und klicke auf set.
Hier wirst du nacheinander gefragt (insgesammt 12 mal), welche Taste du damit binden willst.
Z.b.
Key 1 (only ONE char!!)
input: bSomit wird immer "b" gedrückt, wenn du die erste Taste auf deiner Maus drückst.
Wenn du etwas falsch eingeben hast (oder auf abbrechen geklickt hast) musst du alle neu belegenNachdem du die 12 Tasten erfolgreich eingegeben hast, kontrollierst du sie noch einmal in der unteren hälfte des Fensters.
Wenn etwas nicht stimmt, darfst du noch einmal alle 12 eingeben
Wenn du alle eingegeben hast und alle stimmen, klicke auf run und es wird ausgeführt.Evt. wenn du noch etwas manuell umändern willst, gehe ins Verzeichnis:
$user.home/.weiniKeyConfig/
und ändere die Datei run.txt um, wenn du fertig bist führe sie aus mit "sh run.txt"Den Ordner kannst du nachdem du alles gemacht hast wieder löschen.
Das alles ist sehr schnell programmiert worden und wenn du etwas falsches eingegeben hast, überprüft das Programm fast nichts, da es nur schnell "hingefetzt" wurde
Wenn etwas nachdem du das Programm ausgeführt hast nicht mehr funktioniert, starte den Computer neu.
Wenn dann noch immer der Fehler passiert, bisst du selbst schuld, probiere noch einmal das Programm auszuführen
Ich übernehme keine Haftung für Schäden am Computer (Für mich hat es funktioniert)mfg
weini