Annoyme

Viele Projekte haben wohl eine Geschichte die dahinter steckt. So auch meine aktuelle kleine Bastelei.

Ich war auf der Arbeit wie immer fleißig am Programmieren und irgendwie ist das Thema aufgekommen, dass ich doch so laut Tippen würde. Ich glaube man könnte mir tatsächlich eine alte mechanische Schreibmaschine unter die Finger legen und würde einfach weiter klimpern.

Daraufhin habe ich jedenfalls entgegnet, dass die Kollegen lieber froh sein sollten, dass ich keine Schreibmaschinensounds, wie im standard ICQ Client, an hätte.

Aus Spass suchte ich nach einem Client unter X der so etwas kann und habe leider nichts gefunden. Ich konnte es kaum verstehen, wo dieses Feature doch derart essenziell ist.

Wie dem auch sei bin ich immer froh wenn ich etwas finde dass es noch nicht gibt – wie oft ist es vorgekommen das ich der Meinung war eine Tolle Idee zu haben und irgendwann feststellen musste, dass es das (leider) schon längst gab. (So wie Instant Messaging über IRC http://www.bitlbee.org/)

Somit habe ich mich nun dran gemacht einen Schreibmaschinensound-Effekt Client für X zu schreiben. Passender weise heißt dieser Annoyme.

Es hat sich herausgestellt, dass das globale empfangen der Tastatur Event nicht ganz so einfach ist wie erwartet aber dank einem funktionierenden XEvIE nun doch möglich ist.

Ich habe mir für das Projekt in C++ einen Account bei github erstellt und werde es darüber pflegen. Ich sehe es als Gelegenheit etwas mehr Erfahrung mit git zu sammeln. Bisher macht es einen relativ benutzerfreundlichen Eindruck.

http://github.com/dedeibel/annoyme/tree/master

Werbeanzeigen

apt-get -b source

Nun nutze ich debian schon ca. 5 Jahre und wurde gestern doch wieder einmal völlig neu beeindruckt.

Mein Problem war einfach: Ich wollte ein Programm schreiben das global alle Keyboard Events behandelt. So etwas ist praktisch für Shortcuts oder so selbstverständlichen Dingen wie Push to Talk im Voice Chat Programmen.

Da X das von Haus aus nicht vorsieht, da dies durchaus ein nachvollziehbares Sicherheitsrisiko darstellt, wenn man hierbei z.B. an Keylogger denkt.

Dennoch gibt es Abhilfe in Form von XEvIE http://freedesktop.org/wiki/Software/XEvIE. Das klingt nun genau nach dem was ich gesucht habe. Doch nachdem die Extension im X-Server installiert war ging das Beispielprogramm immer noch nicht, was nicht zuletzt daran liegt dass das Projekt leider verwaist ist.

Glücklicherweise habe ich von rE in #linux-clan @ quakenet einen Tipp bekommen. http://bugs.freedesktop.org/show_bug.cgi?id=17394 ein paar kleinen Codeänderungen sollten der Schlüssel zum funktionierenden XEvIE sein. Es trennte mich nur noch das Kompilieren eines eigenen X-Servers vom Glück. Ohje …

Aber. Alles halb so schlimm, debian verfügt über eine klasse Sourceverwaltung die es mit wenigen Befehlen ermöglicht die vorhandenen debian Pakete selber zu bauen und beliebige Änderungen vorzunehmen. Weitere Infos dazu gibt es hier http://www.debian.org/doc/manuals/apt-howto/ch-sourcehandling.en.html. Das Installieren ist so einfach wie es nur geht, einfach das selbst gebaute Paket mit dpkg -i ausführen und das original wird ersetzt.

$ ./xevidemo
Delay is 0 milliseconds
major = 1, minor = 0
XevieStart(dpy) finished
(   0) KeyRelease
(   1) KeyPress
        State: 0 KeyCode: 26
        Char Count: 1 KeySym: 61 char: |a|
(   2) KeyRelease
(   3) KeyPress
        State: 0 KeyCode: 28
        Char Count: 1 KeySym: 64 char: |d|

Edit 2008-09-29:
Herrlich, heute kam das xserver-xorg-core update mit dem XEvIE fix integriert. Nun gut, immerhin haben wir was gelernt!