Вопрос или проблема
Я использую менеджер окон i3, Ubuntu 20.04.
Я выполнил следующие команды, чтобы настроить две раскладки клавиатуры:
setxkbmap -layout us,tr
setxkbmap -option 'grp:alt_shift_toggle'
Это позволяет мне переключаться между двумя раскладками клавиатуры us
и tr
с помощью alt-shift.
Я хочу получить короткий вывод, us
или tr
, из командной строки, который скажет мне, на какой раскладке клавиатуры я сейчас нахожусь.
Следующая команда дает мне us
в качестве вывода, даже когда я переключился на tr
.
setxkbmap -print | awk -F"+" '/xkb_symbols/ {print $2}'
Полный вывод setxkbmap -print
приведен ниже:
xkb_keymap {
xkb_keycodes { include "evdev+aliases(qwerty)" };
xkb_types { include "complete" };
xkb_compat { include "complete" };
xkb_symbols { include "pc+us+tr:2+inet(evdev)+group(alt_shift_toggle)+capslock(escape)"};
xkb_geometry { include "pc(pc105)" };
};
Как я могу получить текущую раскладку клавиатуры в командной строке?
Вы можете использовать
xkblayout-state:
xkblayout-state – это небольшая командная программа для получения/установки текущей раскладки клавиатуры XKB.
Команда для использования:
xkblayout-state print "%s"
Под gnome и xwayland xkblayout-state
не работает, вместо этого вы можете использовать что-то вроде:
gsettings get org.gnome.desktop.input-sources mru-sources
И тот, что находится в начале списка, – это ваша текущая раскладка.
Ответ или решение
Чтобы получить текущую раскладку клавиатуры в Ubuntu 20.04 с установленным оконным менеджером i3, можно использовать несколько подходов. Ваша конфигурация настроена на использование двух раскладок – us
и tr
, что подразумевает возможность их смены с помощью сочетания клавиш Alt+Shift. Однако, как вы уже заметили, команда setxkbmap -print | awk -F"+" '/xkb_symbols/ {print $2}'
может неверно отражать текущее состояние раскладки.
Способы получения текущей раскладки клавиатуры
-
Использование утилиты
xkblayout-state
:
Утилитаxkblayout-state
— это удобный командный инструмент, который позволяет получать и устанавливать текущую раскладку клавиатуры. Чтобы установитьxkblayout-state
, выполните следующую команду в терминале:sudo apt install xkblayout-state
После установки вам просто нужно выполнить команду:
xkblayout-state print "%s"
Эта команда выведет краткую строку, например
us
илиtr
, что является наиболее удобным способом получения информации о текущей раскладке. -
Прямой запрос к
setxkbmap
с использованиемgrep
иcut
:
Если по какой-то причине вы не можете установитьxkblayout-state
, вы можете использовать комбинацию командsetxkbmap
,grep
иcut
. Выполните следующую команду в терминале:setxkbmap -print | grep -oP '(?<=include "pc\+us\+tr:)[0-9]+' | head -n 1
Данная команда ищет в строке
xkb_symbols
нужный паттерн и выводит номер текущей раскладки. Обратите внимание, что этот метод тоже имеет свои ограничения. -
Мониторинг через
gsettings
(только для GNOME):
Если вы хотите использовать метод, основанный на GNOME, можно использовать следующую команду:gsettings get org.gnome.desktop.input-sources mru-sources
В этом случае необходимо быть осторожным, так как данный метод может не работать под i3, ориентированном на пользовательский интерфейс без GNOME.
Заключение
Из вышеприведённых методов рекомендуем использовать xkblayout-state
как наиболее надежный и простой способ для получения текущей раскладки клавиатуры в разных средах. Убедитесь, что утилита установлена, и используйте команду вывода.
Эти методы подойдут как для обычных пользователей, так и для системных администраторов, уверенных в своей компетентности в Linux. Если вам нужна дополнительная информация или функциональность, пожалуйста, не стесняйтесь задавать дополнительные вопросы.