キーボードレイアウトを切り替えるときにスクリプトを実行するにはどうすればいいですか

キーボードレイアウトを切り替えるときにスクリプトを実行するにはどうすればいいですか

複数のキーボード レイアウトを使用しており、それらを切り替えたときにスクリプトを実行する方法を見つけたいと思います。

これは可能ですか?

これまでのところ、次のようにスクリプトのショートカットを割り当てることができます。

#!/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

しかし、この方法を使用すると、レイアウトを切り替えるためにそのショートカットしか使用できず、キーボードインジケーターがステータスメニューから消えてしまうので、不便です。

答え1

dconf watchイベント レシーバーとして使用できます。例 (Ubuntu 13.10/14.04 の場合):

dconf watch /org/gnome/desktop/input-sources/current | xargs -L 2 sh -c "echo kbd layout changed" &

答え2

gsettings monitor org.gnome.desktop.input-sources mru-sources \
        | xargs -L1 bash -c 'source /path/to/your/script.sh'

答え3

私は逆に、レイアウトを変更するスクリプトを実行します。そうすれば、同じスクリプトで他の何でもできます。残念ながら、現在のキーボードレイアウトを見つけるのは非常に困難です。私は、うまく機能する方法を見つけていません。全てsetxkbmapレイアウトの切り替え方法。何らかの理由で、 GUI ショートカットを使用して切り替える場合と、GUI ショートカット経由で切り替える場合とで違いがあります。

したがって、私の回避策は、常に を使用して切り替えることですsetxkbmap。 を呼び出すスクリプトがありsetxkbmap、そのスクリプトをデスクトップ環境のショートカットにバインドして、簡単に切り替えられるようにしました。以下の例はギリシャ語と米国のレイアウト用ですが、設定に合わせて変更する必要があります。

#!/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

関連情報