Fedora linux forum

Форум русской поддержки ОС Fedora linux

 

#1 2008-05-24 23:46:59

nvl
Member
Зарегистрирован: 2007-11-01
Сообщений: 574

Как заставить работать Fn-сочетания клавиш ноутбука

Данным способом (как мне кажется) можно завести соответствующие клавиши на любом ноутбуке.

На примере ноутбука Sony Vaio PCG-V505AX
Комбинации клавиш ноутбука Fn+F3 Fn+F4 Fn+F5 по умолчанию в Fedora не работают.

Пакет spicctrl.i386 : Sony Vaio laptop SPIC control program не помог.
Недавно разобрался с утилитами из пакета input-utils, результат следующий:

Имеется Sony Vaio Keys на input8:

Код:

[root@localhost nick]# cat /proc/bus/input/devices
...................................
...................................
I: Bus=0010 Vendor=104d Product=0000 Version=0000
N: Name="Sony Vaio Keys"
P: Phys=
S: Sysfs=/devices/LNXSYSTM:00/device:00/PNP0A03:00/device:0e/SNY6001:00/input/input8
U: Uniq=
H: Handlers=kbd event8
B: EV=13
B: KEY=1f 3fff0000 c 0 100000 0 2 0 6000 100400 0 40300400 0 0 0 0
B: MSC=10
...................................

Запускаем утилиту showkey и нажимаем комбинации Fn+F3 Fn+F4 Fn+F5:

Код:

[root@localhost nick]# showkey
kb mode was UNICODE
press any key (program terminates after 10s of last keypress)...
keycode 468 press
keycode 468 release
keycode 469 press
keycode 469 release
keycode 470 press
keycode 470 release

получам key-коды
468 для Fn+F3
469 для Fn+F4
470 для Fn+F5

Теперь нужна утилита input-kbd из пакета input-utils.
Пакет input-utils можно взять в репозитарии Tigro:

Код:

[root@localhost nick]# yum install input-utils

или если репозитарий не подключен:

Код:

[root@localhost nick]# rpm -Uvh http://mirror.yandex.ru/fedora/tigro/9/i386/input-utils-2005.06.22-0.1.fc9.i386.rpm

Смотрим keyboard map на event8:

Код:

[root@localhost nick]# input-kbd 8
/dev/input/event8
bustype : BUS_ISA
vendor : 0x104d
product : 0x0
version : 0
name : "Sony Vaio Keys"
bits ev : EV_SYN EV_KEY EV_MSC
map: 36 keys, size: 50/64
0x0000 = 212 # KEY_CAMERA
0x0004 = 465 # KEY_FN_ESC
0x0005 = 466 # KEY_FN_F1
0x0006 = 467 # KEY_FN_F2
0x0007 = 468 # KEY_FN_F3
0x0008 = 469 # KEY_FN_F4
0x0009 = 470 # KEY_FN_F5
0x000a = 471 # KEY_FN_F6
0x000b = 472 # KEY_FN_F7
0x000c = 473 # KEY_FN_F8
0x000d = 474 # KEY_FN_F9
0x000e = 475 # KEY_FN_F10
0x000f = 476 # KEY_FN_F11
0x0010 = 477 # KEY_FN_F12
0x0011 = 466 # KEY_FN_F1
0x0012 = 467 # KEY_FN_F2
0x0013 = 480 # KEY_FN_D
0x0014 = 481 # KEY_FN_E
0x0015 = 482 # KEY_FN_F
0x0016 = 483 # KEY_FN_S
0x0017 = 484 # KEY_FN_B
0x0018 = 237 # KEY_BLUETOOTH
0x0019 = 148 # KEY_PROG1
0x001a = 149 # KEY_PROG2
0x001b = 202 # KEY_PROG3
0x001c = 158 # KEY_BACK
0x001d = 237 # KEY_BLUETOOTH
0x001e = 237 # KEY_BLUETOOTH
0x001f = 138 # KEY_HELP
0x0020 = 464 # KEY_FN
0x0029 = 372 # KEY_ZOOM
0x002a = 289 # BTN_THUMB
0x002f = 238 # KEY_WLAN
0x0030 = 238 # KEY_WLAN
0x0031 = 418 # KEY_ZOOMIN
0x0032 = 419 # KEY_ZOOMOUT

Создаем свою конфигурацию keyboard map в файле SonyFnKeys:

Код:

[root@localhost nick]# gedit /etc/input-kbd/SonyFnKeys

копируем в него вывод и меняем key-коды 468, 469, 470 на нужные:

0x0000 = 212  # KEY_CAMERA
0x0004 = 465  # KEY_FN_ESC
0x0005 = 466  # KEY_FN_F1
0x0006 = 467  # KEY_FN_F2
0x0007 = 113  # KEY_MUTE
0x0008 = 114  # KEY_VOLUMEDOWN
0x0009 = 115  # KEY_VOLUMEUP
0x000a = 471  # KEY_FN_F6
0x000b = 472  # KEY_FN_F7
0x000c = 473  # KEY_FN_F8
0x000d = 474  # KEY_FN_F9
0x000e = 475  # KEY_FN_F10
0x000f = 476  # KEY_FN_F11
0x0010 = 477  # KEY_FN_F12
0x0011 = 466  # KEY_FN_F1
0x0012 = 467  # KEY_FN_F2
0x0013 = 480  # KEY_FN_D
0x0014 = 481  # KEY_FN_E
0x0015 = 482  # KEY_FN_F
0x0016 = 483  # KEY_FN_S
0x0017 = 484  # KEY_FN_B
0x0018 = 237  # KEY_BLUETOOTH
0x0019 = 148  # KEY_PROG1
0x001a = 149  # KEY_PROG2
0x001b = 202  # KEY_PROG3
0x001c = 158  # KEY_BACK
0x001d = 237  # KEY_BLUETOOTH
0x001e = 237  # KEY_BLUETOOTH
0x001f = 138  # KEY_HELP
0x0020 = 464  # KEY_FN
0x0029 = 372  # KEY_ZOOM
0x002a = 289  # BTN_THUMB
0x002f = 238  # KEY_WLAN
0x0030 = 238  # KEY_WLAN
0x0031 = 418  # KEY_ZOOMIN
0x0032 = 419  # KEY_ZOOMOUT

