HOWTO lirc
Материал из Gentoo Linux Wiki
- Вернуться в раздел железо
Содержание |
[править] Что такое lirc
lirc - Linux InfraRed Control - программа с помощью которой можно принимать и посылать команды по инфракрасному каналу связи. В качестве приёмников ИК излучения могут использоваться специальные датчики подсоединённые к параллельному, последовательному или USB порту, а также ИК датчики других устройств (например TV/FM тюнера, или декодера DVD). Тоже относится и к передаче сигналов. Таже есть возможность использовать устройства IrDA.
[править] Задача
Итак, представим ситуацию: у вас есть TV/FM тюнер (например как у меня AverMedia 205), и желание использовать его в Gentoo.
[править] Что делать???
Первое что нужно сделать это, (нет это не emerge), надо определиться или компилировать все драйвера lirc или только тот который нужен. Например для AverMedia -- export LIRC_DEVICES="avermedia98", или export LIRC_DEVICES="=any" - для того чтобы скомпилировать все драйвера. Для большенства современных моделей подойдёт export LIRC_DEVICES="devinput" Также полезная опция - добавить в USE флаг doc.
И только теперь можно делать
# emerge lirc
| Примечание: Такая последовательность нужна потому, что по умолчанию emerge компилирует только драйвер lirc для последовательного порта |
После этого можно проверить доступен ли драйвер lirc для ядра:
modprobe lirc-gpio
если нет никаких "страшных" сообщений, то всё в порядке
| Примечание: в документации по lirc этот драйвер называется lirc-xxx где xxx -- serial, parallel etc. |
| Примечание: в документации сказано, что lirc-gpio - плагин к драйверу lirc-dev, который обеспечивает поддержку чипов, на котром в частности сделан тюнер AverMedia |
| Примечание: Если вы используете devinput то этого делать не надо, так же как и следующий пункт |
Теперь нужно сделать некоторые добавления в файле /etc/modules.d/aliases
| Файл: aliases |
#lirc support alias char-major-61 lirc-gpio #alias /dev/lirc0 char-major-61 |
| Примечание: Вторая строка закоментирована, так как я использую devfs |
| Примечание: devfs deprecated |
следующее что надо сделать - отредактировать /etc/conf.d/lircd
| Файл: lircd |
#Options to pass to the lircd process LIRCD_OPTS="-d /dev/lirc0" |
Это путь к устройству с которым ассоциирован драйвер lirc-dev. Вместо /dev/lirc0 напишите путь к устройству (нпример у меня /dev/lirc/0)
Если вы используете devfs, также можно настроить его автоматически создавать символические ссылки типа /dev/lir0 на устройства типа /dev/lirc/0 например так: создать файл
| Файл: /etc/devfs.d/lirc |
LOOKUP ^lirc0$ CFUNCTION GLOBAL mksymlink lirc/0 lirc0 REGISTER ^lirc/0$ CFUNCTION GLOBAL mksymlink $devname lirc0 UNREGISTER ^lirc/0$ CFUNCTION GLOBAL unlink lirc0 |
| Примечание: Если Вы используете udev, то в тарболе lirc есь соответствующие правила. |
| Примечание: В udev > 096 появилась очень удобная для интерфейса input функция - создание ссылок со значищими именами например /dev/input/by-path/pci-0000:05:08.0--event-ir |
Теперь нужно настроить пульт ДУ. Есть два пути: воспользоваться готовым файлом lircd.conf (например с сайта lirc), или воспользоваться документацией, и сделать этот файл самостоятельно.
теперь запустите lirc
# /etc/init.d/lircd start
если всё запустилось
дальше нужно проверить lirc, для этого выполните команду mode2 -d путь_к_файлу_устройства нажимайте кнопки на пульте управления, и смотрите, какие коды появляются на экране. Когда закончите нажмите Control+C
[править] Настройка для Avermedia AVerTV Studio 307
Если у вас настроена и работает AVerTV 307, то можно произвести настройку lirc по другому
Во-первых нужно включить модуль evdev
| Linux Kernel Configuration: Настраеваем ядро |
Device Drivers--->
Input device support--->
<M> Event interface
|
| Code: Собираем, устанавливаем и включаем evdev |
# make modules modules_install # modprobe evdev |
Если надо пересобираем lirc с LIRC_DEVICES="devinput"
| Файл: /etc/make.conf |
LIRC_DEVICES="devinput" |
# emerge app-misc/lirc
У вас уже должен быть настроен и запущен тв-тюнер.
# lsmod | grep ^saa7134
Запускаем saa7134 если результат пустой
# modprobe saa7134
В udev > 096 появилась очень удобная для интерфейса input функция - создание ссылок со значищими именами. Этим и воспользуемся:
| Code: $ ls /dev/input/by-path/ | grep event-ir |
|
pci-0000:00:11.0--event-ir |
У меня IR находиться на /dev/input/by-path/pci-0000:00:11.0--event-ir
Проверим работу устройства # cat /dev/input/by-path/pci-0000:00:11.0--event-ir Теперь нажимаём кнопки на пульте.
Если есть реакция (какие либо символы), значит работает.
Протестируем lircd
| Code: # lircd --nodaemon --driver=dev/input --device=/dev/input/by-path/pci-0000:00:11.0--event-ir |
lircd-0.8.0[9875]: lircd(devinput) ready |
На другой консоли запустим $ irw
Опять нажимаём кнопки на пульте.
В консоли с lircd появляются сообщения об этих нажатиях.
В консоли с irw появлются символьные имена нажатой кнопки.
| Примечание: Если символьные имена не появляются нужно взять следующий lircd.conf |
| Файл: lircd.conf |
begin remote
name AVerMediaMy
bits 32
flags SPACE_ENC|CONST_LENGTH
eps 30
aeps 100
header 9078 4437
one 615 1631
zero 615 515
ptrail 620
repeat 9080 2189
gap 108056
repeat_bit 0
begin codes
POWER 0x0000000080010074
TV/FM 0x0000000080010179
CD 0x000000008001017F
TELETEXT 0x0000000080010184
VIDEO 0x0000000080010189
1 0x0000000080010002
2 0x0000000080010003
3 0x0000000080010004
AUDIO 0x0000000080010188
4 0x0000000080010005
5 0x0000000080010006
6 0x0000000080010007
FULLSCREEN 0x0000000080010174
7 0x0000000080010008
8 0x0000000080010009
9 0x000000008001000a
PREVIEW 0x00000000800100D2
0 0x000000008001000b
DISPLAY 0x0000000080010172
LOOP 0x00000000800100A8
MUTE 0x0000000080010071
AUTOSCAN 0x00000000800100D9
FREEZE 0x000000008001008E
CAPTURE 0x000000008001019A
PLAY 0x00000000800100CF
RECORD 0x00000000800100A7
PAUSE 0x0000000080010077
STOP 0x0000000080010080
YELLOW 0x0000000080010190
RED 0x000000008001018E
VOL_DOWN 0x0000000080010072
VOL_UP 0x0000000080010073
BLUE 0x0000000080010191
GREEN 0x000000008001018F
CH_DOWN 0x0000000080010193
CH_UP 0x0000000080010192
end codes
end remote
|
Прерываем lircd, и записываем его опции в /etc/conf.d/lircd
| Файл: /etc/conf.d/lircd |
LIRCD_OPTS=" --driver=dev/input --device=/dev/input/by-path/pci-0000:00:11.0--event-ir" |
Не забываем добавить модуль evdev в автозагрузку
| Файл: /etc/modules.autoload.d/kernel-2.6 |
evdev |
добавляем lircd в автозагрузку
# rc-update add lircd default
[править] Настройка для Pinnacle PCTV
1. В /etc/make.conf добавьте строку:
| Файл: /etc/make.conf |
|
LIRC_DEVICES="pctv" |
2. # emerge -av lirc
3. В /etc/conf.d/lircd пропишите
| Файл: /etc/conf.d/lircd |
|
LIRCD_OPTS="--driver=pinsys --device=/dev/ttyS0" |
(если используется порт COM2, а не COM1, следует заменить ttyS0 на ttyS1)
4. Скопируйте файл из архива lirc ./remotes/pinnacle_systems/lircd.conf.pctv в /etc/lircd.conf
5. Запустите демон lircd: # /etc/init.d/lircd start
6. Запустите в консоли команду $ irw и проверьте реакцию системы на нажатия кнопок на ПДУ. Если все в порядке, вы получите примерно такой вывод:
| Code: Вывод irw |
000000000000003f 00 Chan+Play PinnacleSysPCTVRemote 000000000000003b 00 Vol+FF PinnacleSysPCTVRemote 000000000000001a 00 middle PinnacleSysPCTVRemote 000000000000003e 00 Chan-Stop PinnacleSysPCTVRemote 000000000000003d 00 Vol-Rew PinnacleSysPCTVRemote 000000000000001a 00 middle PinnacleSysPCTVRemote 0000000000000016 00 undo PinnacleSysPCTVRemote 0000000000000015 00 pause PinnacleSysPCTVRemote 0000000000000017 00 channel+ PinnacleSysPCTVRemote 000000000000002d 00 Fullscreen PinnacleSysPCTVRemote 000000000000002e 00 Preview PinnacleSysPCTVRemote 000000000000002e 01 Preview PinnacleSysPCTVRemote |
7. Теперь можно настроить клиентов lirc.
Вот пример файла ~/.lircrc. С ПДУ можно управлять плеером mplayer, программой просмотра ТВ tvtime и плеером mpd через mpc. Для tvtime и mpc необходимо, чтобы был запущен демон irexec (от имени обычного пользователя), запуск которого, для удобства, можно добавить в автозагрузку.
| Файл: ~/.lircrc |
#
# mplayer buttons
#
begin
button = Vol+FF
prog = mplayer
config = volume 1
repeat = 1
end
begin
button = Vol-Rew
prog = mplayer
config = volume -1
repeat = 1
end
begin
button = middle
prog = mplayer
config = pause
end
begin
button = Chan+Play
prog = mplayer
config = pt_step 1
end
begin
button = Chan-Stop
prog = mplayer
config = pt_step -1
end
begin
button = Fullscreen
prog = mplayer
config = vo_fullscreen
end
begin
button = 1
prog = mplayer
config = seek -10
end
begin
button = 4
prog = mplayer
config = seek -60
end
begin
button = 3
prog = mplayer
config = seek 10
end
begin
button = 6
prog = mplayer
config = seek 60
end
begin
button = 7
prog = mplayer
config = audio_delay +0.1
end
begin
button = 9
prog = mplayer
config = audio_delay -0.1
end
#
# tvtime commands
#
begin
prog = irexec
button = Info
config = tvtime-command DISPLAY_INFO
repeat = 1
end
begin
prog = irexec
button = Fullscreen
config = tvtime-command TOGGLE_FULLSCREEN
end
begin
prog = irexec
button = Menu
config = tvtime-command SHOW_MENU
end
begin
prog = irexec
button = Mute
config = tvtime-command TOGGLE_MUTE
end
# Menu navigation
begin
prog = irexec
button = Chan+Play
config = tvtime-command UP
repeat = 1
end
begin
prog = irexec
button = Chan-Stop
config = tvtime-command DOWN
repeat = 1
end
begin
prog = irexec
button = Vol+FF
config = tvtime-command RIGHT
repeat = 1
end
begin
prog = irexec
button = Vol-Rew
config = tvtime-command LEFT
repeat = 1
end
begin
prog = irexec
button = 1
config = tvtime-command CHANNEL_1
end
begin
prog = irexec
button = 2
config = tvtime-command CHANNEL_2
end
begin
prog = irexec
button = 3
config = tvtime-command CHANNEL_3
end
begin
prog = irexec
button = 4
config = tvtime-command CHANNEL_4
end
begin
prog = irexec
button = 5
config = tvtime-command CHANNEL_5
end
begin
prog = irexec
button = 6
config = tvtime-command CHANNEL_6
end
begin
prog = irexec
button = 7
config = tvtime-command CHANNEL_7
end
begin
prog = irexec
button = 8
config = tvtime-command CHANNEL_8
end
begin
prog = irexec
button = 9
config = tvtime-command CHANNEL_9
end
begin
prog = irexec
button = 0
config = tvtime-command CHANNEL_0
end
begin
prog = irexec
button = middle
config = tvtime-command MENU_ENTER
end
#
# MPD Player commands:
#
begin
prog = irexec
button = Play
config = mpc play
end
begin
prog = irexec
button = Stop
config = mpc stop
end
begin
prog = irexec
button = Pause
config = mpc pause
end
begin
prog = irexec
button = FForward
config = mpc next
end
begin
prog = irexec
button = Rewind
config = mpc prev
end
begin
prog = irexec
button = undo
config = mpc volume -2
end
begin
prog = irexec
button = redo
config = mpc volume +2
end
|
8. Если все хорошо работает и вы хотите постоянно использовать ПДУ, добавьте сервис lircd в список загружаемых по-умолчанию: rc-update add lircd default .
9. При любых проблемах рекомендуется пересобрать lirc с флагом "debug", а запускать с помощью lircd --nodaemon -D4 <опции> - вы будете видеть все, что происходит.
[править] Что дальше
Вобщем-то перед вами открывается масса возможностей. Lirc включает в себя также клиентскую библиотеку для доступа к ИК датчику.
Если у вас установлен KDE то в нём есть очень интересная программа KIRCK. Которая достпна также и через чентр управления - удалённое управление. Например можно настроить удалённое управление так, чтобы запускать какю либо программу по нажатию кнопки, а также настроить управление через пульт ДУ в таких программах как KDEtv или AmaroK.
Есть ещё одна интересная особенность lirc - управление мышью - lircmd. Но я ей не пользуюсь, и поэтому ничего не могу сказать о ней, только послать читать руководство.
