_sphinx.addnodesdocument)}( rawsourcechildren]( translations LanguagesNode)}(hhh](h pending_xref)}(hhh]docutils.nodesTextChinese (Simplified)}parenthsba attributes}(ids]classes]names]dupnames]backrefs] refdomainstdreftypedoc reftarget/translations/zh_CN/input/inputmodnameN classnameN refexplicitutagnamehhh ubh)}(hhh]hChinese (Traditional)}hh2sbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget/translations/zh_TW/input/inputmodnameN classnameN refexplicituh1hhh ubh)}(hhh]hItalian}hhFsbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget/translations/it_IT/input/inputmodnameN classnameN refexplicituh1hhh ubh)}(hhh]hJapanese}hhZsbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget/translations/ja_JP/input/inputmodnameN classnameN refexplicituh1hhh ubh)}(hhh]hKorean}hhnsbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget/translations/ko_KR/input/inputmodnameN classnameN refexplicituh1hhh ubh)}(hhh]hSpanish}hhsbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget/translations/sp_SP/input/inputmodnameN classnameN refexplicituh1hhh ubeh}(h]h ]h"]h$]h&]current_languageEnglishuh1h hh _documenthsourceNlineNubhcomment)}(h4This data file has been placed in the public domain.h]h4This data file has been placed in the public domain.}hhsbah}(h]h ]h"]h$]h&] xml:spacepreserveuh1hhhhhho/srv/docbuild/lib/venvs/build-kernel-docs/lib64/python3.9/site-packages/docutils/parsers/rst/include/isonum.txthKubh)}(hDerived from the Unicode character mappings available from . Processed by unicode2rstsubs.py, part of Docutils: .h]hDerived from the Unicode character mappings available from . Processed by unicode2rstsubs.py, part of Docutils: .}hhsbah}(h]h ]h"]h$]h&]hhuh1hhhhhhhhKubhsubstitution_definition)}(h*.. |amp| unicode:: U+00026 .. AMPERSANDh]h&}hhsbah}(h]h ]h"]ampah$]h&]uh1hhhhKhhhhubh)}(h+.. |apos| unicode:: U+00027 .. APOSTROPHEh]h'}hhsbah}(h]h ]h"]aposah$]h&]uh1hhhhKhhhhubh)}(h).. |ast| unicode:: U+0002A .. ASTERISKh]h*}hhsbah}(h]h ]h"]astah$]h&]uh1hhhhK hhhhubh)}(h+.. |brvbar| unicode:: U+000A6 .. BROKEN BARh]h¦}hhsbah}(h]h ]h"]brvbarah$]h&]uh1hhhhK hhhhubh)}(h0.. |bsol| unicode:: U+0005C .. REVERSE SOLIDUSh]h\}hjsbah}(h]h ]h"]bsolah$]h&]uh1hhhhK hhhhubh)}(h*.. |cent| unicode:: U+000A2 .. CENT SIGNh]h¢}hjsbah}(h]h ]h"]centah$]h&]uh1hhhhK hhhhubh)}(h&.. |colon| unicode:: U+0003A .. COLONh]h:}hjsbah}(h]h ]h"]colonah$]h&]uh1hhhhK hhhhubh)}(h&.. |comma| unicode:: U+0002C .. COMMAh]h,}hj-sbah}(h]h ]h"]commaah$]h&]uh1hhhhKhhhhubh)}(h... |commat| unicode:: U+00040 .. COMMERCIAL ATh]h@}hj<sbah}(h]h ]h"]commatah$]h&]uh1hhhhKhhhhubh)}(h/.. |copy| unicode:: U+000A9 .. COPYRIGHT SIGNh]h©}hjKsbah}(h]h ]h"]copyah$]h&]uh1hhhhKhhhhubh)}(h... |curren| unicode:: U+000A4 .. CURRENCY SIGNh]h¤}hjZsbah}(h]h ]h"]currenah$]h&]uh1hhhhKhhhhubh)}(h0.. |darr| unicode:: U+02193 .. DOWNWARDS ARROWh]h↓}hjisbah}(h]h ]h"]darrah$]h&]uh1hhhhKhhhhubh)}(h,.. |deg| unicode:: U+000B0 .. DEGREE SIGNh]h°}hjxsbah}(h]h ]h"]degah$]h&]uh1hhhhKhhhhubh)}(h... |divide| unicode:: U+000F7 .. DIVISION SIGNh]h÷}hjsbah}(h]h ]h"]divideah$]h&]uh1hhhhKhhhhubh)}(h,.. |dollar| unicode:: U+00024 .. DOLLAR SIGNh]h$}hjsbah}(h]h ]h"]dollarah$]h&]uh1hhhhKhhhhubh)}(h,.. |equals| unicode:: U+0003D .. EQUALS SIGNh]h=}hjsbah}(h]h ]h"]equalsah$]h&]uh1hhhhKhhhhubh)}(h1.. |excl| unicode:: U+00021 .. EXCLAMATION MARKh]h!}hjsbah}(h]h ]h"]exclah$]h&]uh1hhhhKhhhhubh)}(h9.. |frac12| unicode:: U+000BD .. VULGAR FRACTION ONE HALFh]h½}hjsbah}(h]h ]h"]frac12ah$]h&]uh1hhhhKhhhhubh)}(h<.. |frac14| unicode:: U+000BC .. VULGAR FRACTION ONE QUARTERh]h¼}hjsbah}(h]h ]h"]frac14ah$]h&]uh1hhhhKhhhhubh)}(h;.. |frac18| unicode:: U+0215B .. VULGAR FRACTION ONE EIGHTHh]h⅛}hjsbah}(h]h ]h"]frac18ah$]h&]uh1hhhhKhhhhubh)}(h?.. |frac34| unicode:: U+000BE .. VULGAR FRACTION THREE QUARTERSh]h¾}hjsbah}(h]h ]h"]frac34ah$]h&]uh1hhhhKhhhhubh)}(h>.. |frac38| unicode:: U+0215C .. VULGAR FRACTION THREE EIGHTHSh]h⅜}hjsbah}(h]h ]h"]frac38ah$]h&]uh1hhhhKhhhhubh)}(h=.. |frac58| unicode:: U+0215D .. VULGAR FRACTION FIVE EIGHTHSh]h⅝}hjsbah}(h]h ]h"]frac58ah$]h&]uh1hhhhKhhhhubh)}(h>.. |frac78| unicode:: U+0215E .. VULGAR FRACTION SEVEN EIGHTHSh]h⅞}hjsbah}(h]h ]h"]frac78ah$]h&]uh1hhhhKhhhhubh)}(h2.. |gt| unicode:: U+0003E .. GREATER-THAN SIGNh]h>}hj,sbah}(h]h ]h"]gtah$]h&]uh1hhhhKhhhhubh)}(h9.. |half| unicode:: U+000BD .. VULGAR FRACTION ONE HALFh]h½}hj;sbah}(h]h ]h"]halfah$]h&]uh1hhhhK hhhhubh)}(h/.. |horbar| unicode:: U+02015 .. HORIZONTAL BARh]h―}hjJsbah}(h]h ]h"]horbarah$]h&]uh1hhhhK!hhhhubh)}(h'.. |hyphen| unicode:: U+02010 .. HYPHENh]h‐}hjYsbah}(h]h ]h"]hyphenah$]h&]uh1hhhhK"hhhhubh)}(h:.. |iexcl| unicode:: U+000A1 .. INVERTED EXCLAMATION MARKh]h¡}hjhsbah}(h]h ]h"]iexclah$]h&]uh1hhhhK#hhhhubh)}(h7.. |iquest| unicode:: U+000BF .. INVERTED QUESTION MARKh]h¿}hjwsbah}(h]h ]h"]iquestah$]h&]uh1hhhhK$hhhhubh)}(hJ.. |laquo| unicode:: U+000AB .. LEFT-POINTING DOUBLE ANGLE QUOTATION MARKh]h«}hjsbah}(h]h ]h"]laquoah$]h&]uh1hhhhK%hhhhubh)}(h0.. |larr| unicode:: U+02190 .. LEFTWARDS ARROWh]h←}hjsbah}(h]h ]h"]larrah$]h&]uh1hhhhK&hhhhubh)}(h3.. |lcub| unicode:: U+0007B .. LEFT CURLY BRACKETh]h{}hjsbah}(h]h ]h"]lcubah$]h&]uh1hhhhK'hhhhubh)}(h;.. |ldquo| unicode:: U+0201C .. LEFT DOUBLE QUOTATION MARKh]h“}hjsbah}(h]h ]h"]ldquoah$]h&]uh1hhhhK(hhhhubh)}(h).. |lowbar| unicode:: U+0005F .. LOW LINEh]h_}hjsbah}(h]h ]h"]lowbarah$]h&]uh1hhhhK)hhhhubh)}(h1.. |lpar| unicode:: U+00028 .. LEFT PARENTHESISh]h(}hjsbah}(h]h ]h"]lparah$]h&]uh1hhhhK*hhhhubh)}(h4.. |lsqb| unicode:: U+0005B .. LEFT SQUARE BRACKETh]h[}hjsbah}(h]h ]h"]lsqbah$]h&]uh1hhhhK+hhhhubh)}(h;.. |lsquo| unicode:: U+02018 .. LEFT SINGLE QUOTATION MARKh]h‘}hjsbah}(h]h ]h"]lsquoah$]h&]uh1hhhhK,hhhhubh)}(h/.. |lt| unicode:: U+0003C .. LESS-THAN SIGNh]h<}hjsbah}(h]h ]h"]ltah$]h&]uh1hhhhK-hhhhubh)}(h+.. |micro| unicode:: U+000B5 .. MICRO SIGNh]hµ}hj sbah}(h]h ]h"]microah$]h&]uh1hhhhK.hhhhubh)}(h+.. |middot| unicode:: U+000B7 .. MIDDLE DOTh]h·}hjsbah}(h]h ]h"]middotah$]h&]uh1hhhhK/hhhhubh)}(h/.. |nbsp| unicode:: U+000A0 .. NO-BREAK SPACEh]h }hj+sbah}(h]h ]h"]nbspah$]h&]uh1hhhhK0hhhhubh)}(h).. |not| unicode:: U+000AC .. NOT SIGNh]h¬}hj:sbah}(h]h ]h"]notah$]h&]uh1hhhhK1hhhhubh)}(h,.. |num| unicode:: U+00023 .. NUMBER SIGNh]h#}hjIsbah}(h]h ]h"]numah$]h&]uh1hhhhK2hhhhubh)}(h).. |ohm| unicode:: U+02126 .. OHM SIGNh]hΩ}hjXsbah}(h]h ]h"]ohmah$]h&]uh1hhhhK3hhhhubh)}(h;.. |ordf| unicode:: U+000AA .. FEMININE ORDINAL INDICATORh]hª}hjgsbah}(h]h ]h"]ordfah$]h&]uh1hhhhK4hhhhubh)}(h<.. |ordm| unicode:: U+000BA .. MASCULINE ORDINAL INDICATORh]hº}hjvsbah}(h]h ]h"]ordmah$]h&]uh1hhhhK5hhhhubh)}(h-.. |para| unicode:: U+000B6 .. PILCROW SIGNh]h¶}hjsbah}(h]h ]h"]paraah$]h&]uh1hhhhK6hhhhubh)}(h-.. |percnt| unicode:: U+00025 .. PERCENT SIGNh]h%}hjsbah}(h]h ]h"]percntah$]h&]uh1hhhhK7hhhhubh)}(h*.. |period| unicode:: U+0002E .. FULL STOPh]h.}hjsbah}(h]h ]h"]periodah$]h&]uh1hhhhK8hhhhubh)}(h*.. |plus| unicode:: U+0002B .. PLUS SIGNh]h+}hjsbah}(h]h ]h"]plusah$]h&]uh1hhhhK9hhhhubh)}(h0.. |plusmn| unicode:: U+000B1 .. PLUS-MINUS SIGNh]h±}hjsbah}(h]h ]h"]plusmnah$]h&]uh1hhhhK:hhhhubh)}(h+.. |pound| unicode:: U+000A3 .. POUND SIGNh]h£}hjsbah}(h]h ]h"]poundah$]h&]uh1hhhhK;hhhhubh)}(h... |quest| unicode:: U+0003F .. QUESTION MARKh]h?}hjsbah}(h]h ]h"]questah$]h&]uh1hhhhKhhhhubh)}(h1.. |rarr| unicode:: U+02192 .. RIGHTWARDS ARROWh]h→}hj sbah}(h]h ]h"]rarrah$]h&]uh1hhhhK?hhhhubh)}(h4.. |rcub| unicode:: U+0007D .. RIGHT CURLY BRACKETh]h}}hjsbah}(h]h ]h"]rcubah$]h&]uh1hhhhK@hhhhubh)}(h<.. |rdquo| unicode:: U+0201D .. RIGHT DOUBLE QUOTATION MARKh]h”}hj*sbah}(h]h ]h"]rdquoah$]h&]uh1hhhhKAhhhhubh)}(h0.. |reg| unicode:: U+000AE .. REGISTERED SIGNh]h®}hj9sbah}(h]h ]h"]regah$]h&]uh1hhhhKBhhhhubh)}(h2.. |rpar| unicode:: U+00029 .. RIGHT PARENTHESISh]h)}hjHsbah}(h]h ]h"]rparah$]h&]uh1hhhhKChhhhubh)}(h5.. |rsqb| unicode:: U+0005D .. RIGHT SQUARE BRACKETh]h]}hjWsbah}(h]h ]h"]rsqbah$]h&]uh1hhhhKDhhhhubh)}(h<.. |rsquo| unicode:: U+02019 .. RIGHT SINGLE QUOTATION MARKh]h’}hjfsbah}(h]h ]h"]rsquoah$]h&]uh1hhhhKEhhhhubh)}(h-.. |sect| unicode:: U+000A7 .. SECTION SIGNh]h§}hjusbah}(h]h ]h"]sectah$]h&]uh1hhhhKFhhhhubh)}(h*.. |semi| unicode:: U+0003B .. SEMICOLONh]h;}hjsbah}(h]h ]h"]semiah$]h&]uh1hhhhKGhhhhubh)}(h,.. |shy| unicode:: U+000AD .. SOFT HYPHENh]h­}hjsbah}(h]h ]h"]shyah$]h&]uh1hhhhKHhhhhubh)}(h(.. |sol| unicode:: U+0002F .. SOLIDUSh]h/}hjsbah}(h]h ]h"]solah$]h&]uh1hhhhKIhhhhubh)}(h,.. |sung| unicode:: U+0266A .. EIGHTH NOTEh]h♪}hjsbah}(h]h ]h"]sungah$]h&]uh1hhhhKJhhhhubh)}(h0.. |sup1| unicode:: U+000B9 .. SUPERSCRIPT ONEh]h¹}hjsbah}(h]h ]h"]sup1ah$]h&]uh1hhhhKKhhhhubh)}(h0.. |sup2| unicode:: U+000B2 .. SUPERSCRIPT TWOh]h²}hjsbah}(h]h ]h"]sup2ah$]h&]uh1hhhhKLhhhhubh)}(h2.. |sup3| unicode:: U+000B3 .. SUPERSCRIPT THREEh]h³}hjsbah}(h]h ]h"]sup3ah$]h&]uh1hhhhKMhhhhubh)}(h4.. |times| unicode:: U+000D7 .. MULTIPLICATION SIGNh]h×}hjsbah}(h]h ]h"]timesah$]h&]uh1hhhhKNhhhhubh)}(h0.. |trade| unicode:: U+02122 .. TRADE MARK SIGNh]h™}hjsbah}(h]h ]h"]tradeah$]h&]uh1hhhhKOhhhhubh)}(h... |uarr| unicode:: U+02191 .. UPWARDS ARROWh]h↑}hj sbah}(h]h ]h"]uarrah$]h&]uh1hhhhKPhhhhubh)}(h... |verbar| unicode:: U+0007C .. VERTICAL LINEh]h|}hjsbah}(h]h ]h"]verbarah$]h&]uh1hhhhKQhhhhubh)}(h*.. |yen| unicode:: U+000A5 .. YEN SIGN h]h¥}hj)sbah}(h]h ]h"]yenah$]h&]uh1hhhhKRhhhhubhsection)}(hhh](htitle)}(h Introductionh]h Introduction}(hj?hhhNhNubah}(h]h ]h"]h$]h&]uh1j=hj:hhh9/var/lib/git/docbuild/linux/Documentation/input/input.rsthKubh field_list)}(hhh]hfield)}(hhh](h field_name)}(h Copyrighth]h Copyright}(hjZhhhNhNubah}(h]h ]h"]h$]h&]uh1jXhjUhjMhKubh field_body)}(hE|copy| 1999-2001 Vojtech Pavlik - Sponsored by SuSE h]h paragraph)}(hD|copy| 1999-2001 Vojtech Pavlik - Sponsored by SuSEh](h©}(hjphhhNhNubh 1999-2001 Vojtech Pavlik <}(hjphhhNhNubh reference)}(hvojtech@ucw.czh]hvojtech@ucw.cz}(hj~hhhNhNubah}(h]h ]h"]h$]h&]refurimailto:vojtech@ucw.czuh1j|hjpubh> - Sponsored by SuSE}(hjphhhNhNubeh}(h]h ]h"]h$]h&]uh1jnhjMhKhjjubah}(h]h ]h"]h$]h&]uh1jhhjUubeh}(h]h ]h"]h$]h&]uh1jShjMhKhjPhhubah}(h]h ]h"]h$]h&]uh1jNhj:hhhjMhKubj9)}(hhh](j>)}(h Architectureh]h Architecture}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j=hjhhhjMhK ubjo)}(hInput subsystem is a collection of drivers that is designed to support all input devices under Linux. Most of the drivers reside in drivers/input, although quite a few live in drivers/hid and drivers/platform.h]hInput subsystem is a collection of drivers that is designed to support all input devices under Linux. Most of the drivers reside in drivers/input, although quite a few live in drivers/hid and drivers/platform.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jnhjMhK hjhhubjo)}(hThe core of the input subsystem is the input module, which must be loaded before any other of the input modules - it serves as a way of communication between two groups of modules:h]hThe core of the input subsystem is the input module, which must be loaded before any other of the input modules - it serves as a way of communication between two groups of modules:}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jnhjMhKhjhhubj9)}(hhh](j>)}(hDevice driversh]hDevice drivers}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j=hjhhhjMhKubjo)}(hThese modules talk to the hardware (for example via USB), and provide events (keystrokes, mouse movements) to the input module.h]hThese modules talk to the hardware (for example via USB), and provide events (keystrokes, mouse movements) to the input module.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jnhjMhKhjhhubeh}(h]device-driversah ]h"]h$]device driversah&]uh1j8hjhhhjMhK referencedKubj9)}(hhh](j>)}(hEvent handlersh]hEvent handlers}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j=hjhhhjMhKubjo)}(hThese modules get events from input core and pass them where needed via various interfaces - keystrokes to the kernel, mouse movements via a simulated PS/2 interface to GPM and X, and so on.h]hThese modules get events from input core and pass them where needed via various interfaces - keystrokes to the kernel, mouse movements via a simulated PS/2 interface to GPM and X, and so on.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jnhjMhKhjhhubeh}(h]event-handlersah ]h"]h$]event handlersah&]uh1j8hjhhhjMhKjKubeh}(h] architectureah ]h"] architectureah$]h&]uh1j8hj:hhhjMhK ubj9)}(hhh](j>)}(h Simple Usageh]h Simple Usage}(hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1j=hj.hhhjMhK#ubjo)}(hFor the most usual configuration, with one USB mouse and one USB keyboard, you'll have to load the following modules (or have them built in to the kernel)::h]hFor the most usual configuration, with one USB mouse and one USB keyboard, you’ll have to load the following modules (or have them built in to the kernel):}(hj?hhhNhNubah}(h]h ]h"]h$]h&]uh1jnhjMhK%hj.hhubh literal_block)}(hJinput mousedev usbcore uhci_hcd or ohci_hcd or ehci_hcd usbhid hid_generich]hJinput mousedev usbcore uhci_hcd or ohci_hcd or ehci_hcd usbhid hid_generic}hjOsbah}(h]h ]h"]h$]h&]hhuh1jMhjMhK)hj.hhubjo)}(hAfter this, the USB keyboard will work straight away, and the USB mouse will be available as a character device on major 13, minor 63::h]hAfter this, the USB keyboard will work straight away, and the USB mouse will be available as a character device on major 13, minor 63:}(hj]hhhNhNubah}(h]h ]h"]h$]h&]uh1jnhjMhK0hj.hhubjN)}(h;crw-r--r-- 1 root root 13, 63 Mar 28 22:45 miceh]h;crw-r--r-- 1 root root 13, 63 Mar 28 22:45 mice}hjksbah}(h]h ]h"]h$]h&]hhuh1jMhjMhK3hj.hhubjo)}(hcThis device is usually created automatically by the system. The commands to create it by hand are::h]hbThis device is usually created automatically by the system. The commands to create it by hand are:}(hjyhhhNhNubah}(h]h ]h"]h$]h&]uh1jnhjMhK5hj.hhubjN)}(h,cd /dev mkdir input mknod input/mice c 13 63h]h,cd /dev mkdir input mknod input/mice c 13 63}hjsbah}(h]h ]h"]h$]h&]hhuh1jMhjMhK8hj.hhubjo)}(hAfter that you have to point GPM (the textmode mouse cut&paste tool) and XFree to this device to use it - GPM should be called like::h]hAfter that you have to point GPM (the textmode mouse cut&paste tool) and XFree to this device to use it - GPM should be called like:}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jnhjMhK)}(hDetailed Descriptionh]hDetailed Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j=hjhhhjMhKLubj9)}(hhh](j>)}(hEvent handlersh]hEvent handlers}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j=hjhhhjMhKOubjo)}(hfEvent handlers distribute the events from the devices to userspace and in-kernel consumers, as needed.h]hfEvent handlers distribute the events from the devices to userspace and in-kernel consumers, as needed.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jnhjMhKQhjhhubj9)}(hhh](j>)}(hevdevh]hevdev}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j=hjhhhjMhKUubjo)}(h``evdev`` is the generic input event interface. It passes the events generated in the kernel straight to the program, with timestamps. The event codes are the same on all architectures and are hardware independent.h](hliteral)}(h ``evdev``h]hevdev}(hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1j(hj$ubh is the generic input event interface. It passes the events generated in the kernel straight to the program, with timestamps. The event codes are the same on all architectures and are hardware independent.}(hj$hhhNhNubeh}(h]h ]h"]h$]h&]uh1jnhjMhKWhjhhubjo)}(hnThis is the preferred interface for userspace to consume user input, and all clients are encouraged to use it.h]hnThis is the preferred interface for userspace to consume user input, and all clients are encouraged to use it.}(hjBhhhNhNubah}(h]h ]h"]h$]h&]uh1jnhjMhK\hjhhubjo)}(h,See :ref:`event-interface` for notes on API.h](hSee }(hjPhhhNhNubh)}(h:ref:`event-interface`h]hinline)}(hjZh]hevent-interface}(hj^hhhNhNubah}(h]h ](xrefstdstd-refeh"]h$]h&]uh1j\hjXubah}(h]h ]h"]h$]h&]refdoc input/input refdomainjireftyperef refexplicitrefwarn reftargetevent-interfaceuh1hhjMhK_hjPubh for notes on API.}(hjPhhhNhNubeh}(h]h ]h"]h$]h&]uh1jnhjMhK_hjhhubjo)}(hThe devices are in /dev/input::h]hThe devices are in /dev/input:}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jnhjMhKahjhhubjN)}(hcrw-r--r-- 1 root root 13, 64 Apr 1 10:49 event0 crw-r--r-- 1 root root 13, 65 Apr 1 10:50 event1 crw-r--r-- 1 root root 13, 66 Apr 1 10:50 event2 crw-r--r-- 1 root root 13, 67 Apr 1 10:50 event3 ...h]hcrw-r--r-- 1 root root 13, 64 Apr 1 10:49 event0 crw-r--r-- 1 root root 13, 65 Apr 1 10:50 event1 crw-r--r-- 1 root root 13, 66 Apr 1 10:50 event2 crw-r--r-- 1 root root 13, 67 Apr 1 10:50 event3 ...}hjsbah}(h]h ]h"]h$]h&]hhuh1jMhjMhKchjhhubjo)}(hThere are two ranges of minors: 64 through 95 is the static legacy range. If there are more than 32 input devices in a system, additional evdev nodes are created with minors starting with 256.h]hThere are two ranges of minors: 64 through 95 is the static legacy range. If there are more than 32 input devices in a system, additional evdev nodes are created with minors starting with 256.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jnhjMhKihjhhubeh}(h]evdevah ]h"]evdevah$]h&]uh1j8hjhhhjMhKUubj9)}(hhh](j>)}(hkeyboardh]hkeyboard}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j=hjhhhjMhKnubjo)}(h``keyboard`` is in-kernel input handler and is a part of VT code. It consumes keyboard keystrokes and handles user input for VT consoles.h](j))}(h ``keyboard``h]hkeyboard}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j(hjubh} is in-kernel input handler and is a part of VT code. It consumes keyboard keystrokes and handles user input for VT consoles.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jnhjMhKphjhhubeh}(h]keyboardah ]h"]keyboardah$]h&]uh1j8hjhhhjMhKnubj9)}(hhh](j>)}(hmousedevh]hmousedev}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j=hjhhhjMhKtubjo)}(h``mousedev`` is a hack to make legacy programs that use mouse input work. It takes events from either mice or digitizers/tablets and makes a PS/2-style (a la /dev/psaux) mouse device available to the userland.h](j))}(h ``mousedev``h]hmousedev}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j(hjubh is a hack to make legacy programs that use mouse input work. It takes events from either mice or digitizers/tablets and makes a PS/2-style (a la /dev/psaux) mouse device available to the userland.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jnhjMhKvhjhhubjo)}(h5Mousedev devices in /dev/input (as shown above) are::h]h4Mousedev devices in /dev/input (as shown above) are:}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jnhjMhK{hjhhubjN)}(hXzcrw-r--r-- 1 root root 13, 32 Mar 28 22:45 mouse0 crw-r--r-- 1 root root 13, 33 Mar 29 00:41 mouse1 crw-r--r-- 1 root root 13, 34 Mar 29 00:41 mouse2 crw-r--r-- 1 root root 13, 35 Apr 1 10:50 mouse3 ... ... crw-r--r-- 1 root root 13, 62 Apr 1 10:50 mouse30 crw-r--r-- 1 root root 13, 63 Apr 1 10:50 miceh]hXzcrw-r--r-- 1 root root 13, 32 Mar 28 22:45 mouse0 crw-r--r-- 1 root root 13, 33 Mar 29 00:41 mouse1 crw-r--r-- 1 root root 13, 34 Mar 29 00:41 mouse2 crw-r--r-- 1 root root 13, 35 Apr 1 10:50 mouse3 ... ... crw-r--r-- 1 root root 13, 62 Apr 1 10:50 mouse30 crw-r--r-- 1 root root 13, 63 Apr 1 10:50 mice}hj)sbah}(h]h ]h"]h$]h&]hhuh1jMhjMhK}hjhhubjo)}(hXjEach ``mouse`` device is assigned to a single mouse or digitizer, except the last one - ``mice``. This single character device is shared by all mice and digitizers, and even if none are connected, the device is present. This is useful for hotplugging USB mice, so that older programs that do not handle hotplug can open the device even when no mice are present.h](hEach }(hj7hhhNhNubj))}(h ``mouse``h]hmouse}(hj?hhhNhNubah}(h]h ]h"]h$]h&]uh1j(hj7ubhJ device is assigned to a single mouse or digitizer, except the last one - }(hj7hhhNhNubj))}(h``mice``h]hmice}(hjQhhhNhNubah}(h]h ]h"]h$]h&]uh1j(hj7ubhX . This single character device is shared by all mice and digitizers, and even if none are connected, the device is present. This is useful for hotplugging USB mice, so that older programs that do not handle hotplug can open the device even when no mice are present.}(hj7hhhNhNubeh}(h]h ]h"]h$]h&]uh1jnhjMhKhjhhubjo)}(hX@CONFIG_INPUT_MOUSEDEV_SCREEN_[XY] in the kernel configuration are the size of your screen (in pixels) in XFree86. This is needed if you want to use your digitizer in X, because its movement is sent to X via a virtual PS/2 mouse and thus needs to be scaled accordingly. These values won't be used if you use a mouse only.h]hXBCONFIG_INPUT_MOUSEDEV_SCREEN_[XY] in the kernel configuration are the size of your screen (in pixels) in XFree86. This is needed if you want to use your digitizer in X, because its movement is sent to X via a virtual PS/2 mouse and thus needs to be scaled accordingly. These values won’t be used if you use a mouse only.}(hjihhhNhNubah}(h]h ]h"]h$]h&]uh1jnhjMhKhjhhubjo)}(hXVMousedev will generate either PS/2, ImPS/2 (Microsoft IntelliMouse) or ExplorerPS/2 (IntelliMouse Explorer) protocols, depending on what the program reading the data wishes. You can set GPM and X to any of these. You'll need ImPS/2 if you want to make use of a wheel on a USB mouse and ExplorerPS/2 if you want to use extra (up to 5) buttons.h]hXXMousedev will generate either PS/2, ImPS/2 (Microsoft IntelliMouse) or ExplorerPS/2 (IntelliMouse Explorer) protocols, depending on what the program reading the data wishes. You can set GPM and X to any of these. You’ll need ImPS/2 if you want to make use of a wheel on a USB mouse and ExplorerPS/2 if you want to use extra (up to 5) buttons.}(hjwhhhNhNubah}(h]h ]h"]h$]h&]uh1jnhjMhKhjhhubeh}(h]mousedevah ]h"]mousedevah$]h&]uh1j8hjhhhjMhKtubj9)}(hhh](j>)}(hjoydevh]hjoydev}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j=hjhhhjMhKubjo)}(h\``joydev`` implements v0.x and v1.x Linux joystick API. See :ref:`joystick-api` for details.h](j))}(h ``joydev``h]hjoydev}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j(hjubh2 implements v0.x and v1.x Linux joystick API. See }(hjhhhNhNubh)}(h:ref:`joystick-api`h]j])}(hjh]h joystick-api}(hjhhhNhNubah}(h]h ](jhstdstd-refeh"]h$]h&]uh1j\hjubah}(h]h ]h"]h$]h&]refdocju refdomainjreftyperef refexplicitrefwarnj{ joystick-apiuh1hhjMhKhjubh for details.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jnhjMhKhjhhubjo)}(hKAs soon as any joystick is connected, it can be accessed in /dev/input on::h]hJAs soon as any joystick is connected, it can be accessed in /dev/input on:}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jnhjMhKhjhhubjN)}(hcrw-r--r-- 1 root root 13, 0 Apr 1 10:50 js0 crw-r--r-- 1 root root 13, 1 Apr 1 10:50 js1 crw-r--r-- 1 root root 13, 2 Apr 1 10:50 js2 crw-r--r-- 1 root root 13, 3 Apr 1 10:50 js3 ...h]hcrw-r--r-- 1 root root 13, 0 Apr 1 10:50 js0 crw-r--r-- 1 root root 13, 1 Apr 1 10:50 js1 crw-r--r-- 1 root root 13, 2 Apr 1 10:50 js2 crw-r--r-- 1 root root 13, 3 Apr 1 10:50 js3 ...}hjsbah}(h]h ]h"]h$]h&]hhuh1jMhjMhKhjhhubjo)}(htAnd so on up to js31 in legacy range, and additional nodes with minors above 256 if there are more joystick devices.h]htAnd so on up to js31 in legacy range, and additional nodes with minors above 256 if there are more joystick devices.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jnhjMhKhjhhubeh}(h]joydevah ]h"]joydevah$]h&]uh1j8hjhhhjMhKubeh}(h]id1ah ]h"]h$]j$ah&]uh1j8hjhhhjMhKOjKubj9)}(hhh](j>)}(hDevice driversh]hDevice drivers}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j=hj hhhjMhKubjo)}(h4Device drivers are the modules that generate events.h]h4Device drivers are the modules that generate events.}(hj( hhhNhNubah}(h]h ]h"]h$]h&]uh1jnhjMhKhj hhubj9)}(hhh](j>)}(h hid-generich]h hid-generic}(hj9 hhhNhNubah}(h]h ]h"]h$]h&]uh1j=hj6 hhhjMhKubjo)}(h``hid-generic`` is one of the largest and most complex driver of the whole suite. It handles all HID devices, and because there is a very wide variety of them, and because the USB HID specification isn't simple, it needs to be this big.h](j))}(h``hid-generic``h]h hid-generic}(hjK hhhNhNubah}(h]h ]h"]h$]h&]uh1j(hjG ubh is one of the largest and most complex driver of the whole suite. It handles all HID devices, and because there is a very wide variety of them, and because the USB HID specification isn’t simple, it needs to be this big.}(hjG hhhNhNubeh}(h]h ]h"]h$]h&]uh1jnhjMhKhj6 hhubjo)}(hkCurrently, it handles USB mice, joysticks, gamepads, steering wheels, keyboards, trackballs and digitizers.h]hkCurrently, it handles USB mice, joysticks, gamepads, steering wheels, keyboards, trackballs and digitizers.}(hjc hhhNhNubah}(h]h ]h"]h$]h&]uh1jnhjMhKhj6 hhubjo)}(hfHowever, USB uses HID also for monitor controls, speaker controls, UPSs, LCDs and many other purposes.h]hfHowever, USB uses HID also for monitor controls, speaker controls, UPSs, LCDs and many other purposes.}(hjq hhhNhNubah}(h]h ]h"]h$]h&]uh1jnhjMhKhj6 hhubjo)}(hThe monitor and speaker controls should be easy to add to the hid/input interface, but for the UPSs and LCDs it doesn't make much sense. For this, the hiddev interface was designed. See Documentation/hid/hiddev.rst for more information about it.h]hThe monitor and speaker controls should be easy to add to the hid/input interface, but for the UPSs and LCDs it doesn’t make much sense. For this, the hiddev interface was designed. See Documentation/hid/hiddev.rst for more information about it.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jnhjMhKhj6 hhubjo)}(hThe usage of the usbhid module is very simple, it takes no parameters, detects everything automatically and when a HID device is inserted, it detects it appropriately.h]hThe usage of the usbhid module is very simple, it takes no parameters, detects everything automatically and when a HID device is inserted, it detects it appropriately.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jnhjMhKhj6 hhubjo)}(hHowever, because the devices vary wildly, you might happen to have a device that doesn't work well. In that case #define DEBUG at the beginning of hid-core.c and send me the syslog traces.h]hHowever, because the devices vary wildly, you might happen to have a device that doesn’t work well. In that case #define DEBUG at the beginning of hid-core.c and send me the syslog traces.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jnhjMhKhj6 hhubeh}(h] hid-genericah ]h"] hid-genericah$]h&]uh1j8hj hhhjMhKubj9)}(hhh](j>)}(husbmouseh]husbmouse}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j=hj hhhjMhKubjo)}(hXoFor embedded systems, for mice with broken HID descriptors and just any other use when the big usbhid wouldn't be a good choice, there is the usbmouse driver. It handles USB mice only. It uses a simpler HIDBP protocol. This also means the mice must support this simpler protocol. Not all do. If you don't have any strong reason to use this module, use usbhid instead.h]hXsFor embedded systems, for mice with broken HID descriptors and just any other use when the big usbhid wouldn’t be a good choice, there is the usbmouse driver. It handles USB mice only. It uses a simpler HIDBP protocol. This also means the mice must support this simpler protocol. Not all do. If you don’t have any strong reason to use this module, use usbhid instead.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jnhjMhKhj hhubeh}(h]usbmouseah ]h"]usbmouseah$]h&]uh1j8hj hhhjMhKubj9)}(hhh](j>)}(husbkbdh]husbkbd}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j=hj hhhjMhKubjo)}(hMuch like usbmouse, this module talks to keyboards with a simplified HIDBP protocol. It's smaller, but doesn't support any extra special keys. Use usbhid instead if there isn't any special reason to use this.h]hMuch like usbmouse, this module talks to keyboards with a simplified HIDBP protocol. It’s smaller, but doesn’t support any extra special keys. Use usbhid instead if there isn’t any special reason to use this.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jnhjMhKhj hhubeh}(h]usbkbdah ]h"]usbkbdah$]h&]uh1j8hj hhhjMhKubj9)}(hhh](j>)}(hpsmouseh]hpsmouse}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j=hj hhhjMhKubjo)}(hThis is driver for all flavors of pointing devices using PS/2 protocol, including Synaptics and ALPS touchpads, Intellimouse Explorer devices, Logitech PS/2 mice and so on.h]hThis is driver for all flavors of pointing devices using PS/2 protocol, including Synaptics and ALPS touchpads, Intellimouse Explorer devices, Logitech PS/2 mice and so on.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jnhjMhKhj hhubeh}(h]psmouseah ]h"]psmouseah$]h&]uh1j8hj hhhjMhKubj9)}(hhh](j>)}(hatkbdh]hatkbd}(hj) hhhNhNubah}(h]h ]h"]h$]h&]uh1j=hj& hhhjMhKubjo)}(h'This is driver for PS/2 (AT) keyboards.h]h'This is driver for PS/2 (AT) keyboards.}(hj7 hhhNhNubah}(h]h ]h"]h$]h&]uh1jnhjMhKhj& hhubeh}(h]atkbdah ]h"]atkbdah$]h&]uh1j8hj hhhjMhKubj9)}(hhh](j>)}(hiforceh]hiforce}(hjP hhhNhNubah}(h]h ]h"]h$]h&]uh1j=hjM hhhjMhKubjo)}(hA driver for I-Force joysticks and wheels, both over USB and RS232. It includes Force Feedback support now, even though Immersion Corp. considers the protocol a trade secret and won't disclose a word about it.h]hA driver for I-Force joysticks and wheels, both over USB and RS232. It includes Force Feedback support now, even though Immersion Corp. considers the protocol a trade secret and won’t disclose a word about it.}(hj^ hhhNhNubah}(h]h ]h"]h$]h&]uh1jnhjMhKhjM hhubeh}(h]iforceah ]h"]iforceah$]h&]uh1j8hj hhhjMhKubeh}(h]id2ah ]h"]h$]jah&]uh1j8hjhhhjMhKjKubeh}(h]detailed-descriptionah ]h"]detailed descriptionah$]h&]uh1j8hj:hhhjMhKLubj9)}(hhh](j>)}(hVerifying if it worksh]hVerifying if it works}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j=hj hhhjMhKubjo)}(hTyping a couple keys on the keyboard should be enough to check that a keyboard works and is correctly connected to the kernel keyboard driver.h]hTyping a couple keys on the keyboard should be enough to check that a keyboard works and is correctly connected to the kernel keyboard driver.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jnhjMhKhj hhubjo)}(hDoing a ``cat /dev/input/mouse0`` (c, 13, 32) will verify that a mouse is also emulated; characters should appear if you move it.h](hDoing a }(hj hhhNhNubj))}(h``cat /dev/input/mouse0``h]hcat /dev/input/mouse0}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j(hj ubh` (c, 13, 32) will verify that a mouse is also emulated; characters should appear if you move it.}(hj hhhNhNubeh}(h]h ]h"]h$]h&]uh1jnhjMhKhj hhubjo)}(h}You can test the joystick emulation with the ``jstest`` utility, available in the joystick package (see :ref:`joystick-doc`).h](h-You can test the joystick emulation with the }(hj hhhNhNubj))}(h ``jstest``h]hjstest}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j(hj ubh1 utility, available in the joystick package (see }(hj hhhNhNubh)}(h:ref:`joystick-doc`h]j])}(hj h]h joystick-doc}(hj hhhNhNubah}(h]h ](jhstdstd-refeh"]h$]h&]uh1j\hj ubah}(h]h ]h"]h$]h&]refdocju refdomainj reftyperef refexplicitrefwarnj{ joystick-docuh1hhjMhKhj ubh).}(hj hhhNhNubeh}(h]h ]h"]h$]h&]uh1jnhjMhKhj hhubjo)}(h;You can test the event devices with the ``evtest`` utility.h](h(You can test the event devices with the }(hj hhhNhNubj))}(h ``evtest``h]hevtest}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j(hj ubh utility.}(hj hhhNhNubeh}(h]h ]h"]h$]h&]uh1jnhjMhKhj hhubhtarget)}(h.. _event-interface:h]h}(h]h ]h"]h$]h&]refidevent-interfaceuh1j& hMThj hhhjMubeh}(h]verifying-if-it-worksah ]h"]verifying if it worksah$]h&]uh1j8hj:hhhjMhKubj9)}(hhh](j>)}(hEvent interfaceh]hEvent interface}(hj? hhhNhNubah}(h]h ]h"]h$]h&]uh1j=hj< hhhjMhMubjo)}(hYou can use blocking and nonblocking reads, and also select() on the /dev/input/eventX devices, and you'll always get a whole number of input events on a read. Their layout is::h]hYou can use blocking and nonblocking reads, and also select() on the /dev/input/eventX devices, and you’ll always get a whole number of input events on a read. Their layout is:}(hjM hhhNhNubah}(h]h ]h"]h$]h&]uh1jnhjMhMhj< hhubjN)}(hstruct input_event { struct timeval time; unsigned short type; unsigned short code; int value; };h]hstruct input_event { struct timeval time; unsigned short type; unsigned short code; int value; };}hj[ sbah}(h]h ]h"]h$]h&]hhuh1jMhjMhMhj< hhubjo)}(h``time`` is the timestamp, it returns the time at which the event happened. Type is for example EV_REL for relative movement, EV_KEY for a keypress or release. More types are defined in include/uapi/linux/input-event-codes.h.h](j))}(h``time``h]htime}(hjm hhhNhNubah}(h]h ]h"]h$]h&]uh1j(hji ubh is the timestamp, it returns the time at which the event happened. Type is for example EV_REL for relative movement, EV_KEY for a keypress or release. More types are defined in include/uapi/linux/input-event-codes.h.}(hji hhhNhNubeh}(h]h ]h"]h$]h&]uh1jnhjMhMhj< hhubjo)}(h``code`` is event code, for example REL_X or KEY_BACKSPACE, again a complete list is in include/uapi/linux/input-event-codes.h.h](j))}(h``code``h]hcode}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j(hj ubhw is event code, for example REL_X or KEY_BACKSPACE, again a complete list is in include/uapi/linux/input-event-codes.h.}(hj hhhNhNubeh}(h]h ]h"]h$]h&]uh1jnhjMhMhj< hhubjo)}(h``value`` is the value the event carries. Either a relative change for EV_REL, absolute new value for EV_ABS (joysticks ...), or 0 for EV_KEY for release, 1 for keypress and 2 for autorepeat.h](j))}(h ``value``h]hvalue}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j(hj ubh is the value the event carries. Either a relative change for EV_REL, absolute new value for EV_ABS (joysticks ...), or 0 for EV_KEY for release, 1 for keypress and 2 for autorepeat.}(hj hhhNhNubeh}(h]h ]h"]h$]h&]uh1jnhjMhMhj< hhubjo)}(hKSee :ref:`input-event-codes` for more information about various even codes.h](hSee }(hj hhhNhNubh)}(h:ref:`input-event-codes`h]j])}(hj h]hinput-event-codes}(hj hhhNhNubah}(h]h ](jhstdstd-refeh"]h$]h&]uh1j\hj ubah}(h]h ]h"]h$]h&]refdocju refdomainj reftyperef refexplicitrefwarnj{input-event-codesuh1hhjMhMhj ubh/ for more information about various even codes.}(hj hhhNhNubeh}(h]h ]h"]h$]h&]uh1jnhjMhMhj< hhubeh}(h](j3 id3eh ]h"](event interfaceevent-interfaceeh$]h&]uh1j8hj:hhhjMhMexpect_referenced_by_name}j j( sexpect_referenced_by_id}j3 j( subeh}(h] introductionah ]h"] introductionah$]h&]uh1j8hhhhhjMhKubeh}(h]h ]h"]h$]h&]sourcejMuh1hcurrent_sourceN current_lineNsettingsdocutils.frontendValues)}(j=N generatorN datestampN source_linkN source_urlN toc_backlinksentryfootnote_backlinksK sectnum_xformKstrip_commentsNstrip_elements_with_classesN strip_classesN report_levelK halt_levelKexit_status_levelKdebugNwarning_streamN tracebackinput_encoding utf-8-siginput_encoding_error_handlerstrictoutput_encodingutf-8output_encoding_error_handlerj' error_encodingutf-8error_encoding_error_handlerbackslashreplace language_codeenrecord_dependenciesNconfigN id_prefixhauto_id_prefixid dump_settingsNdump_internalsNdump_transformsNdump_pseudo_xmlNexpose_internalsNstrict_visitorN_disable_configN_sourcejM _destinationN _config_files]7/var/lib/git/docbuild/linux/Documentation/docutils.confafile_insertion_enabled raw_enabledKline_length_limitM'pep_referencesN pep_base_urlhttps://peps.python.org/pep_file_url_templatepep-%04drfc_referencesN rfc_base_url&https://datatracker.ietf.org/doc/html/ tab_widthKtrim_footnote_reference_spacesyntax_highlightlong smart_quotessmartquotes_locales]character_level_inline_markupdoctitle_xform docinfo_xformKsectsubtitle_xform image_loadinglinkembed_stylesheetcloak_email_addressessection_self_linkenvNubreporterNindirect_targets]substitution_defs}(hhhhhhhhj jjjj*jj9j-jHj<jWjKjfjZjujijjxjjjjjjjjjjjjjjjjj jjjj)jj8j,jGj;jVjJjejYjtjhjjwjjjjjjjjjjjjjjjjj jjj j(jj7j+jFj:jUjIjdjXjsjgjjvjjjjjjjjjjjjjjjjj jjj j'jj6j*jEj9jTjHjcjWjrjfjjujjjjjjjjjjjjjjjjjjjj j&jj5j)usubstitution_names}(amphЌaposhߌasthbrvbarhbsolj centjcolonj*commaj9commatjHcopyjWcurrenjfdarrjudegjdividejdollarjequalsjexcljfrac12jfrac14jfrac18jfrac34jfrac38j frac58jfrac78j)gtj8halfjGhorbarjVhyphenjeiexcljtiquestjlaquojlarrjlcubjldquojlowbarjlparjlsqbjlsquojltj microjmiddotj(nbspj7notjFnumjUohmjdordfjsordmjparajpercntjperiodjplusjplusmnjpoundjquestjquotjraquoj rarrjrcubj'rdquoj6regjErparjTrsqbjcrsquojrsectjsemijshyjsoljsungjsup1jsup2jsup3jtimesjtradejuarrjverbarj&yenj5urefnames}refids}j3 ]j( asnameids}(j j j+j(device driversNevent handlersNjjj j} jjjjjjj j j j j j j j j# j jJ jG jq jn j9 j6 j j3 j j u nametypes}(j j+j j jj jjjj j j j j# jJ jq j9 j j uh}(j j:j(jjjj jjj.j} jj jjjjjjjj jjv j j j6 j j j j j j jG j& jn jM j6 j j3 j< j j< u footnote_refs} citation_refs} autofootnotes]autofootnote_refs]symbol_footnotes]symbol_footnote_refs] footnotes] citations]autofootnote_startKsymbol_footnote_startK id_counter collectionsCounter}j5 KsRparse_messages](hsystem_message)}(hhh]jo)}(h1Duplicate implicit target name: "event handlers".h]h5Duplicate implicit target name: “event handlers”.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jnhj ubah}(h]h ]h"]h$]h&]j alevelKtypeINFOsourcejMlineKOuh1j hjhhhjMhKOubj )}(hhh]jo)}(h1Duplicate implicit target name: "device drivers".h]h5Duplicate implicit target name: “device drivers”.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jnhj ubah}(h]h ]h"]h$]h&]jv alevelKtypej sourcejMlineKuh1j hj hhhjMhKubetransform_messages]j )}(hhh]jo)}(hhh]h5Hyperlink target "event-interface" is not referenced.}hj sbah}(h]h ]h"]h$]h&]uh1jnhj ubah}(h]h ]h"]h$]h&]levelKtypej sourcejMlineMTuh1j uba transformerN include_log]Documentation/input/input.rst(NNNNta decorationNhhub.