The OpenNET Project / Index page

[ новости/++ | форум | wiki | теги | ]

Подключение мультимедиа клавиш на usb-клавиатуре во FreeBSD
Условие - FreeBSD не ниже 8-ки. Мультимедиа клавиши usb-шных клавиатур не
генерируют фиксированные скан-коды, поэтому этим придется заняться uhidd.
Необходимо установить

   /usr/ports/sysutils/uhidd

для того, что бы связать клавиши со скан-кодами, сначала запустим uhidd следующим образом:

   uhidd -o /dev/ugenX.X

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

Запускаем

   usbconfig

и смотрим вывод

После запуска последовательно нажимаем все мультимедиа кнопки. на какие-то
может быть реакция, на какие-то нет - пока неважно - главное последовательно
пройтись по всем кнопкам.

в результате этого мы получим файл

/var/run/uhidd.ugenX.X/cc_keymap

следующего вида

   0x046d:0xc30e={
     cc_keymap={
        Play/Pause="0x5A"
        Mute="0x5F"
        Volume_Increment="0x62"
        Volume_Decrement="0x63"
        AL_Consumer_Control_Configuration="0x71"
        AC_Home="0x66"
     }
   }


где первыми идет обозначение клавиатуры (вендор:модель), а затем названия
кнопок с произвольно присвоенными скан-кодами. и вот здесь есть одна хитрость -
uhidd выбирает эти коды из списка свободных (посмотреть список можно в конце
man uhidd.conf), но может так получиться, что какие-то коды уже заняты. в таком
случае для этих клавиш надо прописать коды самостоятельно, но об этом чуть позже.

Далее создаем файл /usr/local/etc/uhidd.conf

   default={
     mouse_attach="NO"
     kbd_attach="NO"
     vhid_attach="NO"
     cc_attach="YES"
   }


повторяющий ту же опцию "-o", которую указывали при запуске вручную
теперь

   cat /var/run/uhidd.ugenX.X/cc_keymap >> /usr/local/etc/uhidd.conf

и делаем

   /usr/local/etc/rc.d/uhidd start /dev/ugenX.X

и настраиваем  свой DE. правда здесь  может поджидать  маленькая досада  -
поскольку uhidd  назначает скан-коды произвольно  из списка  неиспользуемых,
то у  меня получилось, что  скан-код  с одной  из клавиш  не обрабатывался. В
этом случае  просто назначаем  клавише другой  скан-код  из доступных.

в случае, если window manager не поддерживает назначения произвольных сканкодов
на нажатия, а обрабатывает только стандартные, тогда надо использовать

   xmodmap .Xmodmap

где в .Xmodmap 

   keycode 170 = XF86AudioRaiseVolume
   keycode 184 = XF86AudioLowerVolume
   keycode 190 = XF86AudioMute
   ......

Ссылки на использованные материалы:
 * http://wiki.freebsd.org/uhidd#head-629d89bc56c27990a707d46a32462dcdbdd3ccf7
 * man uhidd
 * man uhidd.conf
 
15.06.2010 , Автор: arachnid , Источник: http://cat-in-mind.livejournal.com/...
Ключи: freebsd, scancode, usb, keyboard, xmodmap, uhidd / Лицензия: CC-BY
Раздел:    Корень / Администратору / Система / Поддержка аппаратного обеспечения

