xev не видит функциональные клавиши

Knoppix

Модераторы: Warderer, Модераторы разделов

Ответить
Аватара пользователя
Ququshka77
Сообщения: 11
ОС: Debian, Windows7

xev не видит функциональные клавиши

Сообщение Ququshka77 »

добрый день!
настраиваю функциональные клавиши на ноутбуке, одна не определяется ни xev, ни showkey


$dmesg | tail
[ 2620.320893] atkbd serio0: Unknown key released (translated set 2, code 0xba on isa0060/serio0).
[ 2620.320901] atkbd serio0: Use 'setkeycodes e03a <keycode>' to make it known.


# xmodmap -pke | grep Eject
keycode 169 = XF86Eject NoSymbol XF86Eject
keycode 170 = XF86Eject XF86Eject XF86Eject XF86Eject
keycode 174 = XF86AudioStop XF86Eject XF86AudioStop XF86Eject


переназначаю:
# setkeycodes e03a 169

прописываю в .Xmodmap
~$ cat .Xmodmap
keycode 169 = XF86Eject XF86Eject XF86Eject
~$ xmodmap .Xmodmap

# xmodmap -pke grep 169
keycode 169 = XF86Eject XF86Eject XF86Eject

# showkey
..........
код клавиши 169 нажата
код клавиши 169 отпущена

..........
showkey определяет нажатие, a xev по прежнему молчит, что делаю не так?

ноутбук - samsung chronos 7 series

$ uname -a
Linux Samsung 4.2.0-1-amd64 #1 SMP Debian 4.2.5-1 (2015-10-27) x86_64 GNU/Linux
# dmidecode -s system-manufacturer
SAMSUNG ELECTRONICS CO., LTD.
# dmidecode -s system-product-name
700Z3C/700Z5C
# dmidecode -s system-version
0.1

Делай добро и бросай его в воду.
Спасибо сказали:
Аватара пользователя
Bizdelnick
Модератор
Сообщения: 20752
Статус: nulla salus bello
ОС: Debian GNU/Linux

Re: xev не видит функциональные клавиши

Сообщение Bizdelnick »

Не понял, что Вы делаете.
Ququshka77 писал(а):
16.11.2015 03:00
[ 2620.320893] atkbd serio0: Unknown key released (translated set 2, code 0xba on isa0060/serio0).
0xba — это десятичное 186, а у Вас дальше везде 169.
Пишите правильно:
в консоли
вку́пе (с чем-либо)
в общем
вообще
в течение (часа)
новичок
нюанс
по умолчанию
приемлемо
проблема
пробовать
трафик
Спасибо сказали:
NickLion
Сообщения: 3408
Статус: аватар-невидимка
ОС: openSUSE Tumbleweed x86_64

Re: xev не видит функциональные клавиши

Сообщение NickLion »

Bizdelnick
Потому что сопоставил 169: setkeycodes e03a 169
Спасибо сказали:
Аватара пользователя
Ququshka77
Сообщения: 11
ОС: Debian, Windows7

Re: xev не видит функциональные клавиши

Сообщение Ququshka77 »

пробуем по вашему варианту, Bizdelnick

Код: Выделить всё

# dmesg | tail
[  123.137424] atkbd serio0: Unknown key released (translated set 2, code 0xba on isa0060/serio0).
[  123.137433] atkbd serio0: Use 'setkeycodes e03a <keycode>' to make it known.

# xmodmap -pke | grep 186
keycode 186 = XF86ScrollDown NoSymbol XF86ScrollDown

# setkeycodes 0xba 186
~$ echo "keycode 186 = XF86ScrollDown XF86ScrollDown XF86ScrollDown" > .Xmodmap
~$ xmodmap .Xmodmap
# showkey
......................
код клавиши 186 нажата
код клавиши 186 отпущена
.....................
часть вывода showkey опущена

нажатие определилось

Код: Выделить всё

# xmodmap -pke | grep 186
keycode 186 = XF86ScrollDown XF86ScrollDown XF86ScrollDown

запускаем xev, нажимаем клавишу - тишина!!!
dmesg тоже молчит

попробуем переопределить на свободный keycode 168
проверим

Код: Выделить всё

# xmodmap -pke | grep 168
keycode 168 =

свободен!

