Nieuws:

Welkom, Gast. Alsjeblieft inloggen of registreren.
Heb je de activerings-mail niet ontvangen?

Auteur Topic: toetsenbord hook (omleiding toetsenbord invoer)  (gelezen 6247 keer)

Offline mrGee

  • Lid
toetsenbord hook (omleiding toetsenbord invoer)
« Gepost op: 2009/03/10, 11:48:52 »
Hallo

Ik heb een beetje speciale vraag voor een speciaal probleem; kort gezegd; ik zoek een
manier om op low level, elke toetsenbord ingave, af te vangen en even door te geven
aan mijn eigen progje, dit mag in bash script, python of c, ook assembler is goed.
Niet dat ik al die talen perfect beheers, maar ik kan tenminste dan wat afleiden
 
Ik heb links en rechts al flink lopen zoeken in meerdere fora/mailinglijsten maar heb geen
toepasbare oplossing gezien. Probleem is dat het vrij low level moet gebeuren.
Vroeger op mijn aloude msx computer en met behulp van assembler is mij dit wel gelukt, je kon
de keyboard interrupt hook 'ombuigen' en gebruiken voor jezelf. Toen had ik er een piepje bij ingezet
just for fun. Zo'n hook is niets anders, als een sprong vanuit de hardware naar een gererveerd stukje
geheugen, waar normaal alleen een return staat. Je haalt dan de return weg en buigt die om naar je
programma en geeft daar uiteindelijk weer die return.

Maar nu zoek iets dat een serieuze toepassing gaat worden ; het is voor een vriend van mij die blind is,
maar graag met de computer wil werken, maar ook extra beperkingen heeft.
Hij heeft geen braille en eigenlijk maar de beschikking over 1 hand. Zijn linkerhand is wel functioneel, maar
daar heeft hij geen gevoel in(vandaar exit braille). Het toetsenbord is eigenlijk veel te groot en werkt nu
moeizaam, hij werkt grotendeels in de console. Mbv. yasr en speech-dispatcher heeft hij wel een toetsecho,
dwz. dat elke toets wordt uitgesproken, nadat hij is ingetypt.

Nu wil ik dat laatste ombuigen; dus de windows toets wordt met zijn linkerhand ingedrukt en daarbij kan hij
op zijn gemak met de rechterhand 'zoeken' naar een letter, die zolang de windows toets blijft ingedrukt, direct
wordt uitgesproken. Is het een foute toets; blijven zoeken, is het een goede toets, windows toets loslaten en
de goede letter wordt dan pas gezet. Het lijkt ons veel sneller werken dan elke keer moeizaam weer te moeten
wissen bij foute ingave.

Als iemand daar een ander geweldig idee over heeft, laat horen, maar ik heb gemerkt dat je altijd eerst moet
luisteren naar de wens van degene die je denkt te helpen. ipv. je eigen oplossing erdoor te drukken  ;) .

Maar goed; iets low levels dus; progjes als keyloggers eventloggers, showkeys, setkeycodes getkeycodes scancodes xmodmap
xbindkey xgrabkey (is X weet ik, evt. via ion oid. een X oplossing mag ook) etc. vallen af, ik wil daarvoor al omgebogen hebben.

Ik hoop dat iemand hier iets meer over weet of mij op de goede weg kan helpen, daarbij is het mijn eerste vraag überhaupt
in dit forum, dus een mijlpaal, ga ik direct even vieren met een espresso  =D

Groeten Gerrit

-- = >  simplify if you can   -- = >

Offline JvH

  • Lid
Re: toetsenbord hook (omleiding toetsenbord invoer)
« Reactie #1 Gepost op: 2009/03/10, 12:08:16 »
Is xev misschien wat je zoekt? Is te vinden in de man-pagina's.

Offline mrGee

  • Lid
Re: toetsenbord hook (omleiding toetsenbord invoer)
« Reactie #2 Gepost op: 2009/03/10, 12:14:41 »
Hallo

Lekker snel antwoord  ;) ; maar uhm helaas nee. xev is ook al te laat, dus niet low level
genoeg. Zie ook het rijtje met progjes dat dat ik al had aangegeven, er zijn er nl.
nog wel meer in allerlei exotische verschijningen.

Ik ben echt op zoek naar welke interrupt met bijbehorende adresseringen en
hoe dat zelf toe te passen, of inderdaad een programmatje dat als laag daartussen
zit en alles weet om te leiden, het liefst in een ordinaire console (zonder X)

Groeten Gerrit

