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

Каждый пользователь линукс ходя бы раз пробовал перейти с DE на WM. И как это обычно бывает, возникает вопрос какой программой контролировать текущую раскладку, а главное как привязать её к приложениям? Этим вопросом я и занялся написав свою программу — gxkb.

image

Дело в том, что в отличии от индикаторов раскладки в KDE и Xfce все другие приложения позволяют лишь два режима работы — глобальная раскладка и раскладка с привязкой к окнам. Мне же, неудобно работать в многооконных приложениях с привязкой к окнам, так как получается что у окон одного приложения каждая своя раскладка. Другой пример, при сворачивании программы в трей окно программы фактически уничтожается и при вызове из трея создается по новой вместе с тем устанавливая окну раскладку по-умолчанию, тогда как я ожидал выставленную до сворачивания в трей раскладку. Именно эту проблему решает привязка раскладки к приложению.

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

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

Для компилирования программы нужно предварительно установить libgtk2.0-dev libwnck-dev libxklavier-dev
Скачать и распаковать архив по ссылке: sourceforge.net/p/gxkb
И выполнить непосредственно сборку и установку из каталога, куда был распакован архив:

./configure && make && sudo make install

После этого запускаем программу командой gxkb и, если не устраивают настройки по умолчанию, закрываем её для того, что бы программа создала файл настроек по пути ~/.config/gxkb.cfg, который можно отредактировать в любом текстовом редакторе. Рассмотрим пример файла настроек по-умолчанию:

