Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Общий по Linux (http://forum.oszone.net/forumdisplay.php?f=9)
-   -   Проблемма с клавиатурой в Thinstation 2.1 (http://forum.oszone.net/showthread.php?t=50361)

Barvinok 13-06-2005 03:10 332401

Проблемма с клавиатурой в Thinstation 2.1
 
Сделал терминалы на базе Thinstation 2.1 rc1
Подключаюсь к серверу Win2003

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

Так же может возникнуть эффект залипания левой клавиши <Win> (она же <Start> - слева от Alt).

Лечится нажатием залипшей клавиши.


Я выявил следующие закономерности:
эффект залипания наблюдается, если при компиляции образа включать package keymaps-en_us

если включать package keymaps-ru - вдобавок вообще перестаёт работать клавиша с русской точкой <.>

если НЕ включать вообще никакой пакет из раздела Keyboard layouts, эффекта залипания не происходит, но при этом отрубаются курсоры, NumPad и шесть кнопок над курсорами (Ins, Del, Home....etc)
Вероятно, для терминала пакеты раскладок не нужны - на сервер просто отправляется код клавиши? А раскладки нужны только для работы в режиме лёгкой станции (blackbox, icewm + FireFox)?
Из-зи чего тогда отрубается половина клавишь?

К сожалению, я только начинаю осваивать Linux.
Если знающие люди подскажут хотябы в каком направлении копать и что читать, думаю, с проблемой разберусь.
Отчёт напишу, разумеется

ruslandh 13-06-2005 18:52 332504

Расскажите поподробне о Thinstation 2.1 rc1 и ваших терминалах
Как я понимаю, там используются X ?
Тогда там может быть надо копать в настройки самих X-в тогда важно версия X-в
На ALT вообще в Linux ничего не надо вешать - она по-умолчанию является клавишей Meta и на неё и так много повешено, лучше левый Ctrl+Shift

Barvinok 14-06-2005 12:34 332652

Терминалы бездисковые. Грузятся с BootROM методом EtherBoot (если прошиваю сам) и PXE (если использую интегрированную сетевушку).
Образ Thinstation 2.2-beta1 (в первом посте я неверно указал версию) компилю из исходников под Alt Linux Master 2.4

Там действителько используется X-сервер. Вот выдержка из build.conf:
Код:

# --- Xorg6R7.0

# General Xorg6R7.0 video drivers:
# Only include what you really need!

#package xorg6-apm          # Alliance ProMotion video driver
#package xorg6-ark          # Ark Logic video driver
package xorg6-ati            # ATI video driver
#package xorg6-chips        # Chips and Technologies video driver
#package xorg6-cirrus        # Cirrus Logic video driver
#package xorg6-cyrix        # Cyrix video driver
#package xorg6-glint        # GLINT/Permedia video driver
#package xorg6-i128          # Number 9 I128 video driver
package xorg6-i740          # Intel i740 video driver
#package xorg6-i810          # Intel 8xx integrated graphics chipsets
#package xorg6-mga          # Matrox video driver
#package xorg6-neomagic      # Neomagic video driver
#package xorg6-nsc          # Nsc video driver
package xorg6-nv            # NVIDIA video driver
#package xorg6-r128          # ATI Rage 128 video driver
package xorg6-radeon        # ATI RADEON video driver
......и.т.д.

При загрузке в начале мелькает окошко Иксов (Х на сером фоне), потом - стандартное окно логона Windows.

Насчёт левого Ctrl+Shift я понял. Счаз так и настроено всё.
Но:
во-первых, юзер может случайно задеть Alt или Start и его начнёт колбасить (а юзеров несколько сотен)
во-вторых - просто хочется разобраться
в третьих - данная проблемма пропадает, если не включать в образ Keyboard layouts - истина где-то рядом!

Может отключить те функции, что навешаны на ALT в Linux? (зачем они мне, если единственная его функция - rdesktop?)

ruslandh 14-06-2005 23:55 332819

Я не настолько глубоко знаю проблему, расскажу, что знаю
1 В настройках xorg.conf прописываются переключатели, работающие в X :
Пример :
Section "InputDevice"
Identifier "Keyboard1"
Driver "kbd"
Option "AutoRepeat" "250 30"
Option "XkbRules" "xorg"
Option "XkbModel" "pc105"
Option "XkbLayout" "us,ru"
Option "XkbVariant" ",winkeys"
Option "XkbOptions" "grp:ctrl_shift_toggle,grp_led:scrol
EndSection

(настройка на Ctrl+Shift, плюс индикация русской раскладки Scrool Lock)
можно тут накрутить так ..... например - Alt- временное переключение на русские буквы (пока нажат, или замораживание переключений, пока второй ALT не нажмёшь и другие фокусы) - посмотрите что у вас

2 В KDE и Gnome (может и в других) можно включить ещё свои настройки (тогда надо отключать в X)

3 В консоли - где-то ещё (где навскидку не скажу, если надо, поищу)

4 По стандарту клавишей Meta является левый Alt (одновременное нажатие) и Esc (последовательное нажатие). Мету можно назначить практически на любую клавишу. Она может настраиваться точно в консоли, и вроде в X и оконных менеджерах

Barvinok 15-06-2005 01:45 332938

В файле Thinstation-2.1\packages\xorg6\lib\X11\XF86Config-Xorg_Dual1.tpl есть разделы
Цитата:

Section "InputDevice"
Identifier "Keyboard0"
Driver "kbd"
Option "AutoRepeat" "400 30"
EndSection

Section "ServerLayout"
Identifier "S0"
Screen 0 "Screen0" 0 0
InputDevice "Mouse0" "CorePointer"
InputDevice "Keyboard0" "CoreKeyboard"
EndSection
В файле Thinstation-2.1\packages\xorg6\lib\X11\XF86Config-Xorg_Dual2.tpl есть разделы
Цитата:

Section "InputDevice"
Identifier "Keyboard1"
Driver "keyboard"
Option "Protocol" "usbev"
Option "Device" "/dev/input/event0"
Option "AutoRepeat" "400 30"
EndSection

Section "ServerLayout"
Identifier "S1"
Screen 1 "Screen1"
InputDevice "Mouse1" "CorePointer"
InputDevice "Keyboard1" "CoreKeyboard"
EndSection
В файле Thinstation-2.1\packages\xorg6vnc\lib\X11\vnc_keyboard.tpl есть разделы
Цитата:

Section "InputDevice"
# vncKeyboard: keyboard actions from vnc
Identifier "vncKeyboard"
Driver "rfbkeyb"
EndSection

Section "InputDevice"
# vncMouse: mouse actions from vnc
Identifier "vncMouse"
Driver "rfbmouse"
EndSection
Файла xorg.conf нет.

Указанных настроек клавиатуры тоже нигде нет. Может просто добавить?
Как я понял, vnc_keyboard.tpl нас не интересует.
В первых двух можно попробовать что-то добавить. Но что?
Я даже не знаю, что значит "Meta"...

mar 15-06-2005 02:09 332941

Цитата:

Файла xorg.conf нет
Судя по документации используется XFree86 4.3, а не Xorg

ruslandh 15-06-2005 08:01 332961

Так тут и про клавиатуру расписано :
http://thinstation.sourceforge.net/keyboard-guide.html

Barvinok 15-06-2005 10:20 332994

Скажем так: XFree86 тоже используется (видимо для слабых машин)
В build.conf есть раздел
Цитата:

# --- X related packages

#package xorg6-tinyx # TinyX Xvesa server (for low memory machines)
# works with ICA too, is slower, don't choose any X modules with
# this server, you don't need anything else.
# Otherwise choose from Xfree 3 or 4 (4 is recommended)
#package xf3-svga # XF86_SVGA 3.3.6 server
#package xf3-s3 # XF86_S3 3.3.6 server
#package xf3-vmware # VMWare X server for development
#package xorg6vnc # Xorg VNC Server Module. With this package you can
# connect to the TS client's desktop from a java
# browser on "http://<TS ip>:5800
Версия 4.3 использовалась раньше (в 2.0.х, например). Проблеммы были те же. В 2.1 её заменили на Xorg

Что касается http://thinstation.sourceforge.net/keyboard-guide.html ...
Естественно я читал FAQ, прежде чем задавать вопросы.
Там написано, что если кто-то решит проблемму, пусть расскажет всем (и сделает исправления в соответствующих CVR)

Barvinok 15-06-2005 22:29 333363

Кажется, начинаю докапываться до зарытой собаки.
Все раскладки, как я понял, находятся в каталоге .\Thinstation-2.1\packages\
Разложены по соответствующим папкам:

keymaps-ar
keymaps-cs
keymaps-da
keymaps-de
.....etc

Заходим в \Thinstation-2.1\packages\keymaps-en_us\rdesktop\lib\kmaps\keymaps\
Видим три файла:
common размером 2085 (байт)
en_us размером 609
modifiers размером 298

Содержимое файла common (привожу частично, лишь то, что показалось интересным или непонятным)
Цитата:

space 0x39 localstate

less 0x56
greater 0x56 shift
bar 0x56 altgr
brokenbar 0x56 shift altgr

.......

# Inhibited keys
#
Caps_Lock 0x0 inhibit
Multi_key 0x0 inhibit
Особенно мне подозрительна строчка brokenbar 0x56 shift altgr

Содержимое файла en_us (IMHO ничего интересного)
Цитата:

# generated from XKB map us
include common
map 0x409
exclam 0x02 shift
at 0x03 shift
numbersign 0x04 shift
dollar 0x05 shift
percent 0x06 shift
asciicircum 0x07 shift
..... etc
А вот файл modifiers очень интересен (привожу полностью):
Цитата:

Shift_R 0x36
Shift_L 0x2a

Alt_R 0xb8
Mode_switch 0xb8
Alt_L 0x38

Control_R 0x9d
Control_L 0x1d

# Translate Meta, Super and Hyper to Windows keys.
# This is hardcoded. See documentation for details.

# Translate Menu to the Windows Application key.
# This one does not work either.
Menu 0xdd
Какие будут мнения?

ruslandh 15-06-2005 22:33 333365

А вот такой вопрос - после того как система установлена, можно -ли посмотреть/изменить Linux параметры ?

ruslandh 15-06-2005 22:54 333370

Нашел откуда этот файл - из rdesktop, соответственно есть смысл поискать документацию по rdesktop.
(Т.е не привязываясь к конкретному дистрибутиву)

Barvinok 15-06-2005 23:47 333381

Цитата:

А вот такой вопрос - после того как система установлена, можно -ли посмотреть/изменить Linux параметры?
Вроде бы да.
В build.conf присутствуют такие стороки:
Цитата:

#package www # Web access to client. From a browser: "http://<IP number>"
#package e3 # Basic vi like Editor
#package debug # Debug support, adds strace and other commands
# not recommended for normal use.
Но это нигде особо не докуметировано.....

Цитата:

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

Мне интересно, кто-нить из присутствующих из установленного полноценного Linux пробовал работать в Win терминале?
Были ли замечены подобные проблеммы?

Barvinok 16-06-2005 00:56 333396

Скачал rdesktop-1.4.1.tar.gz

Как и предполагалось, отличий практически никаких.
В common добавились кейкоды "мёртвых" клавишь Solaris:
Цитата:

SunF36 0x57 localstate
SunF37 0x58 localstate
В modifiers какая-то странная строчка
Цитата:

ISO_Level3_Shift 0xb8

ruslandh 16-06-2005 08:49 333453

Как я понимаю, вы хотите сделать анологичное решение ?
http://www.ltsp.ru/ru/about
Кстати, опыт ваших предшественников :)
http://linux.opennet.ru/openforum/vs...3/4923.html#20
Правда пока ничего не нашёл по существу вашего вопроса.
http://www.google.com/search?hl=ru&i...81%D 0%BA&lr=

ruslandh 16-06-2005 08:51 333454

http://www.google.ru/search?hl=ru&ie...%E2+Google&lr=

Barvinok 16-06-2005 13:33 333537

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

Ещё раз хочу обратить внимание, что если не включать в образ НИКАКИХ раскладок, эффект залипания пропадает - это может стать ключём!

Может пойти от обратного? Решить проблеммы, которые возникают без раскладок?

ruslandh 17-06-2005 06:35 333762

Цитата:

Linux и Windows используются одинаковые клавиши
Тут не поспоришь. Вначале любое нажатие получает "Linux" (тут куча программ) , потом он отсеивает свои нажатия (как он считает), оставшиеся передаёт rdesktop, тот доджен перехватить то, что предназначено ему (как программе), а оставшиеся посылает в "Windows".
Цитата:

Может пойти от обратного? Решить проблемы, которые возникают без раскладок?
А самому Linux разве смена раскладок не нужна? Боюсь, что rdesktop , будет тогда посылать только одну раскладку (или русскую или английскую). А вообще без раскладок он ничего посылать не будет (или выберет ту, которая стоит дефолтной где-нибудь в глубине ядра).

Barvinok 17-06-2005 11:45 333841

Я ж говорю....
Если компилить образ без раскладок, я совершенно спокойно работаю в терминале. Печатаю по русски и по английски. Переключаюсь без проблем - ни ALT ни Win не залипает.

Но, блин, перестают работать курсоры и пр. - всё описано в первом посте

Предлагая пойти от обратного, я имел ввиду как-то поправить эту самую дефолтную раскладку. Осталось только разобраться где править....

ruslandh 17-06-2005 22:30 334069

А если явно поставить в консоле английскую раскладку ? И попробовать в X-х забить две раскладки eng+rus ?
PS вы извините, я с терминалами не сталкивался :) Хочу понять как работает

