LINUX.ORG.RU

Вышел LoLo Switcher v.0.25

 , , ,


0

2

LoLo Switcher - низкоуровневый локальный переключатель клавиатуры для оконной системы X11. Работает в любых окружениях рабочего стола: KDE3, KDE4, GNOME, LXDE и прочих.

LoLo Switcher запускается как процесс на низком системном уровне и получает данные от клавиатуры напрямую из файла устройства. Обнаружив нужную последовательность кодов, LLS вызывает функции X11, отвечающие за переключение раскладки. Переключатель очень компактен и быстр, поддерживает любые модели клавиатур и джойстиков, реагирует на любые события устройства ввода, включая отпускание клавиш. Способен прозрачно работать параллельно с другими переключателями клавиатуры.

Гибкость срабатывания переключения языка обусловлена использованием регулярных выражений. Одно выражение фильтрует поток событий, второе вычленяет в потоке набор событий, при котором должно произойти переключение. Доступно как циклическое переключение языка, так и прямое. Автор использует LLS для переключения языков с помощью левого и правого SHIFT-а.

Сегодня стал доступен новый стабильный релиз LoLo Switcher v.0.25. Переключатель созрел для использования как на на 32-битных Linux-платформах, так и на платформах x86_64.

Для ознакомления с возможностями программы, на YouTube размещена видеодемонстрация работы.

Также доступно руководство по настройке.

>>> Официальная страница LoLo Switcher



Проверено: Aceler ()
Последнее исправление: Deleted (всего исправлений: 4)
Ответ на: комментарий от Deleted

> Сначала удали ~/.config/loloswitcher/, потом запусти, чтобы вызвался неэкранированный popen(«chown $USER ...») под рутом. Функция Config::createStandartConfig() если что.

А, вона как. Да, подзабыл что у меня popen не только в Main.cpp есть. Надо исправить.


Если уж пишеь suid-программу, так озаботься о безопасности. А у тебя переполнение буфера на переполнении буфера и неэкранированным popen-ом погоняет.


Что имеешь в виду под переполнением буфера? Что если строка длиннее 255 символов, то строковые функции вылезут за границу не найдя нуля, или что-то другое?


Зачем там вообще пайп? Ты про chown(2) не в курсе что-ли?


В курсе, но непонятно, работает ли оно с директориями. В мане написано:

ОПИСАНИЕ Изменяет владельца для файла, задаваемого параметрами path или fd. Только суперпользователь может изменять владельца файла. Владелец файла может изменять группу файла на любую группу, к которой он принадлежит. Суперпользователь может произвольно изменять группу.


Про каталоги - ни слова. В SEE ALSO тоже ничего. А мне нужно менять права как у файла, так и у каталога. Я вначале озаботился сменой прав у каталога - его гарантированно можно сделать через bash-команду chown, что я и делаю через popen. Для файла аналогично.

Да, я знаю что директория - в нектором смысле это файл, но кто его знает как срабатывает функция chown() на директории, если в официальной докумнтации это не оговаривается вообще.

То есть, если я узнаю как правильно в C/C++ сменить владельца на каталоге, я избавлюсь от popen в классе Config.

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

Пробел случайно затесался при копипасте.

И да SwitchMethod установлен в 0.

Но данное выраженние:

Sequence0=(?<!1,29,1;|1,29,2;|1,97,1;|1,97,2;|1,56,1;|1,56,2;|1,100,1;|1,100,2;)((1,29,1;(1,29,2;)*1,42,1;(1,42,2;)*1,42,0;(1,29,2;)*1,29,0;)|(1,29,1;(1,29,2;)*1,42,1;(1,42,2;)*1,29,0;(1,42,2;)*1,42,0;))$
у меня так и не заработало. Симптомы те же, что и прежде.

Система OpenSUSE 11.4 KDE 4.7.2

anonymous
()
Ответ на: комментарий от webhamster

>Про каталоги - ни слова. В SEE ALSO тоже ничего. А мне нужно менять права как у файла, так и у каталога.

Вообще-то, в *nix каталог — частный случай файла (когда-то даже можно было делать cat /any/dir). Это на будущее.

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

> Симптомы те же, что и прежде.

Щас вот себе прописал - все замечательно работает.

Подозреваю, что ты нажимаешь не Ctrl затем быстро Shift, а одновременно. И у тебя иногда получается не Ctrl+Shift, а Shift+Ctrl.

Что делать ты знаешь, логику я тебе рассказал. Я вообще удивился, что у тебя то что я написал заработало, я даже не проверял.

Вечером может посмотрю и скажу правильную строку на все случаи.

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

> Ну ты проверь, меняется ли твой файл девайса /devices/platform/i8042/serio0/input/input5 при перезагрузке.

А проверить, что это за «файл», просто глянув аналогичный у себя, слабо?

om-nom-nimouse ★★
()
Ответ на: комментарий от anonymous

Игнорировать глобальные шорткаты переключения раскладки?

Если это вброс, то мысль ты раскрыл слабовато.

Или таки назначать определённую раскладку определённому окну? Как?

KDE умеет запоминать и восстанавливать раскладки для приложений since 4.7.

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

