LINUX.ORG.RU

Механические клавиатуры Panteon T24 Pro и Machenike K520 самопроизвольно переключают раскладку в моем Debian 12!

 , , , ,


0

3

Привет, народ!

Имею Linux Debian 12.9, ядро 6.1.0-31-amd64, LXDE, стандартный setxkbmap, и старенькую пленочную клавиатуру A4TECH KR-85. Она нормально работает, никаких проблем с ней нет.

Домашние меня решили порадовать, и подарили на ДР механическую клавиатуру Panteon T24 Pro RS HL Premium. В /dev/input/by-id она видится как

usb-Evision_RGB_Keyboard-event-if01 -> ../event8
usb-Evision_RGB_Keyboard-event-kbd -> ../event6


Через пару минут моих тестов сразу же вылезла проблема:

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

Причем индикатор раскладки остается как RU, а печатаются английские символы.



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

цукгoh
гнщsgf
ецыihj
щзуfrh
лдуdth
кгеghs
дафdes
дшлjuh


Каково же было мое удивление, когда вместо этой новой клавиатуры я подключил другую механическую клавиатуру Machenike K520 трехлетней давности, которая видится в системе как:

usb-SEMICO_USB_Gaming_Keyboard-event-if01
usb-SEMICO_USB_Gaming_Keyboard-event-kbd


И у нее оказалась точно такая же проблема! Вот какие моменты переключения:

к вуsgj
клд;yers
рынjdl
шуаоrpi
лдouge


То есть, явно проблема не в клавиатуре, а в Linux.

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

В общем, даже не знаю куда в какую сторону копать.
Это проблема USB?
Проблема ядра?
На другом компьютере с Linux Mint и ядром 5.12 этой проблемы нет.
То есть, регрессия в ядре?
Или какой-то из слоев DE по контролю переключения раскладки тупит?


PS: Оформил баг на KDE.org. Добавьте себя в наблюдатели, чтоб баг по important поднялся повыше.

https://bugs.kde.org/show_bug.cgi?id=517991

★★★★★

Последнее исправление: Xintrea (всего исправлений: 1)

Уточни описание проблемы. На твоих примерах везде видно что три буквы русские, затем английские. Эта английская раскладка остаётся насовсем, или после секундной (или какой?) паузы в наборе она становится назад русской? Посмотри xev (у тебя xorg надеюсь?) - в нём видны и сканкоды кнопок и буквы, в которые они транслируются, и моменты переключения раскладки (state 0x2000). Проверь поведение в ядерной консоли.

firkax ★★★★★
()
Ответ на: комментарий от firkax

Эта английская раскладка остаётся насовсем, или после секундной (или какой?) паузы в наборе она становится назад русской?

Назад русской не становится. Слетает именно в направлении русская -> на английскую. С английской на русскую не слетает.

Посмотри xev (у тебя xorg надеюсь?) - в нём видны и сканкоды кнопок и буквы, в которые они транслируются, и моменты переключения раскладки (state 0x2000)

Попробовал, но он странно работает. Если оставлять окно xev активным, то проблема не вылазит. Если переключиться на редактор, то в консоль, где запущен xev, попадают далеко не все нажатия клавиш, так что отследить проблему невозможно.

Проверь поведение в ядерной консоли.

Проверил, в ядерной консоли - проблемы нет.

Проверил разные программы.

Konsole - есть проблема!
Kwrite - есть проблема!
Kate - есть проблема!
KTorrent - есть проблема! (И в однострочных и в многострочных полях ввода)

QtCreator 18.0.2 - нет проблемы
MyTetra (Qt) - нет проблемы

Leafpad - нет проблемы
Firefox - нет проблемы
Chromium - нет проблемы
Libre Office Writer - нет проблемы
Zim - нет проблемы


В общем, делаю вывод, что проблема в KDE-шных библиотеках.

