Por que o layout do teclado internacional dos EUA no Debian é diferente?

11

Edit : Eu percebi que o "problema" não estava apenas no Ubuntu, mas no próprio Debian e no Ubuntu apenas o herdou, então eu fiz isso migrar do Ask Ubuntu


Uso o Linux há 10 anos e, mais recentemente, passei mais tempo com o OSX.

Mas ainda me lembro que no começo eu escolhia o layout de teclado internacional dos EUA e ele teria exatamente a mesma saída do layout de teclado do Windows (e, mais recentemente, o layout internacional do OSX nos EUA).

No entanto, alguns anos atrás, quando instalei o Ubuntu, notei que o cedilla não era mais impresso (ç ou Ç). Esta é uma combinação das seguintes teclas: '+ c. Em vez disso, o que recebo é a letra ć.

Quando isso começou a acontecer e por que a diferença de comportamento nos outros sistemas operacionais? O que me intriga ainda mais é que existe até um layout de teclado "Alternativa internacional dos EUA", que imprime exatamente as mesmas teclas! Então, qual é a alternativa?

Isso foi relatado como um bug na Canonical (não é possível encontrar o link agora), mas o layout do teclado nunca mudou para o que eu esperava. Conheço as soluções alternativas para corrigi-lo ao que preciso, mas gostaria de saber por que / quando ele se tornou diferente.

Pablo
fonte
2
Você pode inserir c-cedilla usando AltGr+ ,. Mas quando / se / por que mudou, eu não sei.
Mikel
Obrigado pelos comentários. Sinalizei a pergunta para que ela possa ser movida / mesclada aqui. Eu ainda acredito que aqui é o lugar certo, pois o comportamento parece ter sido herdado do Debian.
196 Pablo Pablo

Respostas:

17

Sumário

  1. Se você estiver usando o Ubuntu, ele provavelmente mudou por volta de 2005, quando o conjunto de caracteres padrão mudou de ISO 8859-1 para UTF-8.
  2. A US Alternative International adiciona algumas chaves mortas.

As configurações de chave morta dependem do local e do conjunto de caracteres.

Por exemplo:

  • en_US.UTF-8 é definido em /usr/share/X11/locale/en_US.UTF-8/Compose
  • ISO 8859-1 é definido em /usr/share/X11/locale/iso8859-1/Compose

Se você olhar neles usando grep, poderá ver que há uma diferença:

$ grep '<dead_acute> <c>' /usr/share/X11/locale/en_US.UTF-8/Compose 
<dead_acute> <c>                    : "ć"   U0107 # LATIN SMALL LETTER C WITH ACUTE

$ grep '<dead_acute> <c>' /usr/share/X11/locale/iso8859-1/Compose
<dead_acute> <c>            : "\347"    ccedilla

Nomeadamente:

  • Codificação Latim1: ', c=ç
  • UTF-8: ', c=ć

Os logs do git (( en_US.UTF-8 ) ( iso8859-1 )) mostram que tem sido assim desde pelo menos 2004.


A diferença entre US International e US Alternative International é definida em /usr/share/X11/xkb/symbols/us.

Ou seja, o layout Internacional Alternativo dos EUA adiciona essas chaves inativas AltGr extras:

  • dead_macron: no AltGr-menos
  • dead_breve: no AltGr-parenleft
  • dead_abovedot: no período AltGr
  • dead_abovering: em AltGr-0
  • dead_doubleacute: em AltGr-igual (como quotedbl já está sendo usado)
  • dead_caron: em AltGr-less (AltGr-shift-vírgula)
  • dead_cedilla: em AltGr-vírgula
  • dead_ogonek: em AltGr-ponto e vírgula
  • dead_belowdot: no sublinhado AltGr (AltGr-shift-menos)
  • dead_hook: na pergunta AltGr
  • dead_horn: no AltGr-plus (AltGr-shift-igual)
  • dead_diaeresis: em dois pontos AltGr (Alt-shift-ponto-e-vírgula)

Por exemplo:

  • Internacional dos EUA: AltGr+ -=¥
  • Internacional alternativo dos EUA: AltGr+ -, a=ā

UTF-8 se tornou a codificação padrão:

Mikel
fonte
Eu gostaria de ter mais de um voto para dar para esta resposta.
Penguin359
Vale ressaltar que <dead_acute> <c>é remapeado para ç(em vez de ć) se o seu código do idioma for pt_BR. Veja:/usr/share/X11/locale/pt_BR.UTF-8/Compose
Denilson Sá Maia
4

Complementando a resposta de Vítor Souza

Usando um layout de teclado internacional dos EUA com o idioma do SO em inglês e com um lindo cedilha .

