Форум русскоязычного сообщества Ubuntu


Считаете, что Ubuntu недостаточно дружелюбна к новичкам?
Помогите создать новое Руководство для новичков!

Автор Тема: Easy Switcher - переключатель раскладки клавиатуры  (Прочитано 855668 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн freemind

  • Автор темы
  • Участник
  • *
  • Сообщений: 177
    • Просмотр профиля
Многое из написанного ниже уже не актуально, но оставлю чтобы не нарушать обсуждение
Актуальный релиз: https://forum.ubuntu.ru/index.php?topic=319515.msg2492778#msg2492778
Установка и настройка: https://forum.ubuntu.ru/index.php?topic=319515.msg2489904#msg2489904
_____________________________________________________________________________________

Лет 10 у меня на компе жил и работал gxneur.
Еще на Ubuntu 20.04 он кое-как работал в ручном режиме, но после недавнего перехода на 22.04 (да, затянул), завести мне его уже не удалось.
Пару недель я страдал без переключателя, и в итоге решил написать свой.
Назвал его dino (добавлено: программа переименована в Easy Switcher), вот, решил поделиться

Это пока не далеко не релиз, а скажем, версия 0.0.0.1. Сейчас мне хотелось бы понять, рабочая ли концепция.
Посмотрев исходники xneur, я понял что разбираться с xkb мне не хочется.
Основной идеей является простота, надежность, и чтоб не программа не переставала работать с выходом новой версии ОС или ДЕ.
Поэтому решил отказаться от взаимодействия с рабочим окружением и читать клавиатуру напрямую с ядра. Плюсов такого подхода много:
- по идее работать должно на любых ОС с ядром линукс,
- не зависит от рабочего окружения, от выхода их новых версий и обновлений библиотек.
- Вряд ли в обозримой перспективе в ядре будет что-то меняться в части работы с клавиатурой.
- Корректная работа в LibreOffice (в xneur с этим были проблемы)

Минусы тоже есть, а именно невозможность исправления выделенного текста, сложность реализации автоматического переключения и потенциальная его нестабильная работа.

По ссылке - архив исполняемого файла. Собран на Ubuntu 22.04, на более ранних версиях запускаться вероятно не будет, хотя я не проверял. Deb пакета пока нет.
Для установки скачать, распаковать куда хочется, проверить права на запуск, и запустить в терминале с правами root. Почему нужен рут? Потому что без него не прочитать /dev/input (добавлено: root не обязателен)
После запуска программа ничего не выводит, т.к. программа пишется как демон, функционал не реализован. В стандартный вывод пока могут попасть только ошибки до запуска, а все остальное пишется в syslog.

После первого запуска в каталоге etc/dino/ появится dino.conf
В нем нужно прописать клавиатуру, мышь, и кнопки смены раскладки и исправления текста, после чего перезапустить программу Пояснения в конфиге имеются.
По умолчанию исправление текста - клавиша Pause/Break, смена раскладки завязана на клавишу Win.

Как работает?
Программа ловит нажатия клавиш, запоминает их, а при нажатии Break стирает написанное, меняет раскладку, и пишет заново.
Смена раскладки происходит эмуляцией нажатия Win (или другой клавиши, прописанной в конфиге). Сочетания клавиш пока не реализованы, поэтому, если не хотите расставаться с Ctrl+Shift, то нужно в настройках Ubuntu добавить дополнительную клавишу смены раскладки (например с помощью Gnome tweak tool, если у вас gnome, в kde тоже наверняка можно сделать).

Изначально думал что переключаться будет быстро, буквы будут вылетать как из пулемета, однако на практике оказалось, что ДЕ не успевает обработать все нажатия. Если у вас появляются ошибки, поиграйте с параметром delay, это задержка при выводе символов. Если ошибок при смене раскладки нет, delay можно уменьшить.
В принципе, в сессии Wayland программа работает приятно. В иксах буквы летят вперемешку, приходится delay увеличивать.

Если будете пробовать, прошу отписаться, какая ОС и ДЕ.
Логика обработки нажатий пока проработана не до конца, тоже прошу комментировать.
« Последнее редактирование: 23 Февраля 2024, 21:42:22 от freemind »

Оффлайн qpdb

  • Активист
  • *
  • Сообщений: 619
  • xUbuntu 22.04
    • Просмотр профиля
Re: переключатель раскладки клавиатуры
« Ответ #1 : 13 Марта 2023, 05:37:41 »
Приветствую! Очень многообещающее начинание! Очень хочется чтобы это начинание постиг успех! Обязательно буду пробовать. Мне в общем-то для украинского (русского) языков программа не очень нужна.

Французский — английский волнует больше из-за более частого использования. Завтра попробую, о результатах напишу…

2023 Mar 12; 10:37 PM; Oakville, ON, Canada.

Рекомендую ознакомиться с современной трактовкой темы „collective responsibility and the state”, а также темами сопряжёнными с этой… В современных реалиях это может оказаться полезным…

Оффлайн БТР

  • Заслуженный пользователь
  • СуперМодератор
  • Старожил
  • *
  • Сообщений: 6161
    • Просмотр профиля
Re: переключатель раскладки клавиатуры
« Ответ #2 : 13 Марта 2023, 09:43:14 »
freemind,  спасибо за полезную программу.
Назвал его dino
Если программа станет популярной, нужно учитывать это:    https://dino.im

запустить в терминале с правами root.
Программа ловит нажатия клавиш, запоминает их
Большие сомнения, что кто-то с пониманием системы чуть выше базовых знаний будет её использовать с таким вариантом реализации. Как понимаете, это кейлоггер в чистом виде с неограниченными правами.

Оффлайн F12

  • Администратор
  • Старожил
  • *
  • Сообщений: 4402
    • Просмотр профиля
Re: переключатель раскладки клавиатуры
« Ответ #3 : 13 Марта 2023, 09:57:18 »
... это кейлоггер в чистом виде с неограниченными правами.
а ведь действительно!

ЗЫЖ в теме отписался не столько чтоб подтвердить, и без моего "а ведь ..." очевидное, сколько чтоб саму тему не потерять  :)