ik moet nl. ook een rekening houden met de yasr/speech-dispatcher combi, die moet nl. ten
allen tijde blijven werken en ook daar zijn soms al ingebakken problemen mee. Zelfs
Klaus Knopper (zie knoppix/adriane) is daarin al op een probleem gestoten.

« Laatst bewerkt op: 2009/03/10, 12:17:27 door mrGee »
-- = >  simplify if you can   -- = >

Offline track

  • Lid
Re: toetsenbord hook (omleiding toetsenbord invoer)
« Reactie #3 Gepost op: 2009/03/10, 12:22:50 »
Hoi Gerrit,

als het om een commandolijn-programma gaat is er altijd de mogelijkheid om de invoer via een pipe naar een programma te sturen.
B.v.: [mijnscript] | [jouwprogje]In [mijnscript] mag best een read -sn1 zitten. (-> http://linux.die.net/man/ trefwoord "read")
De enige voorwaarde is dat [jouwprogje] ook de invoer vanuit con aanvaard.  Geen Xwindows-verhaal dus.  Daat moet je anders aanpakken.

track

Offline mrGee

  • Lid
Re: toetsenbord hook (omleiding toetsenbord invoer)
« Reactie #4 Gepost op: 2009/03/10, 12:49:04 »
@ Track

Op zich heb je gelijk, probleem is dat, als je een pipe of een tee (voor afsplitsing) gebruikt,
je ook al te laat bent, de yasr/ speech-dispatcher combi en ook de rest van het syteem,  heeft hem dan al gezien en
ik wil dat voorkomen/ombuigen. Ik wil gewoon dat zolang de windows toets ingedrukt is er geen toetsenbord data
verder het systeem ingepompt wordt, maar dat het eerst via mijn progje gaat, die het eigenhandig aan
speech-dispatcher geeft, om  alleen de letter te laten uitspreken en verder even niets doet. Zo gauw de windows toets
wordt los gelaten, wordt dan pas de letter gezet en is mijn hookje niet meer functioneel. Yasr zal hem dan vanzelf
nog een keer echoën maar dat is (nog) niet storend

Groeten Gerrit

« Laatst bewerkt op: 2009/03/10, 12:50:38 door mrGee »
-- = >  simplify if you can   -- = >

Offline track

  • Lid
Re: toetsenbord hook (omleiding toetsenbord invoer)
« Reactie #5 Gepost op: 2009/03/10, 13:16:15 »
Ja, dat snap ik wel.  Je zult het dus ook zodanig moeten doen dat je yasr (of wat dan ook) met die pijp ervoor oproept.
Feitelijk jouw script als een driver inzet, die voortdurend aan de slag is en zelf ook weer andere programma's kan oproepen.

Jouw script moet dus alle toetsdrukken verwerken (en intern een schakelaar hebben waar de desbetreffende toetsdruk naar toe moet).
Zoiets als
Citaat
if [ win-toets gedrukt ]; then  { stuur de volgende invoer naar de "speech" }
else  { stuur de laatste letter naar  "stdout" }                # (de pipe dus)
fi

track

Offline JvH

  • Lid
Re: toetsenbord hook (omleiding toetsenbord invoer)
« Reactie #6 Gepost op: 2009/03/10, 13:19:28 »
En als we het nou over een compleet andere, minder technische, boeg gooien.

Er zijn varianten van de toetsenbordindeling Dvorak speciaal voor mensen die maar 1 hand (kunnen) gebruiken.
Zie Wikipedia: http://en.wikipedia.org/wiki/Dvorak_Simplified_Keyboard#One-handed_versions

Ik heb er zelf geen ervaring mee. Ik geloof dat deze indelingen ook in Ubuntu beschikbaar zijn (maar dat zou ik na moeten kijken, want ik zit momenteel niet op een Ubuntusysteem).
Maar misschien is het voor je vriend de moeite waard om deze toetsenbordindeling aan te leren? Het blijft natuurlijk behelpen, maar misschien is het zo wel makkelijker om op de tast met 1 hand de juiste toets te vinden.

Offline mrGee

  • Lid
Re: toetsenbord hook (omleiding toetsenbord invoer)
« Reactie #7 Gepost op: 2009/03/10, 13:24:49 »
@ Track;
Beide progjes yasr en speech-dispatcher draaien al, zijn nl. services die
al vrij vroeg opgestart worden en ook niet afgezet dienen te worden.

De speech-dispatcher zorgt voor een bijna realtime spraaktuitgave en belast de
console niet zo zwaar als bijv. espeak en yasr is een screenreader die alle input onderschept   
en verder verwerkt.

Dus daarom moet het op een low level niveau worden omgebogen


Groeten Gerrit
-- = >  simplify if you can   -- = >

Offline mrGee

  • Lid
Re: toetsenbord hook (omleiding toetsenbord invoer)
« Reactie #8 Gepost op: 2009/03/10, 13:31:59 »
@ JvH

Heb ik al wel eens naar gekeken, ook bijv. naar een frogpad;
http://www.frogpad.com/

Hangt ook een beetje van de gebruiker af in dit geval moet ie
dan weer een andere layout in zijn hoofd krijgen, waarbij akoestische
feedback op dit moment even het belangrijkst is.

Maar inderdaad is dat ook een optie, ik meen dat Karl Dahlke daar uitputtende
documentatie over heeft. Ik weet ook niet hoe makkelijk mijn hook idee is te
implementeren en zag dat ook als een uitdaging.

Ik zou eea. ter zijner tijd in een wiki oid. willen gieten, omdat informatie erg
versplinterd is of outdated, ik heb voor tal van toepassingen in deze richting flink
moeten zoeken en experimenteren. Zo is bijv. pulsaudio inzake screenreaders soms
ook een notoire dwarsligger.

Groeten Gerrit





-- = >  simplify if you can   -- = >

Offline track

  • Lid
Re: toetsenbord hook (omleiding toetsenbord invoer)
« Reactie #9 Gepost op: 2009/03/10, 13:37:42 »
Het maakt niet uit dat zij als "diensten" al draaien.  Uiteindelijk werden zij ook maar vanuit een script gestart.
Dus zal jouw script op dit punt moeten inhaken. 
(Op die manier heb ik zelf een keer in een Red Hat Linux een filter in het printsysteem ingebreid.)

Het zal een zorgvuldige analyse van de init-scripten en de daarbij betrokken onderscripten worden maar het kan.

track

Offline mrGee

  • Lid
Re: toetsenbord hook (omleiding toetsenbord invoer)
« Reactie #10 Gepost op: 2009/03/10, 13:58:36 »
Maar dat zou beteken, dat ik elke keer die dienst, yasr in dit geval, per letteringave moet stoppen/verwerken/starten.

We zitten in ieder geval te hoog denk ik , specifiek zoek ik een methode om rechtstreeks de toetsenbord ingave te onderbreken/
omleiden. Dus waar/welke interrupt en hoe de ruwe data naar een laag hoger gaat; daartussen, daar wil ik graag zitten   
of tenminste, mijn afvang routinetje   ;)