Тем более, что как я писал в топике, индикатор клавиатуры не переключается на EN, а остается на RU даже когда самопроизвольное переключение на EN произошло. А это значит, что клавиатура не посылает никаких команд переключения раскладки. Это какая-то библиотека KDE при каких-то кодах вдруг переключает раскладку и начинает фигачить английские символы.

Мда, как исправлять - мыслей никаких нет.

Xintrea ★★★★★
() автор топика
Последнее исправление: Xintrea (всего исправлений: 2)
Ответ на: комментарий от router

и вот здесь тоже говорят, что есть проблемы с ibus

https://bugs.kde.org/show_bug.cgi?id=454223

и тут ibus :) Исправление ошибок в DSDT (комментарий)

попробуй снести нафиг эту хренотень

router ★★★★★
()
Последнее исправление: router (всего исправлений: 1)
Ответ на: комментарий от vbcnthfkmnth123

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

Не, раскладка глобальная.

Xintrea ★★★★★
() автор топика
Ответ на: комментарий от router

и вот здесь тоже говорят, что есть проблемы с ibus

Но у меня не стоит пакет ibus:

p ibus - Intelligent Input Bus - core

У меня стоит только libibus
>aptitude search ibus | grep "^i.*ibus" | grep -v usb
i A gir1.2-ibus-1.0 - Интеллектуальная шина ввода — данные для интроспекции
i A libibus-1.0-5 - Intelligent Input Bus - shared library
i A libibus-1.0-dev - Intelligent Input Bus - development file

Удалить libibus не могу, ибо от него зависят libsdl2 и libfluintsynth, а я ими пользуюсь.

Xintrea ★★★★★
() автор топика
Ответ на: комментарий от Xintrea

Там у него что-то с глобальной и локальной раскладкой.

Он же пишет в последнем комментарии что и так была выбрана глобальная раскладка. И насколько я понял, помогло ему просто подергать настройки туда-сюда.

Tanger ★★★★★
()
Ответ на: комментарий от Tanger

Он же пишет в последнем комментарии что и так была выбрана глобальная раскладка. И насколько я понял, помогло ему просто подергать настройки туда-сюда.

Да подергал я конечно. На решение бага это не влияет.

Xintrea ★★★★★
() автор топика

На другом компьютере с Linux Mint и ядром 5.12 этой проблемы нет.

Только хотел предложить проверить другие дистрибутивы, но перечитал пост повнимательней. )

То есть, регрессия в ядре?

Ну так попробуй с другим ядром. Новым, старым. Попытка не пытка.

krasnh ★★★★★
()
Ответ на: комментарий от router

Да, стоит открыть в фоне терминал с dmesg -w и посмотреть нет ли там событий реконнекта. Но по моему опыту при реконнектах - теряются клавиши, это было бы заметно и в тех приложениях где глюка нет

GPFault ★★★
()
Ответ на: комментарий от router

У ТСа две разных клавиатуры повторяют поведение же, глюкалка неправа.

Ну и уже очевидно, что во всём виноваты кеды, надо с ними разбираться.

Bfgeshka ★★★★★
()
Последнее исправление: Bfgeshka (всего исправлений: 1)
Ответ на: комментарий от router

If you have a mechanical keyboard with a loose USB-C cable or a power-saving setting that causes it to «flicker» (disconnect/reconnect), KDE might revert to the default system layout

имхо, дисконнекты должны светиться в dmesg

Если читать пост внимательно, я проверил на двух разных механических клавиатурах от разных производителей. Баг не в USB, баг в KDE-шных либах. И лезет он даже если у тебя не KDE, а только KDE-софт.

Xintrea ★★★★★
() автор топика
Ответ на: комментарий от SpaceRanger

Panteon T24 Pro RS HL Premium
Premium
3 тыщи рублей
может это экстрапремиальная клавиатура косячная?

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

Xintrea ★★★★★
() автор топика
Ответ на: комментарий от Xintrea

В общем, делаю вывод, что проблема в KDE-шных библиотеках.

