LINUX.ORG.RU
решено ФорумTalks

Razer Anansi и Линукс

 ,


0

3

Привет всем. Есть клавиатура, Razer Anansi. Чем хороша - есть 12 доп. клавиш, на которые можно запрограммировать клавиатурные макросы, переключения окон и т.д. А также есть подсветка с возможностью задания цвета (не по клавишам, а в целом). Но это в винде.

Так вот, у клавы нет поддержки Линукса (как и у всего остального в Razer). Виндовый софт где-то такой: 1, 2, 3, 4. Хочется запилить аналог.

С протоколом общения по USB разобрался. Теперь при помощи libusb я могу выставлять цвет подсветки в RGB (как с плавным переходом, так и мгновенно), включать циклическую смену цвета. Есть даже занятная идея менять цвет при смене раскладки.

Доп. клавиши же по дефолту выдают коды обычных клавиш - например, клавиша М1 дает обычное «=», М2 - "-" и т.д. Но посылкой спец. пакета можно заставить их выдавать другие коды. Эти коды также фиксированы, но их по идее можно юзать:

M1: keycode 193 (keysym 0x1008ff46, XF86Launch6)
M2: keycode 194 (keysym 0x1008ff47, XF86Launch7)
M3: keycode 195 (keysym 0x1008ff48, XF86Launch8)
M4: keycode 196 (keysym 0x1008ff49, XF86Launch9)
M5: keycode 197 (keysym 0x0, NoSymbol)
T1: keycode 198 (keysym 0x0, NoSymbol)
T2: keycode 199 (keysym 0x1008ffa9, XF86TouchpadToggle)
T3: keycode 200 (keysym 0x1008ffb0, XF86TouchpadOn)
T4: keycode 201 (keysym 0x1008ffb1, XF86TouchpadOff)
T5: keycode 98 (keysym 0xff26, Katakana)
T6: keycode 99 (keysym 0xff25, Hiragana)
T7: keycode 103 (keysym 0x0, NoSymbol)

По работе с клавиатурой не хватает знаний.

  • Допустим, я хочу по T1 заставить посылать «Ctrl+A,M». Как это сделать в линуксе (с консоли или программно)?
  • Допустим, я хочу по T2 выполнить свой код. Как это сделать в линуксе?
★★★★★

Эх, такую бы клаву, но только в формате Lycosa...

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

А можно узнать, зачем нужна подсветка клавиш?

чтобы в темноте периферийным зрением было видно пространственное представление клавиатуры.

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

чтобы в темноте периферийным зрением было видно пространственное представление клавиатуры.

На ощупь, не?

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

На ощупь, не?

Кто владеет слепым набором, а кто нет. Я на 50% - могу, только если она в удобном положении на вытянутых руках, иначе почему-то сложно:)

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

На ощупь, не?

Неудобно же. А еще иногда бывает нужно увидеть конкретные клавиши, например, при наборе сложного пароля. В общем, если тебе не нужно - это говорит только о том, что ты просто не используешь компьютер в качестве рабочего инструмента.

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

Он лох. Все потроганные мной клавы от рэйзер посасывают у няшки Illuminated за обе щеки

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

Неудобно же. А еще иногда бывает нужно увидеть конкретные клавиши, например, при наборе сложного пароля. В общем, если тебе не нужно - это говорит только о том, что ты просто не используешь компьютер в качестве рабочего инструмента.

Кажется, зависит от клавиатуры) Я на своей M$ NEK4K не промахиваюсь при наборе, даже на вводе паролей.
Хотя не могу сказать, что у меня сложные пароли, да.

Deleted ()
Ответ на: комментарий от Pavval

Я на 50% - могу, только если она в удобном положении на вытянутых руках, иначе почему-то сложно:)

Это потому, что она не эргономичная :)

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

Кажется, зависит от клавиатуры

Ты прав, кажется.

Хотя не могу сказать, что у меня сложные пароли, да.

Я и говорю.

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

Это потому, что она не эргономичная :)

Это потому, что я положил на правильное положение рук при слепом наборе и научился абы как. А еще у меня дома место у компа очень хреновое и реально не удобно.

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

