LINUX.ORG.RU

Назначение мультимедиа-кнопкам действий в debian jessie

 ,


0

2
# uname -a
Linux Mihahailnb 3.2.0-4-686-pae #1 SMP Debian 3.2.41-2+deb7u2 i686 GNU/Linux

Имеется 7 мультимедийных клавиши, хорошо определяются, вот xev:

KeyPress event, serial 30, synthetic NO, window 0x1200001,
    root 0x146, subw 0x0, time 1674837, (1072,781), root:(1073,810),
    state 0x0, keycode 121 (keysym 0x1008ff12, XF86AudioMute), same_screen YES,
    XLookupString gives 0 bytes: 
    XmbLookupString gives 0 bytes: 
    XFilterEvent returns: False

KeyPress event, serial 33, synthetic NO, window 0x1200001,
    root 0x146, subw 0x0, time 1676855, (1072,781), root:(1073,810),
    state 0x0, keycode 122 (keysym 0x1008ff11, XF86AudioLowerVolume), same_screen YES,
    XLookupString gives 0 bytes: 
    XmbLookupString gives 0 bytes: 
    XFilterEvent returns: False

KeyPress event, serial 33, synthetic NO, window 0x1200001,
    root 0x146, subw 0x0, time 1678655, (1072,781), root:(1073,810),
    state 0x0, keycode 123 (keysym 0x1008ff13, XF86AudioRaiseVolume), same_screen YES,
    XLookupString gives 0 bytes: 
    XmbLookupString gives 0 bytes: 
    XFilterEvent returns: False

KeyPress event, serial 33, synthetic NO, window 0x1200001,
    root 0x146, subw 0x0, time 1679717, (1072,781), root:(1073,810),
    state 0x0, keycode 148 (keysym 0x1008ff1d, XF86Calculator), same_screen YES,
    XLookupString gives 0 bytes: 
    XmbLookupString gives 0 bytes: 
    XFilterEvent returns: False

KeyPress event, serial 33, synthetic NO, window 0x1200001,
    root 0x146, subw 0x0, time 1680034, (1072,781), root:(1073,810),
    state 0x0, keycode 173 (keysym 0x1008ff16, XF86AudioPrev), same_screen YES,
    XLookupString gives 0 bytes: 
    XmbLookupString gives 0 bytes: 
    XFilterEvent returns: False

KeyPress event, serial 33, synthetic NO, window 0x1200001,
    root 0x146, subw 0x0, time 1680331, (1072,781), root:(1073,810),
    state 0x0, keycode 172 (keysym 0x1008ff14, XF86AudioPlay), same_screen YES,
    XLookupString gives 0 bytes: 
    XmbLookupString gives 0 bytes: 
    XFilterEvent returns: False

KeyPress event, serial 33, synthetic NO, window 0x1200001,
    root 0x146, subw 0x0, time 1680558, (1072,781), root:(1073,810),
    state 0x0, keycode 171 (keysym 0x1008ff17, XF86AudioNext), same_screen YES,
    XLookupString gives 0 bytes: 
    XmbLookupString gives 0 bytes: 
    XFilterEvent returns: False

Пытаюсь настроить так: пишу в /etc/console-setup/remap.inc следующее: keycode 121 = «/usr/bin/amixer set Master toggle»

И после перезагрузки ничего не меняется, клавиша не работает в консоли, как и после «dpkg-reconfigure console-setup». Все действия произвожу из-под рута.

Поясню задачу: нужно настроить эти клавиши в консоли. Под «настроить» я понимаю запуск произвольных скриптов при нажатии этих кнопок.

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

xev
в консоли

Што? В консоли надо использовать showkey. Уверяю, результат будет безрадостным, но с напильником решить вопрос можно.

/etc/console-setup/remap.inc
keycode 121 = «/usr/bin/amixer set Master toggle»

Это типа шутка?

Под «настроить» я понимаю запуск произвольных скриптов при нажатии этих кнопок.

triggerhappy, например.

Gotf ★★★
()
Ответ на: комментарий от Gotf

Што? В консоли надо использовать showkey. Уверяю, результат будет безрадостным, но с напильником решить вопрос можно.

Ну, он мне вместо 121 показал 113.

Это типа шутка?

Я нашёл только такой способ. Наверно, плохо искал. Подскажите, как правильно?

triggerhappy, например