Оффлайн freemind

  • Автор темы
  • Участник
  • *
  • Сообщений: 177
    • Просмотр профиля
Re: переключатель раскладки клавиатуры
« Ответ #4 : 13 Марта 2023, 10:55:16 »
По поводу безопасности тут рассуждать смысла нет особо, любой подобный софт может вызывать подозрения.
С другой стороны исходников Punto Switcher никто не видел, а пользуются повсеместно.
Если есть способ читать /dev/input без прав root, предложите.
Вариант с ядром привлекателен за счет стабильности. (В теории  :))
« Последнее редактирование: 13 Марта 2023, 11:11:46 от freemind »

Онлайн KOT040188

  • Активист
  • *
  • Сообщений: 325
    • Просмотр профиля
Re: переключатель раскладки клавиатуры
« Ответ #5 : 14 Марта 2023, 03:06:57 »
Вещь конечно полезная, после медленных и портящих буфер обмена скриптов. Но способ употребления с запуском через рут это не то что я хотел бы использовать каждый день. Или будет какое-то развитие с запуском как сервис?
Хто ты гэткі?

Оффлайн freemind

  • Автор темы
  • Участник
  • *
  • Сообщений: 177
    • Просмотр профиля
Re: переключатель раскладки клавиатуры
« Ответ #6 : 14 Марта 2023, 12:09:26 »
Да, будет, не доделал ещё, в процессе.
Выложил первые наброски просто, подумал может кому интересно, и хотел узнать, работает или нет программа на других компьютерах.

Онлайн KOT040188

  • Активист
  • *
  • Сообщений: 325
    • Просмотр профиля
Re: переключатель раскладки клавиатуры
« Ответ #7 : 14 Марта 2023, 15:42:06 »
В нем нужно прописать клавиатуру, мышь
Где взять эту инфу?
Хто ты гэткі?

Онлайн Usermaster

  • СуперМодератор
  • Старожил
  • *
  • Сообщений: 2536
    • Просмотр профиля
Re: переключатель раскладки клавиатуры
« Ответ #8 : 14 Марта 2023, 16:11:00 »
Я вот прочитал первый пост и мне что-то это навеяло.  :)

Кажется один проект похоже начинался:
(Нажмите, чтобы показать/скрыть)

Оффлайн qpdb

  • Активист
  • *
  • Сообщений: 619
  • xUbuntu 22.04
    • Просмотр профиля
