Собираем
информацию
по крупицам
Новости


Новости

Про глобальный перехват клавиш в X11 (XWindow)
09-06-2016
01:41:12

Дожили. На работе запретили прямой доступ в интернет. Теперь просто так пользоваться интернетом нельзя. По корпоративным требованиям, в интернет можно выходить только через терминальный сервер. А денег на терминалку не дали. У нас постоянно так происходит - выпускают безумные требования, а закупку необходимого ПО производят через год. Что делать? Правильно, поднимать терминалку на Линухе.

 

Подолбавшись немного я выяснил, что самый вменяемый на сегодняшный день терминальный сервер - это x2go. Раньше он был проприетарным, теперь стал полность опенсорсным. И в нем почти все работает.

 

Но есть небольшая проблема, которая для меня весьма критична. Эта проблема - переключение языка на клавиатуре. Я не признаю никакого другого способа переключения раскладки, кроме правой и левой клавиши Shift. Нажимаем левый шифт - включается английская раскладка. Нажимаем правый шифт - включается русская раскладка. Причем, переключение должно происходить в момент отжатия клавиши Shift-а, потому что иначе невозможно набрать большие буквы в текущем языке. Кроме того, нажатие-отжатие Shift-ов должно быть чистым, без нажатия в это время других клавиш. Такого переключения не предоставляла ни одна из существующих переключалок клавиатуры.

 

Точнее, единственная переключалка, которая могла это сделать - это XNeur. Но она глючила неимоверно:

 

https://www.linux.org.ru/forum/desktop/6719991?cid=6724540

 

Да и в 2016 году дела обстоят не лучшим образом:

 

https://www.linux.org.ru/forum/desktop/12651168

 

То есть, небыло никакой возможности работать в Linux так, как удобно. Это меня настолько удручало, что я в какой-то момент решился, и написал свой переключатель клавиатуры LoLo Switcher. Я шел к этой программе 12 лет. Она позволяет настроить переключение раскладки на абсолютно любую комбинацию клавиш. Работает с любым физическим устройством - хоть с клавиатурой, хоть с джойстиком. Если нужно, можно подключить и MIDI-клавиатуру, и переключать РУС/ЛАТ по клавишам Ля и Фа. Вот демонстрация работы этой программы на YouTube:

 

Демонстрация переключения раскладки с помощью LoLo Switcher

 

Такие уникальные возможности доступны благодаря тому, что LoLo Switcher напрямую работает с файлом устройства. И эта же особенность приводит к тому, что мой переключатель не может работать в режиме удаленного X-терминала.

 

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

 

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

 

Как в Linux глобально отловить нажания клавиш в X11 (XWindow)

 

Да, этот код отлавливает все клавиатурные события X11. И если он нормально покажет себя в режиме X-терминала, то я наконец-то смогу сделать из LoLo Switcher полноценный переключатель, работающий не на низком уровне, а на уровне X-сервера.

 

И тогда я смогу нормально работать в интернете через линуховый терминальный сервер.

 



Поделиться этой страницей


Статистика


RSS подписка

Подпишитесь на новости сайта по RSS


 WebHamster.Ru
 Домик любопытного хомячка
Яндекс индекс цитирования
Почтовый ящик