Форум
gxkb - индикатор и переключатель раскладки клавиатуры для X11
Прежде, чем дать описания проекта, отвечу на вопрос "зачем?". Я давно задавался целью написания утилиты для раскладки клавиатуры, которая умеет привязывать раскладку к приложению в разных WM/DE. Пробовал xxkb и fbxkb, но они обладают лишь привязкой раскладки к окнам. Приведу пример, когда привязка к окнам не удобна: запускаем pidgin/gajim/qutim/psi, открываем контакт лист, переключаем с по-умолчанию английской раскладки на русскую, "сворачиваем" программу в трей, вызываем программу из трея и... видим английскую раскладку, тогда как с привязкой раскладки к приложению будет английская. Таких примеров можно привести много, но лучше я расскажу дальше о программе.
Программа написана на языке Си и использует только библиотеки GTK (GNOME не требуется).
Программа основана на исходном коде проекта xfce4-xkb-plugin и наследует его функции:
- Привязка раскладки клавиатуры глобально, к окнам или к приложению
- Раскладка по-умолчанию (пример ситуации, когда хочется что бы на русской раскладке загорался scrollock светодиод и она же была раскладкой по-умолчанию для новых окон)
- При количестве раскладок больше двух по клику левой кнопкой мыши отображается список доступных раскладок, иначе выполняется попытка переключиться на следующую раскладку
- Так же, при прокрутке колесом мыши раскладка переключается вперед или назад в зависимости от направления.
- Программа доступна по лицензии GPL2
Краткая инструкция по установке:
/bin/bash:
1. Устанавливаем нужные для сборки из исходников пакеты:
sudo apt-get install libwnck-dev libxklavier-dev2. Загружаем архив gxkb с исходным кодом, распаковываем и переходим в каталог с исходниками
wget http://www.crunchbang.org.ua/download/gxkb-0.3.tar.gz
tar xvfz gxkb-0.3.tar.gz
cd gxkb-0.3
так же, возможно скачать архив с sf.net3. Собираем и устанавливаем из исходников
./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.
ZEN:
Прежде, чем дать описания проекта, отвечу на вопрос "зачем?"
Лично я любое приложение оцениваю по удобству и полезности для себя, а не по критерию "это ещё один велосипед"KO:
"Зачем?" этот вопрос из репертуара ЛОРовсих троллей, хабракабровых аналитигов и других полусумасшедших из типа ИТ блогов.
Делая обзоры fbxkb и QXKB проискал подобные приложения, "живых" оказалось мало...
Сейчас мне малость некогда, но пакетик для Salix 13.37 собрал и проверил, позже на 14.0 проверю и плотнее изучу! Взять пакетик можно ТУТ.
Судя по описанию у меня в Openbox"е она должна прижиться!
Спасибо!
ЗЫ: Все нафигачеры, зачемучеры и прочие подобные будут удалены!
Можете даже не отписывать! Ну или пишите на хлор&хабалюдям!
Если приложение свободное, то это не значит что его могут все свободно обсерать!
Выпустил версию 0.4, устранил пару багов связанных с поиском имени файла флага. Все изменения можно найти на sourceforge.net/p/gxkb, вместе с deb-пакетами для Debian Wheezy x86 и x86_64. А так же, силами сообщества, собран и помещен в AUR пакет для Arch Linux.
Чего то не любит он немецкую раскладку... Записал ей конфиг (~/.config/gxkb.cfg):
[xkb config]
group_policy=2
default_group=0
never_modify_config=false
model=pc105
layouts=de,ru
variants=,
toggle_option=grp:lwin_toggle,grp_led:scroll,terminate:ctrl_alt_bkspА он его при запуске в дефолтный переписывает, сделал его только для чтения, всё путём...
Если чего, это уидено на Xubuntu 12.10, Арче с Опенбоксом и на Слаке с MATE (одинаково везде)
По правому клику:

По левому клику только переключает раскладку...
posixru:
Чего то не любит он немецкую раскладку...
А он его при запуске в дефолтный переписывает, сделал его только для чтения, всё путём...
немецкую раскладку дефолтной делает? Тут вариант параметр
default_group=0
поставить в
default_group=1
тогда по-умолчанию будет российская раскладка и на этой раскладке будет загораться скрол. Логика простая
de,ru,ua
соответственно нумеруются с нуля
0,1,2
ну или поменять
layouts=de,ru
на
layouts=ru,de
но тогда за альтернативную раскладку будет считаться de и при переключении на немецкую будет загораться скролл
ZEN:
немецкую раскладку дефолтной делает? Тут вариант параметр
Не... Скидывается весь конфиг в дефолтный. Сделал его для записи, перезапустил gxkb и в конфиге опять:
/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=Тот что показал выше устраивает, если его сделать только для чтения, нормально работает...
posixru:
Не... Скидывается весь конфиг в дефолтный.
интересное поведение... У меня такое было в случае, если запущена другая программа для управления раскладок. Как правило они ловят одинаково событие, что раскладки сменились и пытаются перечитать конфиг. Я в трее не вижу, но может в процессах висит xxkb?
posixru:
По левому клику только переключает раскладку...
все верно, если раскладок больше двух, будет отображаться меню
ZEN:
если запущена другая программа для управления раскладок
Из ДЕ настройки не используются, да и не стоят они полностью, что из XFCE что из MATE используются/стоят только панельки, поверх Опенбокса, сторонних утилит тоже нет, есть только в автозапуске:
setxkbmap -layout de,ru -variant -option grp:lwin_toggle,grp_led:scroll,terminate:ctrl_alt_bksp &Ну с этим ясно, почему то так и подумал, но проверить вот не догадался...ZEN:
все верно, если раскладок больше двух, будет отображаться меню
posixru:
Из ДЕ настройки не используются, да и не стоят они полностью, что из XFCE что из MATE используются/стоят только панельки, поверх Опенбокса, сторонних утилит тоже нет, есть только в автозапуске:
Все равно не понятно... Программа сохраняет конфиг при выходе из программы. Соответственно, если вписать в конфиг настройки и закрыть после этого запущенный gxkb, то конфиг перетрется теми настройками с которыми был запущен gxkb. Точно изменения в конфиг вносились с не запущенным gxkb?
Спойлер
┌─ posixru -> 19:49 ( ~ )└──┤ ps aux
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 1 0.0 0.0 5124 2872 ? Ss 18:41 0:02 /sbin/init
root 2 0.0 0.0 0 0 ? S 18:41 0:00 [kthreadd]
root 3 0.0 0.0 0 0 ? S 18:41 0:01 [ksoftirqd/0]
root 5 0.0 0.0 0 0 ? S< 18:41 0:00 [kworker/0:0H]
root 7 0.0 0.0 0 0 ? S< 18:41 0:00 [kworker/u:0H]
root 8 0.0 0.0 0 0 ? S 18:41 0:00 [migration/0]
root 9 0.0 0.0 0 0 ? S 18:41 0:02 [rcu_preempt]
root 10 0.0 0.0 0 0 ? S 18:41 0:00 [rcu_bh]
root 11 0.0 0.0 0 0 ? S 18:41 0:00 [rcu_sched]
root 12 0.0 0.0 0 0 ? S 18:41 0:00 [watchdog/0]
root 13 0.0 0.0 0 0 ? S 18:41 0:00 [watchdog/1]
root 14 0.0 0.0 0 0 ? S 18:41 0:01 [ksoftirqd/1]
root 15 0.0 0.0 0 0 ? S 18:41 0:00 [migration/1]
root 17 0.0 0.0 0 0 ? S< 18:41 0:00 [kworker/1:0H]
root 18 0.0 0.0 0 0 ? S< 18:41 0:00 [cpuset]
root 19 0.0 0.0 0 0 ? S< 18:41 0:00 [khelper]
root 20 0.0 0.0 0 0 ? S 18:41 0:00 [kdevtmpfs]
root 21 0.0 0.0 0 0 ? S< 18:41 0:00 [netns]
root 22 0.0 0.0 0 0 ? S 18:41 0:00 [bdi-default]
root 23 0.0 0.0 0 0 ? S< 18:41 0:00 [kblockd]
root 27 0.0 0.0 0 0 ? S 18:41 0:00 [khungtaskd]
root 28 0.0 0.0 0 0 ? S 18:41 0:00 [kswapd0]
root 29 0.0 0.0 0 0 ? SN 18:41 0:00 [ksmd]
root 30 0.0 0.0 0 0 ? SN 18:41 0:03 [khugepaged]
root 31 0.0 0.0 0 0 ? S 18:41 0:00 [fsnotify_mark]
root 32 0.0 0.0 0 0 ? S< 18:41 0:00 [crypto]
root 36 0.0 0.0 0 0 ? S< 18:41 0:00 [kthrotld]
root 37 0.0 0.0 0 0 ? S< 18:41 0:00 [deferwq]
root 78 0.0 0.0 0 0 ? S 18:41 0:00 [khubd]
root 79 0.0 0.0 0 0 ? S< 18:41 0:00 [ata_sff]
root 80 0.0 0.0 0 0 ? S 18:41 0:00 [scsi_eh_0]
root 81 0.0 0.0 0 0 ? S 18:41 0:00 [scsi_eh_1]
root 84 0.0 0.0 0 0 ? S 18:41 0:00 [scsi_eh_2]
root 85 0.0 0.0 0 0 ? S 18:41 0:00 [scsi_eh_3]
root 92 0.0 0.0 0 0 ? S< 18:41 0:00 [kworker/1:1H]
root 93 0.0 0.0 0 0 ? S< 18:41 0:00 [kworker/0:1H]
root 94 0.0 0.0 0 0 ? S 18:41 0:00 [scsi_eh_4]
root 95 0.0 0.0 0 0 ? S 18:41 0:00 [usb-storage]
root 105 0.0 0.0 0 0 ? S 18:41 0:00 [jbd2/sda1-8]
root 106 0.0 0.0 0 0 ? S< 18:41 0:00 [ext4-dio-unwrit]
root 119 0.0 0.0 11244 1968 ? Ss 18:41 0:00 /usr/lib/systemd/systemd-udevd
root 124 0.0 0.3 20468 9900 ? Ss 18:41 0:03 /usr/lib/systemd/systemd-journald
root 137 0.0 0.0 0 0 ? S 18:41 0:01 [kworker/0:3]
root 146 0.0 0.0 0 0 ? S< 18:41 0:00 [iprt]
root 149 0.0 0.0 0 0 ? S< 18:41 0:00 [rpciod]
root 150 0.0 0.0 0 0 ? S< 18:41 0:00 [nfsiod]
root 229 0.0 0.0 0 0 ? S< 18:41 0:00 [kpsmoused]
root 232 0.0 0.0 0 0 ? S< 18:41 0:00 [hd-audio0]
root 236 0.0 0.0 0 0 ? S< 18:41 0:00 [cfg80211]
root 238 0.0 0.0 0 0 ? S 18:41 0:00 [flush-8:0]
root 346 0.0 0.0 0 0 ? S 18:41 0:00 [jbd2/sda4-8]
root 347 0.0 0.0 0 0 ? S< 18:41 0:00 [ext4-dio-unwrit]
root 351 0.0 0.0 0 0 ? S 18:41 0:00 [jbd2/sda3-8]
root 352 0.0 0.0 0 0 ? S< 18:41 0:00 [ext4-dio-unwrit]
root 360 0.0 0.0 5284 1300 ? Ss 18:41 0:00 /usr/sbin/crond -n
root 361 0.0 0.1 7756 3340 ? Ss 18:41 0:00 /usr/sbin/syslog-ng -F
root 362 0.0 0.3 42432 10160 ? Ssl 18:41 0:00 /usr/sbin/NetworkManager --no-daemon
dbus 363 0.0 0.0 3384 1764 ? Ss 18:41 0:00 /usr/bin/dbus-daemon --system --address=systemd: --nofork --n
root 364 0.0 0.0 3344 1516 ? Ss 18:41 0:00 /usr/lib/systemd/systemd-logind
root 367 0.0 0.0 5300 2316 ? Ss 18:41 0:00 /usr/sbin/lxdm-binary
root 369 5.7 1.2 77380 36896 tty7 Ssl+ 18:41 3:53 /usr/bin/X :0 vt07 -nolisten tcp
polkitd 384 0.0 0.3 62080 11196 ? Ssl 18:41 0:00 /usr/lib/polkit-1/polkitd --no-debug
root 391 0.0 0.0 7420 2844 ? Ss 18:42 0:00 /usr/sbin/modem-manager
root 393 0.0 0.0 4792 1604 ? Ss 18:42 0:00 /usr/sbin/bluetoothd -n
root 396 0.0 0.0 4288 744 tty1 Ss+ 18:42 0:00 /sbin/agetty --noclear tty1 38400 linux
root 400 0.0 0.0 6556 2360 ? Ss 18:42 0:00 /usr/sbin//wpa_supplicant -u
posixru 404 0.1 0.4 53692 12784 ? Ss 18:42 0:05 /usr/bin/openbox --startup /usr/lib/openbox/openbox-autostart
posixru 415 0.0 0.0 3624 564 ? S 18:42 0:00 dbus-launch --sh-syntax --exit-with-session
posixru 416 0.0 0.0 4008 1664 ? Ss 18:42 0:00 /usr/bin/dbus-daemon --fork --print-pid 4 --print-address 6 -
root 418 0.0 0.0 5380 3004 ? S 18:42 0:00 /usr/sbin/dhclient -d -sf /usr/lib/networkmanager/nm-dhcp-cli
posixru 432 0.4 0.0 7644 1632 ? S 18:42 0:17 compton
posixru 433 0.0 0.0 5544 640 ? S 18:42 0:00 sh /home/posixru/.config/openbox/autostart
posixru 434 0.0 0.0 5544 644 ? S 18:42 0:00 sh /home/posixru/.config/openbox/autostart
posixru 436 0.0 0.0 5544 640 ? S 18:42 0:00 sh /home/posixru/.config/openbox/autostart
posixru 437 0.1 0.6 99104 20932 ? Sl 18:42 0:07 xfce4-panel
posixru 438 0.1 0.5 85952 16724 ? Sl 18:42 0:04 parcellite
posixru 445 0.0 0.4 74696 13708 ? Sl 18:42 0:01 pnmixer
posixru 447 0.4 0.7 109540 23688 ? Sl 18:42 0:16 thunar --daemon
posixru 448 0.0 0.0 7340 2384 ? S 18:42 0:00 xscreensaver -no-splash
posixru 466 0.0 0.1 55192 4968 ? Ssl 18:42 0:00 xfce4-power-manager
posixru 468 0.0 0.0 6476 2384 ? S 18:42 0:00 /usr/lib/xfce4/xfconf/xfconfd
root 485 0.0 0.1 29584 3912 ? Ssl 18:42 0:00 /usr/lib/upower/upowerd
posixru 488 0.0 0.0 26952 2820 ? Sl 18:42 0:00 /usr/lib/gvfs/gvfsd
posixru 498 0.0 0.5 233992 18088 ? Sl 18:42 0:01 nm-applet
posixru 499 0.0 0.2 55840 6968 ? Sl 18:42 0:00 /usr/lib/polkit-gnome/polkit-gnome-authentication-agent-1
posixru 504 0.0 0.2 42656 6936 ? Sl 18:42 0:00 /usr/lib/gvfs//gvfsd-fuse -f /run/user/1000/gvfs
posixru 515 0.7 0.2 46072 8036 ? S 18:42 0:29 /usr/lib/xfce4/panel/wrapper /usr/lib/xfce4/panel/plugins/lib
posixru 529 0.4 0.2 46072 7996 ? S 18:42 0:18 /usr/lib/xfce4/panel/wrapper /usr/lib/xfce4/panel/plugins/lib
posixru 540 0.0 0.2 46468 7952 ? S 18:42 0:00 /usr/lib/xfce4/panel/wrapper /usr/lib/xfce4/panel/plugins/lib
posixru 549 0.0 0.0 43336 2956 ? Sl 18:42 0:00 /usr/lib/at-spi2-core/at-spi-bus-launcher
posixru 564 0.0 0.0 3008 1396 ? S 18:42 0:00 /usr/bin/dbus-daemon --config-file=/etc/at-spi2/accessibility
posixru 568 0.0 0.1 17312 3172 ? Sl 18:42 0:00 /usr/lib/at-spi2-core/at-spi2-registryd --use-gnome-session
root 570 0.0 0.2 25552 7812 ? Ssl 18:42 0:00 /usr/lib/udisks/udisks-daemon
root 571 0.0 0.0 6748 732 ? S 18:42 0:00 udisks-daemon: not polling any devices
posixru 577 0.0 0.1 100352 5656 ? S<l 18:42 0:00 /usr/bin/pulseaudio --start
rtkit 581 0.0 0.0 21192 1168 ? SNsl 18:42 0:00 /usr/lib/rtkit/rtkit-daemon
posixru 592 0.0 0.0 9888 2252 ? S 18:42 0:00 /usr/lib/pulse/gconf-helper
posixru 594 0.0 0.0 9104 2364 ? S 18:42 0:00 /usr/lib/GConf/gconfd-2
root 616 0.0 0.0 0 0 ? S 18:43 0:00 [scsi_eh_5]
root 617 0.0 0.0 0 0 ? S 18:43 0:00 [usb-storage]
posixru 636 0.0 0.1 38216 4480 ? Sl 18:43 0:00 /usr/lib/gvfs/gvfs-udisks2-volume-monitor
root 638 0.0 0.1 43096 4328 ? Ssl 18:43 0:01 /usr/lib/udisks2/udisksd --no-debug
posixru 645 0.0 0.0 27968 2964 ? Sl 18:43 0:00 /usr/lib/gvfs/gvfs-gphoto2-volume-monitor
posixru 649 0.0 0.2 39996 7220 ? Sl 18:43 0:00 /usr/lib/gvfs/gvfs-afc-volume-monitor
posixru 657 0.0 0.2 36784 7572 ? Sl 18:43 0:00 /usr/lib/gvfs/gvfsd-trash --spawner :1.7 /org/gtk/gvfs/exec_s
root 680 0.0 0.0 0 0 ? S 18:43 0:00 [jbd2/sdc1-8]
root 681 0.0 0.0 0 0 ? S< 18:43 0:00 [ext4-dio-unwrit]
root 687 0.0 0.0 0 0 ? S 18:43 0:00 [jbd2/sdc4-8]
root 688 0.0 0.0 0 0 ? S< 18:43 0:00 [ext4-dio-unwrit]
root 692 0.0 0.0 0 0 ? S 18:43 0:00 [jbd2/sdc3-8]
root 693 0.0 0.0 0 0 ? S< 18:43 0:00 [ext4-dio-unwrit]
posixru 704 0.0 0.5 86084 16396 ? Ssl 18:44 0:00 xfce4-appfinder --collapsed
posixru 711 0.1 1.1 146144 34696 ? Sl 18:44 0:06 pidgin
posixru 746 16.5 10.8 721300 330368 ? Sl 18:46 10:21 seamonkey
posixru 820 0.0 0.0 33596 2380 ? Sl 18:51 0:00 /usr/lib/dconf/dconf-service
root 827 0.1 0.0 0 0 ? S 18:51 0:04 [kworker/1:2]
posixru 863 0.0 0.0 17544 2616 ? Sl 18:52 0:00 /usr/lib/gvfs/gvfsd-metadata
root 1111 0.0 0.0 0 0 ? S 19:31 0:00 [kworker/0:1]
root 1155 0.0 0.0 0 0 ? S 19:35 0:00 [kworker/u:0]
posixru 1160 0.0 0.2 48184 8796 ? S 19:36 0:00 gxkb
root 1168 0.0 0.0 0 0 ? S 19:40 0:00 [kworker/u:2]
root 1170 0.0 0.0 0 0 ? S 19:42 0:00 [kworker/0:0]
root 1177 0.0 0.0 0 0 ? S 19:43 0:00 [kworker/1:0]
root 1179 0.0 0.0 0 0 ? S 19:45 0:00 [kworker/u:1]
root 1206 0.0 0.0 0 0 ? S 19:48 0:00 [kworker/1:1]
posixru 1208 15.0 1.0 123088 32220 ? Rl 19:49 0:00 /usr/bin/python2 /usr/bin/terminator --geometry=700x400+300+2
posixru 1224 0.0 0.0 2236 628 ? S 19:49 0:00 gnome-pty-helper
posixru 1225 0.5 0.0 6000 2152 pts/0 Ss 19:49 0:00 /bin/bash
posixru 1229 0.0 0.0 5152 1228 pts/0 R+ 19:49 0:00 ps aux
┌─ posixru -> 19:49 ( ~ )
└──┤ да, странная ситуация... С учетом, что в процессах используется часть гнома, я бы попробовал выполнить
gconftool-2 --set "/desktop/gnome/peripherals/keyboard/general/groupPerWindow" --type bool FALSE
но не факт, что это причина. А просто в процессе использования не сбрасывается на us/ru, только именно при выключении программы?
ZEN:
vovans:
ZEN:
@posixru, приживется не только в openbox :) Кстати, я не вижу возможности редактирования сообщения...
Разобрались? )
Да, с этим больше проблем нет )
Странно, что такой вопрос возник. На нашем форуме это как-то неочевидно?
Извините, что влажу в обсуждение, но для меня это важно ) ибо я уже не могу увидеть этот форум "как в первый раз" :)
vovans:
Странно, что такой вопрос возник. На нашем форуме это как-то неочевидно?
Извините, что влажу в обсуждение, но для меня это важно ) ибо я уже не могу увидеть этот форум "как в первый раз" :)
На сколько я понимаю, в здешних настройках fluxbb выставлен таймер, по истечению которого сообщение редактировать нельзя. Именно это послужило просьбой отредактировать первый пост. Другое дело, что я привык не ограничено раз редактировать сообщение, благо тоже админ у себя на форуме :)
ZEN:
использования не сбрасывается на us/ru, только именно при выключении программы?
В процессе нет, только при перезапуске софины...
Есть Manjaro Linux "Openbox-Lite", чистый и ничем гномо-мыше-матовым не осквернённый!
По попозже, или завтра опробую на нём...
vovans:
У меня-то полные права и я не вижу этого )


