Linuxibusでの入力

キヌボヌドがラテン文字たたはキリル文字でラベル付けされおおり、特に耇雑なアルファベット以倖のスクリプトを䜿甚しお別の蚀語でテキストを入力する必芁がある堎合は、Linux入力システムに関するこのメモ簡略化された「キヌボヌドレむアりト」が圹立ちたす。


あいたいな甚語に぀いおは事前におaび申し䞊げたすが、包括的な技術的な説明のふりをするこずはありたせん。 この蚘事の䞻な目的は、実装ではなく可胜性の説明です。


入力方法


Linuxの䞻な入力方法IMはXKBであり、デフォルトでむンストヌルされ、オペレヌティングシステムのむンストヌル埌すぐにアクティブになりたす。 XKBはアルファベットのスクリプトで動䜜するように蚭蚈されおおり、むンドやアフリカでは䞭囜語の文字や音節などの耇雑なスクリプトを提䟛できたせん。 システムは、4぀以䞋のレむアりトで動䜜するように構成できたす。 最埌の制限は、ホットキヌ䞊の各蚀語に必芁なパラメヌタヌの組み合わせでコマンド呌び出しを行うこずにより回避できたす。


さらに柔軟性が必芁な堎合は、フレヌムワヌク入力メ゜ッドフレヌムワヌクに移動する必芁がありたす。 Linuxのこのようなシステムの䞻な代衚者IBus、SCIM、Fcitx。 フレヌムワヌク自䜓はテキストの入力方法を認識しおいないため、さたざたなスクリプトをプラグむン゚ンゞンの圢匏で接続する必芁がありたす。 IBusずFcitxを䜿甚した経隓から、䞡方のシステムがほが同じ数のプラグむンをサポヌトしおいるず蚀えたす。 倚くの堎合、これらはほずんど同じプラグむンです。 たずえば、䞭囜語のピンむン入力メ゜ッドはスタンドアロンのlibpinyinラむブラリずしお実装されおおり、IBusたたはFcitxを介しお接続するず、同じ機胜が提䟛されたす。


過去6〜7幎間で、いく぀かの機胜が登堎する可胜性がありたすが、フレヌムワヌクの違いは平準化されたず掚枬できたす。 次に、メむンのIBusプラグむンをより銎染みのあるシステムずしおリストしたす。


たず、IBusはxkbずそのすべおの機胜を透過的に䜿甚できたす。 唯䞀の問題は、IBusがXKB構成を動的に生成できないこずです。 最も䞀般的なものは、ファむル/usr/share/ibus/component/simple.xmlで事前定矩されおおり、必芁に応じお倉曎および補足できたす。 IBusを曎新するず、ファむルは暙準のファむルに眮き換えられたす。


たずえば、ロシア語のレむアりトは次のずおりです。


 <engine> <name>xkb:ru::rus</name> <language>ru</language> <license>GPL</license> <author>Peng Huang &lt;shawn.p.huang@gmail.com&gt;</author> <layout>ru</layout> <longname>Russian</longname> <description>Russian</description> <icon>ibus-keyboard</icon> <rank>99</rank> </engine> 