Barvinok 21-06-2005 22:11 335047

Работает просто:
  • стартует максимально обрезанный линукс
  • стартуют иксы
  • стартует rdesktop и сразу подрубается к серверу терминалов.
Можно вместо rdesktop запустить какой-нить window-manager и работать, например, с браузером FireFox.

ruslandh 21-06-2005 22:59 335064

Barvinok
Это-то как раз ясно :)
Истина скрывается в нюансах :)

Figaro 28-06-2005 18:29 336706

Доброго времени суток. Сам столкнулся с такой проблемой (кстати, решение еще не найдено?), есть версия, что в rdesktop где-то прячется баг.

Поведение rdesktop:

При "правильном" переключении раскладки по альт-шифт:
1. Нажимаем альт. Генерируется событие (прерывание) "нажат альт"
2. Нажимаем шифт. Генерируется событие "нажат шифт"
3. Отпускаем шифт. Генерируется событие "отпущен шифт"
Здесь винда понимает, что нужно переключить раскладку. И переключает ее.
4. Отпускаем альт. Генерируется событие "отпущен альт"

При "неправильном" переключении альт-шифт происходит следующее:
1. Нажимаем альт. Событие "нажат альт"
2. Нажимаем шифт. Событие "нажат шифт"
3. Отпускаем альт. Что видим? Винда переключила раскладку,
как будто мы отпустили шифт. Возможно, здесь в rdesktop баг, и
он посылает сообщение "отпущен шифт"

