LINUX.ORG.RU

x11 синхронизация скролллока и клавиатурной раскладки #2

 scrolllock, ,


0

1

Старая тема но в ней оказалось много неверной информации так что создаю новую.

В иксах через setxkbmap настроен переключатель en-ru с индикацией через scrolllock. В норме включёный индикатор скроллока означает русскую раскладку. Проблема: если включить русскую раскладку, затем передёрнуть клавиатуру в разъёме - то скролллок выключается (раскладка, естественно, остаётся русской). Если после этого ещё раз нажать хоткей - то раскладка переключается с русской на английскую, а скролллок включается. И он так и остаётся в противоположном нормальному состоянии до тех пор, пока либо его не пофиксить повторным передёргиванием клавы уже на англ раскладке, либо переключить раскладку через гуи-переключатель, который ставит правильный скроллок.

От софта это не зависит. Если запустить startx xterm - поведение такое же.

Это баг в xorg или можно настроить?

★★★★★

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

На твоём месте я бы смотрел в сторону создания правил udev.

Если решишь - каст меня пж.

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

но меня не парило особо

У меня из-за этого иногда только раза в третьего получается включить нужный язык. Включаю, набираю не то, стираю, жму два раза хоткей (два - потому что после первого скроллок не тот как надо), набираю, стираю, по-новой итд.

На твоём месте я бы смотрел в сторону создания правил udev.

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

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

Только что попробовал.

При отключении и подключении клавиатуры скролл лок гаснет. Однако, я не смог воспроизвести ситуацию (в Гноме), при которой индикатор горит в «противофазе»: при включении английской раскладки скролл лок остаётся погашенным, при включении русской — загорается, так что рассинхрон состояния и индикатора — временный, до первого включения русской раскладки.

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

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

Во-первых, научись печатать вслепую, чтобы не смотреть на клавиатуру — и скролл лок в качестве индикатора раскладки станет тебе не нужен. Индикатор на экране лучше лампочки на клавиатуре.

Во-вторых, сделай себе включатели раскладок (а не переключатель) — и тебе будет не нужен даже экранный индикатор раскладки: перед набором не надо будет думать о том, какая раскладка была и надо ли её переключать — без раздумий включаешь нужную раскладку и печатаешь. Это происходит на автомате, как включение поворотников.

В принципе, эти два приёма независимы друг от друга: можно пользоваться включателями раскладок, не владея слепым набором. Но слепой набор + включатели дают больший эффект, чем каждый по отдельности.

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

Вроде, для NumLock, в отличии от ScrollLock, прописано ″!allowExplicit;″, что эквивалентно ″allowExplicit = False;″. По умолчанию он True, то есть для ScrollLock indicator стоит разрешение менять этот флаг из пользовательской программы.

Наверно, можете попробовать корректировать светодиод через xset, или прописать этот запрет в описание раскладки.

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

Про костыли всё понятно, но речь была про то чтобы xorg сам правильно себя вёл. Я не понимаю какой смысл было вместо простой установки скроллока в нужное состояние усложнять алгоритм: сначала читать ненужное старое, и ставить новое инвертированное от старого.

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

при включении английской раскладки скролл лок остаётся погашенным

Переключение было через хоткей, настроенный нативно в xkb через setxkbmap? Речь исключительно про него. Если переключать сторонней прогой (например, гуи-переключалкой xxkb) - то синхронизация сразу восстанавливается, да.

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

Проблема: если включить русскую раскладку, затем передёрнуть

фу.. ну не здесь же?! а потом эти люди этими же руками комментируют салфетки на фотках рабочих мест… 😒

По существу: вся тема целиком выглядит как «я придумал себе проблему, а вы придумайте мне решение».. Вощем, скорейшего завершения новогодних каникул желаю тебе.

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

Там, вроде как, можно задать действие при изменение состояния индикатора. Поэтому в функции, которая включает индикатор, сначала смотрится его текущее состояние, чтобы определить, меняет ли данный вызов функции состояние индикатора или индикатор итак ВКЛ. То есть нельзя так просто взять и установить идикатор с флагом ″allowExplicit″ в нужное состояние. Там много кода, который я не совсем понял, так не знаю смысл тех или иных флагов индикатора. Этот man я не осилил: https://man.archlinux.org/man/XkbSetIndicatorMap.3.en

Помогает ли ″!allowExplicit;″ мне проверять лень, но если помогает, то это не костыль.

Пока что понаблюдал, что если клавиатур две и одну переподключить, то на неё перестаёт действовать xset led named 'Scroll Lock'. То есть какой-то баг присутствует.

mky ★★★★★
()