
Eu uso mais de um layout de teclado e gostaria de encontrar uma maneira de executar um script quando alterno 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.
Responder1
dconf watch
pode ser usado como receptor de eventos, exemplo (no Ubuntu 13.10/14.04):
dconf watch /org/gnome/desktop/input-sources/current | xargs -L 2 sh -c "echo kbd layout changed" &
Responder2
gsettings monitor org.gnome.desktop.input-sources mru-sources \
| xargs -L1 bash -c 'source /path/to/your/script.sh'
Responder3
Eu faria o contrário, executaria um script que alterasse o layout. Dessa forma, você pode fazer o que quiser com o mesmo script. Infelizmente, é muito difícil descobrir o layout atual do teclado. Não encontrei nenhuma abordagem que funcione paratodosmétodos de mudança de layout. Por algum motivo, há uma diferença se você alternar com setxkbmap
ou por meio dos atalhos da GUI.
Então, minha solução é sempre mudar usando setxkbmap
. Eu tenho um script que chama setxkbmap
e vinculei esse script a um atalho no meu ambiente de área de trabalho para poder alternar facilmente. O exemplo abaixo é para layouts grego e americano. Você terá que modificá-lo para se adequar à 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