4. Отпускаем шифт. Снова винда переключает раскладку, значит снова "отпустили шифт".

Замечаем, что после "неправильного" переключения раскладки у винды
остается ощущение, что клавиша альт все еще прижата (например, при нажатии "H" вываливается справка, как по Alt+H). Лечится повторным нажатием клавиши альт.

Проверил поведение штатного виндового десктоп-клиента. Оно адекватно: он в обоих случаях, при "правильном" и "неправильном" переключении, переключает раскладку один раз и не оставляет залипнутым альт.

Как это лечить, я пока не выяснил, буду колупать дальше (скорее всего, с использованием сниффера) и надеюсь на вашу поддержку :)

Barvinok 29-06-2005 03:11 336846

Figaro
Чувак, ты вкуриваешь..
Но ты не обратил внимание на один нюанс: если не включать при компиляции НИКАКИХ раскладок клавиатуры, то залипания не происходит.
Значит проблемма кроется не в rdesktop, а в интерференции между rdesktop и раскладками (IMHO).

Если что накапаешь - пиши обязательно: этой проблеммой масса людей изводится!
Я, к сожалению, линукс только начал изучать. Что то путное смогу сказать не раньше, чем через пол-года.

Drug_ 29-06-2005 12:24 336921

Забавно, дошел до туда же что и Barvinok, пытаюсь "заработать" стрелки и клавиши повыше или отключить залипание.

