Pesquisa personalizada

2008/07/30

Ć (C Acentuado) vs. Ç (C Cedilha) no Firefox32 rodando num AMD64 com Kubuntu 64 Bits

Eu uso um Kubuntu Hardy (Ubuntu 8.04.1) 64 bits rodando numa máquina AMD64 e opto preferencialmente por programas 64 bits, pois não vejo o menor sentido em ficar usando software 32 bits em máquinas de 64 - totalmente nosense. No entanto, devido as limitações do Firefox 64 bits (falta de plugins, incluindo suporte a applets Java, Flash e alguns add-ons Firefox), fui obrigado (após muito relutar!) usar o Firefox 32 Bits. Pois só nele encontro o suporte aos recursos que normalmente utilizo.

Instalação do Firefox 32 Bits

Já faz muito tempo que utilizo essa solução, mas sempre que preciso instalar o Firefox 32 bits com seus plugins e tudo mais desejável, opto por um script que automatiza o processo de instalação (sim sou newbie, e daí?!). O script de instalação do Firefox32 (para várias versões e sabores) pode ser encontrado, em: Howto Install 32 bit Firefox with Flash w/sound and Java for AMD64.

Praga: Ć ao invés de Ç

Meu sistema está configurado para a língua inglesa, ou mais precisamente, inglês estadunidense. Meu teclado não tem a tecla com Ç e realmente odeio teclados ABNT/ABTN 2. Meu teclado é no formato americano internacional e ao invés do cedilha, tem uma tecla com vírgula.

Quem tem essa configuração, sabe que é um desafio acentuar corretamente com o c cedilha. Normalmente teclariamos a tecla com a aspa simples (ou apóstrofo, ou ainda o acento agudo) e em seguida teclariamos o C. Bem, no meu caso isso não resolve e tive que sair em busca de uma solução. Aos poucos fui soluciando o problema em diferentes lugares.

Aplicações: QT (e KDE)

Ao contrário de quem usa o Ubuntu, a galera do Kubuntu vai querer configurar o QT (e KDE) de modo que suas aplicações possam usar o ' + c para fazer o ç. Para isso, edite o arquivo que se encontra em /usr/share/X11/locale/en_US.UTF-8/Compose e substitua todos os Ć por Ç e ć por ç. Se preferir, use o script abaixo:

sudo -i
cd /usr/share/X11/locale/en_US.UTF-8
cp Compose Compose.original
cat Compose.original | sed -e 's/Ć/ć/' -e 's/Ç/ç/' > Compose
exit

Se você estiver usando ISO-8859-1 ao invés de UTF8, provavelmente a modificação acima não será necessária no arquivo Compose equivalente, pois ao menos na minha máquina ele está mapeado corretamente (entenda "corretamente" como: correto para o uso que se espera aqui no Brasil, pois em muitos paises da Europa se utiliza o c com acento agudo). No meu caso, a variável de ambiente LANG está configurada para en_US.UTF8.
E antes que alguém indague: sim, prefiro usar meu OS em inglês que em português e até pagaria para não ter meu OS em português!

Configurando o GTK

Antes de mais nada: ODEIO GTK e IGUALMENTE, ODEIO GNOME.

Para usar o ç (c cedilha) em aplicações GTK, e isso inclui o Gnome, você terá que alterar o arquivo /usr/lib/gtk-2.0/2.10.0/immodule-files.d/libgtk2.0-0.immodules de modo a acrescentar a lingua inglesa na lista de linguagens do módulo cedilla. Para isso, altere a linha:

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

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

