Como executo um script quando alterno entre layouts de teclado?

7

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.

    
por Radu Rădeanu 09.10.2013 / 17:21

2 respostas

4

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" &
    
por 11.02.2014 / 19:43
0

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
    
por 09.10.2013 / 19:01