Figaro 29-06-2005 18:31 337013

Радостно, что сниффер использовать не придется, а почти готовое решение проблемы описано вот тут: http://forum.opennet.ru/openforum/vs...ID1/57069.html. Насколько я понял, этот не баг, а такая иксовая особенность: интерпретировать нажатие альт+шифт как нажатие клавиши "мета".

Я тоже проверил, для нормальной работы thinstation нужно:
1. Запустить rdesktop (чтобы загрузились иксы)
2. Перейти во вторую свободную консоль (ctrl+alt+f2)
3. Там залогиниться (для дефолтной сборки пользователь root, а пароль pleasechangeme) и набрать команду
Код:

DISPLAY=':0' xmodmap -e "keysym Alt_L = Alt_L"
4. Проверить, как замечательно работает rdesktop :)

Ясно, что каждого так делать не заставишь, поэтому thinstation нужно пересобрать.
Пересборкой thinstation я еще не занимался (нет времени), поэтому пока не нашел, чего можно исправить, но есть подозрение, что можно поправить в файле packages/rdesktop/etc/cmd/rdesktop.global с
Код:

CMD_GLOBAL="rdesktop -k $KEYBOARD_MAP -f"
на
Код:

CMD_GLOBAL="xmodmap -e 'keysym Alt_L = Alt_L'; rdesktop -k $KEYBOARD_MAP -f"
Вот пока и все, что удалось найти :)

