Новый аналог Punto Switcher для linux: xswitcher +42



Прекращение поддержки xneur вызвало у меня определённые страдания в последние полгода (с появлением OpenSUSE 15.1 на моих десктопах: при включённом xneur окна теряют фокус и забавно мерцают в такт ввода с клавиатуры).

«А, блин, опять не в той раскладке начал набирать» — в моей работе встречается до неприличия часто. И позитива не добавляет.


В то же время, я (как инженер-конструктор) могу достаточно ясно сформулировать чего хочу. А хотел я (сначала от Punto Switcher, а затем, спасибо Windows Vista, окончательно пересев на Linux, от xneur) ровно одного. Осознав, что на экране белиберда не в той раскладке (такое обычно случается в конце набора нового слова), топнуть по «Pause/Break». И получить то что печатал.

На данный момент изделие имеет оптимальное (с точки зрения меня) отношение функциональность/сложность. Пора делиться.

TL.DR


Дальше пойдут всякие технические подробности, поэтому сначала — ссылка «на потрогать» для нетерпеливых.

На данный момент захардкожено следующее поведение:

  • «Pause/Break»: забивает (Backspace) последнее слово, переключает раскладку в активном окне (между 0 и 1) и набирает ещё раз.
  • «Левый Ctrl без ничего»: переключает раскладку в активном окне (между 0 и 1).
  • «Левый Shift без ничего»: включает в активном окне раскладку №0.
  • «Правый Shift без ничего»: включает в активном окне раскладку №1.

С этого момента я планирую кастомизировать поведение. Без обратной связи — не интересно (меня и так устраивает). Полагаю, на Хабре найдётся достаточный процент аудитории с аналогичными проблемами.

N.B. Т.к. в текущей версии кейлоггер прикручивается к "/dev/input/", xswitcher должен запускаться с рутовыми правами:

chown root:root xswitcher
chmod +xs xswitcher

Обратите внимание: владельцем файла с suid должен быть root, т.к. кто владелец — в того suid и превратит при запуске.

Параноики (я не исключение) могут клонировать из GIT и собрать на месте. Примерно так:

go get "github.com/micmonay/keybd_event"
go get "github.com/gvalkov/golang-evdev"

### X11 headers for OpenSUSE/deb-based
zypper install libX11-devel libXmu-devel
apt-get install libx11-dev libxmu-dev

