Um conjunto de caracteres é definido de acordo com os símbolos constantes no alfabeto utilizado para escrita em uma ou mais línguas. A Organização Internacional de Normas (International Standards Organization - ISO) padronizou através da norma ISO-8859 vários desses conjuntos, identificados por ISO-8859-x onde o x corresponde a um determinado alfabeto. O conjunto ISO-8859 utiliza 8 bits para representar cada caracter, o que permite uma gama de 256 sinais (valores de zero a 255). Em cada um dos conjuntos, os códigos zero a 127 correspondem ao conjunto ASCII (American Standard Code for Information Interchange) e os códigos 160 a 255 são usados para caracteres nacionais.
Para a língua portuguesa, recomenda-se o uso do conjunto ISO-8859-1, que compreende o alfabeto latino e letras acentuadas usadas pelas línguas do oeste da Europa e América. Este conjunto de caracteres também é frequentemente chamado de Latin-1 ou ISO Latin-1.
Um padrão mais recente é o Unicode, definido pela norma ISO-10646, que permite definir caracteres cuja representação interna no computador utiliza mais de um byte (ou octeto na nomenclatura ISO). Todas as versões mais recentes de sistemas Unix suportam Unicode (ou pelo menos seus fabricantes alegam suportar).
Além dos caracteres alfanuméricos e sinais de acentuação, é possível também gerar sinais semigráficos que são úteis no desenho de linhas e bordas. Esses sinais podem aproveitar códigos não utilizados pelo conjunto oficial, tornando-os não portáveis.
O Linux foi desenhado internamente de modo a facilitar a sua fácil configuração e extensão em tempo de execução, não constituindo o tratamento do teclado e fontes de caracteres excepção. Linux segue o padrão Unicode possuindo uma implementação ``nivel 1''. Maiores detalhes podem ser encontrados nos manuais do Linux, que podem ser lido com os comandos
man unicode
man utf-8
man iso_8859_1
man ascii
mas antes disso certifique-se de que o man está configurado corretamente,
conforme mostrado na seção
Man, groff, troff.
Alguns sistemas operativos, tais como MacOS, Microsoft Windows e NeXT, possuem suas interfaces gráficas próprias. No Linux, assim como na maioria dos sistemas compatíveis com Unix, é de uso corrente um ambiente gráfico criado para ser ``multiplataforma'': o X Window System, que também foi projetado para suportar diversos conjuntos de caracteres, idiomas e formatos de teclado, mas ainda não suporta totalmente o padrão Unicode e sim uma extensão do ISO-8859.
A rigor o X Window System não é uma interface gráfica com o usuário, mas a combinação de um protocolo de comunicação com uma interface com programas aplicativos (API) sobre a qual se construíram várias interfaces gráficas. Tanto o protocolo quanto o Sistema de Janelas definem um conjunto de mecanismos e não políticas (elementos característicos da política de uma Interface Gráfica com o Usuário são menus, botões e caixas de diálogo). Esta é a razão pelo qual o uso do termo ``XWindows'' é incorreto e deve ser evitado.
Existem muitas semelhanças entre os dois ambientes. Ambos se baseiam em padrões internacionais para definição de conjuntos de caracteres. Tanto no X quanto no console do Linux é possível definir uma tecla chamada Compose cujo pressionamento seguido de duas outras gerará o caracter correspondente. Assim sendo, o pressionamento da seqüência compose-,-c gerará um c cedilhado.
O tratamento do console é feito diretamente pelo sistema operativo e aplicações comuns não se envolvem com o processamento dos códigos de varredura do teclado, recebendo um caracter ou uma seqüência deles ao ser pressionada cada tecla, de tal sorte que uma vez tendo sido corretamente configurados o teclado e a fonte de caracteres pouco mais se tem a fazer.
O X possui uma arquitetura muito diferente: tanto o teclado quanto a(s) tela(s) -- pode haver mais de uma tela -- são controlados por uma aplicação especial chamada servidor X. O pressionamento de uma tecla gera uma mensagem (chamada de evento) que é passada pelo servidor X à aplicação cliente. Há um programa muito útil chamado xev que permite observar cada um dos eventos a ele transmitido. O cliente e o servidor se comunicam via rede usando um conjunto de regras chamado protocolo X e podem rodar em máquinas diferentes. A máquina onde roda o servidor é chamada estação de trabalho ou terminal X e a máquina onde roda o programa cliente também é chamada de cliente.
Foge ao escopo deste texto a discussão mais profunda do tratamento de eventos no X. Para maiores informações, sugere-se a consulta aos documentos mencionados na seção Leituras recomendadas, mas é importante esclarecer que o evento enviado pelo servidor ao cliente não contém o código numérico da tecla, chamado keycode na terminologia do X. Ao invés disso, é enviado um símbolo, chamado keysymbol ou keysym, obtido pela consulta a uma tabela de conversão mantida na memória do servidor. Esta tabela pode ser modificada total ou parcialmente a qualquer momento por meio de requisições definidas no protocolo X.
Existe um programa chamado xmodmap capaz de ler um arquivo contendo uma tabela de conversão keycode-->keysym e a enviar, também na forma de mensagens no protocolo X, para o servidor. É responsabilidade do cliente e não do servidor interpretar o keysym, o que significa dizer que a aplicação tem que saber esperar mais um caracter ao receber uma ``tecla morta'' para compor uma letra acentuada.
Desde a revisão 5 do X existe na bibliotaca de funções (Xlib) um mecanismo sofisticado de suporte à geração de caracteres em diversos códigos. A função de tratamento de entrada de texto que já existia nas versões anteriores, chamada XLookupString, entretanto, não processa as seqüências de acentos e letras de modo transparente às aplicações. Ao invés disso foi incluido um método de composição usando contextos de entrada (input contexts) por meio das funções XmbLookupString e XwcLookupString, cujo uso é responsabilidade da aplicação -- ou do seu programador, melhor dizendo -- mesmo no caso da tecla Compose. Isto deve-se so facto de o X Consortium ter chegado à conclusão de que o sistema de mapeamento de teclas não tratava de forma satisfatória toda a imensa variedade de línguas escritas nas várias partes do mundo. Deste modo, decidiu-se que o ``peso'' relativo à gestão do teclado fosse transferido para as aplicações X, o que cria uma dificuldade quando usamos aquelas mais antigas, que não usam o novo método de tratar a entrada.
Por essas razões é normalmente mais difícil conseguir acrescentar suporte à geração de caracteres acentuados em aplicativos que rodam sob o X, principalmente quando não se possui o código fonte. Aplicativos feitos para rodar apenas em modo texto, tais como vi e minicom dependerão totalmente dos recursos do emulador de terminal em uso quando rodando em uma janela do X. Se for usada uma versão atual do xterm ou rxvt o emulador fará o tratamento correto dos acentos.
O francês Thomas Quinot, cansado de esperar uma solução melhor para o problema da acentuação no X, resolveu implementar uma modificação para a Xlib proposta por André D. Balsa, que adiciona suporte à acentuação direta conforme mostrado na seção Cotornando os limites do X. Isso permite usar aplicações como xfig ou xedit sem que seja necessário alterá-las. O truque parece funcionar apenas para caracteres do código ISO-8859-1 mas é suficiente para o Português e outras línguas. Como bem observa Balsa, a longo prazo todos os programas deverão ser modificados para usar os novos recursos do X, mas como a longo prazo estaremos todos mortos a solução de curto prazo de Quinot torna-se bastante atraente...