LINUX.ORG.RU

Easy Switcher - переключатель раскладки клавиатуры

 ,


1

7

Лет 10 у меня на компе жил и работал gxneur. Еще на Ubuntu 20.04 он кое-как работал в ручном режиме, но после недавнего перехода на 22.04 (да, затянул), завести мне его уже не удалось. Пару недель я страдал без переключателя, и в итоге решил написать свой, вот, решил поделиться:

Скачать: https://sourceforge.net/projects/easy-switcher/files/

Реализованы следующие функции:

  • переключение раскладки клавиатуры с корректировкой уже введенного текста.

  • 2 режима корректировки:

      - при нажатии Break корректируется последнее введенное слово.
      - при нажатии Shift + Break корректируется последняя введенная фраза.
    
  • режим настройки.

  • режим отладки.

Программа устанавливается как демон и управляется systemctl. В отличие от xneur, работает не через xkb, а читает устройство ввода с ядра, и поэтому не зависит от графического сервера и рабочего окружения. В теории должна работать на любых ОС с ядром linux, и не будет глючить с выходом обновлений ОС и ДЕ. (время покажет, пока это предположение)

Как работает? Программа ловит нажатия клавиш, а при нажатии Break стирает написанное, меняет раскладку, и пишет заново. Смена раскладки происходит эмуляцией нажатия клавиши, которую нужно прописать в конфиге. Если для смены раскладки вы используете комбинацию клавиш, то нужно в настройках ОС добавить дополнительную клавишу смены раскладки (в kde это можно сделать нативно, а в gnome - например с помощью gnome tweak tool). В моей системе для смены раскладки используется клавиша Win.

Проверялось на Ubuntu 22.04, релиз будем считать альфа, возможны баги.

Устанавливаем пакет, затем:

easy-switcher --configure
easy-switcher --install
systemctl enable easy-switcher
systemctl start easy-switcher

ЗЫ: конфиг лежит здесь: /etc/easy-switcher/default.conf. Пояснения имеются. (первоначально лучше заполнить его с помощью команды easy-switcher –configure)



Последнее исправление: freemind (всего исправлений: 1)
Ответ на: комментарий от debugger

Похоже, публика или забыла, или просто не знает о «программе из одной строчки ни Perl» (sic). Если бы я захотел повторить успех того треда, то этот переключатель клавиатуры был бы идеальным кандидатом на роль обучающей программы.

debugger ★★★★★
()
Последнее исправление: debugger (всего исправлений: 1)
Ответ на: комментарий от debugger

«Молодой человек, мы, гуские, не обманываем друг друга»(с) Исходников Punto тоже никто не видел, однако пользуются. Особо осторожные могут запустить демона под пользователем с ограниченными правами, обложить его брандмауэрами и т.д.

freemind
() автор топика
Ответ на: комментарий от biglpfan

Хочу Яндексу их предложить, делать Punto для Linux, жду ответа.

Есть идеи как реализовать автоматическое переключение на основе библиотеки hunspell и внутренних словарей, допилить gui в трей и т.д. Для себя этого делать не буду, ибо не надо, но в свете происходящих событий трудоустройство в Яндексе было бы кстати.

Амбициозно, может вызвать улыбку, но говорю как есть, выложил все карты)))

freemind
() автор топика
Ответ на: комментарий от freemind

разговор не туда ушел)

кто-нить попробовал? поделитесь впечатлениями.

особенно интересно не Ubuntu и не gnome как работает.

rpm пакета не делал, для rpm дистрибутивов можно скачать tar.gz извлечь исполняемый файл и выполнить команды из шапки, должно завестись.

freemind
() автор топика
Ответ на: комментарий от freemind

Исходников Punto тоже никто не видел, однако пользуются.

Ты форумом ошибся. С пунто свинчером — на винфак.

Особо осторожные могут запустить демона под пользователем с ограниченными правами, обложить его брандмауэрами и т.д.

Ты сам-то пробовал свой бинарик из-под пользователя с ограниченными правами запускать? И как, работает? Намекаю: «читать устройство ввода с ядра» простым смертным не дано.