cd "x switcher/src/"
go build -o xswitcher -ldflags "-s -w" --tags static_all src/*.go

Автозапуск добавлять по вкусу (в зависимости от DE).

Работает, «каши не просит» (?30 секунд CPU в сутки, ?12 МБ в RSS).

Подробности


Теперь — подробности.

Весь репозиторий изначально был посвящён моему пет-проекту, а другой заводить — пока лень. Так что, всё свалено в кучу (просто по папкам) и накрыто AGPL («патент наоборот»).

Код xswitcher написан на golang, с минимальными вкраплениями C. Предполагается, что такой подход даст наименьшие трудозатраты (пока так и есть). Сохраняя возможность подключать недостающее посредством cgo.

По тексту разложены комментарии, откуда чего позаимствовал и зачем. Т.к. код xneur меня «не вдохновил», за отправную точку взял loloswitcher.

Использование "/dev/input/" имеет как свои плюсы (всё видно в т.ч. зажатую клавишу с автоповтором), так и минусы. Минусы такие:

  • Автоповтор (события с кодом «2») не коррелирует с повтором с иксах.
  • Не видно ввода через интерфейсы X11 (так например VNC работает).
  • Нужен рут.

С другой стороны, можно подписываться на события X через «XSelectExtensionEvent()». Подсмотреть можно в коде xinput. Для go ничего подобного не нашёл, а черновая реализация дала с ходу сотню строчек C-кода. Пока отложил в сторону.

Вывод «обратно» пока сделан через прикручивание виртуальной клавиатуры. Спасибо автору keybd_event, но там слишком высокоуровневая абстракция и дальше придётся переделывать. У меня, например, правая Win-клавиша 3-й ряд выбирает. А обратно транслируется только левая Win.

Известные ошибки


  • Ничего не знаем про «композитный» ввод (пример: ?). Прямо сейчас оно не нужно.
  • Неверно воспроизводим правую Win. В моём случае ломает расстановку акце?нтов.
  • Нет внятного разбора ввода. Вместо этого — несколько функций: Compare(), CtrlSequence(), RepeatSequence(), SpaceSequence(). Спасибо nsmcan за внимательность: исправил в коде и здесь. С определённой вероятностью можно отхватить баги при замене.
    В этом месте я не знаю «как надо» и буду рад любым предложениям.
  • (О ужас) конкурентное использование каналов (keyboardEvents, miceEvents).

Заключение


Код — простейший процедурный. И туп как я. Так что, тешу себя надеждой что дописать желаемое сможет практически любой технарь. И данное изделие благодаря этому не сгинет без поддержки подобно большинству just-for-fun.

Удачи!




Комментарии (74):

  1. mtforlj
    /#21463066

    Вот бы еще кто Punto Switch допилил, чтобы при использовании Caps Lock в качестве
    кнопки-переключалки он в случайный момент времени не вспоминал о исходном ее назначении, и не отказывался переключать раскладку. Регистр меняет, раскладку нет.
    Приходится выгружать :(
    Или я что-то не так делаю?

    • Andriy1218
      /#21463152

      У меня такая ситуация наблюдается с рабочим ноутбуком, где стоят дефолтные настройки винды и где работают всякие McAfee. А вот на личном компьютере где стоит Windows 10 ltsc с «правильными настройками» никаких проблем с Punto Switcher не наблюдал ни разу.
      Может тут конечно и виноват Punto Switcher, но это проблема видимо проявляется только с определенными настройками системы.

      • mtforlj
        /#21463268

        У меня и W7 и Win10 (был, пока не достал окончательно). Возможно, что и с параметрами настройки систем что-то, но уж очень они «по умолчанию» в моем случае :)

        PS. А вот в OpenSuse (любимый дистр!:) никаких проблем «из коробки» с переключалками не наблюдалось уже лет 15. Но мне и автозамена без надобности, ради которой аффтар все и затеял.

    • kaverdo
      /#21463288

      Попробуйте отключить в настройках «Исправлять две заглавные буквы в начале слова» и «Исправлять случайное нажатие Caps Lock», а в винде настроить отключение режима Caps Lock клавишей Shift. Это в комбинации решило похожую проблему у меня: при полностью отключенной клавише Caps Lock, сам Caps Lock иногда включается, а выключить нельзя (клавиша же отключена).

      • mtforlj
        /#21463406

        Ооо, спасибо большое, попробую!

    • andersong
      /#21465764

      Ещё в Пунто при назначении Капса на переключение языка перестает работать индикатор на клаве. Я писал в ТП Яндекса, они ответили, что если Капс переназначен, то и индикатор не работает. Было давненько, может и исправили.

    • pav7ka
      /#21466724

      Выявил, что у меня такое наблюдается только с программой keepassxc, если встать на поле ввода пароля для разблокировки БД и переключить раскладку caps`ом. punto на рабочем АРМе держу только из-за того переключения, на домашней машинке под linux привык к такому переключению.
      Посчитал, что «враждуют» между собой hook`и keepassxc`а punto`а.

      • mtforlj
        /#21466874

        Нет, не оно. Я keepass не юзаю.
        Я тоже сначала думал, что это Remote Desktop Manager виновен, но потом эффект появился на той машине, где его сроду не было. Так что это что-то «тама унутре» неучтено.
        Коллега сверху по треду предложил некое сильное шаманство, вот, тестирую :)

  2. mikevmk
    /#21463242

    xneur я сколько в своей жизни ни ставил — сносил всегда или сразу, или через день-два

    возможно виноваты мои кривые руки, но заставить его работать без багов я не смог

    В целом я просто выработал привычку смотреть на индикатор Caps Lock боковым зрением перед вводом, чтобы определить раскладку. Горит — значит русская. Переключение тоже по Caps. Плюс каждое окно запоминает раскладку (kbdd)

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

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

    Может быть, заглядывая в будущее, кто-то возьмется аналог Punto Switcher ваять в виде расширения для Wayland, хотя, поговаривают, там это как-то архитектурно непросто.

    • eumorozov
      /#21463358

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


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

      • faiwer
        /#21463372

        Когда смотришь на экран при наборе, надобность в перекодировке никогда не возникает.

        Печатаю вслепую последние лет, наверное, 12. Потребность в перекодировке возникает по 100 раз на дню. На клавиатуру не смотрю. Просто я успеваю набрать слово\два\три прежде, чем до меня доходит, что раскладка была не та. Я довольно быстро печатаю. И пока я печатаю я не сказать чтобы анализирую что там за буквы на экране появляются. Голова в мыслях.


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

        • dmitryb-dev
          /#21464328 / +1

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

      • kamagan
        /#21465158

        Иногда приходится смотреть не в монитор, даже когда печатаешь вслепую, например при перепечатывании рукописного текста. Буквально вчера этим занимался.

  3. eandr_67
    /#21463346

    А изменение раскладки в выделенном фрагменте планируется — по типу того, как сделано в Caramba Switcher (новый проект Сергея Москалёва)?

    • DrZlodberg
      /#21463364

      Под ВЫН есть програмка SNOOP, которая по заданной кнопке выполняет трансляцию выделенного фрагмента по заданной таблице. Таблиц там в комплекте идёт сразу пачка типа рус/лат, КАПС/строчные и т.д. Ну и свои можно лепить любые.
      Когда на Лин перешел — очень её не хватало. Да и сейчас не хватает, если честно. Но как эту задачу тут решить я вообще не представляю.

      • PnDx
        /#21466494

        «В лоб» попадались скрипты с использованием xinput-tools и башатины. Посмотрите посвящённые xneur темы: когда автор заявил что «всё» — появились и попытки сделать новый инструмент.
        Технически — ничего сложного. Всё можно подглядеть в коде xinput.
        Я пока сделал инструмент для того что больше всего «доставляло».
        Дальше можно накинуть кучу биндингов на X11, но есть нюанс: на замену иксам навязывают сборки с wayland (в которых «из коробки» не заметно нужных интерфейсов) и не понятно чем всё закончится.

        • Таблицы под винду были отлично реализованы в FAR manager. Под linux он тоже работает. Я так и не отказался от его редактора: слишком привык к той эргономике. Плагины, хоткеи — и вот оно.

  4. Shamus_SPb
    /#21463628

    Пунто очень актуальна в планшетах с внешней клавиатурой. Там нет индикатора раскладки и никогда не знаешь на каком языке работаешь. Есть какое-нибудь решение?

  5. ZlobniyShurik
    /#21463636

    Пытался использовать Punto ещё под окошками, но забросил — слишком люблю пароли из длинных русских фраз набирать при включенной английской раскладке. А свитчер, естественно, их пытается перекодировать, после чего уже без бутылки не разберешься — где пароль запомнен так, как задумывалось, а где с перекодировкой на русский.

    P.S. Ну и, да, неприятно как-то, что в системе, как минимум, на один кейлоггер больше стало. :)

  6. amarao
    /#21463642

    Я для себя проблему раскладок давно решил, сделав раскладку фиксированной. Caps — английская, Shift-Caps русская.


    Теперь я всегда выставляю раскладку перед началом ввода. Повторное нажатие кнопки раскладки ничего не меняет, т.е. нажимать кнопку можно всегда. Идеально для ввода паролей и общей sanity. Нажал кнопку — точно знаешь, что русский (английский). Можно даже не присматриваться к вводимому.

    • drath
      /#21471008

      Давно уже топлю за такой способ переключения. Ctrl+Shift+1 — Английская, Ctrl+Shift+2 — Русская.

      Окружающие называют меня извращенцем. Смеюсь с них в правильной раскладке.

      • PnDx
        /#21471060

        Весьма неторопливый способ переключения.
        Наверное, для чего-то редкого можно и так (а можно и мышкой: я так pinyin в fcitx включаю и не жалуюсь).

  7. astenix
    /#21463740

    Тоже был раздражен от xneur, приходилось как-то выкручиваться. Позже понадобился третий язык и стало вообще кисло.

    Оказалось, что можно жить и без подобных помогалок:

    1. Назначить однокнопочное переключение между языками,
    2. Ограничить число раскладок, входящих в кольцо переключения,
    3. Назначить отдельные клавиши на включение определённой раскладки.

    После некоторого периода экспериментов оказалось удобно переключать языки по правой клавише «Alt». Экспериментировал с CapsLock, но туда идёт слабый духом мизинец, он часто жмёт ненужную «Tab», тогда как «Alt Gr» прямо под уверенным большим пальцем, легко нащупывается даже вслепую с помощью края длинной «Space».

    Клавиши отдельных языков (после ряда экспериментов):
    > русская = ScrollLock,
    > английская = Pause/Break.

    Помогает и неочевидный факт: румынский алфавит основан на латинице, поэтому даже в терминале для вписывания англоязычных слов достаточно переключаться только между русской и румынской раскладками. Недостаток: в румынской клавиатуре нет ординарной кавычки и седильи (~), поэтому если таки нужны английские штуки вроде «doesn't» — бацаю средним пальцем правой руки по «Pause/Break».

    Сейчас настройки клавиатуры вот такие.

    • VolCh
      /#21464222

      В случае английского, русского и украинского "неочевидный" факт скорее мешает, когда увидел в терминале киррилицу, переключаешь в кольце и уже не смотришь, что там латиница или вторая киррлица

  8. skazo4nik
    /#21464078

    На маке для себя решил проблему некорректной раскладки альтернативным способом:
    левый Cmd переключает раскладку на латиницу, правый Cmd на кириллицу.

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

    На Windows было тоже самое только с клавишами Ctrl.

    • neoantox
      /#21466730

      С помощью какой программы можно добиться такого поведения на маке?

      • skazo4nik
        /#21468188

        Karabiner-Elements. Там Complex Modifications и дальше поиск по "Change input source".
        Заодно посмотрите Ukelele. Это про кастомные раскладки клавиатуры. Тоже полезная штука.

  9. grayich
    /#21464154

    имхо — xneur и т.п. не зря вымерло, оно просто не нужно, простой скрипт .sh (коих в гуголе множество) легко меняет раскладку выделенного используя обычные утилиты типа xdotool, при этом не требует root, автозапуска, памяти… т.к. активируется только на время надобности через хоткей.

    • steamed_hams
      /#21464914

      Подскажите, пожалуйста, ссылку на один из .sh скриптов. Как их искать, по какому запросу?

      • grayich
        /#21468736

        К примеру «linux скрипт изменения раскладки»
        Вторая ссылка

  10. trnc
    /#21464202

    О, как раз вовремя! Очень привык к переключению раскладки на основе Shift. Однократное нажатие на левый Shift — русская раскладка, однократное нажатие на правый Shift — английская. Очень удобно когда владеешь слепым набором на двух раскладках — нажал на правый Shift и сходу набираешь на английском, нажал на левый — на русском. На Win проблем нет — задачу решает AutoHotkey. На Ubuntu 16.04 проблем тоже не было — два простеньких скрипта и бинд на Shift-ы и все как часы. После перехода на 18.04 и до сих пор никак не могу решить эту проблему.

    UPD. Попытался проверить под Ubuntu 18.04 — не работает.

    • ShibaOn
      /#21465176

      В гноме 3 не работает. Пересел недавно опять на кеды, там ок.

    • PnDx
      /#21466550

      Давайте попробуем отдебажить. «Не работать» должно ровно в одном случае: wayland без слоя совместимости с X11.
      Запускаете софтину в терминале.

      • Если рушится, там написано почему. Например, «keypanic: permission error» указывает на недостаток привилегий. В сложном случае придётся разбираться с (неотключаемым толком в ubuntu) apparmor.
      • После старта в stdout выводятся по строкам подключаемые устройства. Логично ожидать хотя бы одну строчку с «keyboard:» и одну с «mouse:». Если пусто, то есть ли "/dev/input/event*" (захардкоженный в переменную «DEV_INPUT»)?

      • trnc
        /#21471082

        Скачав бинарник и запустив его увидел следующее:
        panic: permission error for /dev/uinput try cmd : sudo chmod +0666 /dev/uinput

        Ну что же, попробуем дать необходимые права подумал я:

        sudo chmod +0666 /dev/uinput

        После этого попытался запустить еще раз и в stdout уже была тишина…
        Если пусто, то есть ли "/dev/input/event*" (захардкоженный в переменную «DEV_INPUT»)?

        Да, все есть. Выполнив:
        ls -al /dev/input/by-path/

        Вывод (часть вырезал):
        pci-0000:00:14.0-usb-0:3:1.2-event-mouse -> ../event12
        pci-0000:00:14.0-usb-0:3:1.2-mouse -> ../mouse2
        pci-0000:00:14.0-usb-0:4:1.0-event-mouse -> ../event4
        pci-0000:00:14.0-usb-0:4:1.0-mouse -> ../mouse0
        pci-0000:00:1a.0-usb-0:1.4:1.0-event -> ../event11
        platform-i8042-serio-0-event-kbd -> ../event3
        platform-i8042-serio-1-event-mouse -> ../event5
        platform-PNP0C14:00-event -> ../event6
        platform-i8042-serio-1-mouse -> ../mouse1

        • PnDx
          /#21471154

          Не надо так делать. Надо или запускать от рута (т.к. внутри кондовый кейлоггер на devfs), или дать suid-bit.
          Ровно та же техника что и в loloswitcher.

          • Проверил, про «chmod +xs xswitcher» в статье — не забыл.

          • trnc
            /#21472216

            Попробовал, поменял права, но увы, результат прежний. К слову, loloswitcher тоже не работает. Точнее, если нажать несколько раз какой-то из shift-ов то раскладка на мгновение изменится, но только лишь на мгновение…

            • PnDx
              /#21472254

              1. Аналогичную проблему прорешали вот в этой ветке. Вкратце, владельцем бинарника с suid должен быть root.
              2. «раскладка на мгновение изменится» — чётко указывает на наличие «конкурента».
              …А не ibus ли у Вас? Само окно дёргать локалью не обучено (как правило). Кто-то должен ему «помогать».

              • trnc
                /#21472276

                Удалось запустить бинарник и получить вывод:
                keyboard: Power Button
                keyboard: Laptop_Integrated_Webcam_HD: In
                mouse: Logitech K400 Plus
                keyboard: Power Button
                keyboard: AT Translated Set 2 keyboard
                mouse: HP Wireless Optical Mobile Mouse
                mouse: SynPS/2 Synaptics TouchPad
                keyboard: Dell WMI hotkeys


                Да, действительно, есть какой-то конкурент, ибо поведение xswitcher ровно такое же как и loloswitcher. Подскажите, как вычислить конкурента и запретить ему конкурировать?

                • PnDx
                  /#21474688

                  «Алгоритм поиска неисправности» — штука довольно универсальная.
                  Для начала надо осмотреться и понять что вообще запущено. Я бы для этого перезагрузил систему и постарался выключить всё лишнее. Под подозрением — всё на электроне. Однако, главные подозреваемые — ibus или fcitx.

                  Если всё ещё не отпустило, придётся всё-таки разбираться с поназапущенным.
                  Примерно так:

                  ps -el | awk '{if ($3 != 0) print $14}' | sort -u | egrep -v '^(ps|CMD|awk|bash|grep|sort|akonadi)'

                  …И дальше по каждому пункту выяснить что это такое.

                  • Возможно также что в системе так отрабатывается настройка «сохранять (помнить) раскладку для каждого окна».
                  • Сам на такое нарвался на своей старой OpenSUSE 15.0 (1.5 года поддержки — реально мало, мне ещё работать надо кроме того что софт по кругу переставлять): там и xneur и loloswitcher работали и «а чего оно тут глючит?».

                  • trnc
                    /#21474864

                    Попробовал отключить настройку input-source per window — не помогло. Как разобраться с ibus пока не понял, его демоны перезапускаются почти сразу после их завершения. Я сменил метод ввода, перезапустил сессию, однако при проверке выяснил что ibus был выбран автоматически как основной метод ввода, опять все демоны его запущены. Руки тянутся сделать apt purge ibus, но не хотелось бы радикальных мер.

                  • trnc
                    /#21475206

                    UPD. Отключение ibus проблему не решило.

                    • PnDx
                      /#21475332

                      Тупой вопрос: а как у Вас настроен переключатель в иксах?
                      Если на те же кнопки, то они таки пересекаются.

                      • У себя в KDE я давно поотключал все варианты кроме ctrl+alt+k «на всякий случай». Но не факт что все сами догадаются. Надо будет добавить в FAQ.

                      • trnc
                        /#21475360

                        Вот сейчас настроено все так: левые Alt+Shift — раскладка 1 (ru), правые Alt+Shift — раскладка 2 (us).

                        • PnDx
                          /#21475622

                          Насколько я в курсе, X-server так не умеет. Что об этом думает «setxkbmap -query»? У меня например вот так (раскладки есть, способ смены — не задан):

                          # setxkbmap -query
                          No protocol specified
                          rules:      evdev
                          model:      pc104
                          layout:     us,ru
                          options:    terminate:ctrl_alt_bksp,misc:typo,compose:ralt,grp_led:scroll,lv3:rwin_switch

                          Как я понимаю, у Вас гном. Попробуйте пошерстить в этом районе.
                          * Там же подсказывают про «gnome-tweak-tool». Может и поможет…

                          • trnc
                            /#21475738

                            Да, gnome.

                            # setxkbmap -query
                            rules:      evdev
                            model:      pc105
                            layout:     us,ru,us
                            variant:    ,,
                            options:    grp_led:scroll
                            

                            Сейчас гляну, спасибо!

                          • trnc
                            /#21475808

                            К слову, для изменения раскладки по Alt-Shift я обращаюсь через D-Bus, использую такой скрипт:

                            !/bin/bash
                            
                            gdbus call --session --dest org.gnome.Shell --object-path /org/gnome/Shell --method org.gnome.Shell.Eval "imports.ui.status.keyboard.getInputSourceManager().inputSources[$1].activate()"
                            

                            В качестве параметра передается 0 — первая раскладка, 1 — вторая. При попытке изменить раскладку с помощью setxkbmap в дальнейшем стандартный механизм перестает работать.

                            • PnDx
                              /#21477602

                              Тут я не понял: а кто этот скрипт запускает?
                              Должен же кто-то «висеть» на шине событий (не важно, evdev или XEvent или гномо-специфика) и ловить этот самый alt+shift.
                              Со своей стороны, могу предложить повесить на выход xswitcher запуск внешних сценариев. Мне не трудно. Но, должен предупредить: из того что я мерил, по dbus тормоза достигают 300мс на одно переключение. А до переключения нельзя перевводить текст.

                              Альтернативно, попробуйте совсем выключить игры с dbus. Возможно, такой метод как раз и «лочит» локаль в окне.
                              * За кадром остаётся вопрос, почему «layout: us,ru,us» (раскладка №2 дублирует раскладку №0).

                              • trnc
                                /#21478758

                                Да, я понимаю что должно что-то слушать и дергать скрипт по событию, но что это понять не могу. Я просто добавил custom hotkeys в системе и повесил на них вызов скрипта с разными параметрами.
                                image
                                Переключение через D-Bus очень долгое, это по сути мучение, но если появится возможно дергать внешний скрипт — в целом не будет лишним.
                                Отключал все хоткеи с shift-ом, результат тот же(.
                                Почему три раскладки отобразилось в душе не знаю, настроено ровно две. Проверил через gsettings увидел [('xkb', 'us'), ('xkb', 'ru')]. Во всех GUI тоже стоит две.
                                В общем, я в замешательстве, уже подумываю кеды поставить.

  11. Tuxozaur
    /#21464316

    Могу посоветовать LoLo Switcher.
    Использую Punto Switcher на Windows в основном, чтобы переключать раскладки: левый Ctrl — английская, правый Ctrl — русская. Когда переходил на Linux, перебрал несколько программ, но все было не то. Попробовал собрать LoLoSwitcher и сижу на нем уже два года. Собирается и настраивается легко, работает безупречно. Только не хватает изменения ошибочно набранного текста по клавише Break.
    Но альтернативы — это хорошо! Больше софта под Linux хорошего и разного!

    UPD. Если кто-то заинтересовался LoLo Switcher — вот еще полезная ссылка.

  12. ShibaOn
    /#21465200

    спасибо Windows Vista, окончательно пересев на Linux...

    Мне тоже Виста в своё время помогла на Линукс перейти: сижу, верстаю макет, утром его сдать уже надо. После очередного зависания решил, что так не может больше продолжаться, скачал первый попавшийся дистрибутив (Mandriva), установил, доделал работу, не смотря на то, что Линукс первый раз в жизни видел. С тех пор уже 10 лет на Линуксе сижу — спасибо Майкрософт, что привели меня к нему.

  13. RomanStrlcpy
    /#21465204

    Есть у меня такое ощущение (по собственному опыту), что подобные утилиты имеют смысл пока не вырабатался навык печати не глядя на клавиатуру.

  14. EjikVTumane
    /#21465394

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

  15. t0lik
    /#21466592

    Иногда замечаешь что набрал, когда уже набрано целое предложение, поэтому второй распространенный режим «сменить раскладку выделенного текста». Думаю этого (и дефолтного режима смены раскладки последнего слова) будет достаточно для 99.9% случаев.

    • PnDx
      /#21466620

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

  16. Timmma
    /#21466630

    Что меня больше всего удивило в этой статье, это то что инженеру-конструктору удался переход на Linux. Какой софт в работе используете, если не секрет?

    • PnDx
      /#21466696

      «Системы массового обслуживания» в моём случае представляют собой аппаратно-программные комплексы. «Вот на тех железках крутится (ок, linux, но случается и xen или ещё что). А теперь сделаем из этого…» CAD'ы т.о. остались для меня в прошлом, если Вы об этом. Программирования достаточно много, но оно никогда не самоцель.

  17. Teemon
    /#21468814

    Что насчет андроида?

  18. keo87
    /#21471074

    Привет.
    Компиляция по инструкции прошла успешно
    файл лежит тут /home/user/xswitcher/xswitcher

    Как его запустить, чтобы работало переключение?
    Сижу на Ubuntu

    • PnDx
      /#21471166

      Примерно так:

      sudo chmod +xs /home/user/xswitcher/xswitcher
      /home/user/xswitcher/xswitcher

      Если что-то не так, см. коммент выше.

      Убедившись что работает, можно и в автозапуск. Как это сделать для ubuntu, лучше посмотреть на профильных ресурсах.

      • keo87
        /#21471634

        Не получилось

        ewgenk@ewgenk-K53SJ:~$ sudo chmod +xs /home/ewgenk/xswitcher/xswitcher
        [sudo] пароль для ewgenk: 
        ewgenk@ewgenk-K53SJ:~$ /home/ewgenk/xswitcher/xswitcher
        panic: permission error for /dev/uinput try cmd : sudo chmod +0666 /dev/uinput
        
        goroutine 1 [running]:
        main.main()
        	/home/ewgenk/xswitcher/src/main.go:636 +0xb66
        ewgenk@ewgenk-K53SJ:~$ 
        
        


        Потом написал
        sudo chmod +0666 /dev/uinput
        

        Папки /dev/uinput у меня нет


        Потом снова запустил
        /home/ewgenk/xswitcher/xswitcher
        


        Комп завис. Перезагрузил его

        • PnDx
          /#21471668

          Что-то мне подсказывает что владелец файла — не root.
          1. Проверяем что работает:

          sudo /home/ewgenk/xswitcher/xswitcher

          2. Если таки да, то:
          sudo chown root:root /home/ewgenk/xswitcher/xswitcher

          Я просто некоторые вещи стал считать очевидными, а это не так. Добавлю по итогам howto в статью.

          • PnDx
            /#21471990

            FIX: под номером 1 я глупость ляпнул. Потому что из-под sudo не будет XOpenDisplay() работать. Как и многое другое. Ни в каком виде, так уж его написали.
            Предварительно проверять (1) можно так (должен быть рабочий рут-аккаунт):

            su
            ### enter root password
            /home/ewgenk/xswitcher/xswitcher

            Про suid, однако, всё верно.

            • keo87
              /#21472000

              Не сработало

              ewgenk@ewgenk-K53SJ:~/xswitcher$ /home/ewgenk/xswitcher/xswitcher
              panic: permission error for /dev/uinput try cmd : sudo chmod +0666 /dev/uinput
              
              goroutine 1 [running]:
              main.main()
              	/home/ewgenk/xswitcher/src/main.go:636 +0xb66
              ewgenk@ewgenk-K53SJ:~/xswitcher$ 
              

              • PnDx
                /#21472064

                Покажите что выводит

                sudo ls -lah /home/ewgenk/xswitcher/xswitcher

                • keo87
                  /#21472084

                  ewgenk@ewgenk-K53SJ:~/xswitcher$ sudo ls -lah /home/ewgenk/xswitcher/xswitcher
                  [sudo] пароль для ewgenk: 
                  -rwsr-sr-x 1 ewgenk ewgenk 2,0M апр  7 10:29 /home/ewgenk/xswitcher/xswitcher
                  ewgenk@ewgenk-K53SJ:~/xswitcher$ 
                  

                  • PnDx
                    /#21472106

                    Вот это: ewgenk ewgenk
                    Должен быть root:root

                    sudo chown root:root /home/ewgenk/xswitcher/xswitcher

                    Без этого suid даёт права ewgenk (которые и без того есть).

  19. keo87
    /#21471688

    Не сработало

    ewgenk@ewgenk-K53SJ:~$ sudo /home/ewgenk/xswitcher/xswitcher
    [sudo] пароль для ewgenk: 
    panic: permission error for /dev/uinput try cmd : sudo chmod +0666 /dev/uinput
    
    goroutine 1 [running]:
    main.main()
    	/home/ewgenk/xswitcher/src/main.go:636 +0xb66
    ewgenk@ewgenk-K53SJ:~$ 
    

    • PnDx
      /#21472046

      См. выше.
      Извините, ляпнул про sudo не подумав. Хотя уж пора бы запомнить.
      Однако, крайне странно видеть вновь «permission error». Рухнуть после выдачи прав должно было на XOpenDisplay().
      Включена какая-то защита?
      Показывает ли

      sudo ls -lah /dev/uinput

      наличие устройства на месте?

      • keo87
        /#21472090

        ewgenk@ewgenk-K53SJ:~/xswitcher$ sudo ls -lah /dev/uinput
        crw------- 1 root root 10, 223 апр  7 21:05 /dev/uinput
        ewgenk@ewgenk-K53SJ:~/xswitcher$ 
        


        Ноутбук со встроенной клавиатурой + мышка

        • PnDx
          /#21472170

          Полагаю, вопрос решён выше.
          Предварительный набросок HowTo:

          1. Из-под sudo работать не может, т.к. sudo обрезает контекст X'ов.
          2. Либо запускать из-под su (для отладки), либо навешивать suid. Обязателен владелец бинарника root. Ссылка «что такое suid».
          3. Чек-лист «если ничего не выходит читайте документацию».

  20. ainoneko
    /#21480112

    У меня заработало почти всё (все переключения раскладок и половина «исправления набранного»).
    Не работает только преобразование из английских букв в русские («обратный перевод производился чётко»): видно, что буквы стираются и перенабираются, но остаются те же самые.

    Куда смотреть в поисках источника проблемы?
    Может, дело в том, что «setxkbmap -query» выдаёт только одну раскладку?:
    rules: evdev
    model: pc105
    layout: us

    Для переключения обычно использую Alt+Shift с лампочкой для индикации, при старте системы запускается:

    setxkbmap -v -option grp:switch,grp:alt_shift_toggle,grp_led:scroll us,ru

    • PnDx
      /#21482080

      Да, иксы должны знать про обе раскладки (за номером 0 и 1). Потому что переключалка идёт к ним и требует «поставь локаль №n». А как её поставить, если нет в списке?

      • Не понятно как оно по Alt+Shift переключает. Где-то пропущен нюанс.

      В похожую ситуацию я влипал когда пробовал прикрутить доморощенные скрипты.
      Типа вот такого вредного совета.
      • Наверное, для подобных случаев надо прикрутить возможность запускать внешние скрипты вместо встроенного «дёрни за иксы». +Опция «дождаться завершения».

  21. VolCh
    /#21480654

    Скажите, пожалуйста, есть смысл пробовать запускать, если в системе три языка (en, ru, ua) с циклическим переключением?

    • PnDx
      /#21482010

      Опишите подробнее, что Вы ожидаете.
      Я закладывал свой кейс: «2 основных языка (0 и 1 локали) и ещё какие-то (e.g. китайский) редко».
      Возможно, для Вашего случая есть вариант настроить хоткей для перекидывания порядка. Например, (en, ru, ua) vs (en, ua, ru).
      Если (зачем-то) надо гонять именно по кольцу, это несложно устроить. Но предложите как это должно управляться.
      Я, как закончу собирать «хотелки» — попробую сделать второй «подход к снаряду».

      • VolCh
        /#21483290

        Я как раз хочу избавиться от кольца. Caps — en 50%, Shift+Caps — ru 40%, Ctrl+Caps — ua 10%