Условие - 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
в случае, если window manager не поддерживает назначения произвольных сканкодов на нажатия, а обрабатывает только стандартные, тогда надо использовать
xmodmap .Xmodmap
где в .Xmodmap
keycode 170 = XF86AudioRaiseVolume
keycode 184 = XF86AudioLowerVolume
keycode 190 = XF86AudioMute
......
Ссылки на использованные материалы:
* http://wiki.freebsd.org/uhidd#head-629d89bc56c27990a707d46a3...
* man uhidd
* man uhidd.conf
URL: http://cat-in-mind.livejournal.com/139950.html
Обсуждается: http://www.opennet.ru/tips/info/2388.shtml