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

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

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

비표준 키보드 레이아웃(예:새로운)를 사용하면 유니코드 문자를 직접 입력할 수 있습니다. 예를 들어 α β γ δ … ∀ ∃ … ∘ ⇒ ⇔대부분의 응용 프로그램에서 잘 작동합니다.

그러나 문자를 입력하는 rxvt-unicode것과 같은 터미널 에서는 아무 것도 수행되지 않습니다.xterm캐릭터 연기가 너무 잘됐음에도 불구하고복사해서 붙여넣을 때요.

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

  • :16진수 코드 0x21D4; 새로운 시퀀스:Capslock + AltGr + m
  • :16진수 코드: 0x2218;새 시퀀스:Capslock + AltGr + [

Capslock + AltGr + ⟨some key⟩예를 들어, via를 통해 입력한 다른 문자는 내 터미널에서 잘 작동합니다. 이것은 나를 혼란스럽게 한다.

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

저는 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

유니코드 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 -pkefailed ifonlyifaslookups 와 성공적인 lookups를 U21D2비교했습니다 .

관련 정보