Bashスクリプトで使用するには、ユーザーが現在使用しているgnomeキーボードレイアウトを取得する必要があります。たとえば、ユーザーがキーボードレイアウトをen-us
に設定する場合、これを表示するbashコマンドが必要です。
どうすればその情報を入手できますか?
setxkbmap -query
は残念ながら機能していません。以下は、en
(最初のコマンド)およびde
(2番目のコマンド)レイアウトがアクティブになっている場合の出力です。キーボードレイアウトの切り替えは、gnomeセッションの構成と何らかの関係があるようです
setxkbmap -query
rules: evdev
model: pc105
layout: us,de
variant: ,
options: terminate:ctrl_alt_bksp,lv3:ralt_switch,grp:alts_toggle
setxkbmap -query
rules: evdev
model: pc105
layout: us,de
variant: ,
options: terminate:ctrl_alt_bksp,lv3:ralt_switch,grp:alts_toggle
setxkbmap -print #with en-us layout
xkb_keymap {
xkb_keycodes { include "evdev+aliases(qwerty)" };
xkb_types { include "complete" };
xkb_compat { include "complete" };
xkb_symbols { include "pc+us+de:2+inet(evdev)+level3(ralt_switch_for_alts_toggle):1+level3(ralt_switch_for_alts_toggle):2+group(alts_toggle)+level3(ralt_switch)+terminate(ctrl_alt_bksp)" };
xkb_geometry { include "pc(pc105)" };
};
setxkbmap -print #after switching to german layout
xkb_keymap {
xkb_keycodes { include "evdev+aliases(qwerty)" };
xkb_types { include "complete" };
xkb_compat { include "complete" };
xkb_symbols { include "pc+us+de:2+inet(evdev)+level3(ralt_switch_for_alts_toggle):1+level3(ralt_switch_for_alts_toggle):2+group(alts_toggle)+level3(ralt_switch)+terminate(ctrl_alt_bksp)" };
xkb_geometry { include "pc(pc105)" };
};
Stackoverflow での同様の質問によると、次のトリックが必要です。
setxkbmap -print | grep xkb_symbols | awk '{print $4}' | awk -F"+" '{print $2}'
現在、Xが利用可能な* nixマシンがないため、確認できませんでした(自宅ではありません)...
GNOMEを使用するUbuntu 17.10では、入力ソースを切り替えてもcurrentgsettings値は変更されません。代わりにmru-sourcesキーがあり、mostをリストします。 recentlyused入力ソース。
$ gsettings get org.gnome.desktop.input-sources mru-sources
[('xkb', 'se'), ('xkb', 'us')]
そのリストの最初のソースは現在のものであるため、現在のレイアウトを取得するためのonelinerは次のようになります。
gsettings get org.gnome.desktop.input-sources mru-sources | sed -r "s/\S*\s'([^']+).*/\1/"
Ubuntu 17.10システムでUnityを使用する場合、この回答は適用されないことに注意してください。 Unityを使用すると、以前のように機能し続けます
xkblayout-state
ツールを使用できます。説明、コンパイル、インストール、および使用法については、 README.md ファイルを参照してください。
次のコマンドは、必要なことを正確に行います。
xkblayout-state print "%s"
Ubuntu 13.10では、この意味でいくつかの優れた改善が行われたため、次の単純なbash関数を使用できます。
get_current_xkblayout () {
current_input_nr=$(gsettings get org.gnome.desktop.input-sources current | \
awk '{ print $NF }')
shift=$(( 2 * ( $current_input_nr + 1 )))
gsettings get org.gnome.desktop.input-sources sources | tr -d "\',[]()" | \
awk -v cur="$shift" '{ print $cur }'
}
次のコマンドも13.10で機能します。
setxkbmap -query | awk -F"(,|[ ]+)" '/layout:/ { print $2 }'
または:
setxkbmap -print | awk -F"+" '/xkb_symbols/ {print $2}'
ターミナルを使用して、「pt」と「us」の間で変更するテストを実行し、変更するたびに、使用されているキーボードレイアウトを収集しました。
アクティブなキーボードレイアウトを取得する
setxkbmap -print | grep xkb_symbols | awk -F"+" '{print $2}'
setxkbmap -print
grep xkb_symbols
awk -F"+" '{print $2}'
「us」レイアウトがアクティブな出力は次のとおりです:us
レイアウト間の切り替え
Sudo setxkbmap -option grp:alt_shift_toggle pt
切り替え先の言語コードである「pt」を読み取る場所を渡します。
注:Ubuntu 12.04(正確なセンザンコウ)でGnomeを使用しています
押すだけ Ctrl+Alt+T キーボードでターミナルを開きます。開いたら、以下のコマンドを実行します。
setxkbmap -query
これはあなたが見るべきものです
(以前のリリースで動作するかどうかわからない)
current_layout=gsettings get org.gnome.desktop.input-sources current | awk '{print $2}'
gsettings get org.gnome.desktop.input-sources sources | grep -Po "'[[:alpha:]]+'\)" | sed -ne "s/['|)]//g;$(($current_layout+1))p"
その他のオプションを表示するには:
gsettings list-recursively org.gnome.desktop.input-sources