А кеды и дистр у тебя какие?
С какой-то версии там стали шаманить с вводом, я на это тоже наступил:

  • Во-первых, там прикрутили iBus. Эта хрень идёт вразрез с «Раскладками», настроенными в настройках клавиатуры, и делает переключение раскладок непредсказуемым. Его можно либо удалить нафиг совсем, либо (у меня в заметках записано, видимо, помогло, но я не помню точно уже) выключить командой im-config -n xim.
  • В ещё более новых кедах сделали Fcitx для переключения. Оно срёт сообщениями про группы ввода и также творит ерунду, идя вразрез с настройками раскладок. Его можно либо отключить (im-config -n none), либо вообще к чертям выкорчевать (sudo apt purge —autoremove fcitx* im-config). Я выбрал последнее.
Zhbert ★★★★★
()
Ответ на: комментарий от hbars

комбинацию переключалки

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

У меня на леопольде так можно поменять местами некотоые клавиши, подвигав ползунок.

Zhbert ★★★★★
()
Последнее исправление: Zhbert (всего исправлений: 1)
Ответ на: комментарий от router

Тебе, видимо, религия не позволила прочитать первое предложение в топике.

Там сказано, что у меня LXDE, никакого KDE у меня нет.

И, соответственно, пакеты fcitx и im-config никогда не устанавливались.

Сейчас нужно разобраться, исходники какой библиотеки надо пересобрать и поковырять, чтобы понять причину переключения в KDE-шных программах. Если бы дело было в самих конечных программах, я бы смог поковырять. А тут вообще непонятно на что смотреть.

Xintrea ★★★★★
() автор топика
Последнее исправление: Xintrea (всего исправлений: 1)
Ответ на: комментарий от Xintrea

В общем, по всей видимости, проблема где-то в глубинах libkf5texteditor5.

Есть подозрение, что в какой-то момент может слетать текстовый кодек на Latin-1, и потому выводятся только английские символы.

А может быть, еще какая-то причина.

Xintrea ★★★★★
() автор топика
Ответ на: комментарий от Xintrea

В общем, пока что выяснил следующее.

Например, в KTorrent глюк возникает в окне «Создать торрент» в элементе «Комментарии». И если посмотреть в UI-файл, то этот элемент описан так:

     <item>
      <widget class="QLineEdit" name="m_comments"/>
     </item>

То есть, похоже что проблема не в libkf5, а именно в самом системном Qt, коль тупит QLineEdit.

Xintrea ★★★★★
() автор топика
Ответ на: комментарий от Xintrea

Есть подозрение, что в какой-то момент может слетать текстовый кодек на Latin-1, и потому выводятся только английские символы.

Немного не по теме, но вспомнился давний случай, когда при открытии арчвики падали клоны лисы - palemoon, basilisk, с ошибкой сегментирования.
Непонятна была причина, пока не прогнал через GDB. Оказалось, браузеры собраны были без тайской локали. 😀 Стоило добавить пакет libthai и проблема исчезла.

krasnh ★★★★★
()
Последнее исправление: krasnh (всего исправлений: 1)

Теста ради, попробуй воспроизвести на не deb-based дистре. У меня Дебиан и Убунту с производными иногда выдавали рандомные и очень странные глюки, которых не было на Арче или Сусе.

slepoy_pew
()
Ответ на: комментарий от Xintrea

Значит, вот что успел проверить.

Есть баг на конфигурациях:
* Ноут HP450, Debian 12.9, LXDE, Qt 5.15.8,
* Gigabyte H510M S2H V2, Debian 12.12, LXDE, Qt 5.15.8

Бага нет:
* Gigabyte Z77-D3H, Astra Linux 1.6, Qt 5.11.0
* Gigabyte Z77-D3H, Astra Linux 1.6, сборка ПО с Qt 5.12.6
* Microstar B550M PRO_VHD, Astra Linux 1.7, Qt 5.15.2
* Ноут HP450, Debian 12.9, LXDE, сборка ПО с Qt 5.15.18

