在鍵盤佈局之間切換時如何運行腳本

在鍵盤佈局之間切換時如何運行腳本

我使用多個鍵盤佈局,我想找到一種在它們之間切換時運行腳本的方法。

這可能嗎?

到目前為止,我可以為腳本分配一個快捷方式,如下所示:

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

我會反過來做,運行一個改變佈局的腳本。這樣您就可以使用同一個腳本做任何您想做的事情。不幸的是,很難找到您目前的鍵盤佈局。我發現沒有有效的方法全部佈局切換的方法。由於某些原因,如果您使用setxkbmapGUI 快捷方式進行切換,則會有所不同。

因此,我的解決方法是始終使用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

相關內容