web-dev-qa-db-ja.com

端末から現在のgnomeキーボードレイアウトを取得する方法は?

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

Update2:

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)" };
};
12
ftiaronsem

Stackoverflow での同様の質問によると、次のトリックが必要です。

setxkbmap -print | grep xkb_symbols | awk '{print $4}' | awk -F"+" '{print $2}'

現在、Xが利用可能な* nixマシンがないため、確認できませんでした(自宅ではありません)...

9
Izzy

Ubuntu 17.10以降の場合

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を使用すると、以前のように機能し続けます

3

Ubuntu 13.04以前の場合

xkblayout-state ツールを使用できます。説明、コンパイル、インストール、および使用法については、 README.md ファイルを参照してください。

次のコマンドは、必要なことを正確に行います。

xkblayout-state print "%s"

Ubuntu 13.10以降の場合

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}'
3
Radu Rădeanu

ターミナルを使用して、「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」を読み取る場所を渡します。

enter image description here

注:Ubuntu 12.04(正確なセンザンコウ)でGnomeを使用しています

2
Zuul

押すだけ Ctrl+Alt+T キーボードでターミナルを開きます。開いたら、以下のコマンドを実行します。

setxkbmap -query

これはあなたが見るべきものです

enter image description here

2
Mitch

Ubuntu 13.10以降の場合

(以前のリリースで動作するかどうかわからない)

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
0
user.dz