"пИчатать" или "не пИчатать" ? Вот в чем вопрос!

Однажды, один мой знакомый, в прошлом начальник некой конторы, пришел ко мне с просьбой... А было это еще в "начале времен", когда в "мышках" еще "сидели" шарики, кнопки на клавиатурах "гордо" торчали и нажимались с громким стуком, мониторы выглядели солидно и занимали на столе не мало места глядя на пользователя своим выпуклым экраном, пытаясь разобраться, чего же от компьютера этот "юзьверь" хочет. Так вот, попросил он меня научить его сотрудников (почти все пенсионеры) пользоваться компьютером, дословно просьба звучала так: "Ты научи их пИчатать..." Вот теперь, надеюсь, стало всем ясно, почему в заголовке слово написано с опИчаткой.

Как известно многим читающим мои "произвИдения" вполне резонно было бы предположить, что всегда хочется чего-то лучшего, удобного... В данном случае я решил направить свои усилия на изучение новой для меня системы МХ-15. Знаете ли, прежде чем внедрять что-то куда-то, нужно систему "обкатать", там более, что "шишки" уже имеются. Несмотря на обилие различных советов во всемирной паутине, я привык вырабатывать свой алгоритм действий  по настройке системы, при этом я не игнорирую опыт других, и своим "рецептом", может быть, когда-то поделюсь, если сочту, что он заслуживает внимания широкой общественности.

В процессе поиска "идеального" подхода к настройке МХ-15 я обратил внимание на установленный пакет fbxkb и в трее уже отображается используемая раскладка клавиатуры, поэтому я подумал о резонности настройки переключения раскладок не через возможности рабочего окружения XFCE, а через системные возможности в /etc/default/keyboard или еще как. Кое-кто может сказать: "А зачем городить огород?". Я даже и не знаю, что ответить на это, ну вот захотелось мне и все тут. В процессе поиска решения попадались разные варианты, но в памяти все время всплывала, возможная ранее, циклическая смена раскладок, когда пользователь использующий более двух раскладок (я постоянно использую три us, ua, ru) мог переключать левым сочетанием клавиш в порядке us - ua - ru, а правым: us - ru - ua. Это было очень удобно, поскольку не нужно было лишний раз "мучить клавиши". В последних версиях операционных систем Linux, и в Linux Mint в частности, такая возможность пропала, решения я так и не нашел. Предложений много, а результата - "0". И вот эта идея снова меня "зацепила" и я стал размышлять на эту тему немножко под другим углом, если нельзя сделать это штатными средствами, то может скрипт поможет.

Размышления мои "плыли" по такому руслу - при работе я использую три раскладки, при наборе текста одного документа, как правило, используется либо одна, либо две - русская или украинская в сочетании с английской раскладкой, очень редко используются три одновременно и русская и украинская вместе. Наиболее приемлемый вариант из предлагаемых был основан на использовании варианта RUU, суть которого заключается в том, что в системе используется только две раскладки (ru и us), а возможность вводить украинские литеры осуществляется нажатием на "волшебную" клавишу и вместо "ы" получаем "i" и т.д. Но он мне не подходит в виду активного использования обеих кириллических раскладок, поэтому мои поиски продолжались, нужно заметить, безрезультатные.

Я не программист, и понятие о внутренней работе компьютера и ПО имею только общие, но простенький алгоритм уже сформировался. Если бы я был программистом, у меня на решение этой задачки ушло бы минут пять - десять, а так, пришлось попыхтеть. В общем - идея такова: в нужное время в системе используется одна комбинация раскладок, допустим US-RU, а при необходимости нажимаем клавишу и получаем другую US-UA. Можно назначить два сочетания "горячих" клавиш, но это будет немножко неудобно, я решил привязать все к одной. В размышлениях я определил три кандидата - Caps Lock, Num Lock, Scroll Lock, все три могут сохранять свое состояние (нажата или нет), остается только запустить скрипт, который определит состояние клавиши на момент запуска скрипта и установит в системе соответствующее комбинацию раскладок. Осталось дело за малым - состряпать этот скриптик. В процессе, на одном буржуйском сайте я нашел вот это:

#!/bin/bash
state=$(xset -q | grep Caps | awk '{print $4}')
if [ "$state" = "on" ]
then
notify-send "Caplock :ON"
fi