В толксы, потому что много народу и меня быстрее ткнут в очевидное:)

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

Это потому, что я положил на правильное положение рук при слепом наборе и научился абы как

Я тоже :) Но всё равно без этого довольно легко обхожусь.

А еще у меня дома место у компа очень хреновое и реально не удобно.

Тогда не спорю.

Deleted ()
Ответ на: комментарий от Pavval

Ыыы. Спасибо! Теперь все понятно, куды копать:)

Пожалуйста.

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

В BlackWindow только логотип с подсветкой (у меня такая), в BlackWindow Ultimate

Black WIDOW пилять ВДОВА а не ОКНО. Третий человек.

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

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

Norgat ★★★★★ ()

Pavval, а не поделитесь рецептом — как выяснили эту магическую последовательность байт, которая переводит клавиатуру в режим в котором она выдает XF86Launch*?

У меня Razer Blackwidow. С ней до недавних пор работал вот такой 90-байтный пакет, найденный здесь:

00 00 00 00 00 01 00 04 03 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 06 00

Но после обновляния прошивки (нафига я вообще это сделал!? :)) перестал.

Путем прослушивания USB я выяснил, как зажигать-гасить лампочку, например, но вот ничего похожего на этот желанный режим в Synapse 2 не вижу.

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

Хм, для Anansi по ходу тот же пакет:)

Выяснял так:

1. 2 клавы, одна из них подопытная (можно и без второй...)

2. VirtualBox с виндой, проброс клавы Razer по USB.

3. modprobe usbmon

4. wireshark под рутом и анализ USB пакетов, которые идут из винды. Порт выясняется методом тыка - на нужном wireshark будет ловить прерывания при нажатии клавиш.

В виндовой софтинке при нажатии Apply происходит туча телодвижений, причем многие повторяются пару раз. У меня там были команды установки цвета и перехода подсветки, команды сброса и прочее (непонятное). Смотри на пакеты USB HID SET_REQUEST от хоста на клаву. За таким пакетом как правило следует подтверждение (GET_REQUEST и почти такой же пакет назад).

P.S. Я думаю, что в своей софтинке нужно ориентироваться как минимум на поддержку всех Razer клав, а то и других.

P.P.S. Вообще план такой:

  • демон, который через libudev наблюдает за устройствами и конфигурит их (включает экстра клавиши, выставляет подсветку). Доступен для управления через dbus.
  • Гуевая утилита, которая позволяет управлять этим всем, создавать макросы и т.д. Короче то же, что и виндовая. Висит в трее, слушает клаву на манер xbindkeys, реагирует на нее. Для выполнения действий, которые нельзя сделать из под юзера (например, выставить увет подсветки) - обращается к демону.
Pavval ★★★★★ ()
Ответ на: комментарий от Pavval

Да не, мне сам метод хакинга-то ясен — я сам точно так же через VirtualBox/wireshark ее ковыряю. Я не пойму, как заставить Synapse послать именно эту команду, после которой макроклавиши начинают посылать нормальные сканкоды и хоть как-то видеться иксами как XF86Launch[6789].

Вот конкретно эту команду вы где нашли? Тоже где-то в потоке этих SET_REQUEST? Никак не могу понять, в каком случае Synapse хоть что-то похожее выдает…

И прошивку взад никак не откатить уже, похоже :(

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

Вот конкретно эту команду вы где нашли? Тоже где-то в потоке этих SET_REQUEST? Никак не могу понять, в каком случае Synapse хоть что-то похожее выдает…

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

Pavval ★★★★★ ()

Ммм, а макросы ты как реализовать собрался? На сколько я понял, они скидываются во внутренний nand.

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

Команды повторяю. Клавиатура в ответ шлет что-то. Все очень похоже на «подслушанный» дамп. Но ни на какой стадии этого процесса клава не переходит в вожделенное состояние посылки скан-кодов M1—M5.

Интересно, если в суппорт Рейзера написать, помогут или пришлют отписку, что этот наш Линупс ими не поддерживается? :)

