Условие - 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
|