Quais são os passos necessários para criar um novo layout de teclado no Ubuntu?

36

O teclado que estou tentando criar tem muito Unicode e é assim:

Não ter êxito com o seguinte tutorial:

  • link
    (Existem alguns erros no tutorial, e ele usa uma linguagem imprecisa, como "Cortar" as coisas, em vez de "excluí-las", e ele é formatado de forma estranha)

Eu queria saber se alguém seria tão gentil em fornecer um tutorial melhor com instruções passo a passo?

    
por Akiva 12.08.2014 / 02:27

2 respostas

14

Nota : o Wayland usa xkb, mas muitos xTools pararam de funcionar corretamente (xdotool por exemplo)

Nota : este é um tutorial não exaustivo. É mais útil para um indivíduo que procura criar um novo layout de oito níveis e entender a sintaxe.

Nota: É fornecida uma solução rápida e suja. Inclui uma planilha que gera automaticamente o código que você precisa.

Compreendendo o diretório XKB

cd /usr/share/X11/xkb/ && ls
  1. types - Como as chaves produzidas são alteradas por Modificadores Ativos . (Shift, Ctrl, Alt ~)
    Importante se você quiser personalizar o Teclas modificadoras.
  2. geometry - Usado para desenhar gráficos de teclado.
    Importante se você estiver projetando um hardware não padrão de teclado.
  3. rules - Buscando a configuração apropriada para sua configuração atual.
    Você precisará definir isso
  4. keycodes - O intérprete dos códigos de tecla para hardware de teclado.
    Exemplo: Teclados Macintosh entendem a barra de espaços como 57 . Nós escrevemos isso como <SPCE>
  5. symbols - Quais Valores são atribuídos a códigos de chaves .
    Aqui é onde vamos definir nosso layout personalizado.
  6. compat - Abreviação de Compatibilidade .
    Comportamento interno de Modificadores (Shift, Control, Alt ...)

Fluxo de trabalho

códigos de chaves & gt; símbolos & gt; compat

Eu toquei apenas em symbols : veja abaixo a solução Rápida e Direta .

Mapas de símbolos

/ símbolos / us Qualquer arquivo neste diretório segue a mesma estrutura.

partial alphanumeric_keys
xkb_symbols "basic" {
    name[Group1]= "US/ASCII";
    key <TLDE> {        [ quoteleft,    asciitilde      ]       };
    key <AE01> {        [         1,    exclam          ]       };
    modifier_map Shift  { Shift_L, Shift_R };
};

partial - Não é um mapa de teclado completo

alfanumeric_keys Seção do teclado sendo mapeado. Múltiplos podem ser usados
Nota: Se nenhum *_keys for especificado, um teclado completo é assumido.

"basic" - O nome do mapa de símbolos

name [Group1]="EUA / ASCII"; Dá um nome exclusivo a este grupo de teclados.

modifier_map Para editar as teclas modificadoras . (ctrl, shift, alt ~)

Deslocamento {Shift_L, Shift_R}; Não é normalmente necessário. Ele mapeia os dois turnos para o modificador de turno, também conhecido como nível 2.

chave & lt; TLDE & gt; A Chave do Til - Normalmente, a tecla superior esquerda logo acima da aba

chave & lt; A01 & gt; Ilustração - Composta por Três Partes, A E 01

  1. Um = bloco de teclas alfanuméricas.
    KP = Teclado
    FK = Tecla de Função

  2. E = Linha no teclado.
    Chave de Espaço = Uma linha
    Tecla Shift = linha B
    Caps Lock = linha C
    Tecla Tab = D linha

  3. 01 = Posição da chave na linha.
    AE01 = 1
    AB02 = X
    AC05 = G

[ + ] - em idiomas C; Colchetes indica uma lista, por meio da qual os itens são divididos por , . O comprimento da lista determina a quantidade de níveis. Por exemplo:

key<AE01> { [ Level 1 , Level 2 , Level 3 , Level 4 , Level 5 ] }

Normalmente, os Níveis denotam o seguinte pressionamento de tecla com:

  1. Nenhuma tecla modificadora
  2. Shift
  3. Alt Gr
  4. Deslocamento + Alt Gr
  5. Personalizada - É improvável ver algo além do nível 4.