сохраняем.

Теперь меняем keyboard map  для input8 на свою:

Код:

[root@localhost nick]# input-kbd -f /etc/input-kbd/SonyFnKeys 8
/dev/input/event8
map: 36 keys, size: 50/64
set: 0x0000 = 212 # KEY_CAMERA
set: 0x0004 = 465 # KEY_FN_ESC
set: 0x0005 = 466 # KEY_FN_F1
set: 0x0006 = 467 # KEY_FN_F2
set: 0x0007 = 113 # KEY_MUTE
set: 0x0008 = 114 # KEY_VOLUMEDOWN
set: 0x0009 = 115 # KEY_VOLUMEUP
set: 0x000a = 471 # KEY_FN_F6
set: 0x000b = 472 # KEY_FN_F7
set: 0x000c = 473 # KEY_FN_F8
set: 0x000d = 474 # KEY_FN_F9
set: 0x000e = 475 # KEY_FN_F10
set: 0x000f = 476 # KEY_FN_F11
set: 0x0010 = 477 # KEY_FN_F12
set: 0x0011 = 466 # KEY_FN_F1
set: 0x0012 = 467 # KEY_FN_F2
set: 0x0013 = 480 # KEY_FN_D
set: 0x0014 = 481 # KEY_FN_E
set: 0x0015 = 482 # KEY_FN_F
set: 0x0016 = 483 # KEY_FN_S
set: 0x0017 = 484 # KEY_FN_B
set: 0x0018 = 237 # KEY_BLUETOOTH
set: 0x0019 = 148 # KEY_PROG1
set: 0x001a = 149 # KEY_PROG2
set: 0x001b = 202 # KEY_PROG3
set: 0x001c = 158 # KEY_BACK
set: 0x001d = 237 # KEY_BLUETOOTH
set: 0x001e = 237 # KEY_BLUETOOTH
set: 0x001f = 138 # KEY_HELP
set: 0x0020 = 464 # KEY_FN
set: 0x0029 = 372 # KEY_ZOOM
set: 0x002a = 289 # BTN_THUMB
set: 0x002f = 238 # KEY_WLAN
set: 0x0030 = 238 # KEY_WLAN
set: 0x0031 = 418 # KEY_ZOOMIN
set: 0x0031 = 418 # KEY_ZOOMOUT

Все, клавиши Fn+F3 -Mute, Fn+F4 — Volume-, Fn+F5 — Volume+ работают.

Теперь надо добавить скрипт в автозагрузку. Но так как номер event имеет свойство иногда меняться (например, в случае подключения новых устройств ввода, таких как внешние клавиатуры, мыши, тв-тюнеры с дистанционным управлением, планшеты и т.п.) лучше вычислить номер event для input-kbd програмно. Идея заимствована у Игоря Кузнецова, автора патчей для поддержки тюнеров Beholder. Добавляем в /etc/rc.d/rc.local следующую строку:

Код:

input-kbd -f /etc/input-kbd/SonyFnKeys `cat /proc/bus/input/devices | grep -4 '"Sony Vaio Keys"' | grep "H:" | awk '{ sub(/event/, "", $3); print $3}'` >/dev/null 2>&1

в данной строке выполняются следующие действия:

cat /proc/bus/input/devices — получение детального списка устройств ввода
grep -4 '"Sony Vaio Keys"' — получение из списка блока данных по данному устройству
grep "H:" — получение из блока данных строки — H: Handlers=kbd event8
awk '{ sub(/event/, "", $3); print $3}' — получение с помощью языка awk из строки H: Handlers=kbd event8 номера event, т.е. 8
> /dev/null 2>&1 — что это смотри здесь

P.S.
Интересные материалы по теме
Нихт ферштейн: учим пингвина понимать мультимедийные клавиши
Manage Your Laptop's Hotkeys On Fedora
Настройка мультимедия клавиш
HOWTO_Мультимедийные_кнопки_(клавиши)
Изменение раскладки клавиатуры
Sony Vaio Laptop Utilities

Отредактированно nvl (2008-06-05 14:54:22)

Неактивен

 

#2 2008-05-29 14:49:33

cepreu
Member
Откуда: Владивосток
Зарегистрирован: 2008-01-02
Сообщений: 653

Re: Как заставить работать Fn-сочетания клавиш ноутбука

Спасибо. Очень полезная информация.


24 "' "The LORD bless you and keep you;
25 the LORD make his face shine upon you and be gracious to you;
26 the LORD turn his face toward you and give you peace." '
(Nu.6:24-26)

Неактивен