Bashből mouse

Sziasztok!

Nincs más input eszközöm, az egér úgyis szabad, így az egér gombjait kapcsolom relével. A gép vékony kliens, az oprendszer: Damn Small Linux, az egér USB-s, biztonság kedvéért az optikai érzékelőt leragasztottam, X nem fut.

Hogyan oldjam meg Bash-ből az egér gombjainak lekérdezését? Fontos lenne, hogy megkapjak minden eseményt (lenyomást és felengedést), vagy le tudjam kérdezni az állapotot.

Jelenleg az eseményekről kapok üzenetet:
cat /dev/input/mice | sajat_script.sh

És a scriptemben hexdump-pal olvastatok be 1 byte-ot (-n opció) egy ciklusban: a hexdump-nál megakad, ha jön input, akkor továbblép, feldolgozás, stb. Általában tökéletesen működik. Baj az, hogy néha megbolondul, és végtelen ciklusba esik (a hexdump nem olvas ki semmit, de nem is vár). Foylamatosan dolgozik a scripttel, 100% proci használat, és onnantól kezdve az eseményeket sem kapom meg. Mi lehet a hiba? Más megoldás?

Ha nem pipe-pal csinálom, akkor meg lehet oldani, hogy minden byte-ot megkapjak? Azokat is, amelyek akkor jönnek, amikor az előző bemenet még feldolgozás alatt áll.

A read és társai nem jöhetnek szóba. Szükségem lenne a 10-es kódra (jobb egérgomb lenyomásakor generálódik), ami egyébként valami kocsi vissza jel. Ezt bash-ben ha elmentem egy változóba, akkor az a változó utána üres marad.

Ha van rá jobb módszer, hogy az egér állapotát lekérdezzük, akkor is érdekelne, hogy bash-ben ilyet hogyan kell megoldani.

Köszi.
Petya

Hozzászólások

Milyen paramétereket használsz a hexdump-hoz? Próbáld meg, hogy csak a "cat /dev/input/mice | hexdump [paraméterek]"-et futtatod, és megpróbálod előidézni a hibát. Lehet, hogy mégis beesik egy egérmozgatás esemény?

Egy másik lehetőség a /dev/input/event* (ill. /dev/input/by-path/platform-i8042-serio-*-event-mouse) használata. Ez egy


struct input_event {
        struct timeval time;
        unsigned short type;
        unsigned short code;
        unsigned int value;
};

struktúrát ad vissza, ld. linux/Documentation/input/input.txt .

Bár a /dev/input/mice és a /dev/input/event* elvileg képes kezelni, hogyha több program olvas belőle párhuzamosan, de azért jó lenne leállítani első körben minden programot, ami olvashat az egérről:


lsof |grep dev |grep -E -i 'mouse|mice|event|input|psaux|usb'

Nálam az X-en kívül pl. a hald-addon-input és a gpm is kezeli az egeret.

A mev-et kipróbálom. DSL-ben nem találtam, de nem ez lesz az első progi, amit debian-ból emelek át.

A paramétereket nem tudom, a script nincs előttem. 1 byte-ot olvasok, és formázást állítok. A problémánál folyamatosan 00-t kapok. Lehet, hogy egyszer kapok egy CTRL-D jelet, vagy valami hasonlót, ami befolyásolja a stream-et.

A linux/Documentation/input/input.txt doksinak utána nézek. Sejtettem én, hogy leírták ezt valahol.

Megnézem, hogy mi olvassa még az eszközt. Egyébként az a szép, hogy ami olvashatná, azt úgyis kigyomlálták a DSL-ből.

Köszi mindenkinek!