Авто переключение клавиатуры с русского на английский linux
X Neural Switcher — Поваренная книга
Приветствую.
Я являюсь автором программы для автоматического переключения раскладки клавиатуры, работающей под Linux. Эта программа xneur или X Neural Switcher.
Когда я начинал заниматься этой программой, ничего вменяемого для замены Punto Swither для linux не было. Обратите внимание, я писал ее лично для себя, у меня почти всегда все работает. Я выкладываю ее в общий доступ только потому, что программа полезна людям.
В дальнейших статьях я разберу существующие (и существовавшие) аналоги, и поясню, почему они все являются тем, чем пользоваться нельзя, и какая клевая программа xneur.
Занимаюсь я программой от силы один час в неделю, поэтому корить меня за медленную разработку глупо. Деньги я зарабатываю тоже программированием, но совсем не связанным с linux.
За прошедшие 6 лет, я периодически натыкался на специфические баги как Xlib, так и DE, c которыми приходилось находить взаимопонимание.
Сейчас я хочу рассказать о приготовлении xneur, описать настройки и поделиться «маленькими футбольными хитростями».
Эта часть статей под номером 0 посвящена самому простому — описанию. Вы удивитесь, как много xneur умеет из того, что не умеет Punto.
Для тех кто долго пробовал, но не осилил. Я всегда открыт к диалогу. Если что-то где-то не работает, сообщите мне всю необходимую информацию, и я постараюсь решить вашу проблему.
Что такое X Neural Switcher.
X Neural Switcher — программа для автоматического переключения раскладок клавиатуры, в зависимости от набираемого текста. Т.е. при наборе текста, если он набирается не в той раскладке, которую вы ожидаете, xneur автоматически (или по запросу) переключит язык на нужный.
При работе в автоматическом режиме, xneur автоматически определяет раскладку вводимого текста и изменяет язык за вас. В этом режиме предусмотрена возможность задания приложений исключений, в которых автоматический режим будет заменён на ручной.
При работе в ручном режиме xneur не отслеживает набор, но позволяет автоматически изменять раскладку последнего набранного слова (кнопка Pause/Break), последней набранной строки (сочетание клавиш Ctrl + Break), выделенного текста (сочетание клавиш Shift + Break) и другие полезные функции.
Все приведённые выше сочетания клавиш работают и в автоматическом режиме. Если по каким-либо причинам вас не устраивают преднастроенные комбинации — вы всегда сможете поменять их в настройках программы. Также программа позволяет создавать собственные сочетания клавиш для запуска любых приложений.
На данный момент программа поддерживает восемнадцать языков: Армянский, Белорусский, Болгарский, Чешский, Грузинский, Немецкий, Греческий, Английский, Эстонский, Французский, Казахский, Литовский, Латвийский, Польский, Молдавский (Румынский), Русский, Испанский, Украинский и Узбекский.
Для вышеприведённых языков в программе имеются алгоритмы эвристического анализа, но, тем не менее, программа может работать и с другими языками, если для нее существуют словари aspell или myspell.
Основные возможности программы.
Установка программы.
Исходные тексты последних версий xneur и gxneur доступны на xneur.ru/downloads
Для установки из исходников вам понадобится наличие следующих пакетов (привожу способ уcтановки пакетов для Ubuntu, но вы сами поймёте, что надо установить):
sudo apt-get install build-essential automake1.9 libtool flex libx11-dev libgstreamer0.10-dev libopenal-dev libpcre3-dev libnotify-dev zlib1g-dev libaspell-dev libxosd-dev libenchant-dev
Для сборки gxneur (интерфейса для настройки) еще надо ставить вот эти пакеты:
sudo apt-get install libglade2-dev libgtk2.0-dev libgconf2-dev libappindicator-dev
Установка осуществляется стандартным набором команд (опять же я привожу для Ubuntu).
Для удаления программы, установленной таким образом, можно использовать команду
Теперь разберем опции конфигурации программы, на тот случай, если у вас недостает каких-то пакетов или вы просто хотите их отключить.
sudo add-apt-repository ppa:andrew-crew-kuznetsov/xneur-stable
sudo add-apt-repository ppa:andrew-crew-kuznetsov/xneur-unstable
Первый репозиторий содержит базовые релизы, второй содержит роллинг-релизы (ночные сборки).
Описание параметров конфигурации.
Теперь разберем то, что позволит нам тонко настроить xneur, а именно его конфигурационный файл.
Разберем его по опциям. Я дам краткое описание каждой опции и объясню в каких случаях его лучше использовать.
Version 0.15.0
Описывает текущую версию программы. По большей части, вообще ни на что не влияет.
ManualMode No
Опция ручного режима. Если установлено в значение Yes, то автоматическое переключение будет отключено везде, кроме приложений указанных в соответствующей настройке.
LogLevel Trace
Уровень сообщений, которыми xneur будет сыпать в консоль.
Error — это только ошибки.
Warning — предыдущее, плюс предупреждения о неполадках, не влияющих на работу программы.
Log — предыдущее, плюс чуть больше.
Debug — предыдущее, плюс отладочные сообщения программы.
Trace — предыдущее, плюс вообще все, что в xneur происходит.
ExcludeLanguage de
Опция позволяет множественное применение и служит для указания раскладки с которой и на которую переключение осуществляться не будет.
DefaultXkbGroup 0
Определяет раскладку по умолчанию для вновь запущенных приложений.
ExcludeApp rdesktop
С помощью этой опции вы можете целиком исключить приложение из обработки. Допускается множественное использование.
SetAutoApp Gedit
Эта опция определяет приложения, в которых будет принудительно включен автоматический режим переключения вне зависимости от опции ManualMode.
SetManualApp Anjuta
Эта опция определяет приложения, в которых будет принудительно включен ручной режим переключения вне зависимости от опции ManualMode.
AddBind Action Key
Определяет клавишу для того или иного действия по переключению раскладки или прочего. Список Action имеется в вашем конфигурационном файле.
AddAction Control Alt f Firefox Browser firefox
Определяет клавишу для выполнения пользовательского действия.
ReplaceAbbreviation ini Андрей Crew Кузнецов
Определяет список аббревиатур для замены сокращений.
ReplaceAbbreviationIgnoreLayout Yes
Определяет учитывать ли текущую раскладку при замене сокращений. Если установлена в значение Yes, то программа заменит сокращение «йц» и «qw» на «йцукен».
PlaySounds No
Включает или выключает звуковое сопровождение.
SoundVolumePercent 15
Определяет уровень громкости звуков программы а процентах от системного уровня громкости.
EducationMode Yes
Тут просто. Включить или нет самообучение программы вашему лексикону.
LayoutRememberMode Yes
Запоминать раскладку для каждого окна или одна раскладка для всех окон? Решать вам.
LayoutRememberModeForApp Wine
Эта опция заставит xneur принудительно использовать одну раскладку для всех окон приложения. У меня везде в Wine стоит общая раскладка.
SaveSelectionMode Yes
Вы выделили и изменили текст с помощью xneur. Если опция включена, то выделение сохранится после изменения, сделав возможным дальнейшее переключение.
RotateLayoutAfterChangeSelectedMode No
Определяем, переключить ли системную раскладку, если исправлен выделенный текст.
SendDelay 0
Задержка перед отправкой перехваченного нажатия клавиши обратно приложению.
LogSave Yes
Включаем кейлоггер, т.е. сохраняем набранный текст в файл.
LogSize 10000000
Определяем размер файла с логами (в байтах).
LogMail to_me@mail.ru
Если опция определена, то именно на этот емайл будет отсылаться лог набранного текста.
LogHostIP 127.0.0.1
Хост, который предоставляет услуги емайл (почтовый сервер для отправки, не требующий логина и пароля). Возможно указание не ip, а имени.
LogPort 25
Порт почтового сервера.
CorrectIncidentalCaps Yes
Опция для исправления сЛУЧАЙНОГО капса.
CorrectTwoCapitalLetter Yes
Опция для исправления ДВух прописных букв.
CorrectCapitalLetterAfterDot Yes
Исправляет строчную букву на прописную после точки или восклицательного знака.
CorrectTwoSpaceWithCommaAndSpace Yes
Исправляет двойной пробел на запятую.
CorrectTwoMinusWithDash Yes
Исправляет двойной минус на тире.
CorrectCWithCopyright Yes
Исправляет © на ©
CorrectTMWithTrademark Yes
Исправляет ™ на ™.
CorrectRWithRegistered Yes
Исправляет ® на ®.
FlushBufferWhenPressEscape Yes
Если опция включена, то при нажатии Escape внутренний буфер переключений будет сброшен.
FlushBufferWhenPressEnter No
Если опция включена, то при нажатии Enter внутренний буфер переключений будет сброшен.
DontProcessWhenPressEnter No
Слово не будет обрабатываться, если нажат Enter, что удобно в мессенджерах.
ShowOSD No
Показывать экранные сообщения. Устарело.
ShowPopup Yes
Показывать всплывающие сообщения.
PopupExpireTimeout 1500
Интервал показа всплывающих сообщений. В данной реализации библиотеки показа не работает.
CheckOnProcess Yes
Проверять слово на лету или после нажатия Entrer. Я предпочитаю на лету.
DisableCapsLock Yes
Отключить Капс совсем.
CorrectSpaceWithPunctuation No
Удаление пробелов перед знаками пунктуации.
Autocompletion Yes
Включение автодополнения слов.
AddSpaceAfterAutocompletion No
Добавление пробела после автодополнения.
AutocompletionExcludeApp Gnome-terminal
В этих приложениях автодополнение будет отключено.
TroubleshootBackspace No
Отключит автопереключение, если нажат Backspace.
TroubleshootLeftArrow Yes
Отключит автопереключение, если нажата стрелка влево.
TroubleshootRightArrow Yes
Отключит автопереключение, если нажата стрелка вправо.
TroubleshootUpArrow Yes
Отключит автопереключение, если нажата стрелка вверх.
TroubleshootDownArrow Yes
Отключит автопереключение, если нажата стрелка вниз.
TroubleshootDelete No
Отключит автопереключение, если нажат Delete.
TroubleshootSwitch Yes
Отключит автопереключение, если вы переключили раскладку.
TroubleshootFullScreen Yes
Отключит автопереключение, если приложение в полноэкранном режиме.
CompatibilityWithCompletion Yes
Костыль для совместимости с автодополнением в других приложениях.
TrackingInput Yes
Отключение этой опции приведет к полному отказу программы от перехвата клавиатуры.
TrackingMouse Yes
Отключение этой опции приведет к полному отказу программы от перехвата мыши.
DontSendKeyRelease No
Не отправлять событие клавиатуры KeyRelease. Очень специфичная штука, лучше не менять значение опции.
Что дальше?
Новый аналог Punto Switcher для linux: xswitcher
Прекращение поддержки xneur вызвало у меня определённые страдания в последние полгода (с появлением OpenSUSE 15.1 на моих десктопах: при включённом xneur окна теряют фокус и забавно мерцают в такт ввода с клавиатуры).
«А, блин, опять не в той раскладке начал набирать» — в моей работе встречается до неприличия часто. И позитива не добавляет.
В то же время, я (как инженер-конструктор) могу достаточно ясно сформулировать чего хочу. А хотел я (сначала от Punto Switcher, а затем, спасибо Windows Vista, окончательно пересев на Linux, от xneur) ровно одного. Осознав, что на экране белиберда не в той раскладке (такое обычно случается в конце набора нового слова), топнуть по «Pause/Break». И получить то что печатал.
На данный момент изделие имеет оптимальное (с точки зрения меня) отношение функциональность/сложность. Пора делиться.
Дальше пойдут всякие технические подробности, поэтому сначала — ссылка «на потрогать» для нетерпеливых.
На данный момент захардкожено следующее поведение:
N.B. Т.к. в текущей версии кейлоггер прикручивается к «/dev/input/», xswitcher должен запускаться с рутовыми правами:
Обратите внимание: владельцем файла с suid должен быть root, т.к. кто владелец — в того suid и превратит при запуске.
Параноики (я не исключение) могут клонировать из GIT и собрать на месте. Примерно так:
Автозапуск добавлять по вкусу (в зависимости от DE).
Работает, «каши не просит» (≈30 секунд CPU в сутки, ≈12 МБ в RSS).
Подробности
Весь репозиторий изначально был посвящён моему пет-проекту, а другой заводить — пока лень. Так что, всё свалено в кучу (просто по папкам) и накрыто AGPL («патент наоборот»).
Код xswitcher написан на golang, с минимальными вкраплениями C. Предполагается, что такой подход даст наименьшие трудозатраты (пока так и есть). Сохраняя возможность подключать недостающее посредством cgo.
По тексту разложены комментарии, откуда чего позаимствовал и зачем. Т.к. код xneur меня «не вдохновил», за отправную точку взял loloswitcher.
Использование «/dev/input/» имеет как свои плюсы (всё видно в т.ч. зажатую клавишу с автоповтором), так и минусы. Минусы такие:
Вывод «обратно» пока сделан через прикручивание виртуальной клавиатуры. Спасибо автору keybd_event, но там слишком высокоуровневая абстракция и дальше придётся переделывать. У меня, например, правая Win-клавиша 3-й ряд выбирает. А обратно транслируется только левая Win.
Известные ошибки
Заключение
Код — простейший процедурный. И туп как я. Так что, тешу себя надеждой что дописать желаемое сможет практически любой технарь. И данное изделие благодаря этому не сгинет без поддержки подобно большинству just-for-fun.
Раскладка клавиатуры в Ubuntu
Для того, чтобы пользователь мог с помощью компьютера набирать текст на разных языках, была придумана раскладка клавиатуры. После смены раскладки одним и тем же клавишам присваиваются другие символы. Можно добавить несколько раскладок, но активной в определённый момент может быть только одна.
В этой статье мы поговорим о том, как добавить раскладку клавиатуры в Ubuntu, а также как настроить удобное переключение раскладки.
Как добавить раскладку клавиатуры в Ubuntu
Но если вам нужно добавить ещё и третью раскладку, например украинскую, то сделать это не так сложно. Откройте параметры системы:
Затем выберите пункт Регион и язык. Далее под списком раскладок клавиатуры найдите кнопку со значком «+«:
Вы можете выбрать раскладку из списка предложенных, а если её там нет, то можно нажать кнопку с тремя точками, чтобы открыть полный список. В этом списке можно использовать поиск:
Далее останется только выбрать нужную раскладку и нажать кнопку Добавить, после этого она появиться в списке:
Некоторые раскладки не доступны в стандартном списке, чтобы их открыть, выполните в терминале команду:
gsettings set org.gnome.desktop.input-sources show-all-sources true
Раскладки можно менять местами, для этого выберите раскладку и используйте соответствующие стрелочки:
Переключение раскладки клавиатуры Ubuntu
Все эти сочетания клавиш перекочевали в Linux, и сейчас смена раскладки клавиатуры Ubuntu 18.04 может быть выполнена такими способами:
Выберите нужный пункт и нажмите комбинацию, которую надо установить вместо Super+Пробел. Здесь же можно полностью отключить эти сочетания, нажав в окне выбора комбинации клавишу Backspace.
Установить вместо Alt+Shift привычную многим Ctrl+Shift не так просто, но возможно, для этого вам понадобится утилита Gnome Tweaks:
sudo apt install gnome-tweaks
Откройте утилиту, перейдите на вкладку Клавиатура и мышь, затем выберите Дополнительные настройки раскладки:
Здесь в разделе Переключение на другую раскладку можно выбрать сочетание клавиш для переключения, доступны не только Ctrl+Shift, но и Win, Caps Lock и многие другие.
Если же вам нужно изменить раскладку клавиатуры Ubuntu 18.04 именно по сочетанию Ctrl+Shift, и вы не хотите устанавливать никаких утилит, можете воспользоваться командой:
gsettings set org.gnome.desktop.input-sources xkb-options «[‘grp:ctrl_shift_toggle’]»
Но обратите внимание, что при выборе сочетания Ctrl+Shift, раскладка будет переключаться каждый раз, когда вы открываете терминал.
Выводы
В этой небольшой статье мы рассмотрели, как настраивается раскладка клавиатуры Ubuntu и сочетания клавиш для её изменения. Раньше среди пользователей были популярны флаги вместо индикаторов раскладки, но сейчас эта возможность была удалена из Gnome, вы можете её использовать разве что в Cinnamon или Mate.
Оцените статью:
Об авторе
Основатель и администратор сайта losst.ru, увлекаюсь открытым программным обеспечением и операционной системой Linux. В качестве основной ОС сейчас использую Ubuntu. Кроме Linux, интересуюсь всем, что связано с информационными технологиями и современной наукой.
46 комментариев
Угу. Зачем мне (русскопишущему) ставить английскую винду?
Локализация не учитывает особенности использования, кроме таких вещей, как валюта, часовой пояс, формат времени, перевод дистрибутивов и т.д.
В бубунте назначить Alt+Shift на раскладку целая эпопея. Вот Валерий и задаётся вопросом, почему нельзя пользователю в установленной из коробки ОС установить комбинацию клавиш для смены клавиатуры? Я его поддерживаю. Это же бред, что каждый раз, я должен вспомнить, как это делается.
p.s. WM’ы все же лучше убогих DE 😉
Очевидно уже даже самым неопытным: Ubuntu — самая кривая система из возможных GNU/Linux, в частности, при стандартном графическом окружении — GNOME. Может, другие сборки более приятные для настройки, но сама система настолько много заставляет обращаться к терминалу после установки, что для новичков (и не только) это самая нерекомендуемая система.
Ребят, кто думает над выбором домашней ОС, — обратите внимание на Manjaro. Будет немного непривычно по сравнению с Debian-системами, но стабильнее и удобнее системы встретить практически невозможно (не зря у нее 1 место на Distrowatch за последний год уже, причём, с огромным отрывом за все периоды этого года).
Про стабильность Manjaro ты явно пошутил или просто еще не сталкивался с сюрпризами ))))
Сталкивался. И всё было связано с моими экспериментами, но не проблемами в системе.
Не согласен. Я в линуксе 18 лет. Перепробовал тьму дистров. Остановился лет 5 назад на Arch. А Manjaro это тот же арч, я его ставлю знакомым в том числе даже домохозяйкам, проблем ни у кого нет, и никто не жаловался!
Интересный опыт.
Напишите статью. 30 дистров это круто. И каждый досканально.
Я не язвлю. Просто три года это реально круто даёт времени покумекать над лучшим дистрибутивом.
36 месяцев / 30 дистров = 1,2 месяца на изучение одного дистра. Круто. Учитываем, что основаны они в основном все на извесных дстрах, то после установки каждого опыта прибавлялось и время на исправление косяков уменьшалось. Определенно интересный опыт.
Антон, ты просто отстаиваешь старые технологии
Для чистой Ubuntu всё достаточно просто, в других дистрибутивах на ее основе, возможны проблемы, которые стандартными средствами не решить. Причем в разных графических окружениях у одного и того же дистрибутива, проблемы свои, индивидуальные.
Самая интересная штучка в переключении раскладки клавиатуры на Ubuntu это включение scroll lock, когда переключаешь на второй источник. Некоторые программы начинают подвисать, срабатывает звуковое и визуальное уведомление, что включен scroll lock, в некоторых играх не работает из за этого клава. Переключение раскладки может привести к катастрофе
На моём слабеньким компе на убунту 18.04 переключение раскладки вызывает катастрофу. Включается scroll lock, тут же появляются оповещения, что scroll lock включен. Некоторые приложения виснут. Комп кипит
Про клавиатуру. Неплохо было бы дополнить эту статью, (или написать отдельную), где рассказать про возможность ПЕРЕНАЗНАЧЕНИЯ КЛАВИШ на клавиатуре.
Для винды есть маленькая програмка для этих целей. Значит можно и в Линуксе переназначать. Только КАК.
Виндовая программа для переназначения клавиш называется MapKeyboard.
Прочитать о ней можно здесь:
https://sonikelf.ru/zamena-lyubyx-knopok-na-klaviature-drugimi-ili-polnoe-otklyuchenie-onyx-mapkeyboard/
Кто знает как ПОДОБНОЕ сделать в Линуксе?
Это кошмар. На 18.10 та же проблема и ничего не изменилось.
почему в гноме шелл такой бак когда при установке указываешь русский язык то пр переключении на английскую раскладку буквы тоже русские
Я начинающий юзер поставил ubuntu 18.04 на VirtualBox 6.0.4.
Alt+Shift не работает, вопреки этой статье, хотя выше написано что работает.
в настройках пытаюсь поменять раскладку Super+Пробел на Alt+Shift, но в окне ввода новой раскладки ничего не происходит.
Всегда замечал что ярые линуксоиды ретрограды, п*здаболы и оные крутые чуваки, которые перепробовали больше 30 дистрибутивов. Расхваливающие тот или иной дистрибутив, рассказывающие какой линукс гибкий и классный, не могут ответить на подобный вопрос.
А происходит это следующим образом. Сначала появляется какая-нибудь статья. Потом порядка 10 п*здаболов высерают свое особое экспертное мнение. А когда появляются вопросы ниже их комментов, почему-то гробовая тишина.
Сейчас вышел на эту статью именно из-за этой проблемы. Зачем лишние телодвижения, если везде Alt + Shift?
Половина вопросов по ubuntu в гугле приводят на этот сайт, давно на него подсел. Спасибо авторам за хорошие статьи со скринами. Конечно, иногда попадаешь на неактуальные данные, но это все из-за linux, который меняет что-то в каждом релизе.
Украинская раскладка выдает латинские буквы. В чем может быть проблема?
Помогла перезагрузка компьютера.
Це мабуть баг GNOME, я не впевнений, але перезавантаження GNOME допомагає.
Натисни «Alt+F2» і потім веди «r» потім натисни Enter
Ctrl+Shift не получается в этом ублюдочном редакторе настроек ОС. Как и в Терминале зачем-то отключили привычные Ctrl+C и Ctrl+V. Да я даже к Ctrl+С/V привык. Оставили зачем-то ублюдочный паст средней кнопкой мышы.
Пипец, деградаты, ТБМ.
Прекрасно настроил переключение раскладки на ALT+SHIFT через последнюю команду в статье, чуть ее видоизменив. Без всяких утилит. Вот так:
gsettings set org.gnome.desktop.input-sources xkb-options «[‘grp:alt_shift_toggle’]»
Консервативные взгляды и как следствие упорное нежелание разрабов идти на поводу пожеланиям «юзеров». Переключение раскладки это только первый шаг к столкновению с проблемами с ОС.
Прошло 10 лет но абхазская раскладка клавиатуры в линукс так и не появилась.
мало того статьи по создании собственной на сайте убунту ру исчезли и вместо них 404
.
$ sudo dpkg-reconfigure keyboard-configuration
И на одном из экранов есть настройка любых вариантов переключения, хоть с ctrl, хоть с alt.
Я использую два языка:
— Английский
— Русский
Я использую три раскладки:
— Английская (США)
— Русская
— Русская (машинописная)
Что нужно сделать, чтобы решить проблему: подключаем репозиторий:
sudo add-apt-repository ppa:nrbrtx/xorg-hotkeys
и обновляем пакеты:
sudo apt-get update
sudo apt-get dist-upgrade
Отсюда: https://maxidrom.net/archives/1564
У меня этот метод сработал Убунту 20.10
ой, нет, в файерфоксе теряет фокус, зараза, но в скайпе вроде перестал терять
Поэтому совершенно непонятно, почему все абсолютно дистрибутивы Линуха приходят БЕЗ этой фичи, более того, у них подключена какая-то обрезанная клавиатура без цифрового блока клавиш вообще. И как эту юникс-фичу включить, непонятно вообще. В довершение всех бед, оказывается что в «терминалах» один драйвер клавиатуры, в то время как в «Х-терминалах» совсем другой. Они игнорируют тот очевидный факт что терминал в реальности запущен ПОВЕРХ Х-терминала и, следовательно, пользует клавиатуру Х-терминала! Это очевидная бага.