Просто острожные (читай: нормальные) пользователи просто не будут запускать твою поделку. Особо осторожные даже не будут скачивать. Скачать бинарик от хз кого и запустить с рутовыми правами в своей системе может только отчаянно рисковый. Причём ради чего? Клавиатурных переключалок на линуксе достаточно, от наколенных поделок до вполне приличных, причём с открытым исходным кодом.

debugger ★★★★★
()
Ответ на: комментарий от DumLemming

Хотя бы поэтому: https://www.howtogeek.com/218764/warning-don%E2%80%99t-download-software-from-sourceforge-if-you-can-help-it/

Да, было давно и были наказаны, но осадочек остался.

Помню массовые переезды проектов с SF на GitHub (тогда ещё не под эгидой M$) и другие хостинги.

dataman ★★★★★
()
Ответ на: комментарий от debugger

создать бесправного пользователя easy-switcher, дать право на чтение dev/input/eventxx, на запись dev/uinput, на чтение/запись etc/easy-switcher/default.conf, раскомментировать строку «#User=easy-switcher» в /lib/systemd/system/easy-switcher.service и вперед

freemind
() автор топика
Ответ на: комментарий от dataman

Я программистом был 20 лет назад, тогда в моде был Delphi 7 и писать приходилось под винду. Паскаль знаю в деталях, что позволяет сосредоточиться только на алгоритмах, а не на синтаксисе. Средство разработки - лишь инструмент, не вижу в этом проблем, производительность с++ тут не нужна, библиотеки для работы с линукс в fpc есть.

Многие писали, что для линукса нельзя сделать нормально работающий переключатель, у меня похоже получилось, по крайней мере обратного никто пока не написал. Исходников нет? При желании, одну строчку «ни Perl» никогда не найдете. С уважением отношусь к open source движению, но пока исходники не выкладываю, почему - объяснил ранее.

Да вообще, че я тут оправдываюсь? Никому ничего не навязываю, денег не требую, не нужен переключатель - идите мимо.

freemind
() автор топика
Ответ на: комментарий от freemind

Средство разработки - лишь инструмент, не вижу в этом проблем

Целиком и полностью поддерживаю! (если компилируется в нативный код 🙂).

Пожалуйста, не ищите негатив там, где его нет и не было. Я и сам в прошлом паскалист. :)

dataman ★★★★★
()
Последнее исправление: dataman (всего исправлений: 1)
Ответ на: комментарий от athost

А можешь выложить конфигурацию systemd-сервиса от него?

Как-то странно что он на network.target завязан (судя по бинарнику).

Ja-Ja-Hey-Ho ★★★★★
()
Последнее исправление: Ja-Ja-Hey-Ho (всего исправлений: 1)
Ответ на: комментарий от mord0d

Вот плоды продвижения отдельными личностями фразочки «Linux - это ядро». Теперь можно заявлять, что вот эта вот поделка работает на «многих операционных системах с ядром Linux». Целое семейство! 🤡

token_polyak ★★★★★
()
Последнее исправление: token_polyak (всего исправлений: 1)
Ответ на: комментарий от Ja-Ja-Hey-Ho

Да, так и есть.

$ systemctl cat easy-switcher.service     
                                                        
# /usr/lib/systemd/system/easy-switcher.service
[Unit]
Description=Easy Switcher - keyboard layout switcher
After=network.target

[Service]
Type=simple
ExecStart=/usr/bin/easy-switcher -r
#User=easy-switcher
Restart=always
RestartSec=3
StartLimitBurst=10

[Install]
WantedBy=multi-user.target
athost ★★★★★
()
Последнее исправление: athost (всего исправлений: 1)
Ответ на: комментарий от athost

принято, поменял на

After=syslog.target

пересоберу и залью в ближайшее время. по сути это порядок загрузки, доступ в сеть он не дает. Сеть не нужна, будем стартовать после syslog

freemind
() автор топика
Ответ на: комментарий от freemind

…создать бесправного пользователя easy-switcher, дать право на чтение dev/input/eventxx, на запись dev/uinput…