Re: переключатель раскладки клавиатуры
« Ответ #9 : 14 Марта 2023, 16:24:20 »
Где взять эту инфу?
Не берусь утверждать точно, но возможно вот так что ли посмотреть😕…
ls -al /dev/input/by-path
total 0
drwxr-xr-x 2 root root 140 Mar 14 06:43 .
drwxr-xr-x 4 root root 380 Mar 14 06:43 ..
lrwxrwxrwx 1 root root  10 Mar 14 06:43 pci-0000:00:1d.0-usb-0:1.4.1:1.0-event -> ../event12
lrwxrwxrwx 1 root root   9 Mar 14 06:43 pci-0000:00:1d.0-usb-0:1.5:1.0-event-kbd -> ../event2
lrwxrwxrwx 1 root root   9 Mar 14 06:43 pci-0000:00:1d.0-usb-0:1.6:1.0-event-mouse -> ../event5
lrwxrwxrwx 1 root root   9 Mar 14 06:43 pci-0000:00:1d.0-usb-0:1.6:1.0-mouse -> ../mouse0
lrwxrwxrwx 1 root root   9 Mar 14 06:43 pci-0000:00:1d.0-usb-0:1.5:1.1-event -> ../event
И отсюда как-то брать данные

Потом может вот так как-то писать :idiot2:, автор должен подсказать…
InputDevice=/dev/input/by-path/pci-0000:00:1d.0-usb-0:1.5:1.0-event-kbd
« Последнее редактирование: 14 Марта 2023, 16:27:15 от qpdb »
Рекомендую ознакомиться с современной трактовкой темы „collective responsibility and the state”, а также темами сопряжёнными с этой… В современных реалиях это может оказаться полезным…

Онлайн KOT040188

  • Активист
  • *
  • Сообщений: 325
    • Просмотр профиля
Re: переключатель раскладки клавиатуры
« Ответ #10 : 14 Марта 2023, 16:54:29 »
qpdb, и как тут что понять?
kot@192:~$ ls -al /dev/input/by-path
итого 0
drwxr-xr-x 2 root root 320 сак 14 15:02 .
drwxr-xr-x 4 root root 800 сак 14 16:05 ..
lrwxrwxrwx 1 root root   9 сак  3 11:28 pci-0000:00:14.0-usb-0:3:1.0-event-kbd -> ../event5
lrwxrwxrwx 1 root root  10 сак  3 11:28 pci-0000:00:14.0-usb-0:3:1.1-event -> ../event14
lrwxrwxrwx 1 root root   9 сак  3 11:28 pci-0000:00:14.0-usb-0:3:1.1-event-mouse -> ../event6
lrwxrwxrwx 1 root root   9 сак  3 11:28 pci-0000:00:14.0-usb-0:3:1.1-mouse -> ../mouse0
lrwxrwxrwx 1 root root  10 сак  3 11:28 pci-0000:00:14.0-usb-0:3:1.2-event -> ../event17
lrwxrwxrwx 1 root root  10 сак  3 11:28 pci-0000:00:14.0-usb-0:4:1.0-event -> ../event20
lrwxrwxrwx 1 root root  10 сак  3 11:28 pci-0000:00:14.0-usb-0:4:1.0-event-mouse -> ../event19
lrwxrwxrwx 1 root root   9 сак  3 11:28 pci-0000:00:14.0-usb-0:4:1.0-mouse -> ../mouse1
lrwxrwxrwx 1 root root  10 сак  3 11:28 pci-0000:00:14.0-usb-0:4:1.1-event-kbd -> ../event21
lrwxrwxrwx 1 root root  10 сак  3 11:28 pci-0000:00:14.0-usb-0:4:1.2-event-joystick -> ../event26
lrwxrwxrwx 1 root root   6 сак  3 11:28 pci-0000:00:14.0-usb-0:4:1.2-joystick -> ../js1
lrwxrwxrwx 1 root root   9 сак 14 15:02 pci-0000:00:14.0-usb-0:9:1.0-event-joystick -> ../event4
lrwxrwxrwx 1 root root   6 сак 14 15:02 pci-0000:00:14.0-usb-0:9:1.0-joystick -> ../js0
lrwxrwxrwx 1 root root   9 сак  3 11:28 platform-pcspkr-event-spkr -> ../event3
Хто ты гэткі?

