Как получить текущую раскладку клавиатуры гнома от терминала?

Для использования в скрипте bash мне нужно получить раскладку клавиатуры gnome, которую использует пользователь. Например, если пользователь устанавливает раскладку клавиатуры на en-us, мне нужна команда bash, которая выводит мне это.

Как я могу получить эту информацию?

Обновление:

setxkbmap -query, к сожалению, не работает. Ниже представлен выход с активированной раскладкой en (первая команда) и de (вторая команда). Переключение раскладки клавиатуры, по-видимому, связано с конфигурацией сеанса 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

Обновление 2:

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)" };
};
13
задан 6 November 2017 в 05:17

6 ответов

Для 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}'
0
ответ дан 6 November 2017 в 05:17

Используя терминал, я запустил тест, изменяющийся между 'pt' и 'нами', и после каждого изменения, я собрал раскладку клавиатуры, используемую с успехом:

Получите активную раскладку клавиатуры

setxkbmap -print | grep xkb_symbols | awk -F"+" '{print $2}'
  • Распечатайте конфигурацию: setxkbmap -print
  • Соберите строку, которая имеет значение: grep xkb_symbols
  • получает строку после первого "+" знак: awk -F"+" '{print $2}'

Вывод, имеющий 'нас' активное расположение: us


Swith между разметками

sudo setxkbmap -option grp:alt_shift_toggle pt

Передача, где это читает 'pt', код языка для переключения на.

enter image description here

Примечание: Я использую Gnome на Ubuntu 12.04 (Точный Ящер)

2
ответ дан 6 November 2017 в 05:17

Для Ubuntu 17.10 или более поздней версии

В Ubuntu 17.10 с GNOME текущее значение gsettings не изменяется при переключении источника входного сигнала. Вместо этого есть клавиша mru-sources , в которой перечислены источники ввода m ost r ecently u sed.

$ gsettings get org.gnome.desktop.input-sources mru-sources
[('xkb', 'se'), ('xkb', 'us')]

Первым источником в этом списке является текущий, поэтому единый получатель текущего макета может выглядеть следующим образом:

gsettings get org.gnome.desktop.input-sources mru-sources | sed -r "s/\S*\s'([^']+).*/\1/"

Обратите внимание, что этот ответ не применяется если вы используете Unity в системе Ubuntu 17.10. С Unity он продолжает работать как раньше.

0
ответ дан 6 November 2017 в 05:17

Для 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
ответ дан 6 November 2017 в 05:17

Согласно аналогичному вопросу о Stackoverflow , следующее должно помочь:

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

Я не смог проверить это, так как в настоящее время у меня нет машины * nix с X доступно (меня нет дома) ...

0
ответ дан 6 November 2017 в 05:17

Просто нажмите Ctrl + Alt + T на клавиатуре, чтобы открыть терминал. Когда он откроется, выполните команду ниже.

setxkbmap -query

Это то, что вы должны увидеть

enter image description here

0
ответ дан 6 November 2017 в 05:17

Другие вопросы по тегам:

Похожие вопросы: