web-dev-qa-db-ja.com

一部のXアプリは私の非ラテン文字を受け入れ、一部はそれらを無視します

デュアルキーボードレイアウトのX環境を使用しています:us,il。現在、一部のアプリケーションとilレイアウトでは、ヘブライ文字は登録されていませんが、句読点は登録されています。他のアプリでは、ヘブライ文字は問題なく登録され、入力しているテキストに追加されます。英語のレイアウトは問題なく機能します。構成の詳細については、以下で説明します。

私の質問は次のとおりです。なぜこれが起こっているのですか?さらに重要なことに、これを修正/回避して、すべてのアプリにヘブライ文字も受け入れさせるにはどうすればよいですか?

セットアップの詳細

  • 物理キーボードレイアウト:標準のUS 104キー( これ など)。
  • OSディストリビューション:Devuan 2.0 ASCII(〜= Debian 9.0 Stretch)
  • XKB構成:

    $ setxkbmap -query
    rules:      evdev
    model:      pc105
    layout:     us,il
    variant:    ,
    options:    grp:alt_shift_toggle,grp_led:scroll
    
  • デスクトップ環境:これはCinnamonとLXQtの両方で発生します。まだ他の人を試していません。

  • ヘブライ文字を拒否するアプリ:シナモンのAlt + F2ランチャー; LeafPad; GEdit、xterm。
  • ヘブライ文字を受け入れるアプリ:KWrite、GNOMEターミナル、LibreOffice、Firefox、Kolourpaint、lxterminal、Konsole。

xev出力

キーボードのaを押したときの出力:

KeyRelease event, serial 34, synthetic NO, window 0x7e00001,
    root 0x43, subw 0x0, time 369470632, (96,-25), root:(146,62),
    state 0x0, keycode 38 (keysym 0x61, a), same_screen YES,
    XLookupString gives 1 bytes: (61) "a"
    XFilterEvent returns: False

KeyPress event, serial 34, synthetic NO, window 0x7e00001,
    root 0x43, subw 0x0, time 369474392, (96,-25), root:(146,62),
    state 0x0, keycode 38 (keysym 0x61, a), same_screen YES,
    XLookupString gives 1 bytes: (61) "a"
    XFilterEvent returns: False

キーボードレイアウトを切り替えるときの出力:

KeyPress event, serial 34, synthetic NO, window 0x7e00001,
    root 0x43, subw 0x0, time 369547896, (75,-23), root:(125,64),
    state 0x0, keycode 64 (keysym 0xffe9, Alt_L), same_screen YES,
    XLookupString gives 0 bytes: 
    XFilterEvent returns: False

KeyPress event, serial 34, synthetic NO, window 0x7e00001,
    root 0x43, subw 0x0, time 369548008, (75,-23), root:(125,64),
    state 0x8, keycode 62 (keysym 0xfe08, ISO_Next_Group), same_screen YES,
    XKeysymToKeycode returns keycode: 50
    XLookupString gives 0 bytes: 
    XFilterEvent returns: False

PropertyNotify event, serial 34, synthetic NO, window 0x7e00001,
    atom 0x176 (XKLAVIER_STATE), time 369548013, state PropertyNewValue

PropertyNotify event, serial 34, synthetic NO, window 0x7e00001,
    atom 0x176 (XKLAVIER_STATE), time 369548013, state PropertyNewValue

KeyRelease event, serial 34, synthetic NO, window 0x7e00001,
    root 0x43, subw 0x0, time 369548072, (75,-23), root:(125,64),
    state 0x2008, keycode 62 (keysym 0xfe08, ISO_Next_Group), same_screen YES,
    XKeysymToKeycode returns keycode: 50
    XLookupString gives 0 bytes: 
    XFilterEvent returns: False

KeyRelease event, serial 34, synthetic NO, window 0x7e00001,
    root 0x43, subw 0x0, time 369548168, (75,-23), root:(125,64),
    state 0x2008, keycode 64 (keysym 0xffe9, Alt_L), same_screen YES,
    XLookupString gives 0 bytes: 
    XFilterEvent returns: False

キーボードでもう一度aを押したときの出力(このキーはヘブライ文字のshin、שにも対応しています):

KeyPress event, serial 34, synthetic NO, window 0x7e00001,
    root 0x43, subw 0x0, time 369560440, (75,-23), root:(125,64),
    state 0x2000, keycode 38 (keysym 0xcf9, hebrew_shin), same_screen YES,
    XLookupString gives 0 bytes: 
    XFilterEvent returns: False

KeyRelease event, serial 34, synthetic NO, window 0x7e00001,
    root 0x43, subw 0x0, time 369560504, (75,-23), root:(125,64),
    state 0x2000, keycode 38 (keysym 0xcf9, hebrew_shin), same_screen YES,
    XLookupString gives 0 bytes: 
    XFilterEvent returns: False

xmodmap -pke出力

xmodmap -pkeの出力の一部:

... etc. etc. ...
keycode  24 = q Q slash Q U05C2
keycode  25 = w W apostrophe W U05C1
keycode  26 = e E hebrew_qoph E U05B8
keycode  27 = r R hebrew_resh R U05B3
keycode  28 = t T hebrew_aleph T
keycode  29 = y Y hebrew_tet Y U05F0
keycode  30 = u U hebrew_waw U U05B9
keycode  31 = i I hebrew_finalnun I
keycode  32 = o O hebrew_finalmem O
keycode  33 = p P hebrew_pe P U05B7
keycode  34 = bracketleft braceleft bracketright braceright U05B2
keycode  35 = bracketright braceright bracketleft braceleft U05BF
keycode  36 = Return NoSymbol Return
keycode  37 = Control_L NoSymbol Control_L
keycode  38 = a A hebrew_shin A U05B0
keycode  39 = s S hebrew_dalet S U05BC
keycode  40 = d D hebrew_gimel D
keycode  41 = f F hebrew_kaph F
keycode  42 = g G hebrew_ayin G U05F1
keycode  43 = h H hebrew_yod H U05F2
keycode  44 = j J hebrew_chet J U05B4
keycode  45 = k K hebrew_lamed K
keycode  46 = l L hebrew_finalkaph L rightdoublequotemark
keycode  47 = semicolon colon hebrew_finalpe colon doublelowquotemark
keycode  48 = apostrophe quotedbl comma quotedbl U05F4
keycode  49 = Grave asciitilde semicolon asciitilde U05F3
keycode  50 = Shift_L ISO_Next_Group Shift_L ISO_Next_Group
keycode  51 = backslash bar backslash bar U05BB
keycode  52 = z Z hebrew_zain Z
keycode  53 = x X hebrew_samech X U05B6
keycode  54 = c C hebrew_bet C U05B1
keycode  55 = v V hebrew_he V
keycode  56 = b B hebrew_nun B NoSymbol U05C6
keycode  57 = n N hebrew_mem N
keycode  58 = m M hebrew_zade M U05B5
keycode  59 = comma less hebrew_taw greater rightsinglequotemark
keycode  60 = period greater hebrew_finalzade less singlelowquotemark
keycode  61 = slash question period question division
... etc. etc. ...

言語関連の環境変数

$ env | grep LANG
LANG=en_IL
GDM_LANG=en_US.utf8
LANGUAGE=en_IL:en

その他の注意事項

  • クリーンなユーザーアカウントを作成した場合、そのユーザーはこの問題を経験しませんしません。したがって、それはある種のユーザー固有の設定でなければなりません。
  • ヘブライ語のテキストをコピーすると、ヘブライ語の文字を拒否するアプリに貼り付けることができ、正常に表示されます。
  • 以前のDevuan以外のLinuxインストール(Linux Mint 18.3)のホームフォルダーを保持しました。
2
einpoklum

以下の答えは投稿者の問題を解決しませんでしたが、その後の議論はついにそれを指摘しました。

問題の原因は、ポスターがホームフォルダ全体を一方から他方にコピーしたときに明らかになったミントとデヴアンの違いにあると私たちは結論付けました。大きなヒントは、rootユーザーのプロファイルでは、問題が顕在化していないという事実でした。

次に、ポスターはキーボードに関連するホームフォルダー内のファイルを調べました。その結果は、彼の回答に記載されています。


あなたの問題は投稿と同じようです
ターミナルは一部の入力されたUnicode文字を受け入れません

その投稿で見つかった回避策は、.Xmodmapを変更し、keysymnamesをUnicodeの16進コードに置き換えることでした。

上記の投稿では、ギリシャ語のifonlyif文字の場合、ポスターが次の行に置き換わりました。

キーコード58 = m M mMパーセントGreek_muKP_1 KP_1ifonlyif

行で:

キーコード58 = m M mMパーセントGreek_muKP_1 KP_1U21D4

環境がないので、あなたの例では、キーコード38のテキストhebrew_shinをU05E9(または同様のもの)に置き換える必要があると思います。

これがうまくいく場合は、すべてのヘブライ文字に対して同じことを行う必要がありますが、残念ながらかなり苦痛になります。運が良ければ、Unicodeの16進コードがXmodmapですでに言及されている可能性があるため、sedマジックを使用してそれを行うことができます。

1
harrymc

〜/ .xinputrcファイルを削除/クリアする必要があります。

@harrymcによって提案されたいくつかの推測作業に触発されて、私は犯人を見つけました:my ~/.xinputrcファイル。以前のディストリビューション(Linux Mint 18.3)で生成されました。それは言う:

# im-config(8) generated on Wed, 25 Jan 2017 22:44:55 +0100
run_im xim
# im-config signature: 21f3e409b30c3de81e8302273ccb3d5c  -

im-configメカニズムは

gTKGUIまたはコンソール端末ダイアログを使用したXWindowSystemでの入力方法。

これは、(より単純な)GTKアプリのみが影響を受けるように見える理由を説明しています。私はインプットメソッドビジネスにまったく精通していませんが、このファイルを削除するか、コメントアウトするとrun_imオプション-すべてのアプリは、入力したヘブライ文字を受け入れるようになりました。

1
einpoklum

部分的な答え:

aשを比較すると、次のようになります。

XLookupString gives 1 bytes: (61) "a"

vs.

XLookupString gives 0 bytes: 

これが問題です。manページを見ると、 XLookupString はLatin-1のみを処理するため、XLookupStringに依存してキー押下を文字に変換するアプリケーションは空の結果を取得し、「ヘブライ文字」が発生します。句読点は登録しますが、登録しないでください。」.

そして明らかに他のいくつかのアプリケーション、例えばKDEのものは、これを回避するか、別の方法を使用してください。

これを修正する方法がわかりません。 Unicode/UTF-8を理解し、受信したキーシムを適切に変換するアプリケーションを使用する必要があります。動作しないアプリのソースコードにパッチを適用することはオプションですが、それが簡単であれば、誰かがすでにこれを行っていると確信しています...したがって、いくつかの落とし穴があると思います。

UTF-8( Xutf8LookupString )で機能するXLookupStringの代替手段が存在します。

0
dirkt