Обновить
26
0
Дмитрий Святогоров @PnDx

Инженер-конструктор систем массового обслуживания

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

Альтернативно, попробуйте совсем выключить игры с dbus. Возможно, такой метод как раз и «лочит» локаль в окне.
* За кадром остаётся вопрос, почему «layout: us,ru,us» (раскладка №2 дублирует раскладку №0).
Насколько я в курсе, 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». Может и поможет…
Тупой вопрос: а как у Вас настроен переключатель в иксах?
Если на те же кнопки, то они таки пересекаются.
  • У себя в KDE я давно поотключал все варианты кроме ctrl+alt+k «на всякий случай». Но не факт что все сами догадаются. Надо будет добавить в FAQ.
«Алгоритм поиска неисправности» — штука довольно универсальная.
Для начала надо осмотреться и понять что вообще запущено. Я бы для этого перезагрузил систему и постарался выключить всё лишнее. Под подозрением — всё на электроне. Однако, главные подозреваемые — 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 работали и «а чего оно тут глючит?».
1. Аналогичную проблему прорешали вот в этой ветке. Вкратце, владельцем бинарника с suid должен быть root.
2. «раскладка на мгновение изменится» — чётко указывает на наличие «конкурента».
…А не ibus ли у Вас? Само окно дёргать локалью не обучено (как правило). Кто-то должен ему «помогать».
Полагаю, вопрос решён выше.
Предварительный набросок HowTo:
  1. Из-под sudo работать не может, т.к. sudo обрезает контекст X'ов.
  2. Либо запускать из-под su (для отладки), либо навешивать suid. Обязателен владелец бинарника root. Ссылка «что такое suid».
  3. Чек-лист «если ничего не выходит читайте документацию».
Вот это: ewgenk ewgenk
Должен быть root:root
sudo chown root:root /home/ewgenk/xswitcher/xswitcher

Без этого suid даёт права ewgenk (которые и без того есть).
Покажите что выводит
sudo ls -lah /home/ewgenk/xswitcher/xswitcher
См. выше.
Извините, ляпнул про sudo не подумав. Хотя уж пора бы запомнить.
Однако, крайне странно видеть вновь «permission error». Рухнуть после выдачи прав должно было на XOpenDisplay().
Включена какая-то защита?
Показывает ли
sudo ls -lah /dev/uinput

наличие устройства на месте?
FIX: под номером 1 я глупость ляпнул. Потому что из-под sudo не будет XOpenDisplay() работать. Как и многое другое. Ни в каком виде, так уж его написали.
Предварительно проверять (1) можно так (должен быть рабочий рут-аккаунт):
su
### enter root password
/home/ewgenk/xswitcher/xswitcher

Про suid, однако, всё верно.
Что-то мне подсказывает что владелец файла — не root.
1. Проверяем что работает:
sudo /home/ewgenk/xswitcher/xswitcher

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

Я просто некоторые вещи стал считать очевидными, а это не так. Добавлю по итогам howto в статью.
Примерно так:
sudo chmod +xs /home/user/xswitcher/xswitcher
/home/user/xswitcher/xswitcher

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

Убедившись что работает, можно и в автозапуск. Как это сделать для ubuntu, лучше посмотреть на профильных ресурсах.
Не надо так делать. Надо или запускать от рута (т.к. внутри кондовый кейлоггер на devfs), или дать suid-bit.
Ровно та же техника что и в loloswitcher.
  • Проверил, про «chmod +xs xswitcher» в статье — не забыл.
Весьма неторопливый способ переключения.
Наверное, для чего-то редкого можно и так (а можно и мышкой: я так pinyin в fcitx включаю и не жалуюсь).
«Системы массового обслуживания» в моём случае представляют собой аппаратно-программные комплексы. «Вот на тех железках крутится (ок, linux, но случается и xen или ещё что). А теперь сделаем из этого…» CAD'ы т.о. остались для меня в прошлом, если Вы об этом. Программирования достаточно много, но оно никогда не самоцель.
Посмотрите вот в этом районе.
Полагаю, что-нибудь из предложенного вполне реально доработать под свои нужды и повесить на хоткей.
Для терминалов это всё не годится, поэтому — мимо меня.
Давайте попробуем отдебажить. «Не работать» должно ровно в одном случае: wayland без слоя совместимости с X11.
Запускаете софтину в терминале.
  • Если рушится, там написано почему. Например, «keypanic: permission error» указывает на недостаток привилегий. В сложном случае придётся разбираться с (неотключаемым толком в ubuntu) apparmor.
  • После старта в stdout выводятся по строкам подключаемые устройства. Логично ожидать хотя бы одну строчку с «keyboard:» и одну с «mouse:». Если пусто, то есть ли "/dev/input/event*" (захардкоженный в переменную «DEV_INPUT»)?
«В лоб» попадались скрипты с использованием xinput-tools и башатины. Посмотрите посвящённые xneur темы: когда автор заявил что «всё» — появились и попытки сделать новый инструмент.
Технически — ничего сложного. Всё можно подглядеть в коде xinput.
Я пока сделал инструмент для того что больше всего «доставляло».
Дальше можно накинуть кучу биндингов на X11, но есть нюанс: на замену иксам навязывают сборки с wayland (в которых «из коробки» не заметно нужных интерфейсов) и не понятно чем всё закончится.
  • Таблицы под винду были отлично реализованы в FAR manager. Под linux он тоже работает. Я так и не отказался от его редактора: слишком привык к той эргономике. Плагины, хоткеи — и вот оно.

Информация

В рейтинге
Не участвует
Откуда
Санкт-Петербург и область, Россия
Зарегистрирован
Активность