Isso dirá a GTK que o módulo cedilla - responsável pelo reconhecimento do pressionamento '+c como ç - se aplique, também, a língua inglesa. Obviamente, isso só é necessário se você estiver usando inglês como língua em seu OS ou aplicativo. Para saber qual a sua configuração atual, vá no console (konsole) e digite:
locale
No meu caso, está configurado para:
LANG=en_US.ISO-8859-1
LANGUAGE=en_US:en
LC_CTYPE=en_US.utf8
LC_NUMERIC=en_US.utf8
LC_TIME=pt_BR
LC_COLLATE=en_US.utf8
LC_MONETARY=pt_BR
LC_MESSAGES=en_US.utf8
LC_PAPER=pt_BR
LC_NAME=pt_BR
LC_ADDRESS=en_US.utf8
LC_TELEPHONE=pt_BR
LC_MEASUREMENT=pt_BR
LC_IDENTIFICATION=en_US.utf8
LC_ALL=
Você pode controlar esses valores por intermédio do arquivo de configuração /etc/environment. No meu caso, o arquivo está configurado, como:
JAVA_HOME=/opt/jdk1.6.0_06/jre

KDE_NO_IPV6=true
PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games"

LANGUAGE="en_US:en"
LANG="en_US.UTF-8"
Esse valores também podem ser controlados pelo arquivo de configuração /etc/default/locale.

Você deve forçar a GTK a carregar o módulo cedilla. Para isso, você terá que ter uma variável de ambiente chamada GTK_IM_MODULE e ela deverá ter o valor cedilla. Se essa variável não explicitar o módulo cedilla, ele não será carregado e você não terá o c cedilha, mas sim o c acentuado, mesmo que tenha acrescentado o "en" no arquivo libgtk2.0-0.immodules.
Essa variável de ambiente pode ser configurada em qualquer um de vários lugares, como:

/etc/environment
~/.profile
/etc/profile.d/
Se quiser, simplesmente rode:
sudo -i
echo "export GTK_IM_MODULE=cedilla" >> /etc/environment
exit

O Teste

Após fazer as alterações para a correta acentuação do sistema, você deverá reiniciar o X (interface gráfica), para isso, pode simplesmente reiniciar a máquina ou pressionar: CTRL + ALT + BACKSPACE. Você verá que as aplicações estão acentuando corretamente, tanto as QT, quanto GTK.

Firefox32 num Linux 64 bits

Quando você entrar no seu Firefox 32 bits ficará muito surpreso ao ver que somente ele não acentua corretamente! Se você iniciá-lo do console, verá uns avisos, assim:

usuario@maquina:~$ firefox

(firefox-bin:11868): Gtk-WARNING **: /usr/lib/gtk-2.0/2.10.0/engines/libqtengine.so: wrong ELF class: ELFCLASS64

(firefox-bin:11868): Gtk-WARNING **: /usr/lib/gtk-2.0/2.10.0/engines/libqtengine.so: wrong ELF class: ELFCLASS64
FoxyProxy settingsDir = /home/usuario/.mozilla/firefox/rb9nj3cx.default

(firefox-bin:11868): Gtk-WARNING **: /usr/lib/gtk-2.0/2.10.0/immodules/im-cedilla.so: wrong ELF class: ELFCLASS64

(firefox-bin:11868): Gtk-WARNING **: Loading IM context type 'cedilla' failed

(firefox-bin:11868): Gtk-WARNING **: /usr/lib/gtk-2.0/2.10.0/immodules/im-cedilla.so: wrong ELF class: ELFCLASS64

(firefox-bin:11868): Gtk-WARNING **: Loading IM context type 'cedilla' failed

(firefox-bin:11868): Gtk-WARNING **: /usr/lib/gtk-2.0/2.10.0/immodules/im-cedilla.so: wrong ELF class: ELFCLASS64

(firefox-bin:11868): Gtk-WARNING **: Loading IM context type 'cedilla' failed

Eu perdi muito tempo tentando entender o porquê disso. Pois conforme se vê acima, a GTK tenta carregar uma biblioteca 64 bits para uma aplicação que é 32 bits... Ao invés de carregar /usr/lib/gtk-2.0/2.10.0/immodules/im-cedilla.so, ela deveria carregar: /usr/lib32/gtk-2.0/2.10.0/immodules/im-cedilla.so. Obviamente ela não vai conseguir carregar o módulo de 64 bits, pois o Firefox que usamos é 32 bits. Só que isso é consequência, não é a razão do problema. E eu não consegui descobrir o porquê e se você pesquisar muito na Internet, verá que ninguém conseguiu, também.