Barvinok 01-07-2005 19:31 337612

К сожалению не сработало.
При загрузке образа самой последней строкой идёт
Код:

//etc/cmd/rdesktop.global: 1: Syntax error: Unterminated quoted string
Пробовал давать команду второй строкой:
Код:

CMD_GLOBAL="rdesktop -k $KEYBOARD_MAP -f"
CMD_GLOBAL="xmodmap -e 'keysym Alt_L = Alt_L'"

Ошибку не выдаёт, но отказывается запускать rdesktop, сволочь

Вариант с комадой из второй консоли тоже не сработал:
Код:

-sh: xmodmap: not found

Barvinok 01-07-2005 19:51 337618

Собственно, я думаю проще перекомпилить саму раскладку, чем пытаться что-то править командами.
Мы выяснили, что проблемма заключается в раскладке X-сервера.
Раскладка находится в \packages\keymaps-en_us\x-common\lib\kmaps\xkb\en_us.xkm (соответственно для каждой локали)
Формат *.xkm - это раскладка, скомпилированная с помощью xkbcomp
Дело за малым: нужно взять раскладку xkb, найти строки, типа
Код:

keycode 0x40 = Alt_L Meta_L
keysym Alt_L = Meta_L

заменить их на
Код:

keycode 0x40 = Alt_L Alt_L
keysym Alt_L = Alt_L

скомпилировать и положить в соответствующий каталог Thinstation.
Кажись, должно сработать.

Так же я заметил попытки забороть эту проблемму в файле \packages\keymaps-en_us\rdesktop\lib\kmaps\keymaps\modifiers:
Код:

Shift_R 0x36
Shift_L 0x2a

Alt_R 0xb8
Mode_switch 0xb8
ISO_Level3_Shift 0xb8

Alt_L 0x38

Control_R 0x9d
Control_L 0x1d

# Translate Meta, Super and Hyper to Windows keys.
# This is hardcoded. See documentation for details.

# Translate Menu to the Windows Application key.
# This one does not work either.
Menu 0xdd