botkin ()
Ответ на: комментарий от X10Dead

Ммм, а макросы ты как реализовать собрался? На сколько я понял, они скидываются во внутренний nand.

Неа, они софтовые.

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

Не верю!

З.Ы. У меня было такое, что после неправильных пакетов клава порой падала на мороз и не реагировала на последующие до отключения/включения.

Ищи, что не так повторяешь, что забыл:) Ведь по-любому какой-то мелочи не хватает.

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

Поковырял сегодня еще. Все немного сложнее, чем ожидалось.

Магический пакет нашелся: вместо 01000403/06 он теперь 02000403/05 (ну тут много незначащих нулей надо дописать спереди и сзади — это я для себя такую систему записи пакетов выработал просто)

После его посылки M1-M5 и FN начинают слать URB_INTERRUPT, например, нажатие и отжатие FN шлет:

ffff88021ac33a80 1079587040 C Ii:4:004:2 0:1 16 = 04010000 00000000 00000000 00000000
ffff88021ac33a80 1079587075 S Ii:4:004:2 -115:1 16 <
ffff88021ac33a80 1080013050 C Ii:4:004:2 0:1 16 = 04000000 00000000 00000000 00000000
ffff88021ac33a80 1080013079 S Ii:4:004:2 -115:1 16 <

Радости от этого пока мало: это не распознается ядром как скан-код (пусть даже неизвестный). Соответственно, в /dev/input/event4 (который соответствует у меня Razer'у) никаких байтов на это не приходит :(

Пошел гуглить на тему как там оно все работает на уровне ниже /dev/input...

botkin ()
Ответ на: комментарий от Pavval

Да тут парсить-то нечего, все довольно ясно. Это нормальный такой пакет от HID-клавиатуры, только с маленьким вывертом.

Вот так, например, выглядит пакет о нажатии Shift:

01020000 00000000 00000000 00000000

В вот — рейзеровский FN:

04010000 00000000 00000000 00000000

Вот этот 04000000, на который накладывается сканкод, стандартный драйвер и не признает.

И, похоже, единственный вариант заставить все это хозяйство нормально работать — написать свой модуль ядра с обработкой соответствующих «HID quirks», что совершенно неутешительно :)

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

И, похоже, единственный вариант заставить все это хозяйство нормально работать — написать свой модуль ядра с обработкой соответствующих «HID quirks», что совершенно неутешительно :)

Даже если, то это несложно. В ядре уже есть такие HID костыли - ты будешь не первый, а потому можно поглядеть и сделать так же:)

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

Я тоже этот документ изучаю. Там даже в качестве примера как раз протокол клавиатур рассматривается. Но вот никаких 0x04000000 там не упоминается.

Драйверов для HID-устройств в ядре действительно десятки, так что есть, по чьему образу и подобию работать. Только вот я Си в руки не брал лет двадцать :)

Ну, будем не спеша думать... :)

botkin ()
Ответ на: комментарий от Pavval

Хаха, я бы как раз предпочел не ковырять :)

Ну если вдруг дело пойдет — обращайся, результатами «прослушки» поделюсь. Я если чего полезного накрапаю, тоже сообщу.

Вообще, похоже, что протоколы для всех Рейзеров (в т. ч. мышей) довольно похожие — те же 90-байтные пакеты, с пятого байта команда, 89-й — для контроля четности (кстати, нафига это в USB?). Так что сделать какую-то одну софтину для нескольких моделей вполне реально.

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

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

Вообще, похоже, что протоколы для всех Рейзеров (в т. ч. мышей) довольно похожие — те же 90-байтные пакеты, с пятого байта команда, 89-й — для контроля четности (кстати, нафига это в USB?).

Дык кроме этого еще есть и подтверждение через GET_REQUEST. Я его еще не сразу отличил от геттера того же свойства...

Так что сделать какую-то одну софтину для нескольких моделей вполне реально.

А там и другие клавы есть...)

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

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

На похорониксе долго плакали, что поддержки нет. Хотя для мышей я что-то видел.

Pavval ★★★★★ ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.