[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

Более подробно про возможные значения для каждого параметра можно прочитать в man xkeyboard-config

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

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

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

Подробнее
Реклама
Комментарии 103
  • +29
    ./configure && make && sudo make install

    Да сколько же можно повторять что так делать нельзя? Каждый раз когда программа ставится не из пакета умирает котёнок.

    PS Вроде с раскладками никаких проблем нет. Есть продвинутый X Neural Switcher, есть лаконичный xxkb (+ setxkbmap).
    • 0
      Жизненных ресурсов не хватит собрать пакеты под все дистрибутивы, подскажешь более кроссдистрибутивный способ?
      • +2
        Crunchbang deb based. Для них проще всего воспрользоваться checkinstall. Инструкцию на хабре уже публиковали.
        • +1
          По ссылке на sourceforge.net/p/gxkb есть deb пакеты для архитектуры x86 и x86_64 сделанные именно через checkinstall. Для не deb и не rpm дистрибутивов checkinstall не годится
          • +1
            Есть Etersoft'овский Korinf — оно позволяет собирать из одного пакета сразу бинарные пакеты для ~20 разных дистрибутивов Linux/BSD.
            • 0
              Если посмотреть на список поддерживаемых дистрибутивов, то становится грустно — ArchLinux 2010, Gentoo 2009, Fedora 14(дважды?), Ubuntu 12.04 (для x64 вообще только 10.04). Не сервис, а мечта некрофила!
              • 0
                Вот эта вот страничка на самом деле больше для иллюстрации и действительно давно не обновлялась, видимо. Де факто все не так страшно, там поддерживается сборка из современных репозитариев Arch, Gentoo, RH/Fedora, Debian/Ubuntu и т.д. Печально скорее то, что так и не доделали пока сборки под сильно альтернативные системы типа Windows, OS X или Solaris — хотя обещались.
        • 0
          Собирайте под пару основных дистров — Debian/Ubuntu — в большинстве случаем один пакет, федора второй, да собственно и все. Куча народу вообще не парится и используют ppa которые есть только под убунту.
          • +1
            я хочу разобраться с opensuse build service, вроде как этот сервис не только под suse может генерировать пакеты. Если все получится, то процесс пойдет интереснее )
            • +1
              И с которых, при должном желании, таки можно ставить на другие основанные на дебиане системы.
          • 0
            xxkb — глючит.
            • 0
              Никак нет. У меня Openbox, tint2, setxkbmap + xxkb. Проблем нет ни на Ubuntu ни на Arch.
              • 0
                У меня на debian (i3) еще как. kkbswich вот работал идеально, но выпилили его.
                • 0
                  Боюсь, что не всем так везет, как вам. Я вот захотел как-то себе индикатор и первым делом попробовал xxkb как самый старый и «классический». Я уже сейчас не воспроизведу точно все косяки, но неприятно удивлялся я постоянно. :-) Снес, попробовал qxkb — это чудо просто сегфолтилось при старте; в итоге остановился на sbxkb, оно более-менее работает как надо (хотя забывает раскладку для xterm'ов почему-то — ну да нестрашно, в консоли по-русски нечасто писать приходится).

                  Кстати, тоже Openbox, X.org 1.7.7, bmpanel2. FreeBSD 8.3-STABLE.
              • +1
                Человек только программу сделал. До подготовки дистров не дошёл ещё. Можете подготовить deb/rpm сами, или подождать, или ставить в /opt итд.
                • 0
                  Это не оправдывает инструкций вида sudo make install. + deb пакеты уже были. автору ничего не мешало организовать ppa.

                  А за то что товарищ проделал работу и поделился с сообществом честь ему и хвала.
                  • +1
                    > Это не оправдывает инструкций вида sudo make install. + deb пакеты уже были. автору ничего не мешало организовать ppa.

                    Автор — программист, а не майнтейнер. Разбираться как там в этих ваших ppa что устроено — это всё равно что забивать гвозди микроскопом.
                    • –1
                      Очень часто майнтейнер вообще не нужен, это вредная, ненужная сущность, которая стоит между разработчиком и дистрибутивами и от желания левой пятки которого зависит насколько часто обновляется ПО в дистрибутиве. И именно из-за них возникаю статьи типа «как руками поставить новый (что-нить) в дистрибутиве, потому что майнтейнер в запой ушел».
                      За примерами далеко ходить не надо — Deb/Ubuntu: wine, eclipse, qt5, php5 (переход 5.2=>5.3), nginx.

                      Вот что что, а в ppa разобраться очень просто — его сложность примерно равна сложности андройд маркета.
                      • +1
                        Вы ошибаетесь. Майнтейнеры играют исключительно важную роль в жизни дистрибутива. Автор программы не может собирать пакеты под ВСЕ дистрибутивы и их версии.

                        Конечная цель дистрибутива в предоставлении стабильно работающей/выполняющей свою задачу системе, а не в доставке самых свежих версии программ. Хотите свежий софт? Обычно есть ppa/репозитории с нужными версиями. Хотите свежайший? Есть Gentoo/Arch.
                        • –1
                          Как раз может — потому что под ВСЕ дистрибутивы и их версии это ерунда — этих дистрибутивов то по сути кот наплакал. Дебиан, Сузя да редхат, остальное не мейнстрейм, если посмотреть на исходники проектов, то очень часто там лежит папка debian и файл spec для rpm.
                          Под все версии собирается на билд системах — это тупая пересборка пакета исходников. Майнтейнер по большей части занимается тем, что занимается бюрократией с лицензиями, описанием, и прочей никому не нужной фигней в таком духе.
                          Конечная цель дистрибутива — поставлять софт, причем древний пакет, про который забыл майнтейнер там просто не нужен — это не софт, а говно мамонта. И кстати PPA или другой сторонний репозиторий поддерживает очень часто сам разработчик, потому что попадание в дистрибутив это просто очередной геморой.

                          >Майнтейнеры играют исключительно важную роль в жизни дистрибутива
                          Ага, их наличие хоть как-то оправдывает существование дистрибутива, они же его собирают, чтобы было побольше бинарной несовместимости и старых версий. Большую часть «дистрибутивов» можно смело выкинуть и заменить репозиторием с парой-тройкой (нескучные обои), в особых случаях с десятком пакетов для того, от чего они форкнулись.
                          • 0
                            Мне, как как пользователю Debian GNU/Linux, изучать способы дистрибуции пакетов аля ppa, rpm, ebuild, aur, PiSi, tgz означает на долго отвлечься от основного дела — разработки и исправления багов. Тем более сейчас, когда я в коде добавил совместимость с старой версией libxklavier (в версиях 3.х.х, 4.х.х, 5.х.х отличается API), еще и следить за багами этой библиотеки в разных дистрибутивах ой как времени много отнимет. Вот буквально вчера оказалось, что код собирается и работает под CentOS 6.3 нормально, а вот под 6.4 собирается но не работает… Тем не менее в Debian программа собирается и работает в разных версия Lenny, Squeeze, Wheezy. В xubuntu вообще патчат GTK так, что не квадратные значки в трее смещаются на половину вниз.
                            В общем, пакеты — это хорошо, но пусть их тонкостями (в том числе указанием в зависимостях версии библиотеки в которой баг исправлен) занимаются майнтейнеры дистрибутива.
                            • –1
                              Вот поэтому я и предлагал забить на красноглазиков — таких как aur, PiSi, tgz, ebuild — у нас только два мейнстрейма — Debian и RedHat, а для многих благодаря убунте только один — Debian.
                              • 0
                                Дебиан, Сузя да редхат, остальное не мейнстрейм

                                А вам не кажется что ваше место что ваша точка зрения очень ограничена и излишне субъективна? Кто дал право решать за других пользователей и другие дистрибутивы? Мейнтейнеры ему не нужны, гляди-ка чо!
                                • 0
                                  А ваша нет? Я так понимаю у вас какой-то красноглазый дистр, и вы считаете что он конечно самый лучший?
                                  Собственно я просто озвучил статистику — больше всего пакетов в этих дистрах и их ответвлениях, которые совместимы по пакетным менеджерам, у остальных пакетов просто на порядок меньше.
                                  • 0
                                    По статистике есть только винда, пакеты вообще не нужны
                            • +1
                              И кстати PPA или другой сторонний репозиторий поддерживает очень часто сам разработчик

                              Учитывая что ppa создавали для разработчиков в этом нет ничего удивительного.

                              Конечная цель дистрибутива — поставлять софт, причем древний пакет, про который забыл майнтейнер там просто не нужен — это не софт, а говно мамонта.

                              Выполнять определённую задачу. Возможность обновления системы это просто бонус. Есть дистрибутивы общего назначения, есть специализированные для конкретных задач (пример: RiP Linux).
                              Если специализированный уже несёт в себе всё необходимое и работает с live-носителя без проблем, то дистрибутив общего назначения пухнет от разнообразного софта на все случаи жизни и полагается на репы. То есть репозитарии это просто инфраструктура, обеспечивающая выполнение задач пользователя.

                              Если вы утверждаете что маинтейнеры не нужны, ответьте, пожалуйста, на следующие вопросы:
                              — как обеспечивать стабильное обновление дистрибутива?
                              — как бороться с DLL/Dependency hell?
                              — как бороться с недобросовесными разработчиками/тролями?
                              — как избегать коллизий имён пакетов? (игра aluminum, браузер aluminum)
                              — как поддерживать несколько веток репов для каждого релиза? Enterprize (Debian Stable), Desktop (Ubuntu/Mint LTS), Frontier (Arch/Gentoo)
                              — как обеспечивать работоспособность уникального софта (пример: игры для linux обычно распространяются через богомерзкие win-like установщики. старый установщик может быть на gtk-1.2)
                              — как решать правовые вопросы? лицензирование/сертификация
                              — что делать с конфликтами разработчиков?
                              — что делать если автор программы уйдёт в запой/женится/заболеет?

                              Таких проблем очень много и борются с ними именно маинтейнеры (+ есть особые случаи). Без разумных вариантов решения данных проблем отказ от маинтейнеров просто утопия (как пресловутое светлое будущее).
                              Со сборкой пакетов автоматика может и справится, но вот человека заменить она пока не может. 1000 маинтейнеров, поддерживающих по 10 пакетов лучше чем 10000 авторов собирающих пакеты. Пусть лучше каждый занимается своим делом.
                              • –1
                                Кстати, я сам мейнтейнил некоторые пакеты в дебиане, в результате могу сказать что для обычных программ оно не нужно и это костыль.
                                Во первых я не спорю, что может для каких-то системных либ должна быть команда поддержки дистрибутива, но
                                Требования для мейнтейнеров слишком завышенные — чтобы загрузить свой пакет нужно сделать кучу ненужной хрени.

                                — как обеспечивать стабильное обновление дистрибутива?
                                Поясните, как это обеспечивается?
                                — как бороться с DLL/Dependency hell?
                                Оно уже в стандартах именования пакетов и либ — всякие libLIBA-dev libLIBA1 — это все в дебе обеспечено уже (и в остальных)
                                — как бороться с недобросовесными разработчиками/тролями?
                                Так их и так толпой запинают, точно так-же как с такими-же мейнтейнерами
                                — как избегать коллизий имён пакетов? (игра aluminum, браузер aluminum)
                                А сейчас они не избегаются по принципу кто первый залил того и тапки? Вот например тот-же git из git-core переименовывали.
                                — как обеспечивать работоспособность уникального софта (пример: игры для linux обычно распространяются через богомерзкие win-like установщики. старый установщик может быть на gtk-1.2)
                                Оно сейчас обеспечивается? Нифига — не работают старые установщики.
                                — как решать правовые вопросы? лицензирование/сертификация
                                Ага — они этим и заняты 90% времени — вот и пусть занимаются 100% — мейнтейнеров в адептов столлмана.
                                — что делать с конфликтами разработчиков?
                                А он и так обиделся и ушел — только он тогда еще может и на козла-мейнтейнера обидеться
                                — что делать если автор программы уйдёт в запой/женится/заболеет?
                                Тогда извините программа не обновляется и тихо себе лежит, что и происходит сейчас.

                                — как поддерживать несколько веток репов для каждого релиза? Enterprize (Debian Stable), Desktop (Ubuntu/Mint LTS), Frontier (Arch/Gentoo)
                                А нефиг делать один большой репозиторий как это сделано почти во всех дистрах. По этому поводу кстати я тоже очень сильно матерюсь на убунту/деб — какого хрена все в одну кучу. Скажите, нафига в общем репозитории скажем лежат компоненты исключительно для десктопа, которые нафиг не нужны на сервере, хотя можно спокойно подрубить второй репозиторий — десктоп? или например разработка, или научные, или еще что-то? Есть довольно обособленные части дистрибутива, которые можно вынести в другие репозитории и подключать по мере надобности — например научные проги, игры, веб-разработка.

                                Всего-то дать разработчикам право заливать определенный список пакетов — дальше они сами со своими справятся и будут за этим следить. И пример PPA показал что это работает.
                                • 0
                                  Я просто говорю, что вариант
                                  Дорогой разработчик, вот тебе права на заливку твоих пакетов вида eclipce-* в репозиторий deb-programmers пожалуйста придерживайся вот этого списочка правил.
                                  гораздо лучше чем
                                  Я буду брать ваши архивы, читать ридми, собирать их, распихивать по пакетам так как посчитаю нужным, сам решать какие версии загружать, а каких подождать, и еще буду корежить как хочу.

                                  Кстати хотелось бы получить ответы на вопросы 1-3 и 6 как же это делается сейчас и в чем же там так мейнтейнеры помогают.

                                  А, ну да, и как всегда прибежал какой-то чудик и расставил плюсы и минусы, ну что-ж, на что ума хватило :)
                          • 0
                            Вы правы. Использовать удобный инструмент дистрибуции пакетов для дистрибуции пакетов это забивать гвозди микроскопом.

                            PS и я не думаю что вам стоит говорить за автора. Он явно дал понять что хочет наладить сборку пакетов => готов поддерживать их. Я считаю что это замечательно.
                    • +3
                      Для создания deb и rpm-пакетов эта ссылка поможет?
                      www.artificialworlds.net/blog/2007/02/22/creating-deb-and-rpm-packages/
                      • +1
                        Благодарю, ссылка заслуживает внимания. Попробую к следующему релизу с этим разобраться
                        К сожалению, карма не позволяет мне проголосовать
                      • 0
                        kbdd же + setxkbmap
                        • 0
                          kbdd — это же демон, а тут гуевое приложение. Несколько разные вещи всё-таки
                          • 0
                            Вот тут все пишут… + setxkbmap.
                            Я так понимаю, первая часть суммы выполняет чисто декоративную функцию, роль индикатора раскладки.
                            Куда идеологически лучше прописывать setxkbmap? В автостарт WM в случае openbox?
                            • 0
                              Всё верно.
                              Есть два подходящих места: ~/.xprofile и ~/.config/openbox/autostart.sh (актуально для openbox).

                              Цитата с ArchWiki:
                              /etc/xprofile and ~/.xprofile allow you to execute commands at the beginning of the X user session, before the Window Manager is started. Therefore it cannot be used to start window-based applications.


                              xprofile я использую для xrandr (предпочтительно прописать настройку в xorg.conf.d), setxkbmap, xcompmgr и тп.

                              Ну а в autostart.sh приложения и апплеты.

                              PS попробуйте переключение раскладки по Caps. Очень удобно.
                              setxkbmap -layout us,ru -variant -option grp:caps_toggle,grp_led:scroll,terminate:ctrl_alt_bksp

                              xxkb
                              стандартные иконки в xxkb лучше заменить на famfamfam:

                              Правда придётся перевести их в xpm
                              • 0
                                setxkbmap нужен, если хочется свою индивидуальную переключалку раскладки заиметь на многопользовательском компьютере. А обычно это все в настройках иксов записывалось всегда. Правда, последнее время какие-то иксы стали кривые: на xorg.conf не очень-то внимание обращают…

                                А прописать ее можно либо в ~/.bashrc (т.е. индивидуальные настройки), либо (если иксы не хотят xorg.conf читать) в отдельный глобальный скрипт в /etc/X11/xinit, который запускается при старте иксов. Еще можно, конечно, в автостарт WM или в ~/.xsession (или ~/.xinitrc).
                                • 0
                                  Не могу согласиться. Xorg берёт на себя функцию автонастройки оборудования и в случае с устройствами ввода справляется вполне хорошо (дешевле использовать setxkbmap). А вот с внешним монитором может облажаться (поэтому прописать настройку графики в xorg.conf.d вполне оправданно: display manager и wm/de будут работать с нужным разрешением и конфигурацией).

                                  В ~/.bashrc setxkbmap прописывать не надо (если зайти через VT вывалится ошибка: Cannot open display «default display». Да и не помню чтобы кириллица понадобилась в терминале). + это настройки баша а не иксов. Индивидуальные в .profile .bash_profile (если есть bash_profile profile не читается)

                                  В .xinitrc лучше прописать что-то вроде
                                  [ -f "$HOME/.xprofile" ] && source "$HOME/.xprofile"
                                  [ -f "$HOME/.Xresources" ] && xrdb -merge "$HOME/.Xresources"
                                  

                                  + wm/de если надо. Хотя это не критично при использованиии dm. А вот startx будет читать именно эти настройки.

                                  Глобально прописывать эти настройки тоже смысла нет: DE само займётся настройками, а для WM проще хранить настройки у себя в $HOME. Легче мигрировать при необходимости.
                                  • +1
                                    > если зайти через VT вывалится ошибка: Cannot open display «default display»
                                    Поэтому-то и надо проверять:

                                    if [ "$DISPLAY" != "" ]; then
                                    pgrep xscreensaver 2>&1 > /dev/null || (xscreensaver -nosplash &)
                                    else
                                    printf "\033(K"
                                    mapscrn koi2alt
                                    loadkeys ruwin_alt-KOI8-R
                                    setfont Cyr_a8x16
                                    fi

                                    • 0
                                      Разумно. Cannot open display «default display» я узрел когда случайно напортачил с конфигами в процессе настройки иксов. Если честно я просто ограничился выявлением проблемы и её исправлением (вернул .xprofile на место). Ну а кириллица в терминале мне не нужна и я давно уже не настраиваю её.
                                      Видимо я не учёл что проблему можно решить и так. btw мне кажется более логичным просто раскидать команды по нужным файлам.
                                      • 0
                                        А если по ssh зайти? ;)
                                        Это я по поводу mapscrn/loadkeys/setfont, которые к консоли обращаются и, вероятно, покажут ошибку типа «Couldn't get a file descriptor referring to the console».
                                        Некрасиво такие вещи в профайле прописывать… Хотя если нужны индивидуальные настройки, то другого выхода нет, но тогда кучу проверок надо.
                                        • 0
                                          А при чем здесь ssh?
                                          И если вы заходите по ssh, $DISPLAY покажет что-нибудь вроде :11.0, но никак не "".
                                          • 0
                                            Ну потому, что вот зашёл я, для примера, на сервер с Ubuntu, по ssh, делаю:
                                            $ echo $DISPLAY

                                            $ env|grep DISPLAY

                                            Потому не знаю, на что Вы надеетесь, когда ожидаете, что при заходе по ssh будет установлена переменная DISPLAY. Понимаю там SSH_TTY, но DISPLAY — это только если к иксам коннектиться. Но .profile выполняется при любом логине, потому выполнять loadkeys при этом некрасиво. Вот и всё, что хотел сказать.
                                            • 0
                                              Она будет обязательно установлена, иначе как же иксы через ssh пробрасывать?

                                              Но намек понял.

                                              // «сервер с Ubuntu» — это же жесть!
                                              • 0
                                                В том то и дело, что не стоит на иксах зацикливаться — .profile/.bash_profile относится к шеллу (ни VT, ни X11 может не существовать вообще).

                                                // пример же надо брать самый попсовый :)
                            • +3
                              Ждем ебилдов (С)
                              • +1
                                В арче pkgbuild есть — неужто в дженте нету?)
                            • 0
                              Автор xfce4-xkb-plugin почему-то захардкодил шрифт (если вместо иконки языка использовать лейбл) и вот уже наверное годы прошли, а воз и ныне там… Может быть вы поможете, раз уж разобрались с его кодом?
                              Can't change font for keyboard layout indicator
                              • 0
                                не обещаю, но если руки дойдут, попробую сделать. А до тех пор могу подкинуть идею. Дело в том, что стандартные флаги xfce4-xkb-plugin выполнены в виде SVG файла, который представляет из себя XML. Думаю, что можно попробовать создать SVG файл с указанным шрифтом, размером, цветом
                                • 0
                                  До меня так и не дошло, чем автора не устраивает стандартная иксовая переключалка раскладок.
                                  • 0
                                    F 'nj rfrfz?

                                    ...thought I and pressed ALT+F2, invoked «Run...» dialog, found string setxkbmap -layout «us,ru» -option «grp:ctrl_shift_toggle,grp_led:scroll» in history и теперь могу переспросить по-русски:

                                    А это какой же в иксах стандартный индикатор переключения раскладки?
                                    • +1
                                      > какой же в иксах стандартный индикатор переключения раскладки
                                      scrollLock, например. Очень даже удобно.
                                      • 0
                                        Вполне удобно, но он есть не везде =(
                                        • 0
                                          Ну, если на ноутбуке нет scrollLock, можно какой-нибудь другой светодиод использовать. Хотя, конечно, отображение флажка, идентифицирующего язык, около курсора, когда тот наводится на область ввода текста, удобнее, спора нет. Т.е. нажимаешь, скажем, alt+tab, чтобы из консольки в редактор переключиться, и на пару секунд около курсора появляется значок с флагом раскладки — классно же, не надо опускать глаза на клавиатуру…
                                          • 0
                                            Самое удобное, имхо — caps lock :)
                                            • 0
                                              Эм, ну, для переключения раскладки caps lock удобен, да. Сам им пользуюсь. А вот для индикации он не всегда подходит.
                                              • +1
                                                Особенно когда на нем светодиода нет.
                                        • 0
                                          Хорошо что есть несколько мест в которых можно прописать эту команду и не вводить её каждый раз, правда?
                                          • 0
                                            Знаете, как бывает лень куда-то что-то прописывать? ))) Лучше я при каждом запуске через ALT+F2… )))
                                        • 0
                                          пример ситуации из жизни. Открываем, например gajim с английской раскладкой, открываем окно чата и переключаемся на русский. Затем закрываем окно чата и получаем английскую раскладку на контакт листе gajim -a. Приложение одно, а поведение раскладки разное. Другой пример, ставим в окне с контакт-листом русскую раскладку, сворачиваем в трей, вызываем из трея и… видим дефолтную английскую раскладку. При работе с многооконном интерфейсом Gimp -а или ему подобных тоже вынужден думать аз раскладку. Именно это мне не нравится в привязке раскладки к окнам и решение этому — привязка раскладки к приложению. Этой функции нет в xxkb, qxkb, sbxkb, fbxkb…
                                          • 0
                                            Я понял. Просто равняю всех по себе, вот в чем моя ошибка. Все-таки, не всем хватает единой раскладки на иксы, кому-то нужны разные раскладки для разных приложений…
                                            • 0
                                              цитирую текст топика:
                                              Умеет привязывать раскладку глобально, к окнам или приложению.


                                              Не оно?
                                          • 0
                                            Автору огромный респект. Ранее юзал fxkb, он жутко глючил, в итоге отказался от индикатора.
                                            На мой взгляд, эта штука должна быть с минимальными зависимостями, легковесной и легко настраиваться.
                                            Юзаю openbox+tint2 под Archlinux.

                                            Сразу после того, как увидел топик sudo yaourt -Ss gxkb и
                                            УРА ОНО ЕСТЬ В АУРе!!! и скорее sudo yaourt -S gxkb и…

                                            ==> Validating source files with md5sums... gxkb-0.4.tar.gz ... FAILED ==> ERROR: One or more files did not pass the validity check!
                                            Ну блииииииииииин ((((
                                            Так что «ебилды» под Арч есть, тока надо мейнтейнеру сообщить что косяк там
                                            • +2
                                              Такая то банальная ошибка, исправьте сами. В вики арча вся информация по этому есть.
                                              • –2
                                                Йа не умеею ((
                                                По крайней мере, я не понимаю принципов работы АУРа и как туда что-то добавить. Просто пользуюсь.
                                                • +2
                                                  Арчешкольник, ты?
                                                  • +2
                                                    причем тут принцип работы аура?) Он английским по белому (черному) говорит, что md5sum неправильная.

                                                    PS йогурт не надо запускать через судо (от рута), он и так умный. Ох уж эта убунтовая привычка
                                                • +3
                                                  yaourt от sudo запускать не рекомендуется — он сам об этом говорит.

                                                  По теме — для версии 0.4 нужно в PKGBUILD исправить md-5 сумму на 0aa57abc3e8ba2e9275923c9c3307015
                                                  • +1
                                                    Проверяй aur, мейнтейнер все пофиксил
                                                  • 0
                                                    Автор, а не подскажите что за WM используете? И что за чудо-серая тема?
                                                    • 0
                                                      на скриншоте дефолтный crunchbang liveCD с openbox
                                                    • 0
                                                      Реализовано ли в этой программе то, до чего додумался только Эпл:

                                                      Если раскладок более двух, то по клавише «переключить» нужно включать не тупо следующую по циклу, а предыдущую активную?
                                                      • 0
                                                        На данный момент нет и честно говоря я не слышал про такую реализацию. Если есть ссылки на видео или возможность записать скринкаст с демонстрацией поведения раскладок на примере, я с удовольствием рассмотрю данную фичу на возможность и надобность реализации
                                                        • 0
                                                          а можно раскрыть смысл этого действия? Вроде по описанию удобно, но что мне делать, если я хочу переключиться на 3ю раскладку? По логике описания получается, что он мне будет прыгать (допустим) с русской на украинскую и обратно, начисто игнорируя английскую, пока я не выберу вручную.
                                                          • 0
                                                            Если раскладок больше двух, можно помимо циклической переключалки завести сочетания клавиш для выбора конкретной раскладки (например, ctrl+1, ctrl+2 …).
                                                            • 0
                                                              ЛОгично выглядит так:
                                                              RU, EN, FR
                                                              Current Active: RU
                                                              Previous: EN
                                                              Rest: FR
                                                              Switched: NO

                                                              Current Active: EN
                                                              Previous: RU
                                                              Rest: FR
                                                              Switched: YES

                                                              Current Active: EN
                                                              Previous: RU
                                                              Rest: FR
                                                              Switched: NO

                                                              Current Active: RU
                                                              Previous: EN
                                                              Rest: FR
                                                              Switched: YES

                                                              Current Active: FR
                                                              Previous: EN
                                                              Rest: RU
                                                              Switched: YES
                                                              • 0
                                                                Если вам нужно переключиться на 3-ю раскладку, то вы просто нажимаете переключатель дважды.
                                                              • 0
                                                                Только Эпл? Шутите?? В xxkb с чёрти-каких времён есть такая возможность:
                                                                XXkb.controls.two_state
                                                                Swithcing between two chosen keyboard layouts only. If the XKB symbols map has more than two groups and not all of them are needed for each application the xxkb allows to skip unneeded layouts at the layout switching. You can select one group as a base group and anoter one as an alternative group and then switch between these two groups only. The base group is common for all applications (usually it contains ASCII) but the alternative group can be chosen for each application window separately. In this mode a mouse right button allows to select the alternative group and a mouse left button as well as the key which configured as the layout switcher change the current state between two selected layouts only.
                                                                This mode uses two additional config options:

                                                                XXkb.group.base
                                                                the base group (integer 1..4).

                                                                XXkb.group.alt
                                                                the default alternative group (integer 1..4).

                                                                Это даже удобнее, чем просто две последние раскладки — переключение происходит между базовой (обычно английской) и последней альтернативной (русской/украинской).
                                                                • 0
                                                                  Я бы не хотел фиксировать «базовую» раскладку. Очень же просто: одно нажатие — переключение на последнюю, два нажатия — на другую.
                                                                  • 0
                                                                    Два нажатия? А я бы не хотел переключать раскладку хоткеем из более одной клавиши.
                                                                    • 0
                                                                      А как вы сделаете одно нажатие, если раскладок более двух? Самое частое использование — одно нажатие. Можно даже забыть, что у вас есть ещё раскладки.
                                                                      • 0
                                                                        Два нажатия одной кнопки — вернёт раскладку обратно.
                                                                        Я вот одной клавишей переключаюсь между английской раскладкой и «альтернативной» (русской или украинской). Это самое частое использование. А когда надо изменить альтернативную раскладку (довольно редкая операция) — есть специальный хоткей на каждую раскладку (ну или ещё можно мышкой).
                                                                        А переключаться между двумя (самыми часто используемыми) раскладками хоткеем из двух кнопок не все захотят.
                                                                        • 0
                                                                          Нет же. А и Б — часто используемые.
                                                                          А — одиночное нажатие — Б
                                                                          Б — одиночное нажатие — А
                                                                          А или Б — двойное нажатие — В

                                                                          После этого В становится часто используемой, пока опять не будет двойного нажатия. И никакого наперёд заданного умолчания, что какие-то раскладки более равны.
                                                                          • 0
                                                                            Что такое «двойное нажатие»? Если переключение происходит сочетанием двух клавиш (ctrl+shift, command+space), то всё понятно. А если одной (как очень многие в мире linux предпочитают)? Предлагаете считать миллисекунды между нажатиями? Если меньше определённого числа — одну раскладку, если больше — другую? ИМХО, неудобно.
                                                              • +1
                                                                И честно заимствованы флажки от gxneur :)
                                                                • +1
                                                                  и честно ведется работа в направлении создания своих :) А флажки у gxneur классные… )
                                                                • 0
                                                                  Requested 'gtk+-2.0 >= 2.20.0' but version of GTK+ is 2.18.9

                                                                  это принципиально?

                                                                  p.s. CentOS 6.3 Final другого нет

                                                                  • 0
                                                                    В CentOS, кроме GTK, старые версии libxklavier и libwnck которые отличаются по API с версиями выше. Я посмотрю что можно сделать для совместимости
                                                                  • –2
                                                                    Для того, чтобы переключить раскладку, кто-то тянет мышь до трея? Ужасающе.
                                                                    • –3
                                                                      Кто-то еще и место на экране занимает неубираемыми панелями…
                                                                      Делать людям нечего.
                                                                    • –1
                                                                      спасибо
                                                                      • 0
                                                                        А чем не устраивает xxkb?
                                                                        Есть же chroot итд…
                                                                        • +1
                                                                          xxkb не устраивает все тем же — нет привязки к приложениям, только к окнам. Работая в гимпе с xxkb мне не удобно то, что в каждом окне своя раскладка, хотя фактически приложение одно.
                                                                          • –1
                                                                            Это фичу можно отключить.
                                                                        • 0
                                                                          Собрал под FreeBSD, как-то работает. :-) Хотел вам парочку багрепортов заслать, но на страничке проекта на sf.net почему-то тикеты добавлять нельзя.

                                                                          В общем, я надеялся, что gxkb не станет путаться с раскладками для разных xterm'ов, как sbxkb, но увы — так же себя ведет (пробовал для group_policy 1 и 2).
                                                                          • +1
                                                                            будет время, разберусь с тикетами. А на счет xterm, погонял в линуксе минут 10 с group_policy 1, вроде не путает раскладку. Можно подробнее какой оконный менеджер, версию wnck и libxklavier на емейл?
                                                                          • 0
                                                                            а больше трех раскладок она поддерживает? у меня только три добавить получилось. дальше «ошибка сегментирования».
                                                                            layouts=us,ru,by,de что я делаю не так?
                                                                            • 0
                                                                              Поддерживает:

                                                                              gxkb

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

                                                                              Что касается вашей проблемы, то неплохо было бы назвать дистрибутив, версию gxkb и залить куда-нибудь полный конфиг gxkb. Ну и способ установки — сборка из исходного кода или установка из deb-пакета (или альтернативный способ не описанный в данной статье)?
                                                                              • 0
                                                                                я использую Debian Jessie amd64, версия программы — gxkb 0.6
                                                                                конфиг простой:
                                                                                [xkb config] group_policy=2 default_group=0 never_modify_config=false model=pc105 layouts=us,ru,by variants=, toggle_option=grp:ctrt_shift_toggle,grp_led:scroll,terminate:ctrl_alt_bksp compose_key_position=
                                                                                программу собирал из исходников в deb-пакет. до последнего времени всё работало с тремя раскладками, а после обновления в понедельник перестали работать кнопки переключения и конфиг в дефолтный перезаписывается. так что пока использую родной плагин переключения от gnome 3.8 и моргающей индикацией :(
                                                                                • 0
                                                                                  хм… возможно конфликт со стороны апплета раскладки гнома. Но лучше начать с запуска с конфигом приводящим к ошибке сегментирования вот так:

                                                                                  strace gxkb
                                                                                  

                                                                                  и весь вывод в терминал залить, например, на pastebin.org
                                                                                  Еще было бы не плохо список обновленных пакетов залить. Получить его можно вот так:

                                                                                  LC_ALL=C ls -lhtr /var/lib/dpkg/info | grep ":" | grep "Dec 16"
                                                                                  
                                                                                  • 0
                                                                                    прошу прощения, что не отвечал долго — не было времени заняться раскладкой. так вот — вывод strace gxkb с pastebin.org — pastebin.com/84GJ0QrC Тут запуск программы и переключение раскладок.
                                                                                    Это пакеты установленные за 16е — pinentry-gtk2.prerm pinentry-gtk2.postinst pinentry-gtk2.md5sums tzdata.config tzdata.templates tzdata.postrm tzdata.postinst tzdata.md5sums tzdata-java.md5sums libbasicusageenvironment0.list libchromaprint0:amd64.list libgroupsock1.list libtiff4:amd64.list libusageenvironment1.list ghostscript.list libgs9.list ghostscript-cups.list iso-codes.list libpq5.list libxapian22.list mc.list mc-data.list libcolamd2.8.0:amd64.list lp-solve.list libcolamd2.7.1.list libgdiplus.shlibs libgdiplus.postrm libgdiplus.postinst libgdiplus.md5sums lintian.postrm lintian.md5sums lintian.conffiles
                                                                                    а это за 17е — libdv4:amd64.shlibs libdv4:amd64.postrm libdv4:amd64.postinst libdv4:amd64.md5sums evince.list libevdocument3-4.list libevview3-3.list evince-common.list gir1.2-evince-3.0.list libxtables10.shlibs iptables.shlibs libxtables10.postrm libxtables10.postinst libxtables10.md5sums iptables.postrm iptables.postinst iptables.md5sums libbison-dev:amd64.md5sums bison.prerm bison.preinst bison.postinst bison.md5sums w3m.prerm w3m.preinst w3m.postrm w3m.postinst w3m.conffiles w3m.md5sums libcurl3:amd64.symbols libcurl3:amd64.shlibs libcurl3-gnutls:amd64.symbols libcurl3-gnutls:amd64.shlibs libcurl3:amd64.postrm libcurl3:amd64.postinst libcurl3-gnutls:amd64.postrm libcurl3-gnutls:amd64.postinst libcurl3:amd64.md5sums libcurl3-gnutls:amd64.md5sums curl.md5sums qtchooser.md5sums libxml-libxml-perl.prerm libxml-libxml-perl.postinst libxml-libxml-perl.md5sums hardening-includes.md5sums

                                                                                    А теперь опишу что у меня конкретно не работает. У меня стоит Gnome 3.8 и там есть баг — мигают индикаторы при переключении раскладок клавиатуры. Это очень не удобно, так как пропадают и NumLock и CapsLock тоже. Поэтому выбор пал на вашу программу. Собрал я ее из исходников в deb-пакет и установил. С тремя раскладками всё заработало. Предварительно я отключил плагин клавиатуры в dconf-editor (org->gnome->settings-daemon->plugins->keyboard) и закомментировал строку в /usr/share/gnome-shell/js/ui/panel.js ('keyboard': imports.ui.status.keyboard.InputSourceIndicator), чтобы убрать стандартный плагин гномовский. Все работало до этих обновлений. А после наблюдается следующая картина. Если в dconf-editor отключить плагин, то переключения языка в вашей программе с клавиатуры не работают, только мышкой. Если плагин этот включить, то с клавиатуры переключение работает, но можно выбрать только два языка (английский и русский, белорусский пропадает). В обоих случаях индикация на клавиатуре работает нормально. Если вернуть строку в panel.js и включить плагин клавиатуры, то ваша программа работает нормально, три раскладки, все переключается, но индикация на клавиатуре мигает.

                                                                                    Вот мой gxkb.conf:

                                                                                    [xkb config]
                                                                                    group_policy=2
                                                                                    default_group=0
                                                                                    never_modify_config=true
                                                                                    model=pc105
                                                                                    layouts=us,ru,by
                                                                                    variants=,,
                                                                                    toggle_option=grp:ctrt_shift_toggle,grp_led:scroll,terminate:ctrl_alt_bksp,lv3:ralt_switch
                                                                                    compose_key_position=
                                                                                    • 0
                                                                                      В списке пакетов не вижу ничего такого, из-за чего мог бы сегфолтиться gxkb. Так что пока что это оставлю без ответа.

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

                                                                            Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.