Intereting Posts
Ошибка мыши-площадки после установки нового ядра Linux Как слушать все порты (UDP и TCP) или сделать их все открытыми в Debian Скрипт останавливает команду в нем с выходом 0 Как разрешить любому пользователю (mysql, apache и т. Д.) Использовать любой TCP или UDP-порт? Что такое «блокировка» в отношении ввода-вывода файлов? Sed регулярное выражение, чтобы добавить несколько пробелов автоматический пароль без пароля ssh при входе / перезапуске A / D контакты всегда читают max (1023) Не удалось apt-get обновить mariadb, но dist-upgrade работает? почему это? Как узнать, какая библиотека и справочная страница будут найдены в первую очередь? Как запустить программу в качестве пользователя root при запуске машины Ubuntu 15.04? Интернет регулярно исчезает Использование \ $ в конце имени переменной передается grep Безопасно ли удалить файл сценария из этого скрипта? Использовать awk в качестве редактора потока

Скрипт для переключения setxkbmap

Мне setxkbmap se сценарий bash, который переключается между: setxkbmap se и setxkbmap us .

Тогда мои намерения состоят в том, чтобы сопоставить этот сценарий с Ctrl Esc с помощью клавиатуры> пользовательских ярлыков.

Дело в том, что я хочу переключить раскладку клавиатуры с помощью Ctrl Escape . Как я могу это реализовать?

Я не знаю, какая рабочая среда Desktop, в которой вы работаете, как вы собираетесь назначать клавишу быстрого доступа, может различаться, но этот скрипт работает глобально, по крайней мере, на моем Ubuntu 12.04 box и Arch Linux :

 #!/bin/bash (setxkbmap -query | grep -q "layout:\s\+us") && setxkbmap se || setxkbmap us 

На подобные вопросы есть разные ответы. Тем не менее, никто из них не работает крепко для меня.

Следующий сценарий должен работать во всех случаях. Это, безусловно, работает на моей системе debian при переключении макетов с помощью setxkbmap :

 #!/bin/bash seven=`xmodmap -pke | grep "keycode 16" | awk '{print \$5}'` ## If this is the "us" layout if [ $seven == "ampersand" ]; then setxkbmap se else setxkbmap us fi 

Сценарий анализирует вывод xmodmap, чтобы увидеть, является ли текущий макет «us» или «se». В макете «us» SHIFT + 7 отображается на «амперсанд». Если вы будете переключаться между макетами «us» и «se», «амперсанд» на 7 означает, что вы используете макет «us», и сценарий изменится на «se». Если у вас нет «амперсанда» на 7 , сценарий переключается на «нас».

лучший способ – не использовать скрипт, а загружать двухслойную клавиатуру (например: setxmodmap "us,se" ) и переопределить Ctrl- Esc для отправки ISO_Next_Group

Посмотрите на этот ответ на xkb, чтобы переопределить некоторые ключи без необходимости редактировать основные файлы по умолчанию (таким образом, не нужно быть root). В файле локальных символов (например: ~/.xkb/symbols/mysymbols ) ~/.xkb/symbols/mysymbols небольшой раздел как:

 partial modifier_keys xkb_symbols "ctrl_esc_toggle" { key <ESC> { type[Group1]="PC_CONTROL_LEVEL2", symbols[Group1]= [ Escape, ISO_Next_Group ] }; }; 

PC_CONTROL_LEVEL2 сообщает, что символ sencond для этого ключа получен с помощью Control (вместо Shift).

и в локальном файле ~/.xkb/keymap/mykbd (например: ~/.xkb/keymap/mykbd , вы можете создать его с помощью setxkbmap "us,se" ; setxkbmap -print > ~/.xkb/keymap/mykbd ) изменить строку xkb_symbols, чтобы добавить " mysymbols (ctr_esc_toggle) ", поэтому у вас будет следующее:

 xkb_symbols { include "pc+us+se:2+inet(evdev)+terminate(ctrl_alt_bksp)+compose(rwin)+mysymbols(ctr_esc_toggle)" }; 

(обратите внимание на «se: 2», «: 2» ​​сообщает загружать определения «se» как Group2, вы можете складывать различные группы).

вы можете загрузить его с помощью: xkbcomp -I$HOME/.xkb ~/.xkb/keymap/mykbd $DISPLAY тогда Ctrl-Esc переключится между макетами «us» и «se».

ПРИМЕЧАНИЕ. Однако вам нужно нажать Ctrl (и удерживать) до Esc; иначе он не будет работать (для этого потребуется определить виртуальный модификатор Escape, и я не знаю, как это сделать)