Оффлайн qpdb

  • Активист
  • *
  • Сообщений: 619
  • xUbuntu 22.04
    • Просмотр профиля
Re: переключатель раскладки клавиатуры
« Ответ #11 : 14 Марта 2023, 17:33:57 »
lrwxrwxrwx 1 root root   9 сак  3 11:28 pci-0000:00:14.0-usb-0:3:1.0-event-kbd -> ../event5
Ну, вот это клавиатура, больше ничего не подходит, вроде…😕
lrwxrwxrwx 1 root root  10 сак  3 11:28 pci-0000:00:14.0-usb-0:4:1.1-event-kbd -> ../event21
Но и это на клавиатуру похоже…😞
То что с „0” на конце точно не подходит.
Такой обширный вывод у Вас возможно из-за того, что у Вас мышь и клавиатура подключены дистанционно. А у меня как в 19 веке😇 по кабелям…
KOT040188, я в этом вопросе явно не умнее Вас😇, потому ждём специалиста!

2023 Mar 14; 10:33 AM

Смотрите, вот же ж есть ещё
xinput --list
⎡ Virtual core pointer                    id=2 [master pointer  (3)]
⎜   ↳ Virtual core XTEST pointer              id=4 [slave  pointer  (2)]
⎜   ↳ PIXART USB OPTICAL MOUSE                id=13 [slave  pointer  (2)]
⎣ Virtual core keyboard                    id=3 [master keyboard (2)]
    ↳ Virtual core XTEST keyboard              id=5 [slave  keyboard (3)]
    ↳ Power Button                            id=6 [slave  keyboard (3)]
    ↳ Video Bus                                id=7 [slave  keyboard (3)]
    ↳ Power Button                            id=8 [slave  keyboard (3)]
    ↳ HP 720p HD Monitor Webcam: HP 7          id=9 [slave  keyboard (3)]
    ↳ Logitech USB Keyboard                    id=10 [slave  keyboard (3)]
    ↳ Logitech USB Keyboard Consumer Control  id=11 [slave  keyboard (3)]
    ↳ Logitech USB Keyboard System Control    id=12 [slave  keyboard (3)]
Вот оно даёт „id=12”, к примеру…  Может это каким-то способом поможет определить устройство?

2023 Mar 14; 11:04 AM
« Последнее редактирование: 14 Марта 2023, 18:04:58 от qpdb »
Рекомендую ознакомиться с современной трактовкой темы „collective responsibility and the state”, а также темами сопряжёнными с этой… В современных реалиях это может оказаться полезным…

Онлайн KOT040188

  • Активист
  • *
  • Сообщений: 325
    • Просмотр профиля
Re: переключатель раскладки клавиатуры
« Ответ #12 : 14 Марта 2023, 18:09:19 »
Такой обширный вывод у Вас возможно из-за того, что у Вас мышь и клавиатура подключены дистанционно
Нет, по кабелям.

Пользователь добавил сообщение 14 Марта 2023, 18:11:29:
Смотрите, вот же ж есть ещё
kot@192:~$ xinput --list
⎡ Virtual core pointer                          id=2    [master pointer  (3)]
⎜   ↳ Virtual core XTEST pointer                id=4    [slave  pointer  (2)]
⎜   ↳ ROCCAT ROCCAT HORDE AIMO Mouse            id=10   [slave  pointer  (2)]
⎜   ↳ ROCCAT ROCCAT HORDE AIMO Consumer Control id=11   [slave  pointer  (2)]
⎜   ↳ ROCCAT ROCCAT Tyon White Mouse            id=14   [slave  pointer  (2)]
⎜   ↳ ROCCAT ROCCAT Tyon White Consumer Control id=15   [slave  pointer  (2)]
⎜   ↳ keyd virtual pointer                      id=18   [slave  pointer  (2)]
⎣ Virtual core keyboard                         id=3    [master keyboard (2)]
    ↳ Virtual core XTEST keyboard               id=5    [slave  keyboard (3)]
    ↳ Power Button                              id=6    [slave  keyboard (3)]
    ↳ Power Button                              id=7    [slave  keyboard (3)]
    ↳ Sleep Button                              id=8    [slave  keyboard (3)]
    ↳ ROCCAT ROCCAT HORDE AIMO                  id=9    [slave  keyboard (3)]
    ↳ ROCCAT ROCCAT HORDE AIMO System Control   id=12   [slave  keyboard (3)]
    ↳ ROCCAT ROCCAT HORDE AIMO                  id=13   [slave  keyboard (3)]
    ↳ ROCCAT ROCCAT Tyon White                  id=16   [slave  keyboard (3)]
    ↳ ROCCAT ROCCAT HORDE AIMO Consumer Control id=19   [slave  keyboard (3)]
    ↳ ROCCAT ROCCAT Tyon White Consumer Control id=20   [slave  keyboard (3)]
    ↳ keyd virtual device                       id=17   [slave  keyboard (3)]