Код: Выделить всё

# setkeycodes 0xba 168
~$ echo "keycode 168 = XF86Eject XF86Eject XF86Eject " > .Xmodmap

применяем новые параметры

Код: Выделить всё

~$ xmodmap .Xmodmap

проверяем

Код: Выделить всё

# xmodmap -pke | grep 168
keycode 168 = XF86Eject XF86Eject XF86Eject

# showkey
......................
код клавиши 168 нажата
код клавиши 168 отпущена
.....................
часть вывода showkey опущена

с определением нажатия клавиши в консоли снова все ОК
xev по прежнему молчит, чудеса случаются, но видно не сегодня :)

Делай добро и бросай его в воду.
Спасибо сказали:
Аватара пользователя
Ququshka77
Сообщения: 11
ОС: Debian, Windows7

Re: xev не видит функциональные клавиши

Сообщение Ququshka77 »

Bizdelnick писал(а):
16.11.2015 12:37
Не понял, что Вы делаете.
Ququshka77 писал(а):
16.11.2015 03:00
[ 2620.320893] atkbd serio0: Unknown key released (translated set 2, code 0xba on isa0060/serio0).
0xba — это десятичное 186, а у Вас дальше везде 169.

делаю так, потому что dmesg явно указал - Use 'setkeycodes e03a <keycode>' to make it known.
Из предыдущего сообщения видно, что не важно, какое число мы используем 0xba или e03a - результат один,
нажатие клавиши определяется только showkey, xev в обоих случаях молчит.
Делай добро и бросай его в воду.
Спасибо сказали:
Аватара пользователя
Bizdelnick
Модератор
Сообщения: 20752
Статус: nulla salus bello
ОС: Debian GNU/Linux

Re: xev не видит функциональные клавиши

Сообщение Bizdelnick »

Да, извиняюсь, ступил.
Пишите правильно:
в консоли
вку́пе (с чем-либо)
в общем
вообще
в течение (часа)
новичок
нюанс
по умолчанию
приемлемо
проблема
пробовать
трафик
Спасибо сказали:
NickLion
Сообщения: 3408
Статус: аватар-невидимка
ОС: openSUSE Tumbleweed x86_64

Re: xev не видит функциональные клавиши

Сообщение NickLion »

Ququshka77
Можете попробовать магию? Поставьте 170 в setkeycodes и НЕ используйте xmodmap. И приложите Ваши
/usr/share/X11/xkb/symbols/inet
и
/usr/share/X11/xkb/keycodes/xfree86
На всякий случай.
Спасибо сказали:
Аватара пользователя
Ququshka77
Сообщения: 11
ОС: Debian, Windows7

Re: xev не видит функциональные клавиши

Сообщение Ququshka77 »

