gxkb - индикатор и переключатель раскладки клавиатуры для X11

Автор ZEN, 21 марта 2013, 17:41:25

« назад - далее »

0 Пользователи и 1 гость просматривают эту тему.

ZEN

Прежде, чем дать описания проекта, отвечу на вопрос "зачем?". Я давно задавался целью написания утилиты для раскладки клавиатуры, которая умеет привязывать раскладку к приложению в разных WM/DE. Пробовал xxkb и fbxkb, но они обладают лишь привязкой раскладки к окнам. Приведу пример, когда привязка к окнам не удобна: запускаем pidgin/gajim/qutim/psi, открываем контакт лист, переключаем с по-умолчанию английской раскладки на русскую, "сворачиваем" программу в трей, вызываем программу из трея и... видим английскую раскладку, тогда как с привязкой раскладки к приложению будет русская. Таких примеров можно привести много, но лучше я расскажу дальше о программе.

Программа написана на языке Си и использует только библиотеки GTK (GNOME не требуется).


Программа основана на исходном коде проекта xfce4-xkb-plugin и наследует его функции:
  • Привязка раскладки клавиатуры глобально, к окнам или к приложению
  • Раскладка по-умолчанию (пример ситуации, когда хочется что бы на русской раскладке загорался scrollock светодиод и она же была раскладкой по-умолчанию для новых окон)
  • При количестве раскладок больше двух по клику левой кнопкой мыши отображается список доступных раскладок, иначе выполняется попытка переключиться на следующую раскладку
  • Так же, при прокрутке колесом мыши раскладка переключается вперед или назад в зависимости от направления.
  • Программа доступна по лицензии GPL2
Краткая инструкция по установке:

Цитата: /bin/bash1. Устанавливаем нужные для сборки из исходников пакеты:
sudo apt-get install libwnck-dev libxklavier-dev libgtk2.0-dev

2. Загружаем архив gxkb с исходным кодом, распаковываем и переходим в каталог с исходниками
wget http://www.linuxhub.ru/download/gxkb-0.4.tar.gz
tar xvfz gxkb-0.4.tar.gz
cd gxkb-0.4

так же, возможно скачать архив с sf.net

3. Собираем и устанавливаем из исходников
./configure && make && sudo make install

Настройка программы:

При первом запуске программы будут использоваться настройки по-умолчанию, а именно привязка раскладки к приложению, две раскладки US/RU которые переключаются по Alt+Shift, а так же включение светодиода scrollock на русской раскладке. При выходе из программы настройки будут сохранены в файле ~/.config/gxkb.cfg, который теперь можно отредактировать обычным текстовым редактором. Ниже пример файла настроек по-умолчанию:

Цитата: /bin/bash[xkb config]
group_policy=2
default_group=0
never_modify_config=false
model=pc105
layouts=us,ru
variants=,
toggle_option=grp:alt_shift_toggle,grp_led:scroll,terminate:ctrl_alt_bksp
compose_key_position=

group_policy - параметр отвечающий за привязку раскладки. Может принимать значения: 0 - глобальная раскладка, 1 - привязка раскладки к окнам, 2 - привязка раскладки к приложениям

default_group - раскладка по умолчанию для новых окон. Отсчет начинается с нуля, потому 1 раскладка будет нулевой, 2-я первой и т.д.

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

model - модель клавиатуры

layouts - раскладки клавиатуры

variants - варианты раскладок

toggle_option - параметры переключения раскладок

compose_key_position - назначение клавиши Compose

Известные проблемы:

Вопрос: gnome2/gnome3,unity,e17, (возможно и kde3/kde4) - не корректно меняется раскладка при переключении окон
Ответ: нужно в настройках DE найти управление раскладками системы и отключить функции наследования раскладки от прошлого окна и функцию разделение раскладки по окнам

Вопрос: gnome3,unity - не отображается значок раскладки в трее
Ответ: в связи с разными версиями gnome 3 как точно вернуть значок в трей подскажет гугл, но можно поступить иначе, программа на самом деле запущена и выполняет свои функции, для визуального отображения можно пользоваться стандартным индикатором раскладки gnome3 или unity. Главное не забыть про отключение разделения раскладки по окнам в индикаторе gnome3/unity.
Crimea is Ukraine

kobzar

НУ что я могу сказать, вещь канечно нужная, но простите
при установке либ я был поражен кол-вом зависимостей