Как видим (я-то это прочитал в пояснении), этот скрипт проверяет включена ли клавиша Caps Lock и если "да" то выводит на экран сообщение "Caplock :ON". Соответственно, я подставил команду setxkbmap для установки соответствующих комбинаций раскладок. Ура-а-а-а! Заработало-о-о-о! Но радость моя была не долгой, идея с Caps Lock хороша, но как убрать действие ее прямого назначения? В XFCE я такой возможности не нашел, находил разные консольные команды, в принципе, ничего страшного, "вшить" в скриптик и все, но эти команды либо переназначали клавишу, либо вообще удаляли ее, так что на использовании клавиши Caps Lock пришлось "поставить крест". И тут я подумал об одной замечательной клавише, Scroll Lock называется. Для чего она нужна, признаюсь - не знаю, вернее я раньше знал, а теперь основательно забыл. Вот ее, родимую, я и решил задействовать. Снова в поиск, и снова к немцам, и снова у них нашел вот этот скриптик, он аналогичен первому, только теперь он выводит сообщение, и когда клавиша Scroll Lock выключена, и когда включена.

#!/bin/sh

result=$(xset q | grep "Scroll Lock: off")
if [ -z "$result" ]; then # Scroll Lock must be on
  echo "Off"
  xset -led named "Scroll Lock"
else
  echo "On"
  xset led named "Scroll Lock"
fi

Основываясь на этих двух подсказках я состряпал вот такой простенький скриптик:

#!/bin/sh

result=$(xset q | grep "Scroll Lock: off")
if [ -z "$result" ]; then # Scroll Lock must be on
  notify-send "Keyboard :US,UA"
  setxkbmap "us,ua" ",winkeys" "grp:lwin_toggle"
  xset -led named "Scroll Lock"
else
  notify-send "Keyboard :US,RU"
  setxkbmap "us,ru" "" "grp:lwin_toggle"
  xset led named "Scroll Lock"
fi

Теперь, если клавиша Scroll Lock выключена, у меня будет задействована комбинация раскладок US,UA с переключением между ними левой клавишей win и с выводом сообщения на экран "Keyboard :US,UA", а если клавиша включена то будет задействована комбинация раскладок US,RU с переключением между ними левой клавишей win и с выводом сообщения на экран "Keyboard :US,RU". Осталось дело за малым, прицепить ее куда-то. Немножко поразмышляв, я решил прицепить этот скрипт к ней же, к Scroll Lock, ведь что делает скрипт? Он проверяет, состояние клавиши, т.е. при нажатии сначала сигналы идут аппаратно, а потом система при помощи скрипта проверяет состояние клавиши, которое на аппаратном уровне уже находится в определенной позиции.

В итоге, все работает, как и планировалось, создал файлик с именем xkb_Scroll.sh, добавил в него содержимое и получился - скриптик, при помощи контекстного меню сделал его исполняемым, разместил в домашней папке (можно разместить где угодно), добавил его в автозагрузку (Панель управления - Сеансы и запуск - Автозапуск), потом назначил клавишу запуска скрипта - Scroll Lock, чтобы в процессе работы можно было переключаться между комбинациями раскладок...

Вот и все, теперь при загрузке проверяется состояние клавиши Scroll Lock, устанавливается соответствующая положению комбинация раскладок, а при нажатии Scroll Lock эта комбинация меняется. Не знаю как кому, а мне стало намного удобнее работать.


P.S. В виду того, что почти все время работаю на ноутбуке или беспроводной клавиатуре и для активации кнопки  Scroll Lock нужно еще нажимать и клавишу Fn пришлось таки перейти на использование сочетаний клавиш для смены сочетания раскладок. Сейчас у меня при нажатии Alt+1 задействована комбинация раскладок US,UA с переключением между ними сочетанием Ctrl+Shift, а при нажатии Alt+2 задействована комбинация раскладок US,RU с переключением между ними сочетанием Ctrl+Shift. Для реализации используется два скрипта, которые я разместил в /usr/bin/ , вот сами скрипты:

xkb_us_ua.sh
==============================================
#!/bin/sh

  notify-send "Keyboard :US,UA"
  setxkbmap "us,ua" ",winkeys" "grp:ctrl_shift_toggle"

==============================================

xkb_us_ru.sh
==============================================
#!/bin/sh

  notify-send "Keyboard :US,RU"
  setxkbmap "us,ru" "" "grp:ctrl_shift_toggle"

==============================================

Комментариев нет:

Отправить комментарий