>Щас вот себе прописал - все замечательно работает.

Переключил кдешную переключалку раскладки с Ctrl+Shift на CapsLock, оставив lolo на Ctrl+Shift, и о чудо! Все заработало: и Ctrl+Shift и CapsLock и даже шорткаты с шифтом!

Терзают смутные сомнения, что лоло не очень дружит с кде4.

Лоло хоть и костыль, но полезный. Менять привычки не хочу, боком выходит на чужих компах. Поэтому надеюсь на допил сего чуда.

anonymous
()
Ответ на: комментарий от svu

чувак возможно не прав (понятие «Difficult » растяжимое):

Difficult to calculate for arbitrary polygons, more if they are curved (like if the key has the shape of a U, a moon, an irregular star...) --alvarezp ( http://www.freedesktop.org/wiki/Software/XKeyboardConfig/XKB2Dreams )

все это делается элементарно: берем интересующую нас точку за центр и проходим по всем точкам U-кривой, складывая (со знаком) углы поворота радиус-вектора; если получен 0, то точка снаружи, если +2п или -2п, то внутри

проблемы будут только если кривая самоперескающаяся, но тут автор кривой уже ССЗБ

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

>а переключением непосредственным занимается он, и настраивается, через setxkbmap…

А ты найди по нему нормальный хауту. Да причем тот который не 10 летней давности. Я от хочу чтоб по левому ALT+SHIFT включался ВСЕГДА английски, а по правому Русский. Как это сделать?

И учти у меня нет времени рыть весь интернет если нет шансов в конечное время найти результат. Мне еще работать.

demmsnt
()
Ответ на: комментарий от webhamster

А, вона как. Да, подзабыл что у меня popen не только в Main.cpp есть. Надо исправить.

не надо линукс превращать в windows убунту

suid не нужен; нужно либо ругнуться на недоступность файла на чтение, либо вообще рассчитывать, что твою прогу запустят сразу от рута с указанием работать для всех или некоторых юзеров (что, видимо, предпочтительнее, чем делать устройство клавиатуры доступным на чтение юзеру)

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

хотя, возможно, вполне нормальным будет все же дать устройство клавиатуры доступным на чтение юзеру

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

Sequence0=(?<!1,29,1;|1,29,2;|1,97,1;|1,97,2;|1,56,1;|1,56,2;|1,100,1;|1,100,2;)((1,29,1;(1,29,2;)*1,42,1;(1,42,2;)*1,42,0;(1,29,2;)*1,29,0;)|(1,29,1;(1,29,2;)*1,42,1;(1,42,2;)*1,29,0;(1,42,2;)*1,42,0;))$

у меня так и не заработало. Симптомы те же, что и прежде.

Система OpenSUSE 11.4 KDE 4.7.2

Вот правильная строка для переключения Ctrl+Shift в LoLo Switcher.

Работает при отпускании клавиш. Реагирует как на Ctrl+Shift, так и на Shift+Ctrl, с любым отпусканием - хоть Ctrl вначале отпускай, хоть Shift.

Sequence0=(?<!1,29,1;|1,29,2;|1,97,1;|1,97,2;|1,56,1;|1,56,2;|1,100,1;|1,100,2;)(1,29,1;(1,29,2;)*1,42,1;(1,42,2;)*|1,42,1;(1,42,2;)*1,29,1;(1,29,2;)*)(1,42,0;(1,29,2;)*1,29,0;|1,29,0;(1,42,2;)*1,42,0;)$

Не забудь отключить системную переключалку, если она на Ctrl+Shift повешена, или перевесь ее, а то будет чехорда.

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

> Терзают смутные сомнения, что лоло не очень дружит с кде4.

Дружит. Я именно в KDE4 и работаю.

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

Чем оно лучше xxkb?

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

> И учти у меня нет времени рыть весь интернет если нет шансов в конечное время найти результат. Мне еще работать.

10$

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

А ты готов? 320 Р. Смотри я ЗП получу и тебе счет предъявлю. Статья внятно и доходчиво объясняющая как сделать то, что я хочу.

demmsnt
()
Ответ на: комментарий от webhamster

Спасибо, за регвыр. Оно действительно работает.
Основной косяк у меня оказался как раз в конфликте кдешной переключалке и LLS. Обе были настроены на одну комбинацию.

Только я не совсем понял как соотносятся

При запуске LoLo Switcher нет необходимости отключать системный переключатель раскладки. LLS способен работать параллельно с другими переключателями.

и

Не забудь отключить системную переключалку, если она на Ctrl+Shift повешена, или перевесь ее, а то будет чехорда.


Последнее думаю стоит упомянуть в руководстве по настройке и ридми.

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

Так и соотносится, что если две переключалки будут настроены на одну и ту же комбинацию, то они друг другу будут мешать, это же естественно.

А на разные комбинации - работают в параллель вместе и не жужжат.

webhamster
() автор топика
Ответ на: kbdd же от qnikst

> зачем это нужно если есть kbdd [1]?

Угу, его использую и не пойму, зачем нужен сабж.

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

В 10.10 не работает.

Хм, мож тогда вру. Искать тот баг иксов лень, а в нем инфа про убунту ЕМНИП и была.

Pavval ★★★★★
()

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

Ну а мой вариант тут - Включение раскладок двумя шифтами и клёвый демон triggerhappy (thd) С использованием удобного демона вместо xbindkeys.

UnSavant
()
Ответ на: комментарий от demmsnt

так давай-ка уточним. Я предложил тебе «погуглить за тебя» т.к. у тебя мало времени ведь ты работаешь и предложил тебе оплатить мою работу (10$). Я готов найти/сделать мануал (сверившись с тем, что конкретно надо), т.к. реальная задача может отличаться от высказанного в комментарии. Тогда при чём тут «тебе счёт предъявлю»? Если ты хочешь найти/сделать мануал за 10$, то в принципе это тоже не проблема.

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

Соглашайся, пусть он сделает эту работу за 10$. Может, у него хобби такое - парить себе мозг, и тратить время на ковыряния в гуглах и конфигах, повышая энтропию вселенной.

Одно условие - мануал должен однозначно решать проблему без оговорок «поставь себе генту», «у тебя libc не той версии», «и ядро не той системы».

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

>Sequence0=(?<!1,29,1;|1,29,2;|1,97,1;|1,97,2;|1,56,1;|1,56,2;|1,100,1;|1,100,2;)(1,29,1;(1,29,2;)*1,42,1;(1,42,2;)*|1,42,1;(1,42,2;)*1,29,1;(1,29,2;)*)(1,42,0;(1,29,2;)*1,29,0;|1,29,0;(1,42,2;)*1,42,0;)$

Вспоминаются конфиги шлимыла

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

> Это жесть вобще, не хочу настраивать переключалку раскладок ТАК. :)

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

