- kUbuntu 20.04
- Linux Mint 21 Cinnamon
- Ubuntu Mate 22.04.1
Пожалуйста, создавайте тикет в Discussions или Issues с обратной связью: где скрипты работают, а где нет. Я буду обновлять этот раздел.
Когда-то моей операционной системой была Windows. И там я пользовался очень популярной программой Punto Switcher, которая переключала раскладку уже набранного текста. Она умеет многое другое, но от этого многого другого больше вреда, чем пользы, на мой субъективный взгляд. Потом я перешёл на kUbuntu и захотел себе этого же функционала. К сожалению, готовых решений очень мало и ни одно из них меня не устраивало.
Самое известное - это XNeur. Оно не поддерживается с 2016 года и под KDE нормально не работает.
Ещё есть switcher, но он развивается не туда, куда мне нужно и не может перевести выделенный текст в другую раскладку.
Ещё есть тема на форуме со скриптами, которые не удовлетворяют моим желаниям. Но оттуда я взял идею.
Есть ещё решения для Гнома, но их мы не будем рассматривать. Больше сегодня ничего нет на просторах Интернета.
Я поставил себе задачу так:
- Решение должно работать в KDE, т.к. мне нужно для kUbuntu 20.04.5 LTS
- Решение должно быть на чистом Bash (уже есть неплохие реализации на Python3)
- По любой, назначаемой мной, комбинации клавиш, изменяется раскладка выделенного в этот момент текста.
- По любой, назначаемой мной, комбинации клавиш, изменяется раскладка текста от текущего положения курсора и до начала строки.
- После изменения раскладки должен измениться системный язык ввода, чтобы дальше удобно было продолжать писать уже на правильной раскладке.
- Безопасность: никакие данные никуда не отправляются. Ставить себе кейлоггер своими же руками в систему я не хочу.
- Стабильность работы.
- Даже если пользователь будет нажимать или держать нажатыми любые клавиши на клавиатуре, должно работать корректно
- После изменение системного языка ввода не должно ломаться системное переключение языков ввода.
Скрипты работают с использованием xdotool
, xsel
и sed
. Соответственно, сначала устанавливаем их:
sudo apt install xdotool xsel sed
Необходимо скачать файлы из папки /bin/
и положить в какой-нибудь локальный каталог. Я рекомендую использовать $HOME/bin/
. Должно получиться так:
/home/$USER/bin/layout_changing_selected.sh
/home/$USER/bin/layout_changing_previous.sh
/home/$USER/bin/notification.wav
Делаем скрипты исполняемыми:
chmod +x $HOME/bin/layout_changing_selected.sh
chmod +x $HOME/bin/layout_changing_previous.sh
Идём в Параметры системы -> Рабочая среда -> Комбинации клавиш -> Специальные действия и создаём группу для наших скриптов:
Вписываем комментарий:
Пользовательские скрипты для перевода уже набранного текста в другие раскладки
Создаём действие в группе: Новый -> Глобальная комбинация клавиш -> Команда или адрес:
Добавляем комментарий к действию:
Этот скрипт позволяет менять раскладку выделенного текста, например, по нажатию Shift+Pause
Назначаем комбинацию клавиш (в моём примере это Shift+Pause):
Настраиваем действие для комбинации клавиш (в моём примере это $HOME/bin/layout_changing_selected.sh
):
Аналогично добавляем скрипт layout_changing_previous.sh
с комментарием
Этот скрипт позволяет менять раскладку текста от текущего положения курсора и до начала текущей строки, например, по нажатию Pause
и действием $HOME/bin/layout_changing_previous.sh
.
Если положили скрипты и звук уведомления в другое место, необходимо в каждом скрипте в начале поправить значение переменной SCRIPT_DIR
.
Если хотите, чтобы переключение сопровождалось звуком, необходимо раскомментировать строки в конце файла, чтобы они выглядели так (удалить решётку в начале строк):
SCRIPT_DIR=$HOME/bin/
paplay $SCRIPT_DIR/notification.wav
Готово. Работать начнёт сразу, без перезагрузки!
- Проект xkblayout-state позволит настроить звук на каждую раскладку. Нужно сохранить себе проект и добавить в конец скрипта:
QQ=$(~/.src/xkblayout-state/xkblayout-state print '%n'|sed "s:Russian:ru:;s:English:us:;s:Ukrainian:ua:")
sleep 0.5
aplay ~/.zFront_Right$QQ.wav