Нагуглил тут https://bugs.launchpad.net/ubuntu/source/udev/bug/902798
Убунтоводы зарепортили этот баг, проблема была с udev (пофиксили). В debian, видимо, нет :(
Никогда не сообщал о багах, может есть кто на форуме с кем можно проконсультироваться на эту тему. С временем туго.
Чувствую, если полезу в гуглю - это на день точно.
Делай добро и бросай его в воду.
Спасибо сказали:
Аватара пользователя
Bizdelnick
Модератор
Сообщения: 20752
Статус: nulla salus bello
ОС: Debian GNU/Linux

Re: xev не видит функциональные клавиши

Сообщение Bizdelnick »

Ququshka77 писал(а):
16.11.2015 17:20
проблема была с udev (пофиксили). В debian, видимо, нет

Однако по Вашей ссылке говорится, что
(Martin Pitt (pitti)) писал(а):Fixed in upstream trunk.

За прошедшее время должно было бы до дебиана докатиться. У Вас Jessie?
Пишите правильно:
в консоли
вку́пе (с чем-либо)
в общем
вообще
в течение (часа)
новичок
нюанс
по умолчанию
приемлемо
проблема
пробовать
трафик
Спасибо сказали:
Аватара пользователя
Ququshka77
Сообщения: 11
ОС: Debian, Windows7

Re: xev не видит функциональные клавиши

Сообщение Ququshka77 »

NickLion писал(а):
16.11.2015 17:17
Ququshka77
Можете попробовать магию? Поставьте 170 в setkeycodes и НЕ используйте xmodmap. И приложите Ваши
/usr/share/X11/xkb/symbols/inet
и
/usr/share/X11/xkb/keycodes/xfree86
На всякий случай.

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


Bizdelnick писал(а):
16.11.2015 17:28
Ququshka77 писал(а):
16.11.2015 17:20
проблема была с udev (пофиксили). В debian, видимо, нет

Однако по Вашей ссылке говорится, что
(Martin Pitt (pitti)) писал(а):Fixed in upstream trunk.

За прошедшее время должно было до дебиана докатиться. У Вас Jessie?

У меня Sid, вывод uname -a в первом посте.
Вложения
inet.txt
(62.93 КБ) 5 скачиваний
xfree86.txt
(8.43 КБ) 4 скачивания
Делай добро и бросай его в воду.
Спасибо сказали:
NickLion
Сообщения: 3408
Статус: аватар-невидимка
ОС: openSUSE Tumbleweed x86_64

Re: xev не видит функциональные клавиши

Сообщение NickLion »

Да, вообще-то там надо ставить 161/162 (а не 169/170). Но всё равно не работает в openSUSE тоже такой код. А назначить другие коды — без проблем. Странно.
Спасибо сказали:
Аватара пользователя
Ququshka77
Сообщения: 11
ОС: Debian, Windows7

Re: xev не видит функциональные клавиши

Сообщение Ququshka77 »

NickLion писал(а):
16.11.2015 18:25
Да, вообще-то там надо ставить 161/162 (а не 169/170). Но всё равно не работает в openSUSE тоже такой код. А назначить другие коды — без проблем. Странно.

Просьба пояснить, почему 161/162. Из всей клавиатуры только две клавиши имеют эту проблему Fn+Delete (Eject cd) и FnLock/Unlock.
Мой выбор по назначению исходил из этого.

Код: Выделить всё

# xmodmap -pke | grep Eject
keycode 169 = XF86Eject NoSymbol XF86Eject
keycode 170 = XF86Eject XF86Eject XF86Eject XF86Eject
keycode 174 = XF86AudioStop XF86Eject XF86AudioStop XF86Eject

NoSymbol только у 169 клавиши из имеющих XF86Eject
По большому счету все равно, как она будет определяться, лишь бы определялась, чтобы ее можно было прописать в ~/.fluxbox/keys
Делай добро и бросай его в воду.
Спасибо сказали:
NickLion
Сообщения: 3408
Статус: аватар-невидимка
ОС: openSUSE Tumbleweed x86_64

Re: xev не видит функциональные клавиши

Сообщение NickLion »

Код, который использует setkeycodes и X'ы отличаются на 8. Можете поэкспериментировать, повесить на эту клавишу код 1 и получить Esc, при этом xev будет показывать код 9. И так же с другими кодами.

PS если сам код Вам не важен, повесьте 148, получите XF86Launch1.
Спасибо сказали:
Аватара пользователя
Ququshka77
Сообщения: 11
ОС: Debian, Windows7

Re: xev не видит функциональные клавиши

Сообщение Ququshka77 »

А ларчик просто открывался!!!
В сторону бубен и никакой магии!!!
Удалось назначить клавише сканкод и имя, чтобы xev определял ее.
Получилось сделать это при соблюдении двух условий.
1. код клавиши в команде: "# setkeycodes 0xba 128 " должен быть в пределах 1 - 128
2. как подсказал NickLion - нужно учитывать разницу в 8 при назначении имени в .Xmodmap
Вечером подробно опишу весь процесс.
Делай добро и бросай его в воду.
Спасибо сказали:
Аватара пользователя
Ququshka77
Сообщения: 11
ОС: Debian, Windows7

Re: xev не видит функциональные клавиши

Сообщение Ququshka77 »

Настройка дополнительных клавиш в случае если они не определяются xev и showkey.

Суть проблемы.

Имеются неработающие мультимедиа или дополнительные (Fn+<другая_клавиша>) клавиши на клавиатуре.
Утилиты для определения кейкодов xev и showkey никак не реагируют на нажатие этих клавиш.
В выводе dmesg имеются строчки вида:

Код: Выделить всё

[  123.137424] atkbd serio0: Unknown key released (translated set 2, code 0xba on isa0060/serio0).
[  123.137433] atkbd serio0: Use 'setkeycodes e03a <keycode>' to make it known.

Решение.
1. определим сканкод клавиши

Код: Выделить всё

# tail -f /var/log/messages

нажимаем "проблемную" клавишу, видим сообщение ядра:

Код: Выделить всё

Nov 17 16:08:41 Samsung kernel: [  330.742502] atkbd serio0: Unknown key released (translated set 2, code 0xba on isa0060/serio0).
Nov 17 16:08:41 Samsung kernel: [  330.742510] atkbd serio0: Use 'setkeycodes e03a <keycode>' to make it known.

в нем нас интересуют два числа: 0xba и e03a
это и есть сканкод нашей клавиши, какой из них использовать - дело ваше, результат будет одинаковый
жмем Ctrl+D - для выхода

2. выбор кейкода клавиши
здесь нужно обратить внимание на два момента:
во-первых: значение кейкода мы можем выбрать в только в пределах от 1 до 127 (об этом написано в man setkeycodes)
во-вторых: нужно учитывать несоответствие кейкодов выдаваемых showkey и xmodmap (его же использует xev),
у showkey они на 8 меньше

Код: Выделить всё

$ xmodmap -pke | less
.......................
keycode 116 = Down NoSymbol Down
keycode 117 = Next NoSymbol Next
keycode 118 = Insert NoSymbol Insert
keycode 119 = Delete NoSymbol Delete
keycode 120 =
keycode 121 = XF86AudioMute NoSymbol XF86AudioMute
keycode 122 = XF86AudioLowerVolume NoSymbol XF86AudioLowerVolume
.......................

(часть вывода опущена)

нас интересуют строки с 8 по 135 (учитываем смещение) в которых справа от знака равенства пусто
например: keycode 120 в листинге выше

3. назначение клавише кейкода
введем команду:

Код: Выделить всё

# setkeycodes 0xba 112

где 0xba - сканкод, 112 - кейкод с учетом смещения (120-8=112)
проверим результат:

Код: Выделить всё

# showkey

нажимаем "проблемную" клавишу и видим вывод:
.

Код: Выделить всё

.......................
код клавиши 112 нажата
код клавиши 112 отпущена
.......................

showkey определил клавишу, жмем Ctrl-C или ждем 10 сек. для выхода

4. выбор и назначение кейсим (символьного имени) клавиши
существует определенный список разрешенных значений кейсим
для мультимедиа клавиш его можно посмотреть здесь -
http://wiki.linuxquestions.org/wiki/XF86_keyboard_symbols
или в файле:

Код: Выделить всё

~$ less /usr/include/X11/XF86keysym.h

или

Код: Выделить всё

~$ xmodmap -pke | less

имена как правило "говорящие", думаю не составит труда выбрать нужное исходя из назначения клавиши,
если сомневаетесь - обратитесь к поиску google, в моем случае клавиша отвечает за выгрузку cd/dvd диска
поэтому:

Код: Выделить всё

~$ xmodmap -pke | grep Eject
keycode 169 = XF86Eject NoSymbol XF86Eject
keycode 170 = XF86Eject XF86Eject XF86Eject XF86Eject
keycode 174 = XF86AudioStop XF86Eject XF86AudioStop XF86Eject

видим, что XF86Eject - вероятно и есть наш кейсим
назначим его:

Код: Выделить всё

~$ xmodmap -e "keycode 120 = XF86Eject"

проверим:

Код: Выделить всё

$xmodmap -pke | grep 120
keycode 120 = XF86Eject NoSymbol XF86Eject

теперь нажмем клавишу - работает, ноутбук выгрузил диск

5.фиксация настроек
выполненые действия сохранят рабочей клавишу только до первого выключения
чтобы этого не случилось выполним:

Код: Выделить всё

$ echo "keycode 120 = XF86Eject" >> ~/.Xmodmap

это добавит настройки для нашей клавиши в файл ~/.Xmodmap
(если он не существует - создаст его)
откроем в любом текстовом редакторе файл /etc/rc.local

Код: Выделить всё

# vim /etc/rc.local

и добавим строку

Код: Выделить всё

setkeycodes 0xba 112

перед строкой:

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


Делай добро и бросай его в воду.
Спасибо сказали:
Ответить