Обсуждение [ Линейный режим | Показать все | RSS ]
 
  • 1.1, крамер (?), 08:26, 16/06/2010 [ответить] [показать ветку] [···]    [к модератору]
  • +/
    Кстати! На свежей 8-S (буквально понедельник) имею наконец рабочими все мультимедийные клавиши на ноутбуке! Это после стольких лет их неработы! Почти все сочетания Fn+F1..12 были нерабочие так как генерили acpi event, щас стало работать, без всяких дополнительных танцев и портов. Искаропки, всё и сразу.
     
     
  • 2.2, arachnid (ok), 12:31, 16/06/2010 [^] [ответить]    [к модератору]
  • +/
    а как в ноуте выглядит клава? как ps/2?
     
     
  • 3.12, Аноним (-), 10:16, 17/06/2010 [^] [ответить]    [к модератору]
  • +/
    >а как в ноуте выглядит клава? как ps/2?

    а как по виду отличить usb от ps/2 клавы на ноуте?

     
     
  • 4.13, arachnid (ok), 11:18, 17/06/2010 [^] [ответить]    [к модератору]
  • +/
    dmesg и usbconfig вам в помощь
     
  • 1.3, Аноним (-), 13:20, 16/06/2010 [ответить] [показать ветку] [···]    [к модератору]
  • +/
    >а как в ноуте выглядит клава? как ps/2?

    Не припомню чтоб по другому было

     
     
  • 2.4, arachnid (ok), 13:58, 16/06/2010 [^] [ответить]    [к модератору]  
  • +/
    >>а как в ноуте выглядит клава? как ps/2?
    >
    >Не припомню чтоб по другому было

    просто для стандартных ps/2 клав мультимедиа клавиши обрабатываются нормально

     
     
  • 3.14, крамер (?), 11:28, 17/06/2010 [^] [ответить]    [к модератору]  
  • +1 +/
    Да, ps\2, но фактически, клавиши Fn+F* посылают не кейкоды, а acpi events, это факт.
     
     
  • 4.16, arachnid (ok), 11:37, 17/06/2010 [^] [ответить]    [к модератору]  
  • +/
    >Да, ps\2, но фактически, клавиши Fn+F* посылают не кейкоды, а acpi events,
    >это факт.

    спасибо, буду знать

     
  • 1.5, Kibab (ok), 17:16, 16/06/2010 [ответить] [показать ветку] [···]    [к модератору]  
  • +1 +/
    интересно, спасибо.
     
     
  • 2.6, arachnid (ok), 18:13, 16/06/2010 [^] [ответить]    [к модератору]  
  • +1 +/
    пожалуйста :)
     
  • 1.8, QuAzI (??), 19:13, 16/06/2010 [ответить] [показать ветку] [···]    [к модератору]  
  • +/
    Для работы uhidd нужно подгрузить vkbd.ko , о чём он скажет только если запускать с опцией -v.
     
     
  • 2.10, arachnid (ok), 19:53, 16/06/2010 [^] [ответить]    [к модератору]  
  • +/
    странно, сейчас посмотрел на свою рабочую машину - в конфиге uhidd есть указание только для cc_attach - а модуль vkbd подгружен. скорее всего, что uhidd подгрузил автоматом. но вот на домашней машине вроде этого не произошло. завтра поэкспериментирую.
     
     
  • 3.15, arachnid (ok), 11:29, 17/06/2010 [^] [ответить]    [к модератору]  
  • +/
    >странно, сейчас посмотрел на свою рабочую машину - в конфиге uhidd есть
    >указание только для cc_attach - а модуль vkbd подгружен. скорее всего,
    >что uhidd подгрузил автоматом. но вот на домашней машине вроде этого
    >не произошло. завтра поэкспериментирую.

    проверил - необходимые модули подгрузились при загрузке. их загрузка прописана в скрипте /usr/local/etc/rc.d/uhidd в виде строчки required_modules="uvhid vkbd"

    так что сейчас внесу уточнения

    так. поскольку "автор" не я, а auto-tips, то внесу исправления только в ЖЖ :(

     
  • 1.11, Новичок (??), 00:06, 17/06/2010 [ответить] [показать ветку] [···]    [к модератору]  
  • +/
    а как такое делается в линуксе?
     
     
  • 2.17, Тот_еще_аноним (?), 01:00, 18/06/2010 [^] [ответить]    [к модератору]  
  • –2 +/
    Никак, оно там работает изкаропки без шаманств
     
     
  • 3.25, QuAzI (??), 15:25, 23/06/2010 [^] [ответить]    [к модератору]  
  • +/
    >Никак, оно там работает изкаропки без шаманств

    В LFS никак. А если речь не про LFS, то вы малость темой ошиблись при ответе.

     
  • 2.19, iZEN (ok), 17:32, 20/06/2010 [^] [ответить]    [к модератору]  
  • –1 +/
    Пользователи линукс не знают как. Им что дали, тем они и пользуются. Правда, если что-то не работает, то руки опускаются и страшный вой на форумах — "политика зашита в механизмы".
     
  • 1.20, Ygor (ok), 19:11, 21/06/2010 [ответить] [показать ветку] [···]    [к модератору]  
  • +/
    А чем не угодил xev(1)?
     
     
  • 2.21, arachnid (ok), 22:04, 21/06/2010 [^] [ответить]    [к модератору]  
  • +/
    >А чем не угодил xev(1)?

    читаем внимательно - usb-клавиатуры не выдают сканкоды при нажатии мультимедиа-клавиш - xev ничего не показывает

     
     
  • 3.22, freelove (?), 16:04, 22/06/2010 [^] [ответить]    [к модератору]  
  • +/
    выдает, выдает :)
    это проблема исключительно фришки
     
     
  • 4.23, arachnid (ok), 16:26, 22/06/2010 [^] [ответить]    [к модератору]  
  • +/
    >выдает, выдает :)
    >это проблема исключительно фришки

    хм, я вроде бы нигде не говорил. что это решение подходит и для других систем. или вы считаете, что xev таки должен что-то ловить под фряхой?

     
     
  • 5.24, QuAzI (??), 15:21, 23/06/2010 [^] [ответить]    [к модератору]  
  • +/
    Я вроде бы нигде не вкурил, почему не xev. Фактически uhidd только привязывает "новые" кнопки к скан-кодам, никому не запрещали с тем же успехом юзать xev, чтобы получить коды (разумеется уже после загрузки uhidd). Что я собственно и сделал после того как успешно профукал, какой код к какой кнопке споймал uhidd =)
     
     
  • 6.26, arachnid (ok), 16:20, 23/06/2010 [^] [ответить]    [к модератору]  
  • +/
    >Я вроде бы нигде не вкурил, почему не xev. Фактически uhidd только
    >привязывает "новые" кнопки к скан-кодам, никому не запрещали с тем же
    >успехом юзать xev, чтобы получить коды (разумеется уже после загрузки uhidd).
    >Что я собственно и сделал после того как успешно профукал, какой
    >код к какой кнопке споймал uhidd =)

    эти рассуждения - результат эксперимента (то есть у вас есть фряха, в которой запущен xev и который показывает скан-коды при нажатии мультимедиа клавиш) или "за жизнь поболтать хочется"?

    давайте попробуем еще раз - вот выдерка из вики касательно данного демона - "
    To support multimedia keys basically is to translate USB consumer usage to keycodes"  

     
     
  • 7.27, QuAzI (ok), 00:08, 24/06/2010 [^] [ответить]    [к модератору]  
  • +/
    Ну, если слова про "что я собственно и сделал" и уточнение о необходимости подгрузить модуль - "за жизнь", то я даже теряюсь в догадках, чего ещё писать.

    Вот выдержка из man Xev
    Xev creates a window and then asks the X server to send it events when-
    ever  anything  happens to the window (such as it being moved, resized,
    typed in, clicked in, etc.)
    Тоесть он просто ловит эвенты, причём не только от клавы, но и от мыши и вообще любые посылы в созданное окно. Другое дело что USB-клава без uhidd не посылает эвенты с расширенных кнопок. Тоесть вопрос только в том, кому как удобнее получить эти кей-коды, то что uhidd должен быть запущен - очевидно.

     
     
  • 8.28, arachnid (ok), 07:59, 24/06/2010 [^] [ответить]    [к модератору]  
  • +/
    с одной стороны приношу извинения, что не дочитал до конца (видимо остановился на словах "почему не xev" :) ), а с другой - сканкод, который выдает uhidd назначаете Вы сами - uhidd ловит названия кнопок, и уже к ним привязывает (и выдает системе) сканкоды.
    тогда объясните,плз, что Вы имели в виду под "Я вроде бы нигде не вкурил, почему не xev"
     
     
  • 9.29, QuAzI (??), 11:07, 24/06/2010 [^] [ответить]    [к модератору]  
  • +/
    uhidd просто делает привязку эвентов от устройства к свободным кодам клавиатуры. Но он нигде не помечает, к какой кнопке относится каждый код. Тоесть кнопка с кодом 0x78 это может быть и Mute, а может быть и Play/Pause. Представьте теперь что у вас не 5 дополнительных кнопок, а навороченная мультимедиа клавиатура на 50 дополнительных кнопок - методом тыка такое уже не подберёшь, надо для себя сразу знать что и к чему привязываем, на ходу тыкать и дописывать конфиг. К тому же uhidd возвращает 16-ричный код кнопки, а xmodmap предпочитает десятиричный код.
     
     
  • 10.30, arachnid (ok), 12:26, 24/06/2010 [^] [ответить]    [к модератору]  
  • +/
    >uhidd просто делает привязку эвентов от устройства к свободным кодам клавиатуры. Но
    >он нигде не помечает, к какой кнопке относится каждый код. Тоесть
    >кнопка с кодом 0x78 это может быть и Mute, а может
    >быть и Play/Pause. Представьте теперь что у вас не 5 дополнительных
    >кнопок, а навороченная мультимедиа клавиатура на 50 дополнительных кнопок - методом
    >тыка такое уже не подберёшь, надо для себя сразу знать что
    >и к чему привязываем, на ходу тыкать и дописывать конфиг. К
    >тому же uhidd возвращает 16-ричный код кнопки, а xmodmap предпочитает десятиричный
    >код.

    так. все равно не понял. что значит "Но он нигде не помечает, к какой кнопке относится каждый код"?

    давайте попробуем по другому - с чем с заметке Вы не согласны?

     
     
  • 11.31, QuAzI (ok), 13:58, 24/06/2010 [^] [ответить]    [к модератору]  
  • +/
    Два раза запостил
     
  • 11.32, QuAzI (ok), 14:00, 24/06/2010 [^] [ответить]    [к модератору]  
  • +/
    Тэк, теперь уже сам малость запутался. Кнопки он обзывает, но коды даёт 16-ричные, а в xmodmap нужны 10-ричные значения. Как-то так.

    # cat /usr/local/etc/uhidd.conf
    0x046d:0xc313={
            cc_keymap={
                    Play/Pause="0x62"
                    Mute="0x71"
                    Volume_Increment="0x6F"
                    Volume_Decrement="0x63"
                    AL_Consumer_Control_Configuration="0x54"
                    AL_Email_Reader="0x5A"
                    AL_Calculator="0x60"
                    AC_Home="0x5F"
            }
    }

    Вот тут в статье не хватает информации, как вы пересчитывали значения =) Мне пересчитывать было лень, я использовал Xev

    # cat .Xmodmap
       keycode 207 = XF86AudioRaiseVolume
       keycode 190 = XF86AudioLowerVolume
       keycode 209 = XF86AudioMute
       keycode 92 = XF86AudioPause
       keycode 189 = XF86AudioPlay
       keycode 170 = XF86Mail
       keycode 147 = XF86Calculater
       keycode 184 = XF86HomePage

     
     
  • 12.33, arachnid (ok), 14:46, 24/06/2010 [^] [ответить]    [к модератору]  
  • +/
    я их никак не переводил - это вырезка из конеца вики :)

    просто мне в гноме это не надо - тот понимает кейкоды и так. поэтому я и "воспользовался" маном.

    да. соглашусь. что более красиво эти коды привязать к правильным событиям, но... :)
    кстати, в одной статье натыкался, что xmodmap понимает и hex значения

     
     
  • 13.34, QuAzI (ok), 18:42, 24/06/2010 [^] [ответить]    [к модератору]  
  • +/
    Странно, мой xmodmap не понял и подавился, а DE у меня не стоит, у меня awesome =) . А ещё одна кнопка (Calculator которая должна быть) не сразу нажимается, зато если повторить 2-3 раза, она залипает и в системе запущается фигова сотня экземпляров привязанного приложения.
     

    Ваш комментарий
    Имя:         
    E-Mail:      
    Заголовок:
    Текст:



      Закладки на сайте
      Проследить за страницей
    Created 1996-2018 by Maxim Chirkov  
    ДобавитьПоддержатьВебмастеруГИД  
    Hosting by Ihor