Defina permanentemente as opções de layout do teclado com setxkbmap no gnome / unity

28

O Ubuntu 13.10 1 (e talvez o gnome upstream) introduziu um bug muito irritante : pressionar o atalho do comutador de layout do teclado faz o foco desaparecer em alguma janela do sistema e depois voltar à janela onde o atalho foi pressionado. Alguns aplicativos têm algumas ações vinculadas à mudança de foco, por exemplo, o twitter (no navegador) fecha o campo de entrada de texto de resposta ao perder o foco, etc. Portanto, o comutador de teclado nativo do ubuntu não é adequado para mim, até que seja corrigido.

O X possui um mecanismo de comutação embutido, e é muito melhor, além de não envolver a alternância de foco, ele alterna imediatamente (o comutador gnome também fica atrasado).

Como posso configurar as opções do xkbmap para que as configurações permaneçam após a reinicialização e não sejam redefinidas pelo Gnome?

O que eu tentei:

Primeiro, basta executar o setxkbmap:

setxkbmap -layout "us,ru"
setxkbmap -option "grp:caps_toggle,grp_led:scroll,compose:ralt"

Mas funciona apenas:

  1. Para a sessão atual
  2. Até que o Gnome o substitua (por exemplo, tocar em algo nos org.gnome.desktop.input-sourcesgatilhos do gconf redefinir).

Segundo, adicionando opções xkb à configuração do Xorg:

Outra opção é adicionar o seguinte à configuração do xorg:

Section "InputClass"
        Identifier "system-keyboard"
        MatchIsKeyboard "on"
        Option "XkbLayout" "us,ru"
        Option "XkbModel" "pc105"
        Option "XkbVariant" "pc105"
        Option "XkbOptions" "grp:rctrl_toggle,grp_led:scroll"
EndSection

O Xorg entende que durante a inicialização:

[    33.791] (**) Option "xkb_rules" "evdev"
[    33.791] (**) Option "xkb_model" "pc105"
[    33.791] (**) Option "xkb_layout" "us,ru"
[    33.791] (**) Option "xkb_variant" "pc105"
[    33.791] (**) Option "xkb_options" "grp:rctrl_toggle,grp_led:scroll"

Mas a configuração da troca ainda é redefinida mais tarde, provavelmente pelo gnome.

Terceiro, gconf

insira a descrição da imagem aqui

Eu tenho xkb-optionse sourcesconjunto em org.gnome.desktop.input-sources, mas Gnome ainda define xkb a disposição Inglês single:

$ setxkbmap -print -verbose 10
Setting verbose level to 10
locale is C
Trying to load rules file ./rules/evdev...
Trying to load rules file /usr/share/X11/xkb/rules/evdev...
Success.
Applied rules from evdev:
rules:      evdev
model:      pc105
layout:     us
options:    grp_led:scroll
Trying to build keymap using the following components:
keycodes:   evdev+aliases(qwerty)
types:      complete
compat:     complete+ledscroll(group_lock)
symbols:    pc+us+inet(evdev)
geometry:   pc(pc105)
xkb_keymap {
    xkb_keycodes  { include "evdev+aliases(qwerty)" };
    xkb_types     { include "complete"  };
    xkb_compat    { include "complete+ledscroll(group_lock)"    };
    xkb_symbols   { include "pc+us+inet(evdev)" };
    xkb_geometry  { include "pc(pc105)" };
};

Quarto, outra opção no gconf

insira a descrição da imagem aqui

Definir org.gnome.settings-daemon.peripherals.keyboardtambém não funciona para mim. Nada muda.

Atualização 1 : Há discussões recomendando a remoção /usr/lib/gnome-settings-daemon-3.0/libkeyboard.so. Pelo menos isso corrige algumas redefinições do xkbmap (ou seja, após a tela de bloqueio).

1 Eu uso o 14.04, mas o problema de perder o foco ainda não foi corrigido. ( Relatório não confirmado no Gnome a montante )

Kolen
fonte
Você já tentou configurar o layout corretamente no gnome e depois adicionar os dois setxkbmapcomandos ao seu ~/.profile? Dessa forma, eles serão executados toda vez que você fizer login e, como as mesmas configurações existem no Gnome, não deve mudar nada se for redefinido.
terdon
1
@terdon redefine mesmo após o bloqueio da tela. E redefine para o estado "somente para nós, sem alternância", não para as configurações definidas em org.gnome.desktop.input-sources.
Kolen
Estranho. Você tem certeza de que está usando o Gnome e não o Unity? Você já tentou alterar as configurações através da GUI normal em vez de dconf-editor?
terdon
@terdon sim, é a unidade, mas usa as coisas perdidas do gnome, como o gnome-settings-daemon, que possivelmente redefine o mapa de teclas.
Kolen
Então, você tentou definir as configurações corretas na GUI do Unity?
terdon

Respostas:

19

Para impedir que o gnome redefina a configuração do teclado no X, use este comando:

gsettings set org.gnome.settings-daemon.plugins.keyboard active false

Isso funciona para mim.

