navod

Klavesnicova makra poprve

Tento prispevek navazuje na jak automaticky vkladat text i kdyz se nekdo snazil aby to neslo a odkazuje na SW a HW v nem zmineny.

Klavesnicova makra si predstavuji jako funkce, kterym jdou dat parametry a podle nich se vygeneruje vlozena sekvence uhozu na klavesnici. V nejjednodussim pripade se se parametry dosadi nekam do textu, ktery se posle. Ve slozitejsich pripadech se muze treba podle zadane mailove adresy prijemce rovnou prednastavit osloveni a podpis a podobne pokrocilejsi funkce.

Zatim mam napsana jen hloupa makra: serkbd_in_loop.py. Cely HW a SW na strane prijemce zustava stejny. Staci spustit program v pythonu, jako root* a pak mackat klavesy. Klavesou q se program ukonci, ostatni klavesy zpusobi pokus o nalezeni souboru s jednopismennym nazvem v aktualnim adresari a poslani jeho obsahu.

Pismena jsou samozrejme zadavana na klavesnici druheho pocitace a retezce znaku definovane v souborech prijdou do pocitace prijimaciho.

Takze kdyz vytvorim textovy soubor se jmenem u a s obsahem uname -a, staci na klavesnici ovladajicicho pocitace zmacknout u a na ovladanem pocitaci se napise uname -a (at uz bude focus kdekoliv – do terminalu, do mailu, jako by to bylo napsano primo na klavesnici).

V UNIXu neni prilis prakticke vytvares soubory se jmeny *, nebo – a vytvorit soubor se jmenem / by nastesti nemelo jit vubec. Takze pro seriozni pouziti by se hodil jiny zpusob ukladani maker. Tohle je spise proof of concept.

*) Kdyz poustite program jako root, ziska kontrolu nad celym vasim pocitacem. Takze se hodi alespon trochu rozumet tomu, co v nem je. Mohl jsem tam schovat neco zakerneho (neudelal jsem to, ale to bych sem napsal i v pripade, ze bych to udelal, to da rozum). Nekdo mohl odchytit packety po ceste na siti a zmenit obsah. Nakonec nejjednodussi zpusob je ukrast muj text a program (ten se krade blbe, ma licenci GPL :-)), dat oboje nekam na freeweb a do programu pridat nejaky nechteny bonus.

Happy hacking!

P.S. odmitam prijmout zodpovednost, za skody zpusobene makry. Takze pokud si vytvorite makra s hesly a odkazy na sve oblibene pornostranky a povede se vam je omylem vlozit do pracovniho emailu a diky enteru na konci makra rovnou i odeslat, muzete si za to sami, ja vas varoval.

Posted by zelenohlav in Linux

Jak automaticky vkladat text i kdyz se nekdo snazil, aby to neslo

Clovek obcas narazi na program, nebo webovou stranku, kde si nekdo dal tu praci, se znemoznenim vkladani textu prostrednim tlacitkem mysi. Nekdy se da text vlozit klavesovymi zkratkami, nekdy pres menu, nekdy vubec a vzdy je cloveka nedustojne hledat jakym zpusoben (a jestli vubec) to tentokrat pujde.

V Linuxu nastesti existuje moznost pripojit ps/2 klavesnici po seriovem portu a ta jde vyuzit i zajimavejsim zpusobem. Scankody ps/2 klavesnice muze totiz posilat druhy pocitac. Oba pocitace musi mit seriovy port (konvertor do USB funguje, takze staci USB). Seriove porty se propoji nullmodemem (to je kabel, kde je prekrizeny TX a RX). Zapojeni kabelu je na Wikipedii, nebo se da bezne koupit. A to je cely HW, vic toho neni potreba delat a obejdete se bez pajky a programatoru mikrokontroleru.

Na pocitaci, ktery ma ziskat falesnou klavesnici je potreba pustit jako root:

inputattach --baud 19200 --ps2serkbd /dev/ttyUSB0

a na pocitaci, ktery posila data lze pouzit napriklad serialkbd.py.

Puvodni klavesnice samozrejme funguje dal a dokonce ovlivnuje chovani tehle falesne, takze napriklad zmacknuti shiftu zmeni mala pismena na velka (az do prvniho pusteni shiftu tou falesnou klavesnici).

V pripade, ze bude program pusten pres ssh z terminalu na stejnem pocitaci, jako kam je vkladan text, pak doporucuji vlozit pred program nekolikasekundove cekani, aby bylo dost casu prepnout focus do zadaneho mista:

sleep 3; serialkbd.py datovy_soubor

