Que arquivo é a opção -rules do setxkbmap que se pretende executar e como posso adicionar variantes de teclado a esse arquivo?

3

Estou tentando instalar um layout de teclado personalizado sem acesso ao sudo, como descrevi em É possível usar um layout de teclado personalizado sem acesso ao sudo? Se sim, como? , e eu tenho uma pergunta específica sobre o comando setxkbmap que a resposta atual diz que pode funcionar.

Mais especificamente, a página de manual para o comando permite que você especifique um arquivo de regras:

  

-rules arquivo

     

Especifica o nome do arquivo de regras usado para resolver o layout e o modelo solicitados para um conjunto de nomes de componentes.

No entanto, ele não diz exatamente que tipo de arquivo se pretende colocar lá, e eu estou lutando para dar sentido a essa opção.

Até onde eu sei, isso deve ser /usr/share/X11/xkb/rules/xorg ou seu alias /usr/share/X11/xkb/rules/base e, na verdade, se eu copiar todo o /usr/share/X11/xkb/ em ~/xkb/ e, em seguida, executar algo como

setxkbmap -model pc105 -layout "gb" -variant "extd" -rules ~/xkb/rules/base

parece que funciona.

No entanto, não tenho certeza de como modificar esse arquivo. Em máquinas onde tenho acesso sudo eu sigo este tutorial : Eu faço uma variante do gb de teclado dentro de xkb/symbols/gb , e eu adiciono a variante em xkb/rules/evdev.xml via

<variant>
  <configItem>
    <name>custom</name>
    <description>English (UK, custom)</description>
  </configItem>
</variant>

No arquivo xkb/rules/base , no entanto, não há lugar óbvio para incluir essa variante e, de fato, outras variantes de teclado gb relacionadas, como extd ou intl , que aparecem, por exemplo, em xkb/rules/evdev.lst , estão longe de ser visto.

Então: como posso especificar um arquivo na opção -rules file que me permita definir minha própria variante? (sem acesso ao sudo, infelizmente)

    
por E.P. 25.01.2017 / 11:33

1 resposta

6

O banco de dados de configuração do teclado do sistema do XKB é armazenado em /usr/share/X11/xkb . Os layouts XKB são definidos em um modelo RMLVO : Regras, Modelo, Layout, Variante, Opções. O arquivo de regras principal em uso atualmente é evdev ; você pode ver isso com setxkbmap :

$ setxkbmap -query -verbose 10
...
Trying to load rules file /usr/share/X11/xkb/rules/evdev...
Success.
Applied rules from evdev:
rules:      evdev
model:      pc105
layout:     us
variant:    altgr-intl
options:    caps:hyper,compose:menu
Trying to build keymap using the following components:
keycodes:   evdev+aliases(qwerty)
types:      complete
compat:     complete
symbols:    pc+us(altgr-intl)+inet(evdev)+capslock(hyper)+compose(menu)
geometry:   pc(pc105)

Cada um dos componentes mencionados nas últimas linhas acima é um subdiretório do banco de dados do sistema em /usr/share/X11/xkb , e os valores mostrados são nomes de arquivos nesse subdiretório ( separados por + ) que serão consultados para construir este mapa de chaves específico. Parênteses marcam uma cláusula específica no arquivo especificado (geralmente variantes e opções).

As ferramentas XKB ( setxkbmap , xkbcomp , etc) podem receber um argumento para procurar outro local pelos arquivos, mas esse local personalizado deve estar no mesmo formato do banco de dados do sistema. Aqui está o que o banco de dados do sistema parece. Veja o README em cada diretório para detalhes, e

/usr/share/X11/xkb/
├── compat       # ??? dark magic here, avoid
├── geometry     # as in physical, eg for generating layout maps
├── keycodes     # helpful for translating keycodes (from xev) to <FOO>
├── rules        # "evdev" is the important one; *.lst & *.xml are descriptions
├── symbols      # main layouts, variants, optional overrides
└── types        # ??? dark magic here, avoid

Se você quiser substituir esses arquivos ou fornecer seus próprios layouts, sem mesclá-los no banco de dados do sistema, o que você fará é criar uma estrutura de diretório semelhante para seus próprios arquivos. Você provavelmente não precisará fazer nada com geometry ou keycodes , a menos que você esteja criando seus próprios teclados do zero.

Para uma configuração por usuário, $HOME/.xkb/ ou $HOME/.config/xkb/ são ideais:

$HOME/.config/xkb/
...
├── rules
│   ├── evdev-local
│   ├── evdev-local.lst
│   └── evdev-local.xml
├── symbols
│   ├── my-fun-capslock-options
│   ├── my-US-Dvorak-layout
│   └── my-ZWERTY-layout
...

Quando sua estrutura de diretórios estiver no lugar, você poderá carregar suas personalizações com o parâmetro -I /path/to/local/xkb :

setxkbmap -I $HOME/.config/xkb \
  -rules evdev-local           \
  -layout my-ZWERTY-layout     \
  -option myZWERTY:option1,compose:menu,fun:caps_is_insert

Você pode misturar e combinar opções locais como fun:caps_is_insert com opções do sistema, como compose:menu , desde que o arquivo de regras especificado as defina. (Os arquivos de símbolos podem incluir outros arquivos de símbolos, mas eu não encontrei uma sintaxe de inclusão para arquivos de regras. Você provavelmente terá que copiar as regras evdev do sistema inteiro para sua versão local e adicionar suas modificações.)

O uso de locais personalizados pode não ser utilizável com outros sistemas de configuração XKB como localectl , daemon de configurações do GNOME ou compositores Wayland que não são configuráveis com setxkbmap .

Recursos:

por quixotic 24.03.2017 / 09:08