Para que o idioma inglês ç/Çfuncione perfeitamente ( 'c-> cedilla), não é necessário alterar os arquivos de composição. O que é preciso fazer é definir o LC_CTYPEcom um código de idioma que contém esta definição:

<dead_acute> <c>            : "\347"    ccedilla.

Como pt_BR.UTF-8 (Português do Brasil / Português do Brasil).

Mapa do teclado X:

# setxkbmap -layout us -variant intl

/etc/locale.conf

# nano /etc/locale.conf
LANG=en_US.UTF-8
LANGUAGE="en_US"
LC_CTYPE=pt_BR.UTF-8

Atualizar localidade

# source /etc/profile

E para tty:

Defina o mapa de teclas, a fonte e o mapa de fontes corretos, por exemplo.

# nano /etc/vconsole.conf
KEYMAP=us-acentos
FONT=ter-114n
FONT_MAP=8859-1
Geyslan G. Bem
fonte
A OP não estava perguntando como consertar, mas por que era assim em primeiro lugar. Caso contrário, eu aprovaria isso.
strugee
@ Strugge, você está certo. No entanto, as sequências estão fazendo isso e, em relação ao OP, Mikel respondeu muito bem.
Geyslan G. Bem
Se alguém considerar esta resposta útil, defina-a.
Geyslan G. Bem 19/04
2

De http://disi.unitn.it/~vitorsouza/linux/ubuntu-linux-10-10-maverick-meerkat/ e http://disi.unitn.it/~vitorsouza/linux/ubuntu-linux-10- 04-lince-lúcido / :

Problema com o cedilla:

Um cara legal decidiu que um c acentuado ("ć") é mais importante que um c com cedilha ("ç"); portanto, o comportamento padrão para pressionar '+ c em teclados internacionais com teclas mortas agora é "ć". Como sou brasileiro e não romeno ou algo assim, isso definitivamente me incomoda. '+ c usado para emitir “ç” uma vez.

Para corrigi-lo, edite como root o arquivo /usr/lib/gtk-2.0/2.10.0/gtk.immodules , localize esta linha:

"cedilla" "Cedilla" "gtk20" "/usr/share/locale" "az:ca:co:fr:gv:oc:pt:sq:tr:wa"

E adicione: en after: wa, para que fique assim:

"cedilla" "Cedilla" "gtk20" "/usr/share/locale" "az:ca:co:fr:gv:oc:pt:sq:tr:wa:en"

Edite para Ubuntu 12.10 ( fonte ):

o arquivo gtk.immodules a ser editado está localizado em:

/usr/lib/x86_64-linux-gnu/gtk-2.0/2.10.0/gtk.immodules ou /usr/lib/i386-linux-gnu/gtk-2.0/2.10.0/gtk.immodules


Editar para Debian Wheezy (e provavelmente outras coisas do gtk 3)

O arquivo que precisa ser editado agora é

/usr/lib/x86_64-linux-gnu/gtk-3.0/3.0.0/immodules.cache

As gtk20linhas estão agora, gtk30mas a adição de :enno final é a mesma.


Para corrigi-lo também para aplicativos não-GTK, edite como root o arquivo /usr/share/X11/locale/en_US.UTF-8/Componha e altere todas as instâncias de ć com ç e todas as instâncias de Ç com Ç.

Pode ser necessário repetir uma ou ambas as operações de tempos em tempos, quando você atualiza o sistema e leva os arquivos de configuração de volta ao seu conteúdo original.

Comunidade
fonte
Para impedir que o gerenciador de pacotes interaja com suas alterações, você pode executar (como root) dpkg-divert /usr/lib/gtk-2.0/2.10.0/gtk.immodules. O sistema de pacotes gravará então gtk.immodules.distrib. Para desfazer isso, adicione o --removesinalizador ao mesmo comando e copie o arquivo .distrib sobre o original. Para mais informações man dpkg-divert,.
Jander
no ubuntu 12.10, o arquivo tem um local diferente: /usr/lib/x86_64-linux-gnu/gtk-2.0/2.10.0/gtk.immodules ou /usr/lib/i386-linux-gnu/gtk-2.0/ 2.10.0 / gtk.immodules
0

Isso é um complemento à resposta de Vítor Souza .

No Xfce Quantal (Xubuntu 12.10, Mint 14 Xfce) não foi possível resolver isso pelos métodos já mencionados (veja abaixo). O que funcionou foi instalar o ibuspacote e suas dependências.

( Fonte - mais exatamente aqui .)


A solução mais antiga não funcionou para mim: no Ubuntu 12.10, o arquivo gtk.immodulestem um local diferente:

/usr/lib/x86_64-linux-gnu/gtk-2.0/2.10.0/gtk.immodules

ou

/usr/lib/i386-linux-gnu/gtk-2.0/2.10.0/gtk.immodules

(Minha fonte para isso aqui .)

Comunidade
fonte