GNU/Linux >> Znalost Linux >  >> Linux

Jak rozlišit vstup z různých klávesnic?

Pokud používáte Linux, nejlepším způsobem, jak rozlišit vstupní zařízení, je použít Linux Event Interface. Poté, co je hardwarově specifický vstup zařízení dekódován, je převeden na přechodnou strukturu událostí specifickou pro Linux a zpřístupněn načtením jednoho nebo více znakových zařízení pod /dev/input/ . To je mimochodem zcela nezávislé na programovacím jazyce, který používáte.

Každé hardwarové zařízení má svůj vlastní /dev/input/eventX zařízení a existují také agregáty (např. /dev/input/mice který představuje pohyb všech myší v systému). Váš systém může mít také /dev/input/by-path a /dev/input/by-id .

Je tam ioctl s názvem EVIOCGNAME který vrátí název zařízení jako lidsky čitelný řetězec, nebo můžete použít něco jako /dev/input/by-id/usb-Logitech_USB_Gaming_Mouse-mouse .

Otevřete zařízení a pokaždé, když přijde událost ze vstupního hardwaru, získáte paket dat. Pokud umíte číst C, můžete si prostudovat soubor /usr/include/linux/input.h což přesně ukazuje, jak tato věc funguje. Pokud ne, můžete si přečíst tuto otázku, která poskytuje všechny potřebné informace.

Dobrá věc na rozhraní událostí je, že jen zjistíte, jaké zařízení potřebujete, a můžete číst vstup z tohoto vstupního zařízení pouze , ignoruje všechny ostatní. Budete také dostávat oznámení o klávesách, tlačítkách a ovládacích prvcích, které byste normálně nezískali pouhým přečtením „uvařeného“ proudu znaků z terminálu:dokonce i mrtvých kláves jako Shift , atd.

Špatná věc je, že rozhraní události nevrací „vařené“ znaky, pouze používá číselné kódy pro klíče (kódy odpovídající každému klíči se nacházejí ve výše zmíněném hlavičkovém souboru — ale také ve zdroji Python event.py. Pokud má vaše vstupní zařízení neobvyklé klávesy/tlačítka, možná budete muset trochu experimentovat, než získáte správná čísla.


Alternativním přístupem (pokud vaše „klávesnice“ nemá mnoho kláves – mnoho zařízení se vydává za klávesnice) je použít mapování kláves na každou klávesnici specificky a zajistit, aby byly klávesy rozlišeny.

Toto je popsáno zde:https://superuser.com/questions/760602/how-to-remap-keys-under-linux-for-a-specific-keyboard-only. Hlavním bodem je setxkbmap bere argument zařízení.

Pokud používáte přístup raw input, lsinput najde vaše raw zařízení za vás.


Linux
  1. jak ar x název_souboru.a do jiného adresáře

  2. Jak mohu gunzip do jiného cílového adresáře?

  3. Jak se install -c liší od cp

  1. Jak nainstalovat ovladač zařízení v systému Linux

  2. Jak se Ubuntu liší od Debianu?

  3. jak se liší cp -f od cp --remove-destination?

  1. Jak zajistit, aby „datum“ vydalo čas z jiného časového pásma?

  2. Linux – Jak spustit bootloader z Linuxu?

  3. Linux – Jak robustně přepnout výstupní zařízení Pulseaudio z příkazového řádku?