Como colocar algum layout de teclado além do anel de comutação de layout?

4

O que eu preciso é de

  1. alterna entre o layout russo e o inglês com o meu atalho favorito (ou seja, Shift-CapsLock )
  2. mude para o layout bielorrusso com outro atalho (digamos, Ctrl-RightShift , mas a ligação real não importa)
  3. enquanto o layout bielorrusso estiver ativo, volte para o russo / inglês com Shift-CapsLock

É possível com o xkb? Se sim, como isso pode ser feito?

    
por develop7 02.11.2011 / 15:58

2 respostas

3

Três comandos úteis:

1 . Obtenha o layout de teclado atual, deste tópico :

setxkbmap -print | grep xkb_symbols | awk -F"+" '{print $2}'

Retorna o layout (variante) onde a variante é opcional

2 . Saiba se o layout atual do teclado é layout (variante):

 setxkbmap -print | grep "layout(variant)"

Ou sem "(variante)".

Retorna nada não é.

3 . Definir o layout do teclado para um valor especificado:

setxkbmap layout variant

Onde a variante é opcional.

(veja man setxkbmap para mais informações)

O que você pode fazer:

1 . Crie um script executável simples ( chmod +x file ) que altere o layout do teclado em tempo real, dependendo do atual. Por exemplo, se lidarmos com o primeiro ponto:

#!/bin/bash

if setxkbmap -print | grep "us"
then
  setxkbmap ru
else
  setxkbmap us
fi

2 . Com o gerenciador de atalhos de teclado, atribua as chaves Shift-CapsLock a esse script.

Boa sorte!

    
por 02.11.2011 / 19:30
1

O que você quer exatamente não é possível, pois exigiria o processo statefull (para saber o estado anterior da mudança para by layout).

No entanto, juntamente com os símbolos ISO_Prev_Group e ISO_Next_Group, que permitem decrementar / incrementar o anel dos layouts, há também os dois: ISO_First_Group e ISO_Last_Group. Com este anel: us,by,ru você sempre pode acessar qualquer um dos três layouts em uma única alternância.

Por exemplo, defina Shift - CapsLock para enviar ISO_Last_Group quando estiver em us layout, ISO_First_Group quando estiver em ru ou by ; define Ctrl - RightShift para enviar ISO_Next_Group quando em us ISO_Prev_Group quando em ru e ISO_Next_Group (ou Last) quando em by .

A diferença com o que você quer é que você tenha que escolher manualmente (com diferentes atalhos) o layout que você quer ir, quando em by .

Além disso, se você precisar de by layout para apenas algumas letras cirílicas específicas da Bielorrússia; Outra opção seria usar um layout ru modificado, com símbolos extras em algumas teclas, acessíveis com um AltGr ou uma chave semelhante, como na maioria dos teclados latinos.

Como no arquivo by , existem apenas 3 chaves diferentes de ru . Parece que seria a abordagem correta. Em tais casos, eu empilharia os layouts como: us,ru,by

Use ISO_Next_Group em "us", ISO_Prev_Group em "ru" para Shift-Capslock e em "ru" defina uma chave com um ISO_Next_Group com travamento.

Para fazer isso: Crie um ~ / .xkb / keymap / mykbd onde você coloca a saída do setxkbmap, será a sua definição de teclado base; por exemplo:

setxkbmap "us,ru,by" ; setxkbmap -print > ~/.xkb/keymap/mykbd

crie um arquivo ~ / .xkb / symbols / mysymbols com:

partial modifier_keys
xkb_symbols "shift_caps_us_ru_by" {
  key <CAPS> {
    symbols[Group1] = [  Caps_Lock, ISO_Next_Group   ],
    symbols[Group2] = [  Caps_Lock, ISO_Prev_Group   ],
    symbols[Group3] = [  Caps_Lock, ISO_First_Group  ]
  };
  key <RALT> {
    symbols[Group2] = [ ISO_Group_Latch ]
  };
};

edite o arquivo ~/.xkb/keymap/mykbd e altere a linha xkb_symbols para adicionar +mysymbols(shift_caps_us_ru_by)

finalmente, você pode carregá-lo com o parâmetro xkbcomp -I$HOME/.xkb ~/.xkb/keymap/mykbd e agora Shift - CapsLock entre os layouts latin (us) e cyrillic (ru); e, enquanto em cirílico, você pode acessar as letras específicas da Bielorrússia com a tecla AltGr (Alt direita).

    
por 22.02.2013 / 14:46