'xmodmap' não está funcionando na inicialização

1

Instalei recentemente o Debian 9 e inseri meu arquivo usual ~/.Xmodmap e adicionei xmodmap ~/.Xmodmap ao meu .xsession . Para minha decepção, isso não funcionou.

Para referência, eu corro i3 de startx sem um DM.

Para testar se o comando foi executado com êxito, substituí o comando em .xsession with touch ~/prior && xmodmap ~/.Xmodmap && touch ~/post . E os arquivos foram de fato criados indicando que o comando xmodmap foi de fato executado corretamente, mas os mapeamentos foram redefinidos em algum lugar, provavelmente por uma chamada para setxkbmap .

Procurei uma solução e encontrei apenas perguntas sem respostas ou perguntas com respostas antigas que não funcionavam para mim ou que não continham uma solução real:

por Emily L. 12.11.2017 / 00:00

2 respostas

1

Descobri que a causa desse comportamento está documentada indiretamente em man keyboard :

DESCRIPTION

The keyboard file describes the properties of the keyboard. It is read by setupcon(1) in order to configure the keyboard on the console. In Debian systems the default keyboard layout is described in /etc/default/keyboard and it is shared between X and the console.

O conteúdo de /etc/default/keyboard é gerado na instalação do sistema e deu uma dica para o problema real (adicionei a opção ctrl:nocaps mais tarde):

XKBMODEL="pc105"
XKBLAYOUT="se"
XKBVARIANT=""
XKBOPTIONS="ctrl:nocaps"

O conjunto acima indica que X irá definir as opções do xkb em algum momento durante a inicialização (provavelmente após .xsession e similares), o que faz com que qualquer xmodmap configurações definidas durante .xsession sejam perdidas.

Portanto, há a causa, a solução é sugerida em man setupcon :

The keyboard configuration is specified in ~/.keyboard or /etc/default/keyboard. The font configuration is specified in ~/.console-setup or /etc/default/console-setup.

Verificando man console-setup yields:

The file console-setup specifies the encoding and the font to be used by setupcon(1) in order to setup the console. It can be used also to specify the keyboard layout but it is not recommended to do so, use keyboard(5) instead.

Portanto, /etc/default/keyboard é usado para definir as configurações de teclado para TTY e X. Embora /etc/default/console-setup seja usado para configurar o teclado (não é realmente recomendado, mas funciona) e fonte somente para console.

Para que tudo isso funcione, movi /etc/default/keyboard para /etc/default/console-setup e adicionei o seguinte ao meu .xsession :

#!/bin/bash
# The below assumes bash features, rewrite if you use other shells.
source /etc/default/console-setup

XKBPARMS=""
if [[ "$XKBLAYOUT" ]]; then
   XKBPARMS="-layout $XKBLAYOUT"
fi

if [[ "$XKBMODEL" ]]; then
    XKBPARMS+=" -model $XKBMODEL"
fi

if [[ "$XKBVARIANT" ]]; then
    XKBPARMS+=" -variant $XKBVARIANT"
fi

if [[ "$XKBOPTIONS" ]]; then
    XKBPARMS+=" -option $XKBOPTIONS"
fi

if [[ "$XKBPARMS" ]]; then
    setxkbmap $XKBPARMS
fi

xmodmap ~/.Xmodmap

Agora, xmodmap funciona corretamente e eu tenho o mapa de teclado e as opções corretas no TTY e no X.

    
por 12.11.2017 / 00:00
1

Eu não tenho representante suficiente para escrever isso como um comentário - já que é mais uma solução alternativa do que direta para o seu problema - mas eu esperava que pudesse ajudar.

Não sou de forma alguma um especialista, mas também estava tendo problemas com as soluções xmodmap -type. Depois de algumas pesquisas, decidi usar xkb diretamente. Eu também achei que o archwiki não recomenda xmodmap para nada além das tarefas "mais simples" :

Generally it is not recommended to use xmodmap, except maybe for the simplest tasks. XKB-compatible equivalent of xmodmap is xkbcomp; however, xkbcomp lacks -e option, so it is not that simple. Anyway, whenever possible, xkbcomp should be preferred.

A seguinte solução funcionou para mim (no Ubuntu 16.04):

  • Em TTYs: como-mudar-console- keymap-in-linux .
  • Em X : backup e modifique os arquivos relevantes em /usr/share/X11/xkb/symbols/ . Eu tenho alterações em us (para linha número e algumas outras coisas) e pc (para capslock).

Infelizmente, isso significa manter o controle de duas soluções separadas para X e o TTY, mas até agora está tudo bem comigo.

Mas se você tem uma solução xmodmap que já funciona, isso é tudo que importa!

    
por 12.11.2017 / 04:48

Tags