Ik ben op zich wel gewend om heel laag in een systeempje in te grijpen in assembler, maar dat heeft zich altijd beperkt tot
Z80, intel8088 en de laatste tijd meer microchip pic's, waar ik ook alle doc. voorhanden heb en niet zozeer de structuren waarmee
ik nu mee aan het spelen geraak. Vandaar graag ook wat voorzetjes/inzichten van mensen die hier wel thuis in zijn. 


Alvast bedankt voor het meedenken allemaal
-- = >  simplify if you can   -- = >

Offline track

  • Lid
Re: toetsenbord hook (omleiding toetsenbord invoer)
« Reactie #11 Gepost op: 2009/03/10, 14:09:26 »
Nee, op het peil van de interrupts kan je bij Linux niet aan de slag.  Dat is iets voor DOS.  Bij Linux gaat de output van de toetesenbord-driver rechtstreek naar stdin.  Dus is hier het peil om in te haken. 
En uiteraard is jouw script de hele tijd actief (het hoeft niet altijd in te grijpen), het zit inderdaad op het peil van de diensten.
En gewoon moet je bij een Linux- systeem niet met een assembler beginnen.  Het hier zit allemaal in de scripten.
(-> http://linux.die.net/sag/init-intro.html )

track

Offline JvH

  • Lid
Re: toetsenbord hook (omleiding toetsenbord invoer)
« Reactie #12 Gepost op: 2009/03/10, 14:22:13 »
Citaat van: MrGee
Heb ik al wel eens naar gekeken, ook bijv. naar een frogpad;
http://www.frogpad.com/
ROFL dat demonstratiefilmpje is echt te droog XD
"What would you do with your free hand?" :DXD

Offline mrGee

  • Lid
Re: toetsenbord hook (omleiding toetsenbord invoer)
« Reactie #13 Gepost op: 2009/03/10, 14:31:56 »
Hallo

Een interrupt (routine) ed. is niet alleen voorbehouden aan dos, het is de manier waarop
hardware die aan de cpu hangt, zijn data aflevert en ingrijpt (interrumpeert) in het lopende systeem,
hoe heet beestje exact heet doet er eigenlijk niet toe.
http://tldp.org/LDP/lkmpg/2.4/html/x1210.html ; hier staat iets over interrupt handlers en de kernel.

Maar of hier gemakkelijk iets mee aan te vangen valt, is te bezien, net zoals bijv. het keyboard in raw modus
te laten functioneren (hetgeen afgeraden werd in diverse docs overigens)

Al typende en zoekende schiet mij wat anders te binnen icm. yasr, ga ik zo uitproberen/onderzoeken
Als je op de site van yasr kijkt; http://yasr.sourceforge.net/
en ook in de manual is alles nl. erg summier uitgelegd.
Ik kan ook wel weer proberen terug te vallen op een andere screenreader, maar yasr bevalt gewoon het
best, is nog het meest stabiel icm. met speech-dispatcher.

Groeten Gerrit

« Laatst bewerkt op: 2009/03/10, 14:37:23 door mrGee »
-- = >  simplify if you can   -- = >

Offline mrGee

  • Lid
Re: toetsenbord hook (omleiding toetsenbord invoer)
« Reactie #14 Gepost op: 2009/03/10, 14:35:58 »
@ JvH

Yep pizza eten, bier drinken alles terwijl je druk zit te coden.
En als je dan met je bier knoeit hoef je maar een klein
toetsenbordje te reinigen.  =D

Maar uhm, beetje duur dat wel

En dan die layout, een blinde moet dat er ook weer bij visualiseren en
ook daar kun je op mis grijpen. Mijn vriend heeft, voordat hij blind
werd, nog nooit met een toetsenbord of computer gewerkt.

Groeten Gerrit
« Laatst bewerkt op: 2009/03/10, 14:38:16 door mrGee »
-- = >  simplify if you can   -- = >

Offline JvH

  • Lid
Re: toetsenbord hook (omleiding toetsenbord invoer)
« Reactie #15 Gepost op: 2009/03/10, 15:02:55 »
Citaat van: MrGee
Yep pizza eten, bier drinken alles terwijl je druk zit te coden.
En als je dan met je bier knoeit hoef je maar een klein
toetsenbordje te reinigen.  grin
Ik denk te ver door volgens mij :P

Citaat van: MrGee
En dan die layout, een blinde moet dat er ook weer bij visualiseren en
ook daar kun je op mis grijpen. Mijn vriend heeft, voordat hij blind
werd, nog nooit met een toetsenbord of computer gewerkt.
Dat wel. Maar het voordeel van deze aanpak is wel dat je vriend, zodra hij de indeling onder de knie heeft, op meer systemen makkelijker uit de voeten kan. Die Dvorak-layout bijv. kan in alle/de meeste moderne OS'en moeiteloos ingesteld worden. Dat scheelt weer maatwerk. Hetzelfde zal denk ik gelden voor die FrogPad.
Ik snap dat er een leerproces aan vooraf gaat, maar het zou IMHO best wel een goede investering kunnen zijn op lange termijn.
Afijn het is iig het overwegen waard.

Maar mocht je verder gaan met de keyboard hook-methode: laat maar weten hoe het lukt. Ik vind het wel interessant om te horen hoe het uiteindelijk uitpakt.

Offline mrGee

  • Lid
Re: toetsenbord hook (omleiding toetsenbord invoer)
« Reactie #16 Gepost op: 2009/03/10, 19:04:09 »
Hmmm over lezen gesproken; lees ik zelf zomaar over informatie heen  :rolleyes:, die ik notabene zelf dus in het linkje
naar Track had gegeven, om te demonstreren dat irq's ook bestaan voor linux. (Interrupt handlers)
Iets verder op die pagina; poort 0x60; scancode, poort 0x64; status keyboard, icm. irq1
En nog iets verder gegoogeld, met als extra optie, toch maar weer keylogger -> een heel interessant stukje tekst
over hoe de kernel en ook wat procesjes verderop zijn te beïnvloeden. Ga ik even (nouja even) mee spelen.
Linkje post ik ff niet, keylogging kan zowel voor black hat als white hat hacking worden (ge)misbruikt en ik
herinner me het 'verdwenen' draadje over iets dergelijks mbt. tot sommige tools.  ;)

Groeten Gerrit
-- = >  simplify if you can   -- = >