在键盘布局之间切换时如何运行脚本

在键盘布局之间切换时如何运行脚本

我使用多个键盘布局,并且我想找到一种在它们之间切换时运行脚本的方法。

这可能吗?

到目前为止,我可以为脚本分配一个快捷方式,如下所示:

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

相关内容