Isso pode ser apenas uma solução parcial (eu sinceramente não sei como ele reage ao desligamento / reconfiguração do teclado), mas como você já tem um script que faz o que você quer, isso pode estar perto o suficiente.
Na inicialização, o X11 executa vários programas especiais, se estiverem presentes no sistema. Para nossos propósitos, o mais interessante é provavelmente ~ / .xsession , que é executado após você ter efetuado login através de um gerenciador de exibição, que é a configuração normal para um ambiente gráfico atualmente. (Costumava ser que você normalmente logado em um shell e, em seguida, executou o comando startx para iniciar o X; em caso afirmativo, você usou ~ / .xinitrc para o mesmo propósito.)
Podemos aproveitar isso para executar comandos virtualmente, independentemente do que o gerenciador de exibição (gdm, gdm3, kdm, ...) e ambiente de área de trabalho (GNOME, Xfce, KDE, ...) você está usando.
- Crie um arquivo chamado
.xsessione coloque-o em seu diretório pessoal. - Adicione o seguinte a ele:
#!/bin/bashe/usr/bin/setxkbmap -option "ctrl:nocaps" - Salvar e defina o arquivo para o modo 755 (
chmod 755 ~/.xsession) - Fazer logout e voltar ou reinicializar
Isso deve definir o mapeamento do seu teclado no login. Ele também deve executar tarde o suficiente para que o setxkbmap realmente funcione.
Se por algum motivo isso não funcionar, efetue login em um terminal de texto ( Ctrl + Alt + F2 para qualquer F2 em [F1..F6] deve ser seu amigo) e apague o arquivo emitindo o comando rm ~/.xsession .
Para referência, aqui está meu ~ / .xsession, que com o modo 755 me coloca em uma sessão do Xfce4 (isso pode servir como um exemplo "conhecido"):
#!/bin/sh
xscreensaver &
exec xfce4-session
A diretiva exec no final substitui o próprio script pelo comando especificado. Qualquer coisa que não saia mais ou menos imediatamente precisará ser usada em background, daí o & . (Espero que o setxkbmap seja encerrado quase que imediatamente, portanto, não é necessário usar o segundo plano.)