Подтвердить что ты не робот

Как захватить исходный HID-вход в Linux?

Короткий вариант того, что я хочу выполнить. У меня есть ножная педаль (INFINITY-IN-USB-1, если она интересна), которая реализована как универсальное HID-устройство, и я хотел бы, чтобы он вел себя как контрольные и альт-ключи на linux. Я ищу что-то на уровне X, т.е. Не только отдельных программ.

Более длинная версия. У меня эта настройка работает в Windows XP, вызывая dll RegisterRawInputDevices и GetRawInputData и прослушивая ввод в скрытых окнах. Все выполняется с помощью довольно простого Autohotkey script (может размещаться здесь, если кому-то интересно). Дело в том, что нет необходимости в дополнительном драйвере и т.д.; требуется только родная Windows dll.

Я хочу, чтобы эта настройка работала на linux (точнее, Gnome под Ubuntu, но иногда я использую другой диспетчер дистрибутивов/окон, поэтому решение на уровне X оценивается). Эта ножная педаль не регистрируется как клавиатура или даже джойстик, а как устройство HID с UsagePage 12, использование 3. Я замечаю, что последний Ubuntu может обнаруживать и использовать любимые ключи на Microsoft Natural Keyboard, которые также регистрируются как устройство HID *. Я использую эти ключи в Windows, используя тот же метод, что и я использую ножную педаль (т.е. Без комплекта программного обеспечения). Поэтому я предполагаю, что эта педаль может работать и на Linux, но вопрос в том, как?

[Я новичок в материалах более низкого уровня в Linux, поэтому, пожалуйста, будьте щедрыми со ссылками на введение или учебник, когда это применимо.]

* Для тех, кто не знает этого, Microsoft Natural Keyboard регистрируется как обычная клавиатура, так и общее HID-устройство. Без какого-либо приложения (например, связанного приложения), зная, как интерпретировать вход HID, обычные клавиши будут работать, но любимые клавиши и специальные функциональные клавиши бесполезны.Суб >


Чтобы уточнить, Linux не видит нажатия педалей в качестве входного сигнала. Он распознает USB-устройство, но xev не дает выхода для педальных прессов. Я видел сообщения о том, что люди успешно используют педаль под WINE для программного обеспечения транскрипции, но это должно работать по-разному и не дает того, что я хочу (что делает педаль похожей на клавиатуру на все родные приложения для Linux). Интересно, будет ли какой-то низкоуровневый драйвер клавиатуры linux необходимо?


Вот еще одна информация: если я выдаю это в терминале

cat /dev/usb/hiddev0

(dev/usb/hiddev0 - моя педаль), я получаю сырые коды, соответствующие моим нажатиям на педали. Это начало. Я знаю, что означает этот необработанный код: в двоичном формате, 0001, 0010, 0100 соответствует каждой педали, соответственно, и комбинация педальных прессов посылает комбинацию этих двоичных чисел, а также отпускает триггерный вход педали любой педали, все еще нажатой (если все педаль вверх, отправляется 0000).

Как заставить X слушать dev/usb/hiddev0 и переводить необработанные коды в, возможно, специальный кодовый ключ, чтобы я мог сопоставлять их с xmodmap или что-то в этом роде?

4b9b3361

Ответ 1

Вам понадобится uinput. Вы будете слушать на вашем /dev/usb/hiddev 0, а затем создавать новые события, которые вы отправите на /dev/input/uinput.

Это объясняет это и дает небольшой учебник: Использование uinput-драйвера в Linux-2.6.x для отправки пользовательского ввода {Это выпуск публикации Einfochips "Dashboard", январь 2007 г. "Совет Месяц", упомянутый на this архивная страница}.

Ответ 2

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

Ответ 3

Появляется ли устройство в /dev/input? если это так, используйте драйвер "evdev" X, чтобы подключить его так же, как и для клавиатуры или мыши.

Ответ 4

Такая же проблема здесь, но со специальными клавишами на беспроводной клавиатуре. Я чувствую вашу боль.

В любом случае, пытаясь заставить это работать, мой метод:

  • sleep 10; killall cat затем быстро в другом терминале: cat /dev/usb/hiddevice0 > key1.usbdump и нажмите/используйте устройство. Это приведет к выгрузке двоичного выхода hiddevice для этого ключа.
  • Я быстро взломал python script, чтобы прочитать входные данные hiddevice и события пожара. Пока это срабатывает в первый раз при нажатии клавиши. Это похоже на то, что предложил Адам, но я думаю, что uinput сложнее программировать/использовать, хотя, возможно, более элегантно, и python легко доступен.

Итак, это незавершенное производство (работает только в первый раз), но, возможно, что-то подобное может работать для вас:

sf1 = open("test.usbdump").read() # read the earlier usb dump from hiddevice
kb = open("/dev/usb/hiddev0")
while 1:
    # Prints true if the specific key has been read.
    print (kb.read(len(sf1)) == sf1)
    # Basically all that has to be done is if ^ is true, then fire off the event you want.

Если кто-то может помочь мне с моей программой, или если я сделаю это неправильно, скажите мне.;)

Я понимаю, что есть некоторые заголовки, которые включены в первоначальную дампу hiddevice. Используя некоторые модификации hex hex и битовую разницу, вы можете найти, какие значения важны, и проверить их на python. (Например, шестнадцатеричная цифра "B0" означает, что на моей клавиатуре была нажата специальная функциональная клавиша, а затем есть дополнительная информация о том, какая клавиша была нажата и т.д.)

Мой конечный результат таков: hiddevice0, кажется, зависает и перестает давать данные через некоторое время, не уверен, почему, но вместо этого я использую /dev/input/event * (это может сработать и для вас), и это кажется работать лучше. Опять же, такой же анализ гекседизации и низкого уровня приводит к успеху. По пути я обнаружил, что sudo cat /dev/input/event3 | hexdump чрезвычайно полезен при определении того, какие байты важны для вас.

Итак, если у вас есть клавиатура IBM Sk-8812 и вы хотите использовать специальные клавиши, вы можете поговорить со мной, чтобы получить script, который я использовал.

Ответ 5

Я использую для своих привязок /shorcuts комбинацию compiz, easystroke и xmacro.

Для ваших нужд, я думаю, что недостающая часть - xbindkeys. Я нашел эту ссылку для вас, которая, возможно, поможет вам установить это:

http://linux-trackball.dreamhosters.com/

Интересно, есть ли способ различать несколько устройств мыши.