
Eu percebo que adicionando
setxkbmap xxx
podemos alterar o layout do teclado no servidor X. Ele não pode sobreviver ao logout/reinicialização, então podemos adicionar esta linha $HOME/.profile
para torná-lo disponível quando fizermos login, comoessa questãodescreve.
Mas, quando fazemos isso, antes de fazer o login, o layout do teclado ainda não está disponível. Se quisermos utilizá-lo nesta fase, qual o caminho a seguir? Estou usando GDM no Centos7.
O que eu tentei:
Defina um novo layout de teclado, denominado
symmetri
, e coloque-o em/usr/share/X11/xkb/symbols/
. Para testar, você pode baixá-loaqui.NOTA: Defini apenas o layout para o servidor X11, ainda não para o console virtual.Talvez seja por isso que não consigo listá-lo comlocatectl list-keymaps
, nemloadkeys
, nem comovente/etc/vconsole.conf
.setxkbmap symmetri
para usá-lo. Alterações aplicadas. Coloque-o/etc/profile.d/symmetri.sh
para usá-lo no perfil do usuário.Sai e quando tento fazer login, ele para de funcionar e recebo QWERTY.
Eu faço login com QWERTY e uso Symmetri agora, porque o script é obtido após login bem-sucedido.
Terminal aberto, volto para
us
bysetxkbmap us
,
E então,
localectl set-x11-keymap symmetri
Desta vez, o layout não foi alterado. localectl set-keymap symmetri
nenhum.
Responder1
você pode usar
localectl set-x11-keymap ***
Isso será permanente para o console e desktop, configurações mais detalhadas podem ser encontradas na página de manualhttps://www.unix.com/man-page/centos/1/LOCALECTL/
Responder2
@terdon sua solução não está funcionando, mas obrigado por me ajudar, aprendi mais; a princípio também estou suspeitando se tem algo a ver com o Gnome, mas descobri que é apenas o X11. E @TimBrandrick, sua solução deve funcionar na maioria dos casos, mas no meu caso, não antes de adicionar meu layout de teclado ao .../X11/xkb/rules/evdev.xml
(e apenas por precaução .../X11/xkb/rules/evdev.lst
, porque de acordo com algumas fontes, o lst
arquivo é a versão compilada de xml
, mas eu duvido que todos os processos que dependem desses arquivos apenas leiam xml
arquivos, então adiciono ambos; na verdade, xml
tem mais informações que lst
, mas lst
é mais fácil de entender.)
Então, aqui está como eu fiz:
1. Abra .../X11/xkb/rules/evdev.xml
.
(Omito a parte inicial, porque ela difere entre as distribuições. No CentOS 7, está abaixo de /usr/share/
; no Ubuntu <= 8.08, está abaixo de /etc/
. 1 Estranho.)
2. No final dos nós filhos de <layoutList>
, adicione esta parte:
(altere conforme necessário, é apenas um modelo)
<layout>
<configItem>
<name>symmetri</name>
<shortDescription>symmetri</shortDescription>
<description>Symmetri (CN, EN and ES)</description>
<languageList>
<iso639Id>us</iso639Id>
</languageList>
</configItem>
<variantList>
<variant>
<configItem>
<name>non-prog</name>
<shortDescription>non-prog</shortDescription>
<description>Symmetri for non-programmer (CN, EN and ES)</description>
<languageList>
<iso639Id>us</iso639Id>
</languageList>
</configItem>
</variant>
</variantList>
</layout>
Se o layout do seu teclado não tiver variante, <variantList>
a parte pode ser de fechamento automático, como: <variantList />
.
Nota: iso639Id
deve ter valor compatível com a norma ISO 639-1 ou 639-2. 1 A tabela completa também é fornecida na referência 1. E deve estar em conformidade com suas configurações de localidade. Eu defini English(U.S)
como idioma do meu sistema, então preencho us
aqui.
3. Salve-o e abra o arquivo .../X11/xkb/rules/evdev.lst
.
4. No final de ! layout
, adicione o nome do seu layout. Como:
symmetri Symmetri layout (CN, EN and ES)
! variant
5. Se o layout do seu teclado tiver variante, adicione-a também no final de .
non-prog symmetri: non-programmer
O nome da variante deve coincidir com as informações acima no arquivo xml. (Enquanto eu testo, localectl list-x11-keymap-variants
vouapenasleia este arquivo em vez de ler o xml, deve ser um erro/bug.)
6. Você pode fazer o mesmo com base.xml
e base.lst
, mas eu fiz primeiro e não funciona.
7. Defina o layout do seu teclado com:
setxkbmap symmetri
ou, para definir a variante, use:
setxkbmap symmetri -variant non-prog
localectl
pode list-x11-keymap-layouts
e list-x11-keymap-variants
, mas você não pode definir variante com ele; apenas setxkbmap
pode.
Com esta configuração, agoraapós a reinicialização e antes do primeiro login, você tem seu novo layout de teclado (embora a variante não persista!! Somente o layout básico o fará!) Mas, após o login bem-sucedido, o gerenciador de desktop assumirá o controle e, se você não configurar o novo layout do teclado no arquivo $HOME/.bashrc
/ $HOME/.profile
(para usuário único)/ /etc/profile.d/xxx.sh
/ /etc/profile
(para todos os usuários), vocênãoobtenha seu novo layout de teclado depois de sair e fazer login novamente !!!! Então essas mudanças vãoapenaspersistir antes do primeiro login bem-sucedido... você deve usar .bashrc
scripts de perfil para informar ao servidor X: "não apenas antes do login, mas também após o login, eu quero isso para todos os usuários!" Cuidado: com essa mudança, mesmo que você saia e mude de usuário, o layout será o alterado e não o qwerty(us)
.
Realmente frustrante... deve haver uma maneira mais fácil, mas não consigo encontrar.
Referências:(leitura obrigatória)