Como definir uma chave de composição no terminal (sem ambiente de desktop)?

17

Eu gostaria de definir uma composechave no meu sistema (Debian Sid "Wheezy"). Não tenho Xorg (e não quero nenhum ambiente de desktop). Somente no terminal.

Gostaria de configurá-lo na minha Alt-Grchave (direita Alt). Eu tentei por um tempo, mas não consigo descobrir como configurá-lo.

Estive investigando e encontrei algumas instruções:

  • $ showkeyfornece o código da minha Alt-Grchave (nº 100)

  • $ dumpkeyse $ dumpkeys --compose-onlyproduz "o conteúdo atual do driver do teclado", no formato especificado por keymaps, de acordo com a manpágina

  • $ loadkeys carregar uma tabela de tradução do teclado

Tenho certeza que não é tão difícil, mas sinto falta de como lidar com isso ...

cedbeu
fonte
Hm, não estou seguindo 100%, o que você gostaria que o Alt-Gr fizesse quando o atingisse?
Emanuel Berg
Eu gostaria que fosse a chave de composição . Na verdade, eu gostaria apenas de definir uma chave de composição em algum lugar e, como estou acostumada a usá-la no meu Alt-Gr, gostaria de defini-la lá. É muito fácil configurar com uma GUI , mas devo defini-la no modo puro de console, pois não tenho um sistema X instalado (não é uma opção). Eu simplesmente não consigo descobrir como.
cedbeu

Respostas:

10

Nos sistemas Debian e Ubuntu mais recentes, as configurações do teclado são colocadas /etc/default/keyboarde compartilhadas entre o X e o console. Apenas corra

sudo dpkg-reconfigure keyboard-configuration

e selecione Compose key: Right Alt (AltGr)na tela apropriada.

Você também pode colocar XKBOPTIONS=compose:raltem /etc/default/keyboarde correr

sudo dpkg-reconfigure console-setup

Os sistemas mais antigos têm uma chave de composição no console por padrão. No uslayout, pressionar as duas Alt teclas juntas age como Compose. 1 1

Por exemplo: Alt+ AltGr, ", A=> Ä

Se você preferir AltGrapenas ser Compose, precisa alterar

alt keycode 100 = Compose

no seu mapa de teclado ativo para

keycode 100 = Compose

A maneira mais fácil de fazer isso é fazer as alterações acima /lib/kbd/keymaps/i386/include/linux-with-alt-and-altgr.inc.

Uma maneira melhor é criar um novo arquivo chamado /lib/kbd/keymaps/i386/include/altgr-is-compose.inccom a linha acima, criar um novo mapa de teclas que o inclua e defina-o como seu mapa de teclas padrão.

  1. PrtScntambém atua como Composepadrão.
Mikel
fonte
Não estou conseguindo fazer isso funcionar. O dpkg-reconfigureassistente realmente pergunta sobre uma chave de composição, mas diz que não funciona no "modo Unicode" (?). Além disso, quando não estiver nesse modo, ele diz que o período Control + funciona como uma chave de composição. Mas também não estou conseguindo que isso funcione.
Emanuel Berg
Eu acho que essa mensagem de aviso se refere unicode_start. Para mim, ainda funciona, desde que corra setupconcomo dpkg-reconfigurediz.
Mikel
Quando corro setupconno meu terminal X ( urxvt), ele diz "Não estamos no console, o console fica desconfigurado". Além disso, showkeyreclama "Não foi possível obter um descritor de arquivo no console". Em ttyambos os trabalhos, mas showkeydiz (a primeira coisa) que "o modo kb era UNICODE", talvez seja por isso que ele não esteja funcionando. Mas, o período Control + funciona em tty. OK, faz sentido agora.
Emanuel Berg
Sua pergunta disse que você não tem X? Você precisa executar setupconno console virtual do Linux, por exemplo, Ctrl + Alt + F1.
Mikel
1
Parece console-setupque não suporta muitas seqüências de composição por padrão. Você pode correr dumpkeys --compose-onlypara ver quais. Você deve poder modificar o console-setupscript init para adicionar regras de composição adicionais onde ele é executado loadkeys.
Mikel
2

"compor" no console permite digitar dois caracteres, mas gerar um terceiro.

o problema é que as definições de composição usam bytes , tanto como as duas entradas (ou seja, você não pode definir composição em termos de chaves digitadas, mas apenas em termos de símbolos digitados) e na saída.

para fazê-lo funcionar em UTF-8, que é multibyte (1 a 4 bytes, pelo menos) exigiria grandes mudanças na maneira como a entrada do console é manipulada e substitui a matriz de caracteres simples atualmente usada por algo mais complexo. Parece que não há planos para fazê-lo (o consenso entre os devlopers do kernel é que o console deve permanecer um console, algo simples, usado apenas para o último recurso; se você realmente precisar de unicode, provavelmente também precisará de bidi, shaping etc.); é melhor executar um terminal gráfico (um xterm em tela cheia no X11; mas existem outras possibilidades).

Portanto, na verdade, ele não funciona e não funciona com caracteres multibyte no console. MAS, ainda funcionará se você restringir as definições de composição ao ASCII simples.

E também descobri que também funciona se a saída estiver em iso-8859-1 (que corresponde a valores unicode até 0x00ff); para isso você pode colocar em algum script de início uma linha:

    loadkeys / somepath / somefile

e coloque nesse arquivo as definições de composição que você deseja (tenha o cuidado de salvar o arquivo na codificação ISO-8859-1; e use caracteres maiores que 0x7f como saída) a sintaxe de um arquivo desse tipo é muito simples, linhas como esta:

    compor 'somechar' 'somotherchar' para 'desejado resultado'

por exemplo:

    compor 'a' 'a' para 'å'
    compor 'a' 'e' para 'æ'

o apóstrofo tem que ser escapado.

o efeito de chaves diacríticas mortas também é definido nesse arquivo; para dead_acute + a, você define uma linha como:

    compor '\' '' a 'a' á '

dead_grave usa backtick (`), dead_diaeresis usa aspas duplas ("), dead_circumflex usa circumflex (^) e dead_tilde usa til (~).

Pablo Saratxaga
fonte
Obrigado, conseguiu que funcionasse. Apenas, eu tive que mudar compose 'a' 'a' to 'å'para compose 'o' 'a' to U+00E5, caso contrário, loadkeysreclamou de um erro de sintaxe.
Emanuel Berg
quando você usou 'å', você escreveu o arquivo em iso-8859-1 (não utf-8)?
Pablo Saratxaga
Eu não sei. Como verifico isso?
Emanuel Berg
Para testar se um arquivo está em utf-8: iconv -f utf-8 -t utf-8 filename se não houver erros, é em utf-8
Pablo Saratxaga
Isso parece ser o arquivo, mas não, não há erros, echo $?pelo menos, e nenhuma saída para stderr. Além disso, fileme diz que é UTF-8, então faz sentido.
Emanuel Berg