Комментарии 87
кнопки-переключалки он в случайный момент времени не вспоминал о исходном ее назначении, и не отказывался переключать раскладку. Регистр меняет, раскладку нет.
Приходится выгружать :(
Или я что-то не так делаю?
Может тут конечно и виноват Punto Switcher, но это проблема видимо проявляется только с определенными настройками системы.
PS. А вот в OpenSuse (любимый дистр!:) никаких проблем «из коробки» с переключалками не наблюдалось уже лет 15. Но мне и автозамена без надобности, ради которой аффтар все и затеял.
Попробуйте отключить в настройках «Исправлять две заглавные буквы в начале слова» и «Исправлять случайное нажатие Caps Lock», а в винде настроить отключение режима Caps Lock клавишей Shift. Это в комбинации решило похожую проблему у меня: при полностью отключенной клавише Caps Lock, сам Caps Lock иногда включается, а выключить нельзя (клавиша же отключена).
Посчитал, что «враждуют» между собой hook`и keepassxc`а punto`а.
У меня года 3 стоит переключение на Caps Lock, такого нет. Windows 10 последний, почти все настройки по умолчанию.
возможно виноваты мои кривые руки, но заставить его работать без багов я не смог
В целом я просто выработал привычку смотреть на индикатор Caps Lock боковым зрением перед вводом, чтобы определить раскладку. Горит — значит русская. Переключение тоже по Caps. Плюс каждое окно запоминает раскладку (kbdd)
Тем не менее я бы потестировал, однако две субличности не дают — внутренний параноик не хочет запускать скачанный из интернета кейлоггер с правами рута, а внутренний лентяй ленится смотреть в код и собирать самостоятельно
Надеюсь, что на Хабре найдутся менее ленивые параноики
Может быть, заглядывая в будущее, кто-то возьмется аналог Punto Switcher ваять в виде расширения для Wayland, хотя, поговаривают, там это как-то архитектурно непросто.
Когда смотришь на экран при наборе, надобность в перекодировке никогда не возникает.
Печатаю вслепую последние лет, наверное, 12. Потребность в перекодировке возникает по 100 раз на дню. На клавиатуру не смотрю. Просто я успеваю набрать слово\два\три прежде, чем до меня доходит, что раскладка была не та. Я довольно быстро печатаю. И пока я печатаю я не сказать чтобы анализирую что там за буквы на экране появляются. Голова в мыслях.
Полагаю, я далеко не один такой. Печать вслепую среди программистов, имхо, это скорее правило, а не особенность.
Я печатаю вслепую, но переключением раскладки пользуюсь постоянно.
Быстрее нажать Caps Lock для исправления последнего слова (одна кнопка), чем стирать, менять раскладку и писать заново (много кнопок).
Иногда печатаю вслепую, но смотрю не на текст, а в другое место.
Когда на Лин перешел — очень её не хватало. Да и сейчас не хватает, если честно. Но как эту задачу тут решить я вообще не представляю.
Технически — ничего сложного. Всё можно подглядеть в коде xinput.
Я пока сделал инструмент для того что больше всего «доставляло».
Дальше можно накинуть кучу биндингов на X11, но есть нюанс: на замену иксам навязывают сборки с wayland (в которых «из коробки» не заметно нужных интерфейсов) и не понятно чем всё закончится.
- Таблицы под винду были отлично реализованы в FAR manager. Под linux он тоже работает. Я так и не отказался от его редактора: слишком привык к той эргономике. Плагины, хоткеи — и вот оно.
Высказывание в том духе что «свободное время закончилось». А если формально «не первый автор а последний соавтор» — мне от этого не легче.
Лично меня добила невозможность завести xneur в моих последних системах (до этого как-то получалось, хотя коллеги с debian «приплыли» годом ранее).
P.S. Ну и, да, неприятно как-то, что в системе, как минимум, на один кейлоггер больше стало. :)
Я для себя проблему раскладок давно решил, сделав раскладку фиксированной. Caps — английская, Shift-Caps русская.
Теперь я всегда выставляю раскладку перед началом ввода. Повторное нажатие кнопки раскладки ничего не меняет, т.е. нажимать кнопку можно всегда. Идеально для ввода паролей и общей sanity. Нажал кнопку — точно знаешь, что русский (английский). Можно даже не присматриваться к вводимому.
Окружающие называют меня извращенцем. Смеюсь с них в правильной раскладке.
Оказалось, что можно жить и без подобных помогалок:
- Назначить однокнопочное переключение между языками,
- Ограничить число раскладок, входящих в кольцо переключения,
- Назначить отдельные клавиши на включение определённой раскладки.
После некоторого периода экспериментов оказалось удобно переключать языки по правой клавише «Alt». Экспериментировал с CapsLock, но туда идёт слабый духом мизинец, он часто жмёт ненужную «Tab», тогда как «Alt Gr» прямо под уверенным большим пальцем, легко нащупывается даже вслепую с помощью края длинной «Space».
Клавиши отдельных языков (после ряда экспериментов):
> русская = ScrollLock,
> английская = Pause/Break.
Помогает и неочевидный факт: румынский алфавит основан на латинице, поэтому даже в терминале для вписывания англоязычных слов достаточно переключаться только между русской и румынской раскладками. Недостаток: в румынской клавиатуре нет ординарной кавычки и седильи (~), поэтому если таки нужны английские штуки вроде «doesn't» — бацаю средним пальцем правой руки по «Pause/Break».
Сейчас настройки клавиатуры вот такие.
левый Cmd переключает раскладку на латиницу, правый Cmd на кириллицу.
Теперь вообще не нужно задумываться о раскладке – жамкнул перед набором текста нужную клавишу рядом с пробелом и чётко уверен в том, какую раскладку получишь.
На Windows было тоже самое только с клавишами Ctrl.
UPD. Попытался проверить под Ubuntu 18.04 — не работает.
В гноме 3 не работает. Пересел недавно опять на кеды, там ок.
Запускаете софтину в терминале.
- Если рушится, там написано почему. Например, «keypanic: permission error» указывает на недостаток привилегий. В сложном случае придётся разбираться с (неотключаемым толком в ubuntu) apparmor.
- После старта в stdout выводятся по строкам подключаемые устройства. Логично ожидать хотя бы одну строчку с «keyboard:» и одну с «mouse:». Если пусто, то есть ли "/dev/input/event*" (захардкоженный в переменную «DEV_INPUT»)?
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
Ровно та же техника что и в loloswitcher.
- Проверил, про «chmod +xs xswitcher» в статье — не забыл.
2. «раскладка на мгновение изменится» — чётко указывает на наличие «конкурента».
…А не ibus ли у Вас? Само окно дёргать локалью не обучено (как правило). Кто-то должен ему «помогать».
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. Подскажите, как вычислить конкурента и запретить ему конкурировать?
Для начала надо осмотреться и понять что вообще запущено. Я бы для этого перезагрузил систему и постарался выключить всё лишнее. Под подозрением — всё на электроне. Однако, главные подозреваемые — 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 работали и «а чего оно тут глючит?».
Если на те же кнопки, то они таки пересекаются.
- У себя в KDE я давно поотключал все варианты кроме ctrl+alt+k «на всякий случай». Но не факт что все сами догадаются. Надо будет добавить в FAQ.
# 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». Может и поможет…
# setxkbmap -query
rules: evdev
model: pc105
layout: us,ru,us
variant: ,,
options: grp_led:scroll
Сейчас гляну, спасибо!
!/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 в дальнейшем стандартный механизм перестает работать.
Должен же кто-то «висеть» на шине событий (не важно, evdev или XEvent или гномо-специфика) и ловить этот самый alt+shift.
Со своей стороны, могу предложить повесить на выход xswitcher запуск внешних сценариев. Мне не трудно. Но, должен предупредить: из того что я мерил, по dbus тормоза достигают 300мс на одно переключение. А до переключения нельзя перевводить текст.
Альтернативно, попробуйте совсем выключить игры с dbus. Возможно, такой метод как раз и «лочит» локаль в окне.
* За кадром остаётся вопрос, почему «layout: us,ru,us» (раскладка №2 дублирует раскладку №0).
Переключение через D-Bus очень долгое, это по сути мучение, но если появится возможно дергать внешний скрипт — в целом не будет лишним.
Отключал все хоткеи с shift-ом, результат тот же(.
Почему три раскладки отобразилось в душе не знаю, настроено ровно две. Проверил через gsettings увидел [('xkb', 'us'), ('xkb', 'ru')]. Во всех GUI тоже стоит две.
В общем, я в замешательстве, уже подумываю кеды поставить.
Использую Punto Switcher на Windows в основном, чтобы переключать раскладки: левый Ctrl — английская, правый Ctrl — русская. Когда переходил на Linux, перебрал несколько программ, но все было не то. Попробовал собрать LoLoSwitcher и сижу на нем уже два года. Собирается и настраивается легко, работает безупречно. Только не хватает изменения ошибочно набранного текста по клавише Break.
Но альтернативы — это хорошо! Больше софта под Linux хорошего и разного!
UPD. Если кто-то заинтересовался LoLo Switcher — вот еще полезная ссылка.
спасибо Windows Vista, окончательно пересев на Linux...
Мне тоже Виста в своё время помогла на Линукс перейти: сижу, верстаю макет, утром его сдать уже надо. После очередного зависания решил, что так не может больше продолжаться, скачал первый попавшийся дистрибутив (Mandriva), установил, доделал работу, не смотря на то, что Линукс первый раз в жизни видел. С тех пор уже 10 лет на Линуксе сижу — спасибо Майкрософт, что привели меня к нему.
Компиляция по инструкции прошла успешно
файл лежит тут /home/user/xswitcher/xswitcher
Как его запустить, чтобы работало переключение?
Сижу на Ubuntu
sudo chmod +xs /home/user/xswitcher/xswitcher
/home/user/xswitcher/xswitcher
Если что-то не так, см. коммент выше.
Убедившись что работает, можно и в автозапуск. Как это сделать для ubuntu, лучше посмотреть на профильных ресурсах.
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
Комп завис. Перезагрузил его
1. Проверяем что работает:
sudo /home/ewgenk/xswitcher/xswitcher
2. Если таки да, то:
sudo chown root:root /home/ewgenk/xswitcher/xswitcher
Я просто некоторые вещи стал считать очевидными, а это не так. Добавлю по итогам howto в статью.
Предварительно проверять (1) можно так (должен быть рабочий рут-аккаунт):
su
### enter root password
/home/ewgenk/xswitcher/xswitcher
Про suid, однако, всё верно.
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$
sudo ls -lah /home/ewgenk/xswitcher/xswitcher
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$
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:~$
ewgenk@ewgenk-K53SJ:~/xswitcher$ sudo ls -lah /dev/uinput
crw------- 1 root root 10, 223 апр 7 21:05 /dev/uinput
ewgenk@ewgenk-K53SJ:~/xswitcher$
Ноутбук со встроенной клавиатурой + мышка
Предварительный набросок HowTo:
- Из-под sudo работать не может, т.к. sudo обрезает контекст X'ов.
- Либо запускать из-под su (для отладки), либо навешивать suid. Обязателен владелец бинарника root. Ссылка «что такое suid».
- Чек-лист «если ничего не выходит читайте документацию».
Не работает только преобразование из английских букв в русские («обратный перевод производился чётко»): видно, что буквы стираются и перенабираются, но остаются те же самые.
Куда смотреть в поисках источника проблемы?
Может, дело в том, что «setxkbmap -query» выдаёт только одну раскладку?:
rules: evdev
model: pc105
layout: us
Для переключения обычно использую Alt+Shift с лампочкой для индикации, при старте системы запускается:
setxkbmap -v -option grp:switch,grp:alt_shift_toggle,grp_led:scroll us,ru
- Не понятно как оно по Alt+Shift переключает. Где-то пропущен нюанс.
В похожую ситуацию я влипал когда пробовал прикрутить доморощенные скрипты.
Типа вот такого вредного совета.
- Наверное, для подобных случаев надо прикрутить возможность запускать внешние скрипты вместо встроенного «дёрни за иксы». +Опция «дождаться завершения».
Скажите, пожалуйста, есть смысл пробовать запускать, если в системе три языка (en, ru, ua) с циклическим переключением?
Я закладывал свой кейс: «2 основных языка (0 и 1 локали) и ещё какие-то (e.g. китайский) редко».
Возможно, для Вашего случая есть вариант настроить хоткей для перекидывания порядка. Например, (en, ru, ua) vs (en, ua, ru).
Если (зачем-то) надо гонять именно по кольцу, это несложно устроить. Но предложите как это должно управляться.
Я, как закончу собирать «хотелки» — попробую сделать второй «подход к снаряду».
Вкручивать автопереключение я лично не планирую, но (как обычно) есть минимум два выхода:
- Взять имеющийся код и приделать свою функцию проверки. Или из xneur вытащить библиотеку. Но есть нюанс: xswitcher прямо сейчас включен уровнем ниже, и скен-коды от клавиатуры — совсем не то же что события из иксов. Будет желание — могу поделиться кусочком где я к иксам попробовал привернуть. «Много букв», на C.
- Поучаствовать во второй части. И предложить приемлемый интерфейс для прикручивания «плагинов». Я совсем не против, но пока просто не знаю «как». Будет интерфейс (API) и желающие — появятся и плагины.
Или распишите, что конкретно хочется. По Вашей ссылке — куча C++ кода под винду и отсутствие руководства по эксплуатации. Я такое не осилю.
Ctrl, Shift также раскладку не трогают.
PuntoSwitcher под виндой работал быстрее, тут же надо секундочку-другую подождать, но в убунту все что связано со вводом с клавиатуры как-то неторопливо.
Посмотрите комментарии к «предыдущей серии» (если хотите их забороть). Тормоза в этом случае «рассосутся».
Если, наоборот, хочется «подружить» — нужно отыскать правильный интерфейс к смене раскладки (где-то в районе dbus копать).
- Лично мне оказалось удобно выкинуть всё и оставить только индикатор раскладки. fcitx запускаю «руками», когда случается необходимость в «китайской грамоте».
Новый аналог Punto Switcher для linux: xswitcher