То есть, все указывает на баг, который появился в Qt в диапазоне примерно от 5.15.2 (его еще не было), 5.15.8 (баг появился), 5.15.18 (баг исчез).

И скорее всего баг находится в libqt5gui5, где-то в районе XCB, например в файле /qtbase-opensource-src-5.15.8+dfsg/src/plugins/platforms/xcb/qxcbkeyboard.cpp.

Xintrea ★★★★★
() автор топика
Ответ на: комментарий от Xintrea

В общем, собрал я тестовую программку с одним только полем ввода QLineEdit. И запускаю с отладкой:

export QT_LOGGING_RULES="qt.qpa.*=true"
./keyboard

Строка с переходом на EN выглядит так:
лджываэпрl;kj

Здесь
l
- это первый английский символ.

И вот что в логе видно:
Event received by: QWidget - Key: 16777251 - Text: ""
Event received by: MainWindow - Key: 16777251 - Text: ""
qt.qpa.events: Event | XCB_PROPERTY_NOTIFY(28) | sequence: 653
qt.qpa.events: Event | XCB_KEY_PRESS(2) | sequence: 657
qt.qpa.events: Event | XCB_XKB_* event(85) | sequence: 657
qt.qpa.xkeyboard: TODO: Support KeyboardLayoutChange on QPA (QTBUG-27681)
Event received by: QWidgetWindow - Key: 0 - Text: ""
Event received by: MyLineEdit - Key: 0 - Text: ""
Key:  0
Event received by: QWidget - Key: 0 - Text: ""
Event received by: MainWindow - Key: 0 - Text: ""
qt.qpa.events: Event | XCB_PROPERTY_NOTIFY(28) | sequence: 658
qt.qpa.events: Event | XCB_KEY_RELEASE(3) | sequence: 658
qt.qpa.events: Event | XCB_KEY_RELEASE(3) | sequence: 662
qt.qpa.events: Event | XCB_XKB_* event(85) | sequence: 662
qt.qpa.events: Event | XCB_KEY_PRESS(2) | sequence: 682
Event received by: QWidgetWindow - Key: 1051 - Text: "л"
Event received by: MyLineEdit - Key: 1051 - Text: "л"
Key:  1051
qt.qpa.events: Event | XCB_PROPERTY_NOTIFY(28) | sequence: 683
qt.qpa.events: Event | XCB_KEY_RELEASE(3) | sequence: 687
qt.qpa.events: Event | XCB_KEY_PRESS(2) | sequence: 691
Event received by: QWidgetWindow - Key: 1044 - Text: "д"
Event received by: MyLineEdit - Key: 1044 - Text: "д"
Key:  1044
qt.qpa.events: Event | XCB_PROPERTY_NOTIFY(28) | sequence: 692
qt.qpa.events: Event | XCB_KEY_RELEASE(3) | sequence: 696
qt.qpa.events: Event | XCB_KEY_PRESS(2) | sequence: 700
Event received by: QWidgetWindow - Key: 1046 - Text: "ж"
Event received by: MyLineEdit - Key: 1046 - Text: "ж"
Key:  1046
qt.qpa.events: Event | XCB_PROPERTY_NOTIFY(28) | sequence: 701
qt.qpa.events: Event | XCB_KEY_RELEASE(3) | sequence: 705
qt.qpa.events: Event | XCB_KEY_PRESS(2) | sequence: 726
Event received by: QWidgetWindow - Key: 1067 - Text: "ы"
Event received by: MyLineEdit - Key: 1067 - Text: "ы"
Key:  1067
qt.qpa.events: Event | XCB_PROPERTY_NOTIFY(28) | sequence: 730
qt.qpa.events: Event | XCB_KEY_PRESS(2) | sequence: 734
qt.qpa.events: Event | XCB_KEY_PRESS(2) | sequence: 734
qt.qpa.events: Event | XCB_KEY_PRESS(2) | sequence: 734
Event received by: QWidgetWindow - Key: 1042 - Text: "в"
Event received by: MyLineEdit - Key: 1042 - Text: "в"
Key:  1042
Event received by: QWidgetWindow - Key: 1040 - Text: "а"
Event received by: MyLineEdit - Key: 1040 - Text: "а"
Key:  1040
Event received by: QWidgetWindow - Key: 1069 - Text: "э"
Event received by: MyLineEdit - Key: 1069 - Text: "э"
Key:  1069
qt.qpa.events: Event | XCB_PROPERTY_NOTIFY(28) | sequence: 735
qt.qpa.events: Event | XCB_PROPERTY_NOTIFY(28) | sequence: 736
qt.qpa.events: Event | XCB_PROPERTY_NOTIFY(28) | sequence: 737
qt.qpa.events: Event | XCB_KEY_PRESS(2) | sequence: 741
qt.qpa.events: Event | XCB_KEY_PRESS(2) | sequence: 741
Event received by: QWidgetWindow - Key: 1055 - Text: "п"
Event received by: MyLineEdit - Key: 1055 - Text: "п"
Key:  1055
Event received by: QWidgetWindow - Key: 1056 - Text: "р"
Event received by: MyLineEdit - Key: 1056 - Text: "р"
Key:  1056
qt.qpa.events: Event | XCB_PROPERTY_NOTIFY(28) | sequence: 742
qt.qpa.events: Event | XCB_PROPERTY_NOTIFY(28) | sequence: 743
qt.qpa.events: Event | XCB_XKB_* event(85) | sequence: 747
qt.qpa.events: Event | XInput Event(other type) | sequence: 747
qt.qpa.events: Event | XCB_KEY_PRESS(2) | sequence: 747
qt.qpa.events: Event | XCB_KEY_PRESS(2) | sequence: 747
Event received by: QWidgetWindow - Key: 76 - Text: "l"
Event received by: MyLineEdit - Key: 76 - Text: "l"
Key:  76
Event received by: QWidgetWindow - Key: 59 - Text: ";"
Event received by: MyLineEdit - Key: 59 - Text: ";"
Key:  59
qt.qpa.events: Event | XCB_PROPERTY_NOTIFY(28) | sequence: 772
qt.qpa.events: Event | XCB_PROPERTY_NOTIFY(28) | sequence: 773
qt.qpa.events: Event | XCB_KEY_PRESS(2) | sequence: 777
Event received by: QWidgetWindow - Key: 75 - Text: "k"
Event received by: MyLineEdit - Key: 75 - Text: "k"
Key:  75
qt.qpa.events: Event | XCB_PROPERTY_NOTIFY(28) | sequence: 778
qt.qpa.events: Event | XCB_KEY_PRESS(2) | sequence: 782
qt.qpa.events: Event | XCB_KEY_RELEASE(3) | sequence: 782
Event received by: QWidgetWindow - Key: 74 - Text: "j"
Event received by: MyLineEdit - Key: 74 - Text: "j"
Key:  74

То есть, при работе используется какой-то код, выдающий KeyboardLayoutChange on QPA (QTBUG-27681). А само передключение происходит в момент события с неизвестным типом:
qt.qpa.events: Event | XCB_XKB_* event(85) | sequence: 747
qt.qpa.events: Event | XInput Event(other type) | sequence: 747

Большего пока понять не удалось.

Xintrea ★★★★★
() автор топика
Последнее исправление: Xintrea (всего исправлений: 1)
Ответ на: комментарий от Xintrea

Большего пока понять не удалось.

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

Loki13 ★★★★★
()
Последнее исправление: Loki13 (всего исправлений: 1)
Ответ на: комментарий от Loki13

Эти древние Qt5 на всех подверсиях Debian 12. Надо переезжать на Debian 13, там версия Qt5 более другая.

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

Xintrea ★★★★★
() автор топика