НОВЫЕ пакеты, которые будут установлены:
  autopoint debhelper gettext gir1.2-xkl-1.0 html2text intltool-debian libatk1.0-dev libcairo-script-interpreter2 libcairo2-dev libelf1 libexpat1-dev
  libfontconfig1-dev libfreetype6-dev libgdk-pixbuf2.0-dev libgettextpo0 libglib2.0-bin libglib2.0-dev libgtk2.0-dev libice-dev libmail-sendmail-perl
  libpango1.0-dev libpcre3-dev libpcrecpp0 libpixman-1-dev libpng12-dev libpthread-stubs0 libpthread-stubs0-dev libsm-dev
  libstartup-notification0-dev libsys-hostname-long-perl libunistring0 libwnck-dev libx11-dev libx11-doc libxau-dev libxcb-render0-dev
  libxcb-shm0-dev libxcb1-dev libxcomposite-dev libxcursor-dev libxdamage-dev libxdmcp-dev libxext-dev libxfixes-dev libxft-dev libxi-dev
  libxinerama-dev libxklavier-dev libxklavier16 libxml2-dev libxml2-utils libxrandr-dev libxrender-dev libxres-dev pkg-config po-debconf
  x11proto-composite-dev x11proto-core-dev x11proto-damage-dev x11proto-fixes-dev x11proto-input-dev x11proto-kb-dev x11proto-randr-dev
  x11proto-render-dev x11proto-resource-dev x11proto-xext-dev x11proto-xinerama-dev xorg-sgml-doctools xtrans-dev zlib1g-dev


А утилиты данного рода прежде всего должны быть маленькими. Так что от тестирования отказался. Хотя очень вкусняшко :)
Если перепишите под стандартные какито либы - что бы не ставить 50 пакетов, думаю процесс пойдет.
Ты дорого мой друг, заплатишь за ошибку,..
Когда оскал мой милый, ты приймешь за улыбку.

ZEN

#2
это зависимости, если собирать из исходников. Могу предложить бинарный пакет для Debian Wheezy x86:
https://sourceforge.net/projects/gxkb/files/gxkb_0.4-1_i386.deb/download
37.7 kB

и бинарный пакет для Debian Wheezy x86_64:
https://sourceforge.net/projects/gxkb/files/gxkb_0.4-1_amd64.deb/download
37.3 kB
Crimea is Ukraine

kobzar

Ну так другое ж дело, еще для х64 дайте и я в команде тестеров!
Ты дорого мой друг, заплатишь за ошибку,..
Когда оскал мой милый, ты приймешь за улыбку.

ZEN

#4
Обновил пакет до версии 0.4, исправил два бага связанных с поиском флага раскладки.
К слову, один баг совместим с xfce4-xkb-plugin. Например, если на лету сменить раскладку вот так с проблеами
setxkbmap "us, ru"
setxkbmap "us, ru "
то русская раскладка будет, а флаг отображаться нет.

Ссылки на deb-пакеты в предыдущем сообщении.
Crimea is Ukraine

kobzar

 то что нужно. пока нареканий нет.
но нужно добавить --help  или ман. потому что бегать на сайт смотреть опции не есть тру метод.

Инструкция для Новичков:
Качаем файл под свою архитектуру, открываем терминал, переходим в папку куда вы скачали файлик и :
sudo dpkg -i filename.deb
sudo apt-get install -f
gxkb &

Профит.
Ты дорого мой друг, заплатишь за ошибку,..
Когда оскал мой милый, ты приймешь за улыбку.

ZEN

kobzar, в будущем добавлю man, а до тех пор за эталон опций можно взять man xkeyboard-config. Ну или иначе сделать, запустить программу. Через setxkbmap установить параметры раскладки (программа автоматом подхватит измененные настройки) и при выходе из gxkb в конфиг буду записаны настройки выставленные через setkbmap. Даже не придется открывать в редакторе файл настроек.

Да, кстати, в версии 0,5 добавлена поддержка старых библиотек libxklavier. Делал совместимость ради поддержки CentOS, а вместе с тем код компилится и работает даже на Debian Lenny
Crimea is Ukraine

kobzar

Ты дорого мой друг, заплатишь за ошибку,..
Когда оскал мой милый, ты приймешь за улыбку.

Malaheenee