alternativne by slo treba nakonfigurovat aby se na nejakou klavesovou zkratku spustilo ssh, ktere prekopiruje zvolena data na druhy pocitac a spusti vlozeni po seriovem portu.

Zda se, ze dnes uz jde na ebayi koupit prevodnik z ps/2 na seriovy port – staci hledat ‘ps2 serial arduino’. Temer s jistotou bude mit TTL vystupy, takze bude nutne zkonvertovat napetove urovne MAX232 na +-12V, ale pak by sla pripojit bezna klavesnice na seriovy port pocitace, ktery by zpracovaval psany text a posilal ho dal. To by umoznilo implementovat makra, pridat klavesy (treba vyuzitim normalni klavesnice pripojene k tomu ridicimu pocitaci, jeho paralelniho portu, USB, apod.), nebo treba nahravat psany text a umoznit ho cast znovu prehrat. To se obcas hodi kdyz se povede neco napsat do spatneho okna a nebo kdyz nekdo implementoval na webove strance komentarovy formular tak blbe, ze pri jakekoliv chybe text zmizi a neda se k nemu vratit ani pres tlacitko zpet v browseru.

Jeste zodpovim par predpokladanych dotazu:

Otazka: Musi tam byt druhy pocitac, neslo by spojit tim nullmodemem dva seriove porty na tom samem pocitaci?

Odpoved: Slo.

Otazka: A musi tam vubec byt ten HW, neslo by to nejak udelat pres virtualni porty?

Odpoved: Urcite by to nejak slo, ale z hlavy nevim jak. Treba se k tomu nekdy dostanu, prijdu na to a pridam to sem.

Otazka: To jsi delal jenom kvuli par blbym programum, ktere znemoznuji vkladani mysi?

Odpoved: Chtel bych klavesnici s makry, ktera si budu moci sam programovat. Zkonvertovat ps/2 na seriovy port a zpracovavat nezavislym pocitacem stream dat na seriovem portu mi prijde nejjednodussi. Umozni to nahravat provoz na klavesnici a cast ho znovu prehrat (treba kdyz clovek neco napise do spatneho okna) a navic to muze nahradit i KVM pro praci na vice pocitacich.

Otazka: Ma to smysl? Makra umi nektere herni klavesnice.

Odpoved: Vsechny herni klavesnice, ktere jsem zatim videl (kamarad jich mel plnou skrin) vyzadovaly k programovani maker nejaky program pro Windows, coz je system, ktery nemam, neumim s nim a navic by byl pekny opruz kvuli kazdemu programovani makra prehazovat klavesnici mezi pocitaci. Krome toho je otazka co vsechno tam jde naprogramovat. Moje reseni umoznuje naprogramovat v zasade cokoliv, co jde napsat v C, pythonu, nebo jinem jazyce, ktery lze pustit na pocitaci se dvema seriovymi porty. Tim pocitacem muze byt klidne treba arduino, nebo Atmega8 zabudovana ve fyzicke klavesnici.

Otazka: Ma to smysl? KVM nahradi treba synergy a neni nutne tahat seriove kabely.

Odpoved: Je rozdil precist si manual k synergy, zkusit ho na pet minut a pouzivat ho. Ten program (informace stara asi 4 roky, od te doby jsem ho nezkousel) asi tak jednou za hodinu udela nejakou pitomost. To je dost malo na to, aby se to dobre debuggovalo a prilis casto na to, aby to clovek nechtel rozslapat a prohodit oknem. Problemy pretrvavaly i kdyz synergy dostalo vlastni sitove karty a vlastni prekrizeny ethernetovy kabel.

Otazka: Kdyz to pouziju, jako KVM, budu s tim moci nastavovat i BIOS a bootloader?

Odpoved: Ne. Tohle zacne fungovat, az se pod uzivatelem root pusti inputattach. Ten se muze pustit i automaticky, ale aby to fungovalo drive, nez nabehne jadro, bylo by nutne zkonstruovat HW, ktery by ze serioveho portu delal zpet ps/2. S nejakym mikrokontrolerem by to nemelo byt tezke.

Otazka: Muj Linux nema inputattach, kde he sezenu?

Odpoved: Na Debianu je v balicku inputattach, na Fedore to je v balicku linuxconsoletools, na dalsich distribucich doporucuji hledat googlem jmeno distribuce a inputattach, nebo vyuzit nejaky distribucni tool pro hledani balicku.

Otazka: Chci tam doplnit klavesu, nasel jsem nejake scankody ps/2 klavesnice a dela to uplne nesmysly.