layout加えおlayout layout_variantを指定できたす。他のsetxkbmapオプションsetxkbmap利甚できたせん。これには、 misc:typo匕数を介しおxkbで指定されるIlya Birmanの有名なタむポグラフィレむアりトが含たれたす。 この制限を回避するか、タスクのレむアりトを䜜成するには、完党に蚘述する必芁がありたす。 これを行うには、 /usr/share/X11/xkb/symbolsフォルダヌで、 customファむルを䜜成し既存のファむルを補足する堎合、システムが曎新されるず䞊曞きされたす、レむアりト構成を蚭定する必芁がありたす。 たずえば、むリダバヌマンを远加したロシア語


 partial alphanumeric_keys xkb_symbols "ru-typo" { include "ru(winkeys)" include "typo(base)" include "level3(ralt_switch)" // 1th keyboard row key <TLDE> { [ NoSymbol, NoSymbol, U0301, NoSymbol ] }; // "~" }; 

include文字列include 、既補のテンプレヌトから構成を収集したす。 したがっお、ロシア語のレむアりト「winkeys」のバリアントは、ファむル「ru」から取埗されたす。 次に、「typo」ファむルの「base」レむアりトで補足され、3番目のレむダヌAltGrのスむッチが蚭定されたすファむル「level3」を参照。これはコマンドに䌌おいたす。


 setxkbmap -layout ru -variant winkeys -option lv3:ralt_switch,misc:typo 

必芁に応じお、独自の倉曎を加えるこずができたす。 䞊蚘の䟋では、アクセント蚘号 "U + 0301"結合急性アクセントはAltGr +〜にレンダリングされおいたす。 NoSymbolが瀺される䜍眮は、前のパタヌンの定矩を䜿甚したす「winkeys」の「」ず「」、「typo」の「≈」


 key <TLDE> { [ Cyrillic_io, Cyrillic_IO, NoSymbol, NoSymbol ] }; // winkeys key <TLDE> { [ NoSymbol, NoSymbol, NoSymbol, approxeq ] }; // typo key <TLDE> { [ NoSymbol, NoSymbol, U0301, NoSymbol ] }; // custom 

次に、䜜成したレむアりトを次の圢匏で/usr/share/ibus/component/simple.xmlファむルに入力する必芁が/usr/share/ibus/component/simple.xmlたす。


 <engine> <name>xkb:ru:typo:rus</name> <language>ru</language> <layout>custom,us</layout> <layout_variant>ru-typo,</layout_variant> <longname>Russian (with Typo)</longname> <description>Russian (with Typo)</description> <icon>ibus-keyboard</icon> <rank>1</rank> </engine> 

ここで、 customはフォルダヌ/usr/share/X11/xkb/symbols内のファむルの名前で、 ru-typoはその䞭に含たれるレむアりトを瀺したす。 ホットキヌが正しく機胜するように、远加のレむアりトが瀺されおいたすCtrl + C、Ctrl + Vなど。 IBusを再起動した埌ibus ibus restart 、新しいレむアりト「ロシア語タむポ付き」が蚭定に衚瀺されたす。


2番目の入力方法はm17nです。 これは、さたざたなスクリプト甚のキヌボヌドレむアりトのかなり豊富なラむブラリです。 IBusには独自の同様のibus -table入力メ゜ッドがあり、これは「わずかに䜎い機胜」ず説明されおいたす。 埌者を䜿甚しお、耇雑なロゞックを䜿甚せずにラテン文字ず必芁なアルファベットの文字ずの間の䞀意の察応を䜿甚しおレむアりトを䜜成する必芁があったため、2぀のシステムのどちらがより機胜的で衚珟力があるかを刀断できたせん-m17nたたはibus-table圢匏でのレむアりトの説明 ibus-tableメ゜ッドには、察応する衚蚘法で文字を入力するための興味深いレむアりト「LaTeX」が含たれおいたす。「 \Delta 」は「Δ」、「 \ge 」は「≥」などです。


次の汎甚入力メ゜ッドはKMFLです。 これは、Windows甚のKeymanの入力方匏の Linuxバヌゞョンです。 最もたれなスクリプトをサポヌトするあたり䞀般的なIMではありたせん。 元のKeymanずは異なり、1000を超えるスクリプトで印刷するこずが蚘茉されおいるため、KMFLはそれほど開発されおいたせんが、有甚な堎合もありたす。 レむアりト蚘述圢匏はテキストです。MsWindowsで䜜成するためのプログラムがありたす。 EuroLatinレむアりトを䜿甚したす。このレむアりトでは、テキスト「 2//3 」が分数「⅔」に倉換され、シヌケンス「 -a 」がマクロン「ā」に倉換されたす。 xkbのComposeキヌを思い出させたすが、別個の修食子は必芁ありたせん-KMFL自䜓がダむダル䞭にシヌケンスを認識したす。


他の入力メ゜ッドは、個別のスクリプトに特化しおいたす䞭囜語の堎合はibus-libpinyin、ベトナム語の堎合はibus-unikeyなど。 これらのプラグむンの蚭定も/usr/share/ibus/component/たす。 察応するファむルでは、基本的なキヌボヌドレむアりトを指定する必芁がある堎合がありたす。そうしないず、非ラテン語レむアりトから切り替えるず、それらが動䜜しなくなりたす。 たずえば、 libpinyin.xml 「layout」パラメヌタヌを芋぀けお、QWERTYキヌボヌドの堎合は「us」、AZERTYの堎合は「fr」などを入力する必芁がありたす。


 <layout>us</layout> 

レむアりトを切り替える


ほずんどの堎合、ロシア語-英語、䞭囜語-スペむン語などの蚀語ペアで䜜業したす。 したがっお、最埌の2぀のレむアりトCapsLockを切り替えるホットキヌが1぀あり、レむアりト自䜓は個別のホットキヌデゞタルブロックではWin + 1 ... 9によっお切り替えられたす。 したがっお、たず、䜜業レむアりトWin + 1enずWin + 2ruを蚭定し、次にCapsLockで切り替えたすen <-> ru。


IBusでは、2぀のホットキヌを蚭定できたす。1぀はレむアりトのリストを埪環的に切り替えるためのもので、もう1぀は最埌の2぀のレむアりトのためのものです。 コン゜ヌルから目的のレむアりトを遞択し、それに応じおスクリプトをホットキヌに割り圓おるこずもできたす。


IBusがこれらの蚭定をリセットするため、xmodmapを䜿甚したxmodmap再割り圓おは機胜しないこずに泚意しおください。 したがっお、私はudev介しおCapsLockをF14ファむル/etc/udev/hwdb.d/90-custom-keyboard.hwdb ずしおグロヌバルに再定矩udevこずを奜みたす。


 evdev:input:b0003v1A2Cp0E24* # my keyboard id KEYBOARD_KEY_70039=f14 # bind capslock to f14 

そしお、IBusで既にF14をホットキヌずしお䜿甚したす。 私の経隓では、これは最も安定した構成を提䟛したす。


udevの構成の詳现に぀いおは、蚘事の最埌を参照しおください。


仮想キヌボヌド


特定の曞蚘䜓系甚にマヌクアップされたキヌボヌドは、ロシア語YTsUKENなど、倚数のナヌザヌがいる蚀語でのみ工業的に生産されおいたす。 アルメニアでもゞョヌゞアでも、囜のアルファベットの文字で眲名されたキヌを備えたキヌボヌドを賌入するこずはできたせん。 同様に、カザフスタンずりズベキスタンでは、ロシア語ず英語のキヌボヌドを䜿甚し、暙準のラテンたたはキリル文字に含たれおいない文字がどこにあるかを孊ぶこずを䜙儀なくされおいたす。


新しいレむアりトをマスタヌしおいる堎合は、仮想キヌボヌドを䜿甚するこずをお勧めしたす。 Onboardは、アクティブなレむアりトに適応し、別のレむアりトに切り替えるず曎新されるため、気に入っおいたす。 ただし、これはxkbでのみ機胜したすIBus経由でxkbを䜿甚する堎合も同様。


オンボヌドは、xkbレむアりトのテストに非垞に䟿利で、すべおのレむダヌAltGrなどで割り圓おられたシンボルを確認できたす。


おわりに


すべおのプログラムが蚀語フレヌムワヌクを正しくサポヌトしおいるわけではありたせん。 特に、Sublime Text 3はSCIMでのみ動䜜し、IBusを䜿甚するず、遞択されたレむアりトに関係なく、ラテン文字のみが印刷されたす。


私はかなり前からIBusを䜿甚しおいたすが、他のシステムを非垞に衚面的に知っおいたす。 むンタヌネットのレビュヌによるず、Fctixはより機胜的で、䞭囜語のテキストを入力するのにより適しおいるず説明されおいたす。 いずれにせよ、䞭囜語のテキストを䜿甚する堎合、IBusは私に完党に合っおおり、違いは原則ずしおはなりたせん。 前回Fctixを䜿甚する必芁があった2幎前ずき、このフレヌムワヌクでは、カヌ゜ルがテキストフィヌルドにない堎合にレむアりトを切り替えるこずができたせんでした。 このバグが修正されたこずを願っおいたす。


さたざたなスクリプトを操䜜するためのもう1぀の助けは、シリコンキヌボヌドオヌバヌレむです。 䞭囜のオンラむン垂堎では、さたざたなスクリプト甚のApple Magic Keyboard甚のオヌバヌレむ保護技膜たたは键盘膜が提䟛されおいたす。 䞭囜以倖のディストリビュヌタヌの䟋。 しかし、3䞖代のApple Magicが生産されそしお、それぞれアメリカ、ペヌロッパ、および日本のバヌゞョンで、䞭囜のレプリカは線圢の寞法ずキヌの配眮が異なるこずに泚意しおください。 時々、コンピュヌタヌのキヌボヌドに単䞀の暙準がないこずを埌悔しおいたす。


キヌ抌䞋信号の倉換に関するクむックリファレンス

抌されたキヌのデゞタルコヌドは、その倀を数回倉曎したす。


  1. scancodeキヌが抌されるず、キヌボヌドたたはドラむバヌがLinux カヌネルにスキャンコヌドを送信したす 。
  2. キヌコヌド次に、カヌネルで、 スキャンコヌドが キヌコヌドに倉換されたすLinux入力APIサブシステム。 プログラムudev 、 keyfuzz 、 setkeycodesを䜿甚しお倉換を制埡できたす。
  3. keysym X Window Systemは、カヌネルからキヌコヌドを受け取り、それをkeysymに倉換したす-これは、クラむアントプログラムが入力ずしお受け取る最終文字です。 倉換は、XKBたたはxmodmap非掚奚を介しお構成されたす。

䞊蚘のシヌケンスから、 スキャンコヌド > キヌコヌドの段階でキヌを再割り圓おするこずが望たしいこずがわかりたす。これは、KXBずの亀差を匕き起こさないためです。


Udevセットアップ手順

スキャンコヌドからキヌコヌドぞの倉換は、各入力デバむスごずに個別に倉換されるため、最初にキヌボヌドの䞀意の識別子を芋぀ける必芁がありたす実際、evdevは、マりスからプリンタヌ、りェブカメラたでのボタンを備えた倧芏暡な呚蟺機噚でも動䜜したす。 Arch Linuxナヌザヌは次のスクリプトを䜿甚できたす他のディストリビュヌションの堎合、パスの調敎が必芁な堎合がありたす。


 #!/bin/sh for DEVICE in /dev/input/by-id/*; do echo $(basename $DEVICE) DEVID=$(basename $(readlink $DEVICE)) printf "evdev:input:b%sv%sp%se%s*\n\n" \ `cat /sys/class/input/$DEVID/device/id/bustype` \ `cat /sys/class/input/$DEVID/device/id/vendor` \ `cat /sys/class/input/$DEVID/device/id/product` \ `cat /sys/class/input/$DEVID/device/id/version` done 

同じデバむスは、異なる名前で耇数のむンスタンスでシステム内に衚すこずができたすが、識別子は同じになりたす。 たずえば、私のキヌボヌドは2぀のデバむスずしお定矩されおいたす。


 usb-SEM_USB_Keyboard-event-if01 evdev:input:b0003v1a2cp0e24e0110* usb-SEM_USB_Keyboard-event-kbd evdev:input:b0003v1a2cp0e24e0110* 

泚識別子はたずえば、 b0003v1a2cp0e24* 枛らすこずができたす。これは、同じタむプの䞀連のモデルの統䞀ルヌルを䜜成するずきに圹立ちたす。 ここでのアスタリスク「*」はワむルドカヌドの圹割を果たしたす。


ここで、 90-custom-keyboard.hwdbファむルを/etc/udev/hwdb.d/に次の内容で䜜成する必芁がありたすサンプルに぀いおは/usr/lib/udev/hwdb.d/60-keyboard.hwdb参照しおください。


 evdev:input:b0003v5c0ap0003e0110* #   KEYBOARD_KEY_70039=f14 #   

行KEYBOARD_KEYはスペヌスで始たりたす。これは重芁です。 構成を曎新したす。


 sudo udevadm hwdb --update && udevadm trigger 

その埌、デバむスを再起動たたは再接続するず、構成が自動的に曎新されたす。


キヌの再割り圓おは、 KEYBOARD_KEY_<scancode>=<keycode>ペアで定矩されたす。 キヌコヌド倀小文字で必芁は/usr/include/linux/input-event-codes.h 14.04の堎合/usr/include/linux/input.h にありたす。


evtestプログラムを䜿甚しおスキャンコヌドを取埗できたす。 たず、eventXX番号を特定する必芁がありたす。これを行うには、コマンドを実行しおキヌボヌドを芋぀けたす。


 > ls -l /dev/input/by-id/ 
 usb-SEM_USB_Keyboard-event-if01 -> ../event11 usb-SEM_USB_Keyboard-event-kbd -> ../event10 
 

「Keyboard-event-kbd」を遞択し、目的の番号この䟋では10を芋぀けたす。 これで、evtestを䜿甚できたす。


 > sudo evtest /dev/input/event10 
 Event: time 1531562530.720076, type 4 (EV_MSC), code 4 (MSC_SCAN), value 70039 
 

「CapsLock」キヌを抌すず、コヌドは「70039」になりたす-これが目的のスキャンコヌドです。



Source: https://habr.com/ru/post/J358440/


All Articles