Em suma, se você quisesse mapear uma chave para shift + altgr, sua lista teria que ter pelo menos quatro itens.

AVISO - Erros Comuns

Qualquer uma dessas linhas causará um erro crítico e deixará você sem um teclado utilizável:

key<AE01> { [ Backspace ] }
key<AE02> { [ a, b, , C ] }
  • Backspace deve ser BackSpace : Preste muita atenção à ortografia.
  • Uma entrada vazia deve ser VoidSymbol .

Melhor medida de segurança!

  1. Faça o backup do seu arquivo que você está editando:

    sudo /bin/cp /usr/share/X11/xkb/symbols/us /usr/share/X11/xkb/symbols/usBACKUP

  2. Faça um script que você pode executar sem senha de root

Algo como:

#!/bin/bash
sudo /bin/cp -rf /usr/share/X11/xkb/symbols/usBACKUP /usr/share/X11/xkb/symbols/us

Se algo der errado, use o mouse para executar essa linha de código (contida no script bash que você deu permissão aos sudoers. Lembre-se de chmod +x para permitir a execução como executável.)

Estratégias de backup para recuperar um sistema corrompido

  • AVISO: Teclado & amp; O teclado virtual deixará de funcionar com o menor erro.
  • O mouse funcionará . A digitação pode ser feita destacando os caracteres e colando-os usando o clique do meio.Em Bash, você pode return (Pressionar Enter) colando uma quebra de linha.
  • O teclado funcionará no modo de recuperação no shell de root. (Acessado do bash)
  • Você sempre pode usar um ambiente ao vivo para corrigir arquivos.

Solução rápida e suja

  1. Vá aqui
  2. Arquivo & gt; Faça uma cópia
  3. Mapper Folha é onde você define o seu layout.
    • As entradas de caractere único são traduzidas em um código entendido pelo programa.
      ( ! se torna U0021 ). Unicode suportado!
    • As strings não são traduzidas e são tratadas como estão. CERTIFIQUE-SE DE NÃO EXISTE erros de digitação ou de CASE !.
    • quadrados vazios são preenchidos automaticamente com VoidSymbol .
  4. XKB-Sort Folha contém grupos de chaves, por exemplo:
    key <AE01> { [U0021, U0021, U0021, U0021, U0021, U0021, U0021, U0021] };
    key <AE02> { [U005B, U005B, U005B, U005B, U005B, U005B, U005B, U005B] };
    key <AE03> { [U005D, U005D, U005D, U005D, U005D, U005D, U005D, U005D] };
    key <AE04> { [U0022, U0022, U0022, U0022, U0022, U0022, U0022, U0022] };
    key <AE05> { [U002A, U002A, U002A, U002A, U002A, U002A, U002A, U002A] };
    key <AE06> { [U007B, U007B, U007B, U007B, U007B, U007B, U007B, U007B] };
    key <AE07> { [U007D, U007D, U007D, U007D, U007D, U007D, U007D, U007D] };
    key <AE08> { [U002F, U002F, U002F, U002F, U002F, U002F, U002F, U002F] };
    key <AE09> { [U0027, U0027, U0037, U0027, U0027, U0027, U0027, U0027] };
    key <AE10> { [U0029, U0029, U0038, U0029, U0029, U0029, U0029, U0029] };
    key <AE11> { [U0028, U0028, U0039, U0028, U0028, U0028, U0028, U0028] };
    key <AE12> { [U005C, U005C, U005C, U005C, U005C, U005C, U005C, U005C] };
    
    Altera isso nos 8 níveis:
    1234567890-= // Physical Keys
    ![]"*{}/')(\ // Changed to these characters
  5. A aba XKB também possui linhas. Todas as outras guias podem ser ignoradas (seu código).
  6. sudo vim /usr/share/X11/xkb/symbols/us
  7. Substitua o conteúdo de um layout. Escolha um que você não vai usar. Por exemplo: Mudei a entrada de colemak deixando a estrutura intacta e substituí as chaves.

