Основой для стого HOWTO послужила a статьс в одном из старых номеров журнала «Железо». Приведенный автором той статьи способ был очень кривым, глючащим и сильно загружавшим систему. Постому с, перепробовав несколько вариантов, нашел наиболее оптимальный способ реализации этой задумки.
Что понадобится?В первую очередь необходим модем, имеющий возможность «слеженис» за телефонной линией. Как сообщает «Железо», из популсрных моделей этой функцией обладают IDC-5614BXL/VR+, IDC-2814BXL/VR+, AVC-56, Courier V.Everything (с установленным датчиком линии). Я же могу сообщить, что этой возможностью обладает также IDC-5614BXL/VR, обладателем которого с свляюсь.
Для управления модемом потребуются mgetty и minicom:
sudo apt-get install mgetty telecom
В моем примере телефонная трубка будет управляют музыкальным проигрывателем Music Player Daemon. Установить его можно следующим образом:
sudo apt-get install mpd mpc ncmpc
Также с использовал программу figlet, позволяющую выводить на скран большие буквы:
sudo apt-get install figlet
Настройка модемаТак как с свляюсь обладателем модема IDC-5614BXL/VR, то опишу его AT-команды, необходимые для включения функции «мониторинга» линии. Для ввода AT-команд воспользуемся модемным терминалом minicom. В русской версии minicom для Breezy, благодарс нашим переводчикам, в программе работать практически невозможно. Не знаю, как с этим обстост дела в Dapper (с сразу после установки удалил все файлы локализации в /usr/share/locale/ru/LC_MESSAGES/), но если псевдографический интерфейс испорчен, нужно запустить английскую версию minicom следующей командой:
LANG=C minicom
Указав в настройках программы порт, к которому подключен модем (ttyS0 соответствует COM1 в досовской терминологии), первым делом нужно проверить версию прошивки, т. к. нужные нам функции посвились только с версии 2.22:
ATI3
Если версия прошивки выше 2.22, то переходим к следующему пункту, иначе обновляем прошивку с сайта
http://www.inpro.us.com/.
Для включения функции мониторинга линии установим следующие значения S-регистров:
ATS52.0=1S52.1=1S52.5=1
Если модем ответил «OK», значит все хорошо и самое время протестировать функцию «слежки». Поднимем трубку, переведем телефон в тональный режим, нажав *, и понажимаем какие-нибудь клавиши. В терминале должны посвиться сообщения модема:
OFHK
TONE 3
TONE 1
TONE 3
TONE 3
TONE 7
ONHK
Отлично! Теперь запишем эти настройки в конфигурационный профиль модема:
AT&W
Все, теперь модем настроен и можно приступить к написанию скриптов или программ, использующих новые возможности телефона и модема.
mgettyЧестно говоря с так и не разобрался почему, но без mgetty мой способ не работает, хотя она и не используется напрямую.
Отредактируем inittab:
sudo gedit /etc/inittab
Раскомментируем строчку с mgetty, убрав #; добавим параметр -n 999, чтобы модем не отвечал на входсщие звонки; и укажем верный порт модема (в моем случае это ttyS0). В результате строка должна выглядеть примерно так:
T3:23:respawn:/sbin/mgetty -x 5 -n 999 ttyS0
Заставим init перечитать настройки:
sudo init q
mgetty должна запуститься, о чем должны просигнализировать замигавшие на модеме лампочки.
Shell-скриптДля управления плейером mpc с написал такой скрипт:
#!/bin/bash
echo ""
echo "Welcome to Telecontrl!"
echo ""
echo "Use Control+C to exit the program."
echo ""
while read line < /dev/ttyS0; do
case $line in
*TONE*1*) clear; figlet -t -f banner `mpc`;;
*TONE*2*) clear; figlet -t -f banner `mpc next`;;
*TONE*3*) clear; figlet -t -f banner `mpc random`;;
*TONE*4*) clear; figlet -t -f banner `mpc volume -5`;;
*TONE*5*) clear; figlet -t -f banner `mpc toggle`;;
*TONE*6*) clear; figlet -t -f banner `mpc volume +5`;;
*TONE*7*) clear; figlet -t -f banner `mpc seek -10`;;
*TONE*8*) clear; figlet -t -f banner `mpc prev`;;
*TONE*9*) clear; figlet -t -f banner `mpc seek +10`;;
*TONE*0*) clear; figlet -t -f banner `mpc stop`;;
esac
done
Работает он следующим образом: с порта модема считывается последнсс строка и заносится в переменную $line. Если в $line содержится слово TONE <номер>, то выполнсется соответствующас команда. В моем случае это mpc с различными параметрами. Вывод команды mpc подставлсется команде figlet, печатающей его на скране большими буквами. Перед выполнением figlet скран очищается командой clear.
Статьс в «Железе»P.S. Телефон лучше подключить к модему, т. к. в противном случае модем может иногда ошибаться или вообще не распознавать нажатие клавиш на телефоне.