€•XlŒsphinx.addnodes”Œdocument”“”)”}”(Œ rawsource”Œ”Œchildren”]”(Œ translations”Œ LanguagesNode”“”)”}”(hhh]”(hŒ pending_xref”“”)”}”(hhh]”Œdocutils.nodes”ŒText”“”ŒChinese (Simplified)”…””}”Œparent”hsbaŒ attributes”}”(Œids”]”Œclasses”]”Œnames”]”Œdupnames”]”Œbackrefs”]”Œ refdomain”Œstd”Œreftype”Œdoc”Œ reftarget”Œ /translations/zh_CN/input/userio”Œmodname”NŒ classname”NŒ refexplicit”ˆuŒtagname”hhh ubh)”}”(hhh]”hŒChinese (Traditional)”…””}”hh2sbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ /translations/zh_TW/input/userio”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubh)”}”(hhh]”hŒItalian”…””}”hhFsbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ /translations/it_IT/input/userio”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubh)”}”(hhh]”hŒJapanese”…””}”hhZsbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ /translations/ja_JP/input/userio”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubh)”}”(hhh]”hŒKorean”…””}”hhnsbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ /translations/ko_KR/input/userio”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubh)”}”(hhh]”hŒPortuguese (Brazilian)”…””}”hh‚sbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ /translations/pt_BR/input/userio”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubh)”}”(hhh]”hŒSpanish”…””}”hh–sbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ /translations/sp_SP/input/userio”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubeh}”(h]”h ]”h"]”h$]”h&]”Œcurrent_language”ŒEnglish”uh1h hhŒ _document”hŒsource”NŒline”NubhŒcomment”“”)”}”(hŒ4This data file has been placed in the public domain.”h]”hŒ4This data file has been placed in the public domain.”…””}”hh·sbah}”(h]”h ]”h"]”h$]”h&]”Œ xml:space”Œpreserve”uh1hµhhh²hh³Œo/srv/docbuild/lib/venvs/build-kernel-docs/lib64/python3.9/site-packages/docutils/parsers/rst/include/isonum.txt”h´Kubh¶)”}”(hŒ¸Derived from the Unicode character mappings available from . Processed by unicode2rstsubs.py, part of Docutils: .”h]”hŒ¸Derived from the Unicode character mappings available from . Processed by unicode2rstsubs.py, part of Docutils: .”…””}”hhÈsbah}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1hµhhh²hh³hÇh´KubhŒsubstitution_definition”“”)”}”(hŒ*.. |amp| unicode:: U+00026 .. AMPERSAND”h]”hŒ&”…””}”hhØsbah}”(h]”h ]”h"]”Œamp”ah$]”h&]”uh1hÖh³hÇh´Khhh²hubh×)”}”(hŒ+.. |apos| unicode:: U+00027 .. APOSTROPHE”h]”hŒ'”…””}”hhçsbah}”(h]”h ]”h"]”Œapos”ah$]”h&]”uh1hÖh³hÇh´Khhh²hubh×)”}”(hŒ).. |ast| unicode:: U+0002A .. ASTERISK”h]”hŒ*”…””}”hhösbah}”(h]”h ]”h"]”Œast”ah$]”h&]”uh1hÖh³hÇh´K hhh²hubh×)”}”(hŒ+.. |brvbar| unicode:: U+000A6 .. BROKEN BAR”h]”hŒ¦”…””}”hjsbah}”(h]”h ]”h"]”Œbrvbar”ah$]”h&]”uh1hÖh³hÇh´K hhh²hubh×)”}”(hŒ0.. |bsol| unicode:: U+0005C .. REVERSE SOLIDUS”h]”hŒ\”…””}”hjsbah}”(h]”h ]”h"]”Œbsol”ah$]”h&]”uh1hÖh³hÇh´K hhh²hubh×)”}”(hŒ*.. |cent| unicode:: U+000A2 .. CENT SIGN”h]”hŒ¢”…””}”hj#sbah}”(h]”h ]”h"]”Œcent”ah$]”h&]”uh1hÖh³hÇh´K hhh²hubh×)”}”(hŒ&.. |colon| unicode:: U+0003A .. COLON”h]”hŒ:”…””}”hj2sbah}”(h]”h ]”h"]”Œcolon”ah$]”h&]”uh1hÖh³hÇh´K hhh²hubh×)”}”(hŒ&.. |comma| unicode:: U+0002C .. COMMA”h]”hŒ,”…””}”hjAsbah}”(h]”h ]”h"]”Œcomma”ah$]”h&]”uh1hÖh³hÇh´Khhh²hubh×)”}”(hŒ... |commat| unicode:: U+00040 .. COMMERCIAL AT”h]”hŒ@”…””}”hjPsbah}”(h]”h ]”h"]”Œcommat”ah$]”h&]”uh1hÖh³hÇh´Khhh²hubh×)”}”(hŒ/.. |copy| unicode:: U+000A9 .. COPYRIGHT SIGN”h]”hŒ©”…””}”hj_sbah}”(h]”h ]”h"]”Œcopy”ah$]”h&]”uh1hÖh³hÇh´Khhh²hubh×)”}”(hŒ... |curren| unicode:: U+000A4 .. CURRENCY SIGN”h]”hŒ¤”…””}”hjnsbah}”(h]”h ]”h"]”Œcurren”ah$]”h&]”uh1hÖh³hÇh´Khhh²hubh×)”}”(hŒ0.. |darr| unicode:: U+02193 .. DOWNWARDS ARROW”h]”hŒ↓”…””}”hj}sbah}”(h]”h ]”h"]”Œdarr”ah$]”h&]”uh1hÖh³hÇh´Khhh²hubh×)”}”(hŒ,.. |deg| unicode:: U+000B0 .. DEGREE SIGN”h]”hŒ°”…””}”hjŒsbah}”(h]”h ]”h"]”Œdeg”ah$]”h&]”uh1hÖh³hÇh´Khhh²hubh×)”}”(hŒ... |divide| unicode:: U+000F7 .. DIVISION SIGN”h]”hŒ÷”…””}”hj›sbah}”(h]”h ]”h"]”Œdivide”ah$]”h&]”uh1hÖh³hÇh´Khhh²hubh×)”}”(hŒ,.. |dollar| unicode:: U+00024 .. DOLLAR SIGN”h]”hŒ$”…””}”hjªsbah}”(h]”h ]”h"]”Œdollar”ah$]”h&]”uh1hÖh³hÇh´Khhh²hubh×)”}”(hŒ,.. |equals| unicode:: U+0003D .. EQUALS SIGN”h]”hŒ=”…””}”hj¹sbah}”(h]”h ]”h"]”Œequals”ah$]”h&]”uh1hÖh³hÇh´Khhh²hubh×)”}”(hŒ1.. |excl| unicode:: U+00021 .. EXCLAMATION MARK”h]”hŒ!”…””}”hjÈsbah}”(h]”h ]”h"]”Œexcl”ah$]”h&]”uh1hÖh³hÇh´Khhh²hubh×)”}”(hŒ9.. |frac12| unicode:: U+000BD .. VULGAR FRACTION ONE HALF”h]”hŒ½”…””}”hj×sbah}”(h]”h ]”h"]”Œfrac12”ah$]”h&]”uh1hÖh³hÇh´Khhh²hubh×)”}”(hŒ<.. |frac14| unicode:: U+000BC .. VULGAR FRACTION ONE QUARTER”h]”hŒ¼”…””}”hjæsbah}”(h]”h ]”h"]”Œfrac14”ah$]”h&]”uh1hÖh³hÇh´Khhh²hubh×)”}”(hŒ;.. |frac18| unicode:: U+0215B .. VULGAR FRACTION ONE EIGHTH”h]”hŒâ…›”…””}”hjõsbah}”(h]”h ]”h"]”Œfrac18”ah$]”h&]”uh1hÖh³hÇh´Khhh²hubh×)”}”(hŒ?.. |frac34| unicode:: U+000BE .. VULGAR FRACTION THREE QUARTERS”h]”hŒ¾”…””}”hjsbah}”(h]”h ]”h"]”Œfrac34”ah$]”h&]”uh1hÖh³hÇh´Khhh²hubh×)”}”(hŒ>.. |frac38| unicode:: U+0215C .. VULGAR FRACTION THREE EIGHTHS”h]”hŒâ…œ”…””}”hjsbah}”(h]”h ]”h"]”Œfrac38”ah$]”h&]”uh1hÖh³hÇh´Khhh²hubh×)”}”(hŒ=.. |frac58| unicode:: U+0215D .. VULGAR FRACTION FIVE EIGHTHS”h]”hŒâ…”…””}”hj"sbah}”(h]”h ]”h"]”Œfrac58”ah$]”h&]”uh1hÖh³hÇh´Khhh²hubh×)”}”(hŒ>.. |frac78| unicode:: U+0215E .. VULGAR FRACTION SEVEN EIGHTHS”h]”hŒâ…ž”…””}”hj1sbah}”(h]”h ]”h"]”Œfrac78”ah$]”h&]”uh1hÖh³hÇh´Khhh²hubh×)”}”(hŒ2.. |gt| unicode:: U+0003E .. GREATER-THAN SIGN”h]”hŒ>”…””}”hj@sbah}”(h]”h ]”h"]”Œgt”ah$]”h&]”uh1hÖh³hÇh´Khhh²hubh×)”}”(hŒ9.. |half| unicode:: U+000BD .. VULGAR FRACTION ONE HALF”h]”hŒ½”…””}”hjOsbah}”(h]”h ]”h"]”Œhalf”ah$]”h&]”uh1hÖh³hÇh´K hhh²hubh×)”}”(hŒ/.. |horbar| unicode:: U+02015 .. HORIZONTAL BAR”h]”hŒ―”…””}”hj^sbah}”(h]”h ]”h"]”Œhorbar”ah$]”h&]”uh1hÖh³hÇh´K!hhh²hubh×)”}”(hŒ'.. |hyphen| unicode:: U+02010 .. HYPHEN”h]”hŒ—…””}”hjmsbah}”(h]”h ]”h"]”Œhyphen”ah$]”h&]”uh1hÖh³hÇh´K"hhh²hubh×)”}”(hŒ:.. |iexcl| unicode:: U+000A1 .. INVERTED EXCLAMATION MARK”h]”hŒ¡”…””}”hj|sbah}”(h]”h ]”h"]”Œiexcl”ah$]”h&]”uh1hÖh³hÇh´K#hhh²hubh×)”}”(hŒ7.. |iquest| unicode:: U+000BF .. INVERTED QUESTION MARK”h]”hŒ¿”…””}”hj‹sbah}”(h]”h ]”h"]”Œiquest”ah$]”h&]”uh1hÖh³hÇh´K$hhh²hubh×)”}”(hŒJ.. |laquo| unicode:: U+000AB .. LEFT-POINTING DOUBLE ANGLE QUOTATION MARK”h]”hŒ«”…””}”hjšsbah}”(h]”h ]”h"]”Œlaquo”ah$]”h&]”uh1hÖh³hÇh´K%hhh²hubh×)”}”(hŒ0.. |larr| unicode:: U+02190 .. LEFTWARDS ARROW”h]”hŒ↔…””}”hj©sbah}”(h]”h ]”h"]”Œlarr”ah$]”h&]”uh1hÖh³hÇh´K&hhh²hubh×)”}”(hŒ3.. |lcub| unicode:: U+0007B .. LEFT CURLY BRACKET”h]”hŒ{”…””}”hj¸sbah}”(h]”h ]”h"]”Œlcub”ah$]”h&]”uh1hÖh³hÇh´K'hhh²hubh×)”}”(hŒ;.. |ldquo| unicode:: U+0201C .. LEFT DOUBLE QUOTATION MARK”h]”hŒ“”…””}”hjÇsbah}”(h]”h ]”h"]”Œldquo”ah$]”h&]”uh1hÖh³hÇh´K(hhh²hubh×)”}”(hŒ).. |lowbar| unicode:: U+0005F .. LOW LINE”h]”hŒ_”…””}”hjÖsbah}”(h]”h ]”h"]”Œlowbar”ah$]”h&]”uh1hÖh³hÇh´K)hhh²hubh×)”}”(hŒ1.. |lpar| unicode:: U+00028 .. LEFT PARENTHESIS”h]”hŒ(”…””}”hjåsbah}”(h]”h ]”h"]”Œlpar”ah$]”h&]”uh1hÖh³hÇh´K*hhh²hubh×)”}”(hŒ4.. |lsqb| unicode:: U+0005B .. LEFT SQUARE BRACKET”h]”hŒ[”…””}”hjôsbah}”(h]”h ]”h"]”Œlsqb”ah$]”h&]”uh1hÖh³hÇh´K+hhh²hubh×)”}”(hŒ;.. |lsquo| unicode:: U+02018 .. LEFT SINGLE QUOTATION MARK”h]”hŒ‘”…””}”hjsbah}”(h]”h ]”h"]”Œlsquo”ah$]”h&]”uh1hÖh³hÇh´K,hhh²hubh×)”}”(hŒ/.. |lt| unicode:: U+0003C .. LESS-THAN SIGN”h]”hŒ<”…””}”hjsbah}”(h]”h ]”h"]”Œlt”ah$]”h&]”uh1hÖh³hÇh´K-hhh²hubh×)”}”(hŒ+.. |micro| unicode:: U+000B5 .. MICRO SIGN”h]”hŒµ”…””}”hj!sbah}”(h]”h ]”h"]”Œmicro”ah$]”h&]”uh1hÖh³hÇh´K.hhh²hubh×)”}”(hŒ+.. |middot| unicode:: U+000B7 .. MIDDLE DOT”h]”hŒ·”…””}”hj0sbah}”(h]”h ]”h"]”Œmiddot”ah$]”h&]”uh1hÖh³hÇh´K/hhh²hubh×)”}”(hŒ/.. |nbsp| unicode:: U+000A0 .. NO-BREAK SPACE”h]”hŒ ”…””}”hj?sbah}”(h]”h ]”h"]”Œnbsp”ah$]”h&]”uh1hÖh³hÇh´K0hhh²hubh×)”}”(hŒ).. |not| unicode:: U+000AC .. NOT SIGN”h]”hŒ¬”…””}”hjNsbah}”(h]”h ]”h"]”Œnot”ah$]”h&]”uh1hÖh³hÇh´K1hhh²hubh×)”}”(hŒ,.. |num| unicode:: U+00023 .. NUMBER SIGN”h]”hŒ#”…””}”hj]sbah}”(h]”h ]”h"]”Œnum”ah$]”h&]”uh1hÖh³hÇh´K2hhh²hubh×)”}”(hŒ).. |ohm| unicode:: U+02126 .. OHM SIGN”h]”hŒΩ”…””}”hjlsbah}”(h]”h ]”h"]”Œohm”ah$]”h&]”uh1hÖh³hÇh´K3hhh²hubh×)”}”(hŒ;.. |ordf| unicode:: U+000AA .. FEMININE ORDINAL INDICATOR”h]”hŒª”…””}”hj{sbah}”(h]”h ]”h"]”Œordf”ah$]”h&]”uh1hÖh³hÇh´K4hhh²hubh×)”}”(hŒ<.. |ordm| unicode:: U+000BA .. MASCULINE ORDINAL INDICATOR”h]”hŒº”…””}”hjŠsbah}”(h]”h ]”h"]”Œordm”ah$]”h&]”uh1hÖh³hÇh´K5hhh²hubh×)”}”(hŒ-.. |para| unicode:: U+000B6 .. PILCROW SIGN”h]”hŒ¶”…””}”hj™sbah}”(h]”h ]”h"]”Œpara”ah$]”h&]”uh1hÖh³hÇh´K6hhh²hubh×)”}”(hŒ-.. |percnt| unicode:: U+00025 .. PERCENT SIGN”h]”hŒ%”…””}”hj¨sbah}”(h]”h ]”h"]”Œpercnt”ah$]”h&]”uh1hÖh³hÇh´K7hhh²hubh×)”}”(hŒ*.. |period| unicode:: U+0002E .. FULL STOP”h]”hŒ.”…””}”hj·sbah}”(h]”h ]”h"]”Œperiod”ah$]”h&]”uh1hÖh³hÇh´K8hhh²hubh×)”}”(hŒ*.. |plus| unicode:: U+0002B .. PLUS SIGN”h]”hŒ+”…””}”hjÆsbah}”(h]”h ]”h"]”Œplus”ah$]”h&]”uh1hÖh³hÇh´K9hhh²hubh×)”}”(hŒ0.. |plusmn| unicode:: U+000B1 .. PLUS-MINUS SIGN”h]”hŒ±”…””}”hjÕsbah}”(h]”h ]”h"]”Œplusmn”ah$]”h&]”uh1hÖh³hÇh´K:hhh²hubh×)”}”(hŒ+.. |pound| unicode:: U+000A3 .. POUND SIGN”h]”hŒ£”…””}”hjäsbah}”(h]”h ]”h"]”Œpound”ah$]”h&]”uh1hÖh³hÇh´K;hhh²hubh×)”}”(hŒ... |quest| unicode:: U+0003F .. QUESTION MARK”h]”hŒ?”…””}”hjósbah}”(h]”h ]”h"]”Œquest”ah$]”h&]”uh1hÖh³hÇh´Khhh²hubh×)”}”(hŒ1.. |rarr| unicode:: U+02192 .. RIGHTWARDS ARROW”h]”hŒ→”…””}”hj sbah}”(h]”h ]”h"]”Œrarr”ah$]”h&]”uh1hÖh³hÇh´K?hhh²hubh×)”}”(hŒ4.. |rcub| unicode:: U+0007D .. RIGHT CURLY BRACKET”h]”hŒ}”…””}”hj/sbah}”(h]”h ]”h"]”Œrcub”ah$]”h&]”uh1hÖh³hÇh´K@hhh²hubh×)”}”(hŒ<.. |rdquo| unicode:: U+0201D .. RIGHT DOUBLE QUOTATION MARK”h]”hŒ—…””}”hj>sbah}”(h]”h ]”h"]”Œrdquo”ah$]”h&]”uh1hÖh³hÇh´KAhhh²hubh×)”}”(hŒ0.. |reg| unicode:: U+000AE .. REGISTERED SIGN”h]”hŒ®”…””}”hjMsbah}”(h]”h ]”h"]”Œreg”ah$]”h&]”uh1hÖh³hÇh´KBhhh²hubh×)”}”(hŒ2.. |rpar| unicode:: U+00029 .. RIGHT PARENTHESIS”h]”hŒ)”…””}”hj\sbah}”(h]”h ]”h"]”Œrpar”ah$]”h&]”uh1hÖh³hÇh´KChhh²hubh×)”}”(hŒ5.. |rsqb| unicode:: U+0005D .. RIGHT SQUARE BRACKET”h]”hŒ]”…””}”hjksbah}”(h]”h ]”h"]”Œrsqb”ah$]”h&]”uh1hÖh³hÇh´KDhhh²hubh×)”}”(hŒ<.. |rsquo| unicode:: U+02019 .. RIGHT SINGLE QUOTATION MARK”h]”hŒ’”…””}”hjzsbah}”(h]”h ]”h"]”Œrsquo”ah$]”h&]”uh1hÖh³hÇh´KEhhh²hubh×)”}”(hŒ-.. |sect| unicode:: U+000A7 .. SECTION SIGN”h]”hŒ§”…””}”hj‰sbah}”(h]”h ]”h"]”Œsect”ah$]”h&]”uh1hÖh³hÇh´KFhhh²hubh×)”}”(hŒ*.. |semi| unicode:: U+0003B .. SEMICOLON”h]”hŒ;”…””}”hj˜sbah}”(h]”h ]”h"]”Œsemi”ah$]”h&]”uh1hÖh³hÇh´KGhhh²hubh×)”}”(hŒ,.. |shy| unicode:: U+000AD .. SOFT HYPHEN”h]”hŒ­”…””}”hj§sbah}”(h]”h ]”h"]”Œshy”ah$]”h&]”uh1hÖh³hÇh´KHhhh²hubh×)”}”(hŒ(.. |sol| unicode:: U+0002F .. SOLIDUS”h]”hŒ/”…””}”hj¶sbah}”(h]”h ]”h"]”Œsol”ah$]”h&]”uh1hÖh³hÇh´KIhhh²hubh×)”}”(hŒ,.. |sung| unicode:: U+0266A .. EIGHTH NOTE”h]”hŒ♪”…””}”hjÅsbah}”(h]”h ]”h"]”Œsung”ah$]”h&]”uh1hÖh³hÇh´KJhhh²hubh×)”}”(hŒ0.. |sup1| unicode:: U+000B9 .. SUPERSCRIPT ONE”h]”hŒ¹”…””}”hjÔsbah}”(h]”h ]”h"]”Œsup1”ah$]”h&]”uh1hÖh³hÇh´KKhhh²hubh×)”}”(hŒ0.. |sup2| unicode:: U+000B2 .. SUPERSCRIPT TWO”h]”hŒ²”…””}”hjãsbah}”(h]”h ]”h"]”Œsup2”ah$]”h&]”uh1hÖh³hÇh´KLhhh²hubh×)”}”(hŒ2.. |sup3| unicode:: U+000B3 .. SUPERSCRIPT THREE”h]”hŒ³”…””}”hjòsbah}”(h]”h ]”h"]”Œsup3”ah$]”h&]”uh1hÖh³hÇh´KMhhh²hubh×)”}”(hŒ4.. |times| unicode:: U+000D7 .. MULTIPLICATION SIGN”h]”hŒ×”…””}”hjsbah}”(h]”h ]”h"]”Œtimes”ah$]”h&]”uh1hÖh³hÇh´KNhhh²hubh×)”}”(hŒ0.. |trade| unicode:: U+02122 .. TRADE MARK SIGN”h]”hŒâ„¢”…””}”hjsbah}”(h]”h ]”h"]”Œtrade”ah$]”h&]”uh1hÖh³hÇh´KOhhh²hubh×)”}”(hŒ... |uarr| unicode:: U+02191 .. UPWARDS ARROW”h]”hŒ↑”…””}”hjsbah}”(h]”h ]”h"]”Œuarr”ah$]”h&]”uh1hÖh³hÇh´KPhhh²hubh×)”}”(hŒ... |verbar| unicode:: U+0007C .. VERTICAL LINE”h]”hŒ|”…””}”hj.sbah}”(h]”h ]”h"]”Œverbar”ah$]”h&]”uh1hÖh³hÇh´KQhhh²hubh×)”}”(hŒ*.. |yen| unicode:: U+000A5 .. YEN SIGN ”h]”hŒÂ¥”…””}”hj=sbah}”(h]”h ]”h"]”Œyen”ah$]”h&]”uh1hÖh³hÇh´KRhhh²hubhŒsection”“”)”}”(hhh]”(hŒtitle”“”)”}”(hŒThe userio Protocol”h]”hŒThe userio Protocol”…””}”(hjSh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jQhjNh²hh³Œ:/var/lib/git/docbuild/linux/Documentation/input/userio.rst”h´KubhŒ field_list”“”)”}”(hhh]”hŒfield”“”)”}”(hhh]”(hŒ field_name”“”)”}”(hŒ Copyright”h]”hŒ Copyright”…””}”(hjnh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jlhjih³jah´KubhŒ field_body”“”)”}”(hŒ9|copy| 2015 Stephen Chandler Paul ”h]”hŒ paragraph”“”)”}”(hŒ8|copy| 2015 Stephen Chandler Paul ”h]”(hŒ©”…””}”(hj„h²hh³Nh´NubhŒ 2015 Stephen Chandler Paul <”…””}”(hj„h²hh³Nh´NubhŒ reference”“”)”}”(hŒthatslyude@gmail.com”h]”hŒthatslyude@gmail.com”…””}”(hj’h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”Œrefuri”Œmailto:thatslyude@gmail.com”uh1jhj„ubhŒ>”…””}”(hj„h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1j‚h³jah´Khj~ubah}”(h]”h ]”h"]”h$]”h&]”uh1j|hjiubeh}”(h]”h ]”h"]”h$]”h&]”uh1jgh³jah´Khjdh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jbhjNh²hh³jah´Kubjƒ)”}”(hŒSponsored by Red Hat”h]”hŒSponsored by Red Hat”…””}”(hj¾h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j‚h³jah´K hjNh²hubjM)”}”(hhh]”(jR)”}”(hŒ Introduction”h]”hŒ Introduction”…””}”(hjÏh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jQhjÌh²hh³jah´Kubjƒ)”}”(hX•This module is intended to try to make the lives of input driver developers easier by allowing them to test various serio devices (mainly the various touchpads found on laptops) without having to have the physical device in front of them. userio accomplishes this by allowing any privileged userspace program to directly interact with the kernel's serio driver and control a virtual serio port from there.”h]”hX—This module is intended to try to make the lives of input driver developers easier by allowing them to test various serio devices (mainly the various touchpads found on laptops) without having to have the physical device in front of them. userio accomplishes this by allowing any privileged userspace program to directly interact with the kernel’s serio driver and control a virtual serio port from there.”…””}”(hjÝh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j‚h³jah´KhjÌh²hubeh}”(h]”Œ introduction”ah ]”h"]”Œ introduction”ah$]”h&]”uh1jLhjNh²hh³jah´KubjM)”}”(hhh]”(jR)”}”(hŒUsage overview”h]”hŒUsage overview”…””}”(hjöh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jQhjóh²hh³jah´Kubjƒ)”}”(hXIn order to interact with the userio kernel module, one simply opens the /dev/userio character device in their applications. Commands are sent to the kernel module by writing to the device, and any data received from the serio driver is read as-is from the /dev/userio device. All of the structures and macros you need to interact with the device are defined in and .”h]”hXIn order to interact with the userio kernel module, one simply opens the /dev/userio character device in their applications. Commands are sent to the kernel module by writing to the device, and any data received from the serio driver is read as-is from the /dev/userio device. All of the structures and macros you need to interact with the device are defined in and .”…””}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j‚h³jah´Khjóh²hubeh}”(h]”Œusage-overview”ah ]”h"]”Œusage overview”ah$]”h&]”uh1jLhjNh²hh³jah´KubjM)”}”(hhh]”(jR)”}”(hŒCommand Structure”h]”hŒCommand Structure”…””}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jQhjh²hh³jah´K"ubjƒ)”}”(hŒCThe struct used for sending commands to /dev/userio is as follows::”h]”hŒBThe struct used for sending commands to /dev/userio is as follows:”…””}”(hj+h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j‚h³jah´K$hjh²hubhŒ literal_block”“”)”}”(hŒ. ``data`` is the argument that goes along with the command. In the event that the command doesn't have an argument, this field can be left untouched and will be ignored by the kernel. Each command should be sent by writing the struct directly to the character device. In the event that the command you send is invalid, an error will be returned by the character device and a more descriptive error will be printed to the kernel log. Only one command can be sent at a time, any additional data written to the character device after the initial command will be ignored.”h]”(hŒliteral”“”)”}”(hŒ``type``”h]”hŒtype”…””}”(hjOh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jMhjIubhŒ} describes the type of command that is being sent. This can be any one of the USERIO_CMD macros defined in . ”…””}”(hjIh²hh³Nh´NubjN)”}”(hŒ``data``”h]”hŒdata”…””}”(hjah²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jMhjIubhX0 is the argument that goes along with the command. In the event that the command doesn’t have an argument, this field can be left untouched and will be ignored by the kernel. Each command should be sent by writing the struct directly to the character device. In the event that the command you send is invalid, an error will be returned by the character device and a more descriptive error will be printed to the kernel log. Only one command can be sent at a time, any additional data written to the character device after the initial command will be ignored.”…””}”(hjIh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1j‚h³jah´K+hjh²hubjƒ)”}”(hŒ8To close the virtual serio port, just close /dev/userio.”h]”hŒ8To close the virtual serio port, just close /dev/userio.”…””}”(hjyh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j‚h³jah´K5hjh²hubeh}”(h]”Œcommand-structure”ah ]”h"]”Œcommand structure”ah$]”h&]”uh1jLhjNh²hh³jah´K"ubjM)”}”(hhh]”(jR)”}”(hŒCommands”h]”hŒCommands”…””}”(hj’h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jQhjh²hh³jah´K8ubjM)”}”(hhh]”(jR)”}”(hŒUSERIO_CMD_REGISTER”h]”hŒUSERIO_CMD_REGISTER”…””}”(hj£h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jQhj h²hh³jah´K;ubjƒ)”}”(hŒÀRegisters the port with the serio driver and begins transmitting data back and forth. Registration can only be performed once a port type is set with USERIO_CMD_SET_PORT_TYPE. Has no argument.”h]”hŒÀRegisters the port with the serio driver and begins transmitting data back and forth. Registration can only be performed once a port type is set with USERIO_CMD_SET_PORT_TYPE. Has no argument.”…””}”(hj±h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j‚h³jah´K=hj h²hubeh}”(h]”Œuserio-cmd-register”ah ]”h"]”Œuserio_cmd_register”ah$]”h&]”uh1jLhjh²hh³jah´K;ubjM)”}”(hhh]”(jR)”}”(hŒUSERIO_CMD_SET_PORT_TYPE”h]”hŒUSERIO_CMD_SET_PORT_TYPE”…””}”(hjÊh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jQhjÇh²hh³jah´KBubjƒ)”}”(hŒÊSets the type of port we're emulating, where ``data`` is the port type being set. Can be any of the macros from . For example: SERIO_8042 would set the port type to be a normal PS/2 port.”h]”(hŒ/Sets the type of port we’re emulating, where ”…””}”(hjØh²hh³Nh´NubjN)”}”(hŒ``data``”h]”hŒdata”…””}”(hjàh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jMhjØubhŒ• is the port type being set. Can be any of the macros from . For example: SERIO_8042 would set the port type to be a normal PS/2 port.”…””}”(hjØh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1j‚h³jah´KDhjÇh²hubeh}”(h]”Œuserio-cmd-set-port-type”ah ]”h"]”Œuserio_cmd_set_port_type”ah$]”h&]”uh1jLhjh²hh³jah´KBubjM)”}”(hhh]”(jR)”}”(hŒUSERIO_CMD_SEND_INTERRUPT”h]”hŒUSERIO_CMD_SEND_INTERRUPT”…””}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jQhjh²hh³jah´KIubjƒ)”}”(hŒwSends an interrupt through the virtual serio port to the serio driver, where ``data`` is the interrupt data being sent.”h]”(hŒMSends an interrupt through the virtual serio port to the serio driver, where ”…””}”(hjh²hh³Nh´NubjN)”}”(hŒ``data``”h]”hŒdata”…””}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jMhjubhŒ" is the interrupt data being sent.”…””}”(hjh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1j‚h³jah´KKhjh²hubeh}”(h]”Œuserio-cmd-send-interrupt”ah ]”h"]”Œuserio_cmd_send_interrupt”ah$]”h&]”uh1jLhjh²hh³jah´KIubeh}”(h]”Œcommands”ah ]”h"]”Œcommands”ah$]”h&]”uh1jLhjNh²hh³jah´K8ubjM)”}”(hhh]”(jR)”}”(hŒUserspace tools”h]”hŒUserspace tools”…””}”(hjDh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jQhjAh²hh³jah´KOubjƒ)”}”(hŒËThe userio userspace tools are able to record PS/2 devices using some of the debugging information from i8042, and play back the devices on /dev/userio. The latest version of these tools can be found at:”h]”hŒËThe userio userspace tools are able to record PS/2 devices using some of the debugging information from i8042, and play back the devices on /dev/userio. The latest version of these tools can be found at:”…””}”(hjRh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j‚h³jah´KQhjAh²hubhŒ block_quote”“”)”}”(hŒhttps://github.com/Lyude/ps2emu”h]”jƒ)”}”(hjdh]”j‘)”}”(hjdh]”hŒhttps://github.com/Lyude/ps2emu”…””}”(hjih²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”Œrefuri”jduh1jhjfubah}”(h]”h ]”h"]”h$]”h&]”uh1j‚h³jah´KUhjbubah}”(h]”h ]”h"]”h$]”h&]”uh1j`h³jah´KUhjAh²hubeh}”(h]”Œuserspace-tools”ah ]”h"]”Œuserspace tools”ah$]”h&]”uh1jLhjNh²hh³jah´KOubeh}”(h]”Œthe-userio-protocol”ah ]”h"]”Œthe userio protocol”ah$]”h&]”uh1jLhhh²hh³jah´Kubeh}”(h]”h ]”h"]”h$]”h&]”Œsource”jauh1hŒcurrent_source”NŒ current_line”NŒsettings”Œdocutils.frontend”ŒValues”“”)”}”(jQNŒ generator”NŒ datestamp”NŒ source_link”NŒ source_url”NŒ toc_backlinks”Œentry”Œfootnote_backlinks”KŒ sectnum_xform”KŒstrip_comments”NŒstrip_elements_with_classes”NŒ strip_classes”NŒ report_level”KŒ halt_level”KŒexit_status_level”KŒdebug”NŒwarning_stream”NŒ traceback”ˆŒinput_encoding”Œ utf-8-sig”Œinput_encoding_error_handler”Œstrict”Œoutput_encoding”Œutf-8”Œoutput_encoding_error_handler”j¶Œerror_encoding”Œutf-8”Œerror_encoding_error_handler”Œbackslashreplace”Œ language_code”Œen”Œrecord_dependencies”NŒconfig”NŒ id_prefix”hŒauto_id_prefix”Œid”Œ dump_settings”NŒdump_internals”NŒdump_transforms”NŒdump_pseudo_xml”NŒexpose_internals”NŒstrict_visitor”NŒ_disable_config”NŒ_source”jaŒ _destination”NŒ _config_files”]”Œ7/var/lib/git/docbuild/linux/Documentation/docutils.conf”aŒfile_insertion_enabled”ˆŒ raw_enabled”KŒline_length_limit”M'Œpep_references”NŒ pep_base_url”Œhttps://peps.python.org/”Œpep_file_url_template”Œpep-%04d”Œrfc_references”NŒ rfc_base_url”Œ&https://datatracker.ietf.org/doc/html/”Œ tab_width”KŒtrim_footnote_reference_space”‰Œsyntax_highlight”Œlong”Œ smart_quotes”ˆŒsmartquotes_locales”]”Œcharacter_level_inline_markup”‰Œdoctitle_xform”‰Œ docinfo_xform”KŒsectsubtitle_xform”‰Œ image_loading”Œlink”Œembed_stylesheet”‰Œcloak_email_addresses”ˆŒsection_self_link”‰Œenv”NubŒreporter”NŒindirect_targets”]”Œsubstitution_defs”}”(hähØhóhçjhöjjj jj/j#j>j2jMjAj\jPjkj_jzjnj‰j}j˜jŒj§j›j¶jªjÅj¹jÔjÈjãj×jòjæjjõjjjjj.j"j=j1jLj@j[jOjjj^jyjmjˆj|j—j‹j¦jšjµj©jÄj¸jÓjÇjâjÖjñjåjjôjjjjj-j!j<j0jKj?jZjNjij]jxjlj‡j{j–jŠj¥j™j´j¨jÃj·jÒjÆjájÕjðjäjÿjójjjjj,j j;j/jJj>jYjMjhj\jwjkj†jzj•j‰j¤j˜j³j§jÂj¶jÑjÅjàjÔjïjãjþjòj jjjj+jj:j.jIj=uŒsubstitution_names”}”(Œamp”häŒapos”hóŒast”jŒbrvbar”jŒbsol”j Œcent”j/Œcolon”j>Œcomma”jMŒcommat”j\Œcopy”jkŒcurren”jzŒdarr”j‰Œdeg”j˜Œdivide”j§Œdollar”j¶Œequals”jÅŒexcl”jÔŒfrac12”jãŒfrac14”jòŒfrac18”jŒfrac34”jŒfrac38”jŒfrac58”j.Œfrac78”j=Œgt”jLŒhalf”j[Œhorbar”jjŒhyphen”jyŒiexcl”jˆŒiquest”j—Œlaquo”j¦Œlarr”jµŒlcub”jÄŒldquo”jÓŒlowbar”jâŒlpar”jñŒlsqb”jŒlsquo”jŒlt”jŒmicro”j-Œmiddot”j<Œnbsp”jKŒnot”jZŒnum”jiŒohm”jxŒordf”j‡Œordm”j–Œpara”j¥Œpercnt”j´Œperiod”jÃŒplus”jÒŒplusmn”jáŒpound”jðŒquest”jÿŒquot”jŒraquo”jŒrarr”j,Œrcub”j;Œrdquo”jJŒreg”jYŒrpar”jhŒrsqb”jwŒrsquo”j†Œsect”j•Œsemi”j¤Œshy”j³Œsol”jÂŒsung”jÑŒsup1”jàŒsup2”jïŒsup3”jþŒtimes”j Œtrade”jŒuarr”j+Œverbar”j:Œyen”jIuŒrefnames”}”Œrefids”}”Œnameids”}”(jjjðjíjjjŒj‰j>j;jÄjÁjýjúj6j3jˆj…uŒ nametypes”}”(j‰jð‰j‰jŒ‰j>‰jĉjý‰j6‰jˆ‰uh}”(jjNjíjÌjjój‰jj;jjÁj jújÇj3jj…jAuŒ footnote_refs”}”Œ citation_refs”}”Œ autofootnotes”]”Œautofootnote_refs”]”Œsymbol_footnotes”]”Œsymbol_footnote_refs”]”Œ footnotes”]”Œ citations”]”Œautofootnote_start”KŒsymbol_footnote_start”KŒ id_counter”Œ collections”ŒCounter”“”}”…”R”Œparse_messages”]”Œtransform_messages”]”Œ transformer”NŒ include_log”]”ŒDocumentation/input/userio.rst”(NNNNt”†”aŒ decoration”Nh²hub.