« Последнее редактирование: 14 Марта 2023, 18:11:29 от KOT040188 »
Хто ты гэткі?

Оффлайн qpdb

  • Активист
  • *
  • Сообщений: 619
  • xUbuntu 22.04
    • Просмотр профиля
Re: переключатель раскладки клавиатуры
« Ответ #13 : 14 Марта 2023, 18:40:27 »
Нет, по кабелям.
Может вот так ещё ясности поможет:
ls -al /dev/input/by-id
total 0
drwxr-xr-x 2 root root 140 Mar 14 06:43 .
drwxr-xr-x 4 root root 380 Mar 14 06:43 ..
lrwxrwxrwx 1 root root   9 Mar 14 06:43 usb-Logitech_USB_Keyboard-event-if01 -> ../event3
lrwxrwxrwx 1 root root   9 Mar 14 06:43 usb-Logitech_USB_Keyboard-event-kbd -> ../event2
lrwxrwxrwx 1 root root   9 Mar 14 06:43 usb-PIXART_USB_OPTICAL_MOUSE-event-mouse -> ../event5
lrwxrwxrwx 1 root root   9 Mar 14 06:43 usb-PIXART_USB_OPTICAL_MOUSE-mouse -> ../mouse0
lrwxrwxrwx 1 root root  10 Mar 14 06:43 usb-Sunplus_IT_Co_HP_720p_HD_Monitor_Webcam-event-if00 -> ../event12
Уж положим „/event2” точно для клавиатуры… Я ещё не пробовал устанавливать, может из конфига понятно что туда писать?

2023 Mar 14; 11:40 AM
Рекомендую ознакомиться с современной трактовкой темы „collective responsibility and the state”, а также темами сопряжёнными с этой… В современных реалиях это может оказаться полезным…

Оффлайн freemind

  • Автор темы
  • Участник
  • *
  • Сообщений: 177
    • Просмотр профиля
Re: переключатель раскладки клавиатуры
« Ответ #14 : 14 Марта 2023, 18:41:27 »
Где взять эту инфу?
hwinfo --keyboard --short
дальше или догадаться или методом перебора
у меня так:
oleg@xbook2:~$ hwinfo --keyboard --short
keyboard:                                                       
  /dev/input/event5    YICHIP Wireless Device
  /dev/input/event2    AT Translated Set 2 keyboard
event2 - моя клавиатура

мышь обычно /dev/input/mice, проверить можно ~$ hwinfo --mouse --short
oleg@xbook2:~$ hwinfo --mouse --short
mouse:                                                         
  /dev/input/mice      YICHIP Wireless Device
  /dev/input/mice      HTIX5288:00 0911:5288 Mouse
  /dev/input/mice      HTIX5288:00 0911:5288 Touchpad
/dev/input/mice держит все мышеподобные устройства в одном выводе, т.е. будет ловить и мышь и тачпад

Поясню, для чего ловим мышь. Программа не взаимодействует с ДЕ, соответственно не знает сменился фокус ввода или нет.
Если сменился, то нужно забыть все что вводилось до этого иначе при нажатии break вывалится все что мы до этого вводили в других окнах.
При нажатии кнопок мыши программа считает что поменялось окошко ввода и чистит буфер. Движения указателя игнорируются.
« Последнее редактирование: 14 Марта 2023, 19:01:58 от freemind »

 

Страница сгенерирована за 0.062 секунд. Запросов: 22.