Bem, compreendendo o fato dele estar tentando carregar uma biblioteca de 64 bits ao invés da que deveria e que essa biblioteca é o módulo que desejamos que seja carregado, pois ele fará nosso ç e que também:

  • O módulo a ser carregado pela GTK é informado na variável de ambiente GTK_IM_MODULE;
  • Há uma versão da GTK para 64 bits e outra para 32 bits. Logo, haverá dois arquivos de configuração desses módulos e para cada módulo uma versão de acordo com a arquitetura;
  • O Firefox32 está, por alguma razão desconhecida, carregando o módulo de 64 bits. Após testes, verifiquei que a GTK também só lia o arquivo /usr/lib/gtk-2.0/2.10.0/immodule-files.d/libgtk2.0-0.immodules - que é de 64 bits -, mas não o arquivo para a configuração de 32 bits /usr/lib32/gtk-2.0/2.10.0/immodule-files.d/libgtk2.0-0.immodules;
  • Sei que ao menos aplicações GTK de 64 bits estão formando o c cedilha corretamente. Isso graças as configurações que foram realizadas anteriormente. Sendo assim, é desejável preservá-las;

Como não encontrava nenhuma solução para o problema e observado o já exposto, pensei em fazer o Firefox32 ao invés de usar o módulo GTK cedilla de 64 bits, usar o equivalente para 32 bits. Tudo preservando as configurações para as outras aplicações.

A Solução para Ç no Firefox32

O que fiz foi copiar a biblioteca im-cedilla.so de 32 bits para a pasta de módulos IM de 64 bits da GTK e, claro, a renomeei - dei o nome im-cedil32.so. Também, alterei o arquivo da configuração de 64 bits da GTK dos módulos IM para contemplar o "novo" módulo im-cedil32.so. O módulo internamente faz referência a seu próprio nome e por isso, tive que editar o arquivo (usei o khexedit, mas você poderia usar qualquer editor binário) e alterar no braço as referências a cedilla para cedil32.
Pronto. Funcionou! Isso foi o "suficiente".

Abaixo o script para reproduzir o que realizei:
sudo -i
cd /usr/lib/gtk-2.0/2.10.0/immodules/
cp /usr/lib32/gtk-2.0/2.10.0/immodules/im-cedilla.so /tmp/im-cedilla.32bits.so
apt-get install bbe
bbe -e s/edilla/edil32/ /tmp/im-cedilla.32bits.so | sudo bbe -e s/type_cedil32/type_cedilla/ -o im-cedil32.so
cd ../immodule-files.d/
echo "\
\"/usr/lib/gtk-2.0/2.10.0/immodules/im-cedil32.so\"
\"cedil32\" \"Cedil32\" \"gtk20\" \"/usr/share/locale\" \"az:ca:co:fr:gv:oc:pt:sq:tr:wa:en:us\"
" >> libgtk2.0-0.immodules
exit

Se precisar, pode pegar o binário que foi criado no passo acima, aqui: im-cedil32.so

E finalmente alteramos o script de inicializaćão (e de agora em diante escrevermos inicialização) do Firefox 32 bits para que ele sempre inicialize a variável de ambiente GTK_IM_MODULE para cedil32 ao invés de cedilla. Para isso, localize o script de inicialização do Firefox32 e modifique-o de modo a acrescentar a variável de ambiente que precisamos. Coloque isso logo no início do script.

Após, seu script de inicialização do Firefox32 conterá a seguinte linha em destaque:
## the mozilla-bin binary to work.
##

export GTK_IM_MODULE=cedil32