Создать бесправного пользователя, а потом дать ему права… Да ты шутник, однако.

debugger ★★★★★
()

Смена раскладки происходит эмуляцией нажатия клавиши

KDE, переключение CapsLock + световой индикатор на клаве.
А можно сделать так, чтобы вместе со сменой раскладки и лампочка на клаве тоже переключалась?

athost ★★★★★
()
Ответ на: комментарий от athost

Если по нажатию caps у вас что-то происходит с индикатором, то оно будет происходить. Вопрос в том, как это у вас реализовано.

Выяснилось, что ES не работает нормально с ремапперами клавиатуры, такими как keyd, т.к. использует те же методы доступа к вводуб что и они. То есть если запустить одновременно, то эти программы начинают по кругу несколько раз друг через друга пропускать ввод, и получается каша. Поэтому придется выбрать что-то одно. Если индикатор у вас включается средствами самой ос, то думаю без проблем.

freemind
() автор топика

Новости такие, с яндексом борода, ответили что проект пунто у них заморожен, развивать не планируют. Поэтому готовлю новый релиз, с небольшими исправлениями. Удалось запустить сабж на FreeBSD c небольшими доработками исходного кода, внесены небольшие изменения в логику конвертации, и так, по мелочи причесал немного.

Проект переедет на гитхаб, исходники тоже будут.

freemind
() автор топика
Ответ на: комментарий от freemind

Ты прости меня, недоумка, но ЯННП, как мне сделать нормально.
Еще раз. КДЕ, в котором включено переключение индикатора на клаве при переключении раскладки.
Индикатор горит – русская
Индикатор не горит – английская

При работе сабжа и переключении раскладки по нажатию клавиши коррекции ввода переключается раскладка, но не индикатор.
Или, хотя бы, изменять ввод, но не изменять раскладку?

athost ★★★★★
()
Последнее исправление: athost (всего исправлений: 1)
Ответ на: комментарий от freemind

Я думаю, что управляет kxkb

$ cat /home/athost/.config/kxkbrc                                                                 
 
[$Version]
update_info=kxkb.upd:remove-empty-lists,kxkb.upd:add-back-resetoptions,kxkb_variants.upd:split-variants

[Layout]
DisplayNames=,
LayoutList=us,ru
Options=terminate:ctrl_alt_bksp,grp_led:scroll,grp:caps_toggle
ResetOldOptions=true
SwitchMode=WinClass
Use=true
VariantList=,
athost ★★★★★
()
Ответ на: комментарий от athost

Не могу сказать, не знаю. Программа создает виртуальную клавиатуру, и шлет нажатия клавиш. Все, что нажимается, можно отследить в режиме отладки (запустить с параметром -d, демона перед этим остановить). Возможно индикатор не переключается из-за того что ввод приходит с виртуальной клавиатуры, а не с физической.

freemind
() автор топика
3 сентября 2023 г.

Easy Switcher v0.2

Что нового?

  • Проект переехал на GitHub, опубликованы исходники: https://github.com/freemind001/easy-switcher
  • Доработан алгоритм конвертации
  • Добавлена возможность использования системных комбинаций клавиш смены раскладки. (Теперь нет необходимости добавлять дополнительную клавишу смены раскладки, можно использовать системную).
  • Добавлена возможность запуска в режиме «настоящего» демона (old-style daemon для ОС без systemctl).
  • Мелкие доработки и исправления.

Скачать релиз: https://github.com/freemind001/easy-switcher/releases/tag/0.2

freemind
() автор топика
Последнее исправление: freemind (всего исправлений: 1)
5 июня 2024 г.
Ответ на: комментарий от DumLemming

Вы явно мало с кем общаетесь. очень полезная вещь, когда переписываешься с кучей народа. Когда клиент или менеджер ждёт от тебя фидбэк - и ты просто забыл переключить раскладку после того как написал пример команды. Или ты пишешь доку, постоянно переключаешься между одним и другим языком, делаешь описание, и тут бац - а весь абзац - белиберда.

anonymous
()