Т.е. описанную задачу не решить штатными средствами?

Mihahail
() автор топика
Ответ на: комментарий от Mihahail

Ну, он мне вместо 121 показал 113.

И этот код имеет несколько другой смысл.

Подскажите, как правильно?

Если не считать специализированных средств, то нужно настраивать шелл. Правда, большинство мультимедийных кнопок даст бесполезную последовательность вроде «@».

Т.е. описанную задачу не решить штатными средствами?

Грубо говоря, да.

Gotf ★★★
()
Ответ на: комментарий от Gotf

И этот код имеет несколько другой смысл.

Правильно ли я понял, что showkey дал мне именно keycode а xev - scancode?

Грубо говоря, да.

acpi тоже не вариант?

Mihahail
() автор топика
Ответ на: комментарий от Mihahail

Правильно ли я понял, что showkey дал мне именно keycode а xev - scancode?

Нет, scancode вообще видит только ядро и преобразует в keycode. Но интерпретация кодов в консоли и Xorg разная.

acpi тоже не вариант?

Это работает только с кнопками, генерирующими события.

Gotf ★★★
()
Ответ на: комментарий от Gotf

Это работает только с кнопками, генерирующими события.

У меня есть подозрение, что первые три мои кнопки генерят события. Как это проверить? В acpid есть такое:

 	{{{0,0}, EV_KEY, KEY_VOLUMEDOWN, 1},
 		"button/volumedown VOLDN 00000080 00000000"},
	{{{0,0}, EV_KEY, KEY_VOLUMEUP, 1},
 		"button/volumeup VOLUP 00000080 00000000"},
	{{{0,0}, EV_KEY, KEY_MUTE, 1},
 		"button/mute MUTE 00000080 00000000"},
	{{{0,0}, EV_KEY, KEY_MICMUTE, 1},
		"button/micmute MICMUTE 00000080 00000000"},
 	/* cd play/pause buttons */
 	{{{0,0}, EV_KEY, KEY_NEXTSONG, 1},
 		"cd/next CDNEXT 00000080 00000000"},
	{{{0,0}, EV_KEY, KEY_PREVIOUSSONG, 1},
 		"cd/prev CDPREV 00000080 00000000"},
 	{{{0,0}, EV_KEY, KEY_PLAYPAUSE, 1},
 		"cd/play CDPLAY 00000080 00000000"},
 	{{{0,0}, EV_KEY, KEY_STOPCD, 1},
 		"cd/stop CDSTOP 00000080 00000000"},

Mihahail
() автор топика
Ответ на: комментарий от Gotf
~# acpi_listen
button/mute MUTE 00000080 00000000 K
button/volumedown VOLDN 00000080 00000000 K
button/volumeup VOLUP 00000080 00000000 K
cd/prev CDPREV 00000080 00000000 K
cd/play CDPLAY 00000080 00000000 K
cd/next CDNEXT 00000080 00000000 K

Написал в /etc/acpi/events/volume_up:

event=button[ /]volumeup
action=/usr/bin/amixer set Master 5%+
Но после перезапуска результат тот же, кнопка не работает.

Mihahail
() автор топика
Ответ на: комментарий от Mihahail

Каковы могут быть причины и как это можно исправить?

Mihahail
() автор топика

xbindkeys?

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

Штатные средства: компилятор Си (gcc), документация по Linux API.
http://www.books.ru/books/unix-professionalnoe-programmirovanie-503720/
Ради Всевышнего Ктулху, решайте ими. Если сможете.

tmplsr
()
Ответ на: комментарий от tmplsr

Ну что за глупости, ничего я кодить не собираюсь.

Решил задачу просто, оказывается достаточно было сделать так:

В /etc/acpi/events/volume_up (название самого файла не принципиально) написать:
event=button/volumeup
action=/etc/acpi/vup.sh
Ну и в /etc/acpi/vup.sh:
#!/bin/sh
/usr/bin/amixer set Master 5%+ &> /dev/null
Аналогично для событий button/volumedown, button/mute, cd/next, cd/prev, cd/play.

Повезло, что кнопки генерилят события. Осталась только одна клавиша, которая определяется в xev как «X86Calculator», её думаю приспособить уже через правку сугубо конфига awesome. Повешу что-нибудь типа матлаба, коим часто приходится пользоваться. Хороший такой калькулятор.

Mihahail
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.