moz_pis_startstop_scripts()
{
  MOZ_USER_DIR=".mozilla/firefox"
  # MOZ_PIS_ is the name space for "Mozilla Plugable Init Scripts"

Uma forma diferente de fazer Ç ccedilha

Para fazer o C cedilha em qualquer aplicação, mesmo sem ter que fazer nada do que relato anteriormente, basta usar: ALT_DIR + , + c. Só serve a tecla ALT da direita, não serve a da esquerda.

Eu ainda prefiro: ´ + c
;)

Labels: ,

9 Comments:

Anonymous Anonymous said...

Obrigado. Eu ja tava ficando louco com esse C com acento!

Como é que isso não está espalhado pela web toda??

Valeu, cara!

23 August, 2008 12:49  
Anonymous Anonymous said...

Agrade'ç'o pelo tutorial !

Andei procurando a um tempo atrás e não achava... já estava me acostumando a evitar o cedilla mesmo.

Mas GTK é legal :(

valeu !

16 September, 2008 04:47  
Anonymous Anonymous said...

Ola Marcio

Fiz um script para o GTK a partir de sua orientação,automatizando o processo:

sudo -i
cd /usr/lib/gtk-2.0/2.10.0/immodule-files.d/
cat libgtk2.0-0.immodules | sed -e 'az:ca:co:fr:gv:oc:pt:sq:tr:wa' -e 'en:az:ca:co:fr:gv:oc:pt:sq:tr:wa'
echo "export GTK_IM_MODULE=cedilla" >> /etc/environment
exit


Abs

Andre Uebe

28 October, 2008 09:42  
Anonymous Anonymous said...

Ççççç!

=)

12 November, 2008 12:38  
Anonymous Anonymous said...

Opa Márcio!

Valeu pelas dicas cara, mas aconteceu o seguinte. Funcionou tudo para o Gnome, porém no Amarok (que usa a engine do KDE) não o ç não funciona, continua saindo c com acento agudo.

Eu alterei o arquivo que vc mencionou no início do post, porém não funcionou, tem alguma dica?

02 December, 2008 22:01  
Anonymous Anonymous said...

Prezado Márcio, tá pra nascer um cara mais bamba que você. Suas dicas funcionaram com perfeição. Muitíssimo agradecido. E Feliz Natal.

- c.a.t.

23 December, 2008 22:02  
Blogger Alex M. Souza said...

Parabéns pela dica.
Tutorial simples que funciona.
Aperto certeiro no parafuso correto!

11 February, 2009 00:27  
Blogger fladom said...

Caro Márcio

Primeira dúvida: tenho meu ubuntu 9.04 configurado em português , com um notebook toshiba com teclao americano, mas não consigo escrever o cedilha com " '+ c ", apesar de o teclado estar configurado como EUA INTERNACIONAL;

Segunda dúvida: após seguir suas orientaćoes, apesar de não serem para uma configuraćão em português, resolvi o problema do cedilha, porém fiquei com o meu SCIM (método de entrada para língua asiática) desabilitado, o que me forćou a desfazer o segundo passo de sua dica (a edićão do arquivo /etc/environment)

Como posso ter o cedilha e o SCIM funcionando simultaneamente?
Grande abraćo,
Flávio.

22 August, 2009 01:18  
Blogger Unknown said...

Boa tarde amigo. Sei que seu tutorial é meio antigo mas preciso muito que me ajude. Eu uso o FreeBSD e consegui fazer o QT funcionar legal com seu tuto. Mas o GTK que vc se refere como "/usr/lib/gtk-2.0/2.10.0/immodule-files.d/libgtk2.0-0.immodules" no meu sistema está em um endereço diferente: "/usr/local/lib/gtk-2.0/2.10.0/immodules/" e dentro desse diretório só tem arquivos com extensão .so .la e .a. Tem inclusive o arquivo im-cedilla.a (.so e .la). Vc poderia me ajudar a fazer a alteração correta?

08 February, 2010 17:10  

Post a Comment

<< Home