Iasha102
fonte
4
Eu tentei isso no Ubuntu 14.04 e ele não faz nada. Você tem alguma explicação sobre: ​​como isso deve funcionar?
Nickolai Leschov
2
Funciona para mim em 14.04
ndemou 22/10/2015
2
Funciona para mim em 16.04, depois de tentar tudo o resto.
Leonardo Castro
1
O único método que encontrei trabalhando em 17.04.
Cnly
1
Lembre-se de que o Ubuntu realmente criou um daemon de configurações de unidade por um período também, mas agora que eles estão voltando ao Gnome novamente, isso pode continuar funcionando.
dragon788
6

Eu estive enlouquecendo com isso como você, mas com o Ubuntu 14.04 (LTS), Xubuntu, xfce 4.12 e xkbd (dos itens do xfce). Ctrl + Espaço para alterar o layout do teclado funcionou, mas Alt + Shift não (teclas apenas de modificador).

Finalmente consegui fazer as coisas funcionarem

1. Run ibus-setup (Keyboard Input Methods application).
2. Goto Advanced tab.
3. Check 'Use system keyboard layout'.
4. Click 'Close'

5. Run xfce4-keyboard-settings (Keyboard application).
6. Goto Layout tab.
7. Uncheck 'Use system defaults'
8. Select 'Keyboard model' (typically 'Generic 105-key (Intl) PC' will do)
9. Set 'Change layout option' to your required switching keys combination (typically Alt+Shift will do).
10. Add languages to 'Keyboard layout'.
11. Click 'Close'.
12. Restart the computer

Você está feito! Use Alt + Shift para alterar o layout do teclado.

Oron Port
fonte
1
Por que você recomenda usar xfce4-keyboard-settingsa pergunta pedindo ajuda com o gnome / unidade, especificamente?
Nickolai Leschov
2

Acabei de ler este artigo sobre bloqueio de tela, que pode estar relacionado. Segundo o artigo, o bloqueio de tela tem a consequência pretendida de bloquear dispositivos de entrada e manipular localidades. Parece que você tem algumas opções:

  1. Pare de bloquear a tela, provavelmente isso também inclui a tela de saudação, que tem uma função semelhante
  2. Use diferentes ferramentas de gerenciamento de energia
  3. Pare de usar o ibus para troca de informações (talvez FCITX?)
  4. Crie um gancho para eventos de desbloqueio de tela, conforme descrito aqui .

Há uma discussão interessante sobre esse e outros eventos relacionados, que podem ser encontrados na lista de discussão ubuntu-dev: https://lists.ubuntu.com/archives/ubuntu-devel/2013-November/037768.html

Falcão
fonte
1

Solução alternativa pelo usuário wof no rastreador de erros do Ubuntu, para Ubuntu 14.10 usando gxkb :

https://bugs.launchpad.net/gnome-settings-daemon/+bug/1244090/comments/39

esta solução alternativa funcionou para o ubuntu 14.10:

  • em Configurações-> entrada de texto remova todas as fontes de entrada, deixe apenas o inglês
  • install gxkb (switcher de layout): sudo apt-get install gxkb
  • adicione gxkb aos aplicativos de inicialização via gnome-tweak-tool
  • configure as teclas de atalho gxkb em ~ / .config / gxkb (o padrão é alt_shift, mas na versão 14.10 não funciona. ctrl_shift funciona ok)

ps nova versão do gxkb tem appindicator para ubuntu. pode ser instalado via ppa: zen-root / gxkb-stable

Kolen
fonte
(Não tentei ainda)
Kolen
E: Não foi possível localizar o pacote gxkb
e18r
0

Primeiro, basta executar o setxkbmap:

setxkbmap -layout "us, ru" setxkbmap -option "grp: caps_toggle, grp_led: scroll, compor: ralt"

Mas funciona apenas:

For current session
Until Gnome will overwrite it (for example touching something in gconf's org.gnome.desktop.input-sources triggers reset).

Bem, tanto quanto o Gnome "redefinindo" ele não sei. Eu sei como é possível manter todas as reinicializações, já que eu tive que fazer exatamente o mesmo tipo de coisa para o mouse Logitech. Ele tem vários botões que eu queria remapear de uma certa maneira e precisava configurá-lo na reinicialização.

Então, o que você faz para isso é criar um arquivo de texto. Então, nesse tipo de arquivo de texto:

#!/bin/bash

e logo abaixo disso, coloque seus comandos. Como exemplo, meu mouse fica assim:

#!/bin/bash
xinput set-button-map "Logitech USB-PS/2 Optical Mouse" 1 2 3 4 5 8 9 6 7 10 11 12 13 14 15 16

Em seguida, salve-o como o nome que desejar e mova-o para algum lugar como o diretório inicial. tem que ficar lá "para sempre".

basta abrir os aplicativos de inicialização e adicionar o arquivo à sua inicialização, para que você não precise se preocupar com a duração da sessão. não há problema em reiniciar o computador, pois suas configurações voltarão ao arquivo que você acabou de adicionar.

David
fonte