dconf watch
pode ser usado como um receptor de eventos, por exemplo (no Ubuntu 13.10 / 14.04):
dconf watch /org/gnome/desktop/input-sources/current | xargs -L 2 sh -c "echo kbd layout changed" &
Eu uso mais de um layout de teclado, e gostaria de encontrar uma maneira de executar um script quando alternar entre eles.
Isso é possível?
Até agora, posso atribuir um atalho para um script como este:
#!/bin/bash
#switch between two layouts (English and Greek in this case)
current_layouts=$(gsettings get org.gnome.libgnomekbd.keyboard layouts)
if [ "$current_layouts" = "us" ]; then
gsettings set org.gnome.libgnomekbd.keyboard layouts "['gr']"
else
gsettings set org.gnome.libgnomekbd.keyboard layouts "['us']"
fi
exec /path/to/another/script
Mas usando esse método, posso usar apenas esse atalho para alternar entre os layouts e o indicador do teclado desaparecerá do menu de status, o que é desagradável.
dconf watch
pode ser usado como um receptor de eventos, por exemplo (no Ubuntu 13.10 / 14.04):
dconf watch /org/gnome/desktop/input-sources/current | xargs -L 2 sh -c "echo kbd layout changed" &
Eu faria o contrário, executaria um script que alterasse o layout. Dessa forma, você pode fazer qualquer outra coisa que quiser com o mesmo script. Infelizmente, é muito difícil descobrir o layout atual do teclado. Eu não encontrei nenhuma abordagem que funcionasse para todos os métodos de comutação de layout. Por algum motivo, há uma diferença se você alternar com setxkbmap
ou pelos atalhos da GUI.
Então, minha solução é sempre alternar usando setxkbmap
. Eu tenho um script que chama setxkbmap
e liguei esse script a um atalho no meu ambiente de área de trabalho para que eu possa alternar facilmente. O exemplo abaixo é para layouts em grego e nos EUA. Você precisará modificá-lo para se ajustar à sua configuração:
#!/usr/bin/env bash
key='xmodmap -pke | grep -w "59" | awk '{print \$NF}''
## If this is the "us" layout, that will return "less"
if [ $key == "less" ]; then
setxkbmap gr
## Add other things to be done here
else
setxkbmap us
## Add other things to be done here
fi