터미널은 입력된 일부 유니코드 문자를 허용하지 않습니다.

터미널은 입력된 일부 유니코드 문자를 허용하지 않습니다.

터미널에 일부 유니코드 문자를 입력하면 작동하지 않는 문제를 해결해야 합니다.

나는 쿼티가 아닌 키보드 레이아웃을 사용합니다(즉,네오)를 사용하면 와 같은 유니코드 문자를 직접 입력할 수 있으며 α β γ δ … ∀ ∃ … ∘ ⇒ ⇔대부분의 응용 프로그램에서 잘 작동합니다.

rxvt-unicode그러나 또는 같은 터미널에서는 xterm문자를 입력해도 아무 작업 수행되지 않습니다.문자가 완벽하게 잘 표시되지만복사해서 붙여넣을 때요.

작동하지 않는 특정 문자 및 키에 대한 정보:

  • : 16진수 코드 0x21D4; 네오 시퀀스:Capslock + AltGr + m
  • : 16진수 코드: 0x2218; 네오 시퀀스:Capslock + AltGr + [

Capslock + AltGr + ⟨some key⟩예를 들어 를 통해 입력한 다른 문자도 내 터미널에서 문제 없이 작동합니다. 이것은 나를 당황하게 한다.

그렇다면 여기서 문제가 어디에 있는지 아는 사람이 있습니까? 어디를 봐야 할지 아는 사람 있나요?

저는 Parabola GNU/Linux(기본적으로 Arch Linux)를 사용합니다.

답변1

좋아요, 이제 적어도 해결 방법을 찾았습니다.

문제는 키심 이름 으로 인식되지 않는 것 ifonlyif같습니다 . 내 구성에 사용됩니다.jotxmodmap

$ 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

유니코드 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 테이블을 조사 하고 as xmodmap -pke의 실패한 조회 와 as 의 성공적인 조회를 비교했습니다 .ifonlyifU21D2

관련 정보