Борюсь с багами CapsLock.
Симптомы:
При работе в терминале, при нажатом CapsLock следующие буквы печатаются строчными:
Симптомы явно указывают, что бага случается с типами клавиш "non alphabetic"
Для примера выдержка из декомпилированного файла Thinstation-2.1\packages\keymaps-ru\x-common\lib\kmaps\xkb\ru.xkm:
Код:

key <AB07> {
type= "ALPHABETIC",
symbols[Group1]= [ m, M ],
symbols[Group2]= [ Cyrillic_softsign, Cyrillic_SOFTSIGN ]
};
key <AB08> {
type[group2]= "ALPHABETIC",
symbols[Group1]= [ comma, less ],
symbols[Group2]= [ Cyrillic_be, Cyrillic_BE ]
};
Клавиша "M" относится к группе "ALPHABETIC" вне зависимости от раскладки (русской или английской).
Следующая клавиша в этом ряду относится к группе "ALPHABETIC" только для русской раскладки: type[group2]= "ALPHABETIC"
На самом деле при обычно компиляции образа я использую только английскую раскладку (компилю с en_us).
Если компилить с русской - добавляется ещё один баг: перестаёт работать русская точка.
Насколько я понял принцип работы клавиатуры вThinstation, обработка сигналов происходит следующим образом:
- по идее клавиатура работает в режиме K_RAW, т.е.
- скан-коды в десятичном виде передаются X-серверу, который преобразует их сначала в keycodes, затем в буквенные символы ASCII-таблицы (английские или русские соответственно).
- X-сервер передаёт буквы прикладному приложению - в нашем случае это rdesktop.
- rdesktop производит обратное преобразование в скан-коды, но уже в шестнадцатиричный вид.
- rdesktop отправляет скан-коды на сервер терминалов.
Есть одна странность:
номера скан-кодов в Thinstation смещены на +8.
Например:
согласно
этой таблице клавиша "q" имеет сканкод 16 (в hex - 0x10).
В en_us.xkm она соответсвует скан-коду 24:
Код:

<AD01> = 24;
......
key <AD01> {
symbols[Group1]= [ q, Q ],
symbols[Group2]= [ at, Greek_OMEGA ]
однако при обратном преобразовании в rdesktop всё становится на свои места:
Код:

q 0x10 addupper
Скан-код есть скан-код. Он не зависит от того, какая буква и в какой раскладке была нажата. Это наглядно видно в выдержке из \Thinstation-2.1\packages\keymaps-ru\rdesktop\lib\kmaps\keymaps\ru:
Код:

semicolon 0x27
colon 0x27 shift
Cyrillic_zhe 0x27 altgr
Cyrillic_ZHE 0x27 shift altgr
Все четыре варианта преобразуются в один и тот же скан-код.
Cервер терминалов уже сам решает какой символ вывести на печать в зависимости от включённой раскладки и состояния модификаторов.
Значит собака порылась именно в состоянии модификатора CapsLock, который по каким-то причинам не доходит до сервера (причём это отностися только к группе "non ALPHABETIC").
Тут я застрял.
Не пойму, что где нужно исправлять.
Может в моих рассуждениях есть какая-то ошибка?
Вот, наткнулся на полезную доку:
http://www.hupo.org.cn/docs/linuxdoc...keymapping.txt