ターミナルは入力された一部のUnicode文字を受け入れません

ターミナルは入力された一部のUnicode文字を受け入れません

ターミナルで一部の Unicode 文字を入力しても機能しない理由をトラブルシューティングする必要があります。

私はQWERTY配列以外のキーボードレイアウト(つまりネオ) を使用すると、 などの Unicode 文字を直接入力することができα β γ δ … ∀ ∃ … ∘ ⇒ ⇔、ほとんどのアプリケーションで問題なく動作します。

rxvt-unicodeしかし、やなどの端末ではxterm、 と の文字を入力して何も起こりません。文字は完璧に表示されているがコピー&ペーストするとき。

動作しない特定の文字とキーに関する情報:

  • : 16進コード0x21D4; ネオシーケンス:Capslock + AltGr + m
  • : 16進コード: 0x2218; ネオシーケンス:Capslock + AltGr + [

Capslock + AltGr + ⟨some key⟩たとえば、経由で入力された他の文字も、私の端末では問題なく動作します。これは私を困惑させます。

では、ここで問題がどこにあるのか知っている人はいますか? どこを調べればよいか、手がかりを持っている人はいますか?

私は Parabola GNU/Linux (基本的には Arch Linux) を使用しています。

答え1

よし、少なくとも回避策は見つかった。

問題は、ifonlyifと がキーシム名としてjot認識されないことであることが判明しましたxmodmap。 これらは私の構成で使用されています。

$ xmodmap -pke | egrep "jot|ifonlyif" 
keycode  34 = ssharp U1E9E ssharp U1E9E U017F Greek_finalsmallsigma U2212 NoSymbol jot NoSymbol U017F Greek_finalsmallsigma U2212 NoSymbol jot
keycode  58 = m M m M percent Greek_mu KP_1 KP_1 ifonlyif

これらを Unicode 16 進コードに置き換えると、すべて正常に動作します。そこで、次のようにしました。

$ xmodmap -pke | sed -e 's:ifonlyif:U21D4:' -e 's:jot:U2218:' > .Xmodmap
$ xmodmap .Xmodmap
$ xmodmap -pke | egrep "keycode  (34|58)" 
keycode  34 = ssharp U1E9E ssharp U1E9E U017F Greek_finalsmallsigma U2212 NoSymbol U2218 NoSymbol U017F Greek_finalsmallsigma U2212
keycode  58 = m M m M percent Greek_mu KP_1 KP_1 U21D4

これが他の人の役に立つかもしれないので、私は次のようにしてこれにたどり着きました。それぞれ(ifonlyif) と(jot)xevと入力しようとしたときの出力を観察しました。

KeyPress event, serial 34, synthetic NO, window 0x2400001,
    root 0x9b, subw 0x0, time 170075495, (1,1), root:(552,302),
    state 0xa0, keycode 58 (keysym 0x8cd, ifonlyif), same_screen YES,
    XLookupString gives 0 bytes: 
    XmbLookupString gives 0 bytes: 
    XFilterEvent returns: False

KeyRelease event, serial 34, synthetic NO, window 0x2400001,
    root 0x9b, subw 0x0, time 170075574, (1,1), root:(552,302),
    state 0xa0, keycode 58 (keysym 0x8cd, ifonlyif), same_screen YES,
    XLookupString gives 0 bytes: 
    XFilterEvent returns: False

KeyPress event, serial 34, synthetic NO, window 0x2400001,
    root 0x9b, subw 0x0, time 170076304, (1,1), root:(552,302),
    state 0xa0, keycode 34 (keysym 0xbca, jot), same_screen YES,
    XLookupString gives 0 bytes: 
    XmbLookupString gives 0 bytes: 
    XFilterEvent returns: False

KeyRelease event, serial 34, synthetic NO, window 0x2400001,
    root 0x9b, subw 0x0, time 170076336, (1,1), root:(552,302),
    state 0xa0, keycode 34 (keysym 0xbca, jot), same_screen YES,
    XLookupString gives 0 bytes: 
    XFilterEvent returns: False

対照的に、他の機能する文字 ( Θ) を入力すると、次のような行が表示されます。


state 0xa0, keycode 61 (keysym 0x7c8, Greek_THETA), same_screen YES,
XLookupString gives 2 bytes: (ce 98) "Θ"

state 0xa0, keycode 59 (keysym 0x10021d2, U21D2), same_screen YES,
XLookupString gives 3 bytes: (e2 87 92) "⇒"

したがって、問題はおそらくXLookupString何も返されないことであるとわかりました。そこで、man xlookupstringと を実行しましたman xmodmap。次に、 xmodmap テーブルを調査し、 の失敗した検索と の成功した検索xmodmap -pkeを比較しました。ifonlyifU21D2

関連情報