Еслиб вместо кодировки вида 1,23,456;7,8,9; использовалось что-то вроде 1.23.456|7.8.9| - вот это был бы еще и бэк-слеш-ад.

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

У вас «болезнь зубочисток», свойственная новичкам в регулярках.

om-nom-nimouse ★★
()
Ответ на: комментарий от alt0v14

> Это жесть вобще, не хочу настраивать переключалку раскладок ТАК. :)

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

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

Морду нужно делать и транслятор для хомячков, чтобы они получили диалог вида: нажми желаемую кнопочку, а я те её транслирую в эти регвыры и впишу куда там надо.

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

Надо хотя бы текстовые сокращения. На стандартные действия - «Shift нажат», «Caps Lock отпущен» и прочие. Без этого чтение конфигов через неделю после настройки превратится в чемпионат по BrainFuck'у.

om-nom-nimouse ★★
()
Ответ на: комментарий от wbrer

> Морду нужно делать и транслятор для хомячков, чтобы они получили диалог вида: нажми желаемую кнопочку, а я те её транслирую в эти регвыры и впишу куда там надо.

Морду - это уж слишком. А вот опцию --debug или что-то в этом роде неплохо было бы. Вот в демоне triggerhappy, например, есть --dump, он нажатия транслирует в стандартный вывод как раз в формате своего конфига.

В actkbd вроде то же самое.

UnSavant
()
Ответ на: комментарий от demmsnt

А что вам нужно конкретно? Проще тему на форуме создать :)

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

А вот опцию --debug или что-то в этом роде неплохо было бы. Вот в демоне triggerhappy, например, есть --dump, он нажатия транслирует в стандартный вывод как раз в формате своего конфига.

$ loloswitcher -h

Usage:
Without parameter - run standart LoLo Switcher as service
-h or --help - show this help
-t1 - run event code test
-t2 - run language layout test
-t3 - run read config test

Опция -t1 покажет коды как раз в формате конфига в реальном времени при нажатиях клавиш.

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

В порядке предложения. Вот тут http://swtch.com/~rsc/regexp/regexp1.html пишут, что регулярка может весьма долго выполняться. Может быть конечный автомат лучше подойдёт для описания схемы переключателя . Например вот тут http://www.complang.org/ragel/ неплохо написано как это работает.

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

Я не понял в этой статье, они замеряют время срабатывания какой регулярки? Предкомпилированной, или просто строчной? В LoLo Switcher все регулярки компилируются при загрузке из конфига, дальше используются только скомпилированные образы.

Ну и к тому же, на том объеме данных что в LoLo Switcher (меньше 100 ASCII символов в очереди), регулярки срабатывают очень быстро. Это не то что парсить страницу UTF-8 текста в ~50Кб. Тут все гораздо прощще, и потому нет никакого смысла заниматься предварительной оптимизацией.

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

>Я надеюсь, он ещё и умеет срабатывать по отпусканию клавиш, а не по нажатию, а то некоторые несознательные личности понастроили себе всяких странных сочетаний клавиш :)

как регулярку настроишь так работать и будет

более простого + гибкого инструмента я не встречал

липкий бит универсальное решение, кто хочет (секьюрности) тот пускай сам политики доступа придумывает

anonymous
()

Как быть если нужно 3 языка и больше? Контролы/Альты тоже в ход идут?

Alexoy
()

Я твой xkb альтшыфт нажал!!1

Deleted
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.