Portál AbcLinuxu, 12. července 2025 16:54


Dotaz: Rozlišení vstupů z různých klávesnic

27.3.2011 11:08 DžejÁr | Brno, Závišice
Rozlišení vstupů z různých klávesnic
Přečteno: 159×
Odpovědět | Admin
Dobrý den, potřeboval bych pro jeden projekt rozlišovat vstupy zadané ze dvou různých klávesnic, připojených k systému. Zatímco první klávesnice by se měla chovat zcela normálně, vše, co se zadá z druhé "klávesnice" (ve skutečnosti čtečka čarového kódu, která funguje pouze jako klávesnice) by se nemělo vůbec předat uživatelské aplikaci (tedy např. vypsat do textového editoru, který má uživatel právě otevřen), pouze zpracovat na pozadí nějakým démonem.

Ideální řešení by pro mě asi bylo pomocí implementace nějakého jaderného modulu, který by danou filtraci prováděl, zatím jsem zkoušel napsat modul, který funguje jako "keylogger", kde si pomocí následujícího kódu registruji funkci, která je následně jádrem volána při každém stisku klávesy

static struct notifier_block nb = { .notifier_call = key_processor, }

hlavička této funkce potom vypadá zhruba takto:

int key_processor(struct notifier_block *nblock, unsigned long code, void *_param)

Zde můžu zjistit kódy kláves, které byly stisknuty/uvolněny (a pravděpodobně z předávaných struktur i mnohem více, ale zatím jsem to důkladněji neprozkoumal), ale zde je asi již stejně příliš pozdě na to, abych systém nechal klávesu, o které v této funkci rozhodnu, že pochází ze čtečky, nepředal aktivní uživatelské aplikaci, pokud se nemýlím. Zkoušel jsem jako návratovou hodnotu z této funkce použít konstanty jako NOTIFY_OK, NOTIFY_BAD, NOTIFY_STOP, ale vždy byla klávesa předána.

Pokud by tudy cesta nevedla, nebránil bych se ani úpravě přímo nějaké části jádra, ale neorinetuji se v něm natolik, abych věděl kam přesně by bylo vhodné sáhnout a na dlouhé experimenty bohužel nemám čas, proto to zkouším zde.

Nástroje: Začni sledovat (0) ?Zašle upozornění na váš email při vložení nového komentáře.

Odpovědi

27.3.2011 19:03 Mrazík
Rozbalit Rozbalit vše Re: Rozlišení vstupů z různých klávesnic
Odpovědět | | Sbalit | Link | Blokovat | Admin
Co zkusit číst eventy z /dev/input/eventn v userspace ? Každá klávesnice bude mít své n. Ovšem jak zakázat aby se eventy z nějakého konkrétního n nezpracovaly v aplikaci nevím a nechce se mi to hledat. Ale třeba někdo poradí.
27.3.2011 19:09 dustin | skóre: 63 | blog: dustin
Rozbalit Rozbalit vše Re: Rozlišení vstupů z různých klávesnic
Dříve šlo v HALu zakázat určitý input, ten se pak nedostával do Xek. Tuto klávesnici lze pak číst napřímo ve speciální aplikaci.
28.3.2011 16:14 NeoV | skóre: 23
Rozbalit Rozbalit vše Re: Rozlišení vstupů z různých klávesnic
Odpovědět | | Sbalit | Link | Blokovat | Admin
to, ktoru (ktore) klavesnice bude Xko pouzivat vies nastavit konfiguraciou Xiek...

a eventy mozes citat potom z '/dev/input/eventn', ako bolo vyssie spomenute...

Založit nové vláknoNahoru

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.