Linhas de interesse:

key.type[group1]="EIGHT_LEVEL";          // Enables 8 levels
modifier_map Control { <LFSH>, <RTSH> }; // Maps ctrl's to shift keys.
key  { [Control_R, Control_R, Control_R, Control_R, Control_R, Control_R, Control_R, Control_R] }; 
key  { [Control_L, Control_L, Control_L, Control_L, Control_L, Control_L, Control_L, Control_L] };
include "level3(lalt_switch)" // Hold Left  Alt for Level 3
include "level5(ralt_switch)" // Hold Right Alt for Level 5
    
por Akiva 26.10.2014 / 16:07
56

No Ubuntu 14.04 , os layouts de teclado são mantidos em

/usr/share/X11/xkb/symbols/

Cada um dos arquivos neste diretório contém uma série de entradas do seguinte tipo:

    key <AC01> {[a, A, aacute, Aacute]};

Esta entrada mapeia uma tecla no teclado para um número de caracteres específicos usando as seguintes convenções:

  1. & lt; A C01 & gt; A primeira letra A indica que estamos procurando no bloco de chave alfanumérica (outras opções incluem KP [for keypad] e FK [for Function Key] );

  2. & lt; A C 01 & gt; A segunda letra C indica a linha, contando a partir da parte inferior na qual a chave é encontrada. (Em um teclado padrão dos EUA, a barra de espaço está na linha AA e as teclas numéricas estão na linha AE ).

  3. & lt; AC 01 & gt; Os números 01 indicam a posição da chave, contando a partir da esquerda e ignorando qualquer tecla especialmente nomeada como TAB ou ~ (til): AC01 está no terceira linha acima, primeiro a tecla da esquerda (ignorando Caps Lock , se presente); em um teclado padrão dos EUA, esta é a chave marcada "a".

  4. Os colchetes incluem a lista de caracteres atribuídos a cada chave. Contém até quatro entradas separadas por vírgulas:

    1. a - A chave não modificada.
    2. A - O caractere Shift .
    3. á - O caractere Alt Gr . ( aacute )
    4. Á - O caractere Shift + Alt Gr . ( Aacute )

Criar um mapa de teclado personalizado é tão fácil quanto substituir os caracteres que você não quer em uma determinada linha por aqueles que você faz!

Por exemplo:

Como anglo-saxônico, digito á e Á com muito menos frequência do que digito æ e Æ .

Para adicionar os caracteres anglo-saxônicos à minha lista, simplesmente substituo aacute e Aacute pelos nomes de entidades ou Pontos de código Unicode para æ e Æ (" aelig "ou U00E6 e “AElig” ou U00C6 , respectivamente):

    key  {[a, A, aelig, AElig]};

ou

    key  {[a, A, U00E6, U00C6]};

Quando terminar de modificar meu layout de teclado, salve o arquivo com um novo nome, "oe" no mesmo diretório.

Adicionando um novo layout de teclado ao arquivo evdev.xml .

Para usar o novo layout de teclado, precisamos informar X11 que ele existe. No Ubuntu 14.04 X11 mantém o controle dos teclados instalados no arquivo /usr/share/X11/xkb/rules/evdev.xml . Então vamos adicionar o novo layout nele.

  1. Abra X11/xkb/rules/evdev.xml em um editor
  2. Vá para o final da seção <layoutList> (pesquise </layoutList> ). Adicione o seguinte após a última tag </layout> , em que X é o nome do arquivo do layout do teclado em /usr/share/X11/xkb/symbols (no meu caso oe ); Y um nome curto adequado; e Z um nome longo apropriado em um ou mais idiomas e aaa a código de idioma legal com três letras (ISO 639-2) (por exemplo, eng para inglês):

    <layout>
     <configItem>
       <name> X </name>
       <shortDescription> Y </shortDescription>
       <description> Z </description>
       <languageList>
          <iso639Id> aaa </iso639Id>
       </languageList>
     </configItem>
     <variantList/>
    </layout>
    

Aqui está, siga a introdução completa

Outros links relacionados: link link

    
por αғsнιη 14.08.2014 / 08:20