Но, поскольку трабла в Х-сервере, решить её с помощью rdesktop не удалось. Я так думаю!

Barvinok 07-07-2005 14:47 339153

Господа....
Можете пожать мою мужественную руку..
Я сам до сих пор в эйфории.. но это оправдано: сырость побеждена!
Проблемма залипающего Alt в Thinstation решена мною только что!
Делаем следующие манипуляции:
1. Берём бинарник раскладки клавиатуры X-сервера из дистрибутива Thinstation, например \packages\keymaps-en_us\x-common\lib\kmaps\xkb\en_us.xkm
2. С помощью утилиты xkbcomp конвертируем его в текстовый формат:
Код:

xkbcomp -xkb en_us.xkm
В полученном файле en_us.xkb ищем слово "Meta" - оно там встречается один раз в строке
Код:

key <LALT> {        [          Alt_L,          Meta_L ] };
3. Удаляем нафиг Meta_L
Получаем строку
Код:

key <LALT> {        [          Alt_L    ] };
4. Сохраняем изменения и компилим файл обратно в бинарник:
Код:

xkbcomp -xkm en_us.xkb
и заменяем нашим бинарником исходный в дистре Thinstation.
5. Компилим Thinstation и юзаем терминал без гиммороя.
Фсё

Barvinok 07-07-2005 14:49 339154

Пожалуй, напишу в FAQ на SourceForge...
А то не только в России люди мучаются.

Нужно будет полечить ещё следющие баги:
при нажатом CapsLock буквы <ю б ь х> и возможно ещё какие-то печатаются строчными (с Shift нормально)

При компиляции с русской раскладкой не работает <. ?> (русская точка-английский вопрос).
Буду разбираться.

ruslandh 02-08-2005 12:10 345381

Barvinok
Удачи !!! :)

Barvinok 09-08-2005 14:21 346913

Борюсь с багами 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

Barvinok 09-08-2005 19:39 346962

ОК.
Изучив матчасть, я понимаю, почему не работает CapsLock.
В конце файла Thinstation-2.1\packages\keymaps-en_us\rdesktop\lib\kmaps\keymaps\common есть прекрасные строки:
Код:

#
# Inhibited keys
#
Caps_Lock 0x0 inhibit
Multi_key 0x0 inhibit

Согласно вышеприведённой доке
Цитата:

If flags is "inhibit", nothing will be sent to the server.
Я не могу понять почему он РАБОТАЕТ для группы alphabetic!

Barvinok 10-08-2005 20:54 347292

Что-то приуныл всезнающий All...
А может слухи о его всезнании преувеличены?

Figaro 13-08-2005 12:53 347885

Barvinok, спасибо за очень полезную работу. Если не сложно, ткни меня носом в ту "матчасть", которую ты изучал.

Barvinok 14-08-2005 16:00 348056

Figaro
Преимущественно это труды Ивана Паскаля: http://pascal.tsu.ru/other/xkb/
http://doc.marsu.ru/Linux/xkb/programs.html
http://linux.ru.net/index.php?module=library&act…d=118∂=1004

Ну, а далее поиск по ключевым словам...

Barvinok 14-08-2005 16:07 348059

Выяснил, почему рабтает CapsLock.
В описании типа "ALPHABETIC" имеется строка
Код:

preserve[Lock]= Lock;
Вот что по этому поводу написано у Паскаля:
Цитата:

preserve[...]

Здесь требуются некоторые пояснения.
Напомню, что X-сервер передает прикладной программе сообщение о событии (нажатии/отпускании клавиши) в котором указывается скан-код клавиши и слово - "состояние" состоящее из набора модификаторов.

Для перевода этого сообщения в символ используются соответствующие подпрограммы Xlib.

Естественно, эти программы используют в качестве аргументов и скан-код и "состояние". Причем, отдельные подпрограммы (их там несколько) могут для принятия решения использовать не все модификаторы из "состояния".

Для того, чтобы избежать нежелательных эффектов, когда несколько таких подпрограмм обрабатывают сообщение последовательно, каждая подпрограмма обычно "вычищает" "использованные" модификаторы из слова-"состояния".

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