Еще пожелание: возможность задавать путь к пользователським флагам. А то если заменять в /usr/share - при любом обновлении пакета все щатрется.
Все мы где-то, когда-то и в чем-то были новичками.

ZEN

#9
Цитата: kobzar от 02 апреля 2013, 22:48:10
ништяк. дописывай гуи с галками и в репы...
гуи  влом делать, так как хватает команды setxkbmap "us,ua" , что бы gxkb на лету установил нужные раскладки и по завершению работы запомнил их в конфиге. А что касается реп, так уже...
https://packages.debian.org/search?suite=all&searchon=names&keywords=gxkb

Цитата: Malaheenee от 21 июля 2014, 14:17:10
Еще пожелание: возможность задавать путь к пользовательским флагам. А то если заменять в /usr/share - при любом обновлении пакета все затрется.
Залил изменения в trunk, но вместе с тем изменилась локация конфига с ~/.config/gxkb.cfg на ~/.config/gxkb/gxkb.cfg
Каталог с дефолтным конфигом создастся автоматически при первом запуске. Так что, можно будет завершить программу и выполнить mv ~/.config/gxkb.cfg ~/.config/gxkb/gxkb.cfg
Системные флаги теперь можно переопределить в каталоге ~/.config/gxkb/flags
deb-пакетов нет, так как это не релиз. Но есть  вариант, что в скором времени будет собран пакет в ppa. (Выполнено, версия пакета     0.6-0~17)
Crimea is Ukraine

Malaheenee

Вот спасибо!  ;) Ничего, запостим баг-реквест на новую версию. Мэйнтейнер вроде акдекватный.
Все мы где-то, когда-то и в чем-то были новичками.

ZEN

Цитата: Malaheenee от 03 августа 2014, 13:09:00Мэйнтейнер вроде акдекватный.
это да, мы как-то обменивались патчами и слова друг другу не сказали   :D
Crimea is Ukraine

ferum

ZEN, Скажи пожалуйста будет ли работать эта штука с razor или FLWM ? Отсутствие индикатора раскладки в них один из главных недостатков.
Русские дебианщики против цифрового слабоумия !

ZEN

Crimea is Ukraine

ZEN

Релиз gxkb 0.7.0


Что нового:


  • Добавлена поддержка appindicator
  • Добавлена возможность автоматического переключения на классический трей, если appindicator не возможно создать
  • Изменен путь к файлу настроек (~/.config/gxkb/gxkb.cfg). Если у вас не стандартный конфиг, то перед запуском программы стоит выполнить следующие команды в терминале
       
    Цитата: /bin/bashmkdir -p ~/.config/gxkb/ && mv ~/.config/gxkb.cfg ~/.config/gxkb/gxkb.cfg
  • Появилась возможность использовать собственные изображения флагов. Для этого нужно создать каталог ~/.config/gxkb/flags и поместить в него png файл с именем раскладки
       
    Цитата: /bin/bashmkdir -p ~/.config/gxkb/flags
  • Исправлено переключение раскладки при использовании скрола. Ранее, раскладка переключалась противоположно порядку раскладок в меню
  • Сохранена возможность собирать gxkb без поддержки appindicator
       
    Цитата: /bin/bash./configure --enable-appindicator=no && make && sudo make install
  • Проведен рефакторинг кода
Установка:

Исходники доступны на sourceforge.net (там же есть пакет для Debian wheezy x86)
Для Ubuntu Precise и Ubuntu Trusty существует ppa - ppa:zen-root/gxkb-daily-ppa

Известные проблемы:


  • В ubuntu при включенном appindicator возможно проблемы, если штатный переключатель раскладки (indicator-keyboard) использует ту же комбинацию клавиш. В качестве решения проблемы можно изменить раскладку для штатного индикатора на никогда не используемую комбинацию. Или удалить пакет indicator-keyboard, но тот в свою очередь по зависимостям удалит центр настроек Unity (будет установлен gnome-control-center).
  • В Elementary OS Freya gxkb не работает, на данный момент ищу причины почему.
  • Не корректно меняется раскладка при переключении окон - такой "баг" возможен при использовании несколько индикаторов раскладки. В Gnome/Unity решается отключением функции наследования раскладки от прошлого окна и отключении функции разделения раскладки по окнам в штатном индикаторе раскладки.
P.S.
жду отзывов и сообщений об ошибках :)
Crimea is Ukraine