Odpoved: Existuji dve mnoziny ps/2 scancodu. inputattach zjevne pouziva set2. V poli keyboard jsou jednotlive polozky serazene podle jejich ascii kodu. Co se stane s unicode znaky netusim, ale python ma podporu unicode, takze predpokladam, ze v nem bude jednoduchy zpusob, jak projit cele unicode znaky v retezci i kdyby to nebyl ten, ktery jsem pouzil. Pak je otazka, jestli prodlouzit pole, nebo to napsat jinak.

Otazka: Bude mi to fungovat na Windows? Treba v cygwinu?

Odpoved: Na prijimaci strane temer jiste ne. Ale treba nekdo portoval inputattach i pro Windows. Na vysilaci strane (serialkbd.py) bude patrne nutne upravit nejake systemove veci (jmena seriovych portu, apod.), pripadne se postarat o konce radku a asi by to fungovat melo. Python je multiplatformni, takze clovek, ktery ma zkusenosti s programovanim v pythonu pro Windows by to podle meho nazoru mel bez problemu rozchodit. Nicmene moje zkusenosti s Microsoftimi operacnimi systemy konci u turbopascalu a qbasicu nekdy v minulem mileniu.

Posted by zelenohlav in Linux

Umeni improvizace – hraci kostka

Vetsinou chcete dosahnout cile a neni az tak dulezite jak, ale spis kdy, kde, nebo za kolik. Casto pomuze se nad problemem zamyslet.

Co udelate, kdyz zjistite, ze k deskove hre, kterou se prave chystate hrat s prateli, potrebujete hraci kostku a prave ta vam chybi?

Muzete zrusit hru.

Nebo dojit kostku koupit. V centru mesta par metru od prislusneho obchodu v pracovni den ve tri odpoledne to bude asi nejlepsi moznost. Jenomze tou dobou jste asi v praci a vasi pratele taky. Nez se v noci ze soboty na nedeli vratite taxikem (nebo jste nic nepili, takze muzete i vlastnim autem?) doprostred Vysociny z nejblizsiho non-stop obchodu s hrami, budou vasi pratele patrne jiz spat a ucet za taxika presahne cenu zpatecni letenky do New Yorku.

Ve skole jsme pouzivali obycejnou sestihrannou tuzku, na ktere byla po obvodu napsana cisla a kutalelo se s ni. Ale dnes je k videni dost kulatych tuzek a take dost reklamnich propisek, takze zustava otazkou, jestli nejakou doma najdete.

Muzete zkusit vyrezat kostku z kusu fosny a pokreslit ji tuzkou. Pokud mate sverak, pilku a kus fosny, jde to i za pet minut. S rozbrusovackou ziskate kostku z ocelove tyce ctvercoveho prurezu jeste rychleji. Otazkou je, jak nahodne vysledky bude davat – to zavisi na presnosti vasi prace.

No a tim jsme vycerpali vsechny rozumne moznosti. Nebo ne?

Pri hodu kostkou chcete generovat cisla 1 az 6. Pri hodu minci generujete panna a orel, tedy 1 a 0. To je dost malo. Ale zijeme v digitalnim veku a temer kazdy uz vi, ze vsechna cisla jdou vyjadrit z jednicek a nul. Vezmene tri ruzne mince. Seradme je tak, aby si to vsichni hraci zapamatovali (treba od nejmensi od nejvetsi). Tri mince predstavuji tri bity a do trech bitu zakodujete cisla 0 az 7 (000, 001, 010, 011, 100, 101, 110, 111). A co udelame s nulou a sedmickou? Muzeme si treba hodit znovu.

A proc nezakodujeme jednicku, jako 000, dvojku 001 … sestku 101? Klidne muzeme, je to preci uplne jedno.

A to jako vsichni u stolu musi umet pocitat s dvojkovou soustavou? Nic na tom neni, ale nemusi. Staci na zacatku nakreslit tabulku a pak cist hodnoty z tabulky.

Dalsi moznost, kterou jsem v takovem pripade pouzil ja, je naprogramovat kratky skript v BASHi, coz je shell, ktery najdete prakticky na kazdem pocitaci s Linuxem, a na mnoha jinych UNIXu vcetne OSX a Androidu. Staci pustit tento skript:

 while true; do echo $((RANDOM % 6 + 1)); read; done 

a pak uz jenom mackat enter. Odchazi se Ctrl-C. Snazite-li se skriptu porozumnet, prikaz read; je tam proto, ze ceka na enter, nactena hodnota se nikde nepouziva. Jednicka se pricita proto, aby cisla byla 1-6 a ne 0-5 a znak % je zbytek po deleni.

Uzijte si hru.

Posted by zelenohlav in Ekonomie