Для таких случаев и используется инструкция preserve - "сохранить" (имеется ввиду - сохранять модификатор в "состоянии").

В этой инструкции в квадратных скобках указывется модификатор (или комбинация модификаторов), такой же, как в одной из инструкции map[...], а справа от "присваивания" - модификатор (или набор модификаторов), который нужно сохранять.

Обратите внимание, что в скобках обязательно должна быть комбинация (или модификатор), точно такая же как и в одной из инструкций map[...].
Дело в том, что инструкция preserve[...] не является самостоятельной инструкцией, а представляет собой "продолжение" соответствующей инструкции map[...]. Поэтому, по "комбинации в скобках" XKB "сшивает" эти две инструкции.
А вот в правой части может быть только часть этих модификаторов (или даже один). То есть, в обработке будут учитываться все модификаторы из левой части, а сохраняться только те, которые указаны в правой.

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

Barvinok 14-08-2005 23:00 348107

Полезная вещь - маны...
Давеча скачал последний релиз rdesktop и почитал \rdesktop-1.4.1.tar\rdesktop-1.4.1\doc\keymapping.txt

Что пишут та...
Цитата:

Keyboard mapping
================
This release of rdesktop uses a new, portable keyboard mapping
implementation. It should hopefully work on all X11 systems. This new
implementation only looks at X11 keysyms: Not on (nonportable)
keycodes or modifier status. This means that rdesktop will obey your
local keyboard configuration. For example, if you have swapped
CapsLock and Control, rdesktop will use this mapping.

XKB is currently not used. It seems like a good idea to me, but since
some X servers (like Xvnc) does not support XKB, we still need to use
the plain old interface as well, at least.

There are still some small problems.

* CapsLock: CapsLock changes are never sent to the RDP
server. rdesktop does not know which keys that are modified by
CapsLock and which are not. So, the CapsLock indicator in Wordpad
etc will always be off.
Тем не менее CapsLock работает...
Как мы уже выяснили это происходит багодаря X-серверу (значит некое взаимодействие с xkb есть).
На http://sourceforge.net/tracker/?grou...66&atid=381349 я нашёл вот такой патч: disable XKB extension
Привожу его описание:
Цитата:

disable XKB extension
rdesktop will not translate altgr correctly (on solaris
at least) if XKB extension is enabled (+kb option for X
server). following patch will disable this extension
Т.е. глючило (и продолжает глючить?) расширение, отвечающее за взаимодействие с X-сервером (?).
Я не пойму, чему верить: rdesktop зависит от xkb или нет?

Skriva 13-07-2006 12:18 461039

Опишу и я свою проблему, написал сначала в раздел по win2k,2003, но почитал эту тему и понял, что здесь собака порылась.
Так вот: тонкий клиент цепляется к серверу на Вин2003, при помощи thinstation, версия вроде 2.1, но могу ошибаться (не знаю, где посмотреть, собирал не я).
Сама проблема: Если язык по умолчанию ставить русский, то работает только до выхода из системы пользователя, после след. входа ставится опять английский. Правка реестра не помогает. Судя по всему проблема где-то в thinstation, но где.
В опциях rdesktop ставил -k ru_ru, но русский таки не поставился...

p.s. Если цепляться при помощи mstsc, то с языками по умолдчанию проблем нет.

Hornet 06-12-2012 13:10 2039844

День добрый, нашел как проблема решается в Thinstation 5.1.
Нужно редактировать файл ~build/packages/x-common/lib/X11/xkb/symbols/altwin
В частности секцию
xkb_symbols "meta_alt" {
key <LALT> { [ Alt_L, Meta_L ]};
key <RALT> { type[Group1] = "TWO_LEVEL",
symbols[Group1] = [ Alt_R, Meta_R ] };
modifier_map Mod1 { Alt_L, Alt_R, Meta_L, Meta_R};
};
Удаляем все упоминания Meta_L и Alt больше не залипает.


Время: 01:50.

Время: 01:50.
© OSzone.net 2001-