Alguns aplicativos X aceitam meus caracteres não latinos, alguns os ignoram

2

Estou usando um ambiente X com um layout de teclado duplo: us,il . Agora, em alguns dos meus aplicativos e no layout il , os caracteres hebraicos não são registrados, enquanto os sinais de pontuação. Em outros aplicativos, os caracteres hebraicos se registram bem e são adicionados ao texto que estou digitando. O layout em inglês funciona bem. Fornecerei detalhes completos sobre minha configuração abaixo.

Minhas perguntas são: Por que isso está acontecendo? E mais importante, como posso corrigir / contornar isso e fazer com que todos os aplicativos também aceitem caracteres hebraicos?

Detalhes sobre minha configuração

  • Layout físico do teclado: Padrão dos EUA 104-chave (como este ).
  • Distribuição de SO: Devuan 2.0 ASCII (~ = extensão Debian 9.0)
  • Configuração do XKB:

    $ setxkbmap -query
    rules:      evdev
    model:      pc105
    layout:     us,il
    variant:    ,
    options:    grp:alt_shift_toggle,grp_led:scroll
    
  • Desktop Environment: Isso acontece comigo com o Cinnamon e o LXQt; ainda não tentei outros.

  • Apps que rejeitam caracteres em hebraico: Alt + F2 do Cinnamon; LeafPad; GEdit, xterm.
  • Aplicativos que aceitam caracteres em hebraico: KWrite, Terminal GNOME, LibreOffice, Firefox, Kolourpaint, lxterminal, Konsole.

xev output

Saída ao pressionar a no teclado:

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

Saída ao alternar o layout do teclado:

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

Saída ao pressionar a novamente no teclado (essa tecla também corresponde à letra hebraica 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 output

Parte da saída de 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. ...

Variáveis de ambiente relacionadas à linguagem

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

Outras notas

  • Se eu criar uma conta de usuário limpa, esse usuário não terá esse problema. Portanto, deve ser algum tipo de configuração específica do usuário.
  • Se eu copiar o texto hebraico, posso colá-lo nos aplicativos que recusam caracteres hebraicos e ele é exibido corretamente.
  • Eu mantive minha pasta pessoal a partir de uma instalação anterior, não-Devuan, Linux (era o Linux Mint 18.3).
por einpoklum 11.07.2018 / 12:02

3 respostas

1

Você precisa remover / limpar seu arquivo ~ / .xinputrc.

Inspirado em algumas suposições sugeridas por @harrymc, descobri o culpado: meu arquivo ~/.xinputrc , gerado na minha distribuição anterior (Linux Mint 18.3). Diz:

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

O mecanismo im-config é

the input method on X Window System with GTK GUI or console terminal dialogue.

que explica porque somente aplicativos GTK (mais simples) parecem ser afetados. Não estou familiarizado com os negócios de método de entrada, mas - se eu remover esse arquivo ou comentar a opção run_im - todos os aplicativos agora parecem aceitar os caracteres hebraicos que eu digito.

    
por 17.08.2018 / 18:18
1

A resposta abaixo não resolveu o problema do pôster, mas a discussão que seguido finalmente apontou para ele.

Nós concluímos que a causa do problema foi alguma diferença entre Mint e Devuan que se manifestaram quando o cartaz copiou todo o seu pasta de casa de um para o outro. Uma grande dica foi o fato de que, sob o perfil do usuário raiz, o problema não se manifestou.

O pôster examinou os arquivos em sua pasta pessoal relacionados ao teclado, e o resultado deve ser encontrado em sua resposta.

Seu problema parece o mesmo que no post
O terminal não aceita alguns caracteres unicode digitados .

A solução encontrada nesse post foi modificar .Xmodmap e substituir os nomes das chaves por seus códigos hexadecimais Unicode.

Na postagem acima, para o caractere grego ifonlyif , o pôster substituiu a linha:

keycode 58 = m M m M percent Greek_mu KP_1 KP_1 ifonlyif

pela linha:

keycode 58 = m M m M percent Greek_mu KP_1 KP_1 U21D4

Não tendo o seu ambiente, acho que no seu exemplo, você deve digitar 38 substitua o texto hebrew_shin por U05E9 (ou algo semelhante).

Se isso funcionar para você, você precisaria fazer o mesmo para todas as letras hebraicas, que infelizmente será bastante doloroso. Se você tiver sorte, o código hexadecimal unicode já pode ser mencionado no Xmodmap, então você pode fazer isso por meio de sed magic.

    
por 16.08.2018 / 19:57
0

Resposta parcial:

Se você comparar a e ש , verá

XLookupString gives 1 bytes: (61) "a"

vs.

XLookupString gives 0 bytes: 

E esse é o problema, porque, olhando para a página de manual, o XLookupString manipula apenas o Latin-1, os aplicativos que dependem de XLookupString para converter os pressionamentos de tecla em caracteres receberão um resultado vazio, o que faz com que seus "caracteres hebraicos não sejam registrados, enquanto os sinais de pontuação o fazem".

E, aparentemente, algumas outras aplicações, por ex. os do KDE, trabalhe em torno disso ou use um método diferente.

Eu não sei como consertar isso. Você precisará usar aplicativos que entendam o Unicode / UTF-8 e também traduzir os keysyms recebidos corretamente. Corrigir o código-fonte de aplicativos que não funcionam é uma opção, mas se fosse fácil, tenho certeza que alguém já teria feito isso ... então eu diria que há algumas dicas.

Alternativas para XLookupString que funcionam com UTF-8 ( Xutf8LookupString ) existem.

    
por 16.08.2018 / 16:54