Настройка tv тюнера Beholder 609 на linux Mint 13

в 9:27, , рубрики: linux, mint, Ubuntu, метки: , ,

Надеюсь, что эта статья поможет кому-нибудь сэкономить время на настройку. Статья рассчитана на новичков, но надеюсь и опытные пользователи найдут что-нибудь полезное. Все действия производились в linux mint, но полагаю, что все будет работать и на Ububntu и на других дебианоподобных дистрибутивах.
Настройка tv тюнера Beholder 609 на linux Mint 13
Картинка для привлечения внимания. На фото тюнер Aver 307 грубо и безжалостно переделанный мной много лет назад в Behold 407.

Итак приступим.

Первоначальная настройка

Тв тюнер установлен, в него вставлена антенна, шнурок инфракрасного датчика и аудио кабель, второй конец которого в линейном входе звуковой карты. Для просмотра будем использовать программу tvtime.

sudo apt-get install tvtime

При установке у вас спросят стандарт вещания и вариант частотной сетки каналов. Стандарт для России SECAM, а частотная сетка Мозамбик Россия.
При установке в каталоге пользователя создается каталог .tvtime, который недоступен для пользователя. Поэтому:

sudo chmod 7 ~/.tvtime/

Можно запускать.

tvtime

В ~/.tvtime будут созданы файлы tvtime.xml и stationlist.xml.
Если вы увидели изображение с телевизора и услышали звук, вам сказочно повезло. Можете переходить к следующему пункту.
Если вы видите изображение не с тюнера, а, например, с Web камеры, добавьте в файл tvtime.xml

<option name="V4LDevice" value="/dev/video1/>

и попробуйте подобрать номер устройства.
Если вы не слышите звук (99% так оно и есть). Запускаете

alsamixer

и увеличиваете громкость по линии Line. Если под ползунком стоят буквы MM, значит линия отключена. Включаем — жмем клавишу «М».
Настройка tv тюнера Beholder 609 на linux Mint 13
Звук должен появиться. Если нет, то дальше уже зависит от конкретной модели звуковой карты. Проверьте с какого канала карта берет Line-In (у меня есть вариант Line-In и Rear Out). Могут быть и другие экзотические фишки связанные с вашей моделью оборудования. Например интегрированная звуковая Via vt1828s имеет параметр — loopback. Так вот когда он Enebled звук с тв тюнера идет, но не работают больше никакие звуки (немое кино, и неслышная музыка). При Disabled все наоборот.

Со звуком справились и чтобы окончательно закрыть тему, добавляем в tvtime.xml строку

<option name="MixerDevice" value="hw:0/Master"/>

Она указывает программе каким каналом громкости рулить. Можно указать Line, да и вообще любой канал по вашему вкусу. Названия каналов смотрите в alsamixer. Регистр букв имеет значение.
Можно добавить опции глушить звук при выходе и поверх всех окон.

<option name="MuteOnExit" value="1"/> 
<option name="AlwaysOnTop" value="1"/>

Настройка каналов

Запускаем:

tvtime-scanner -d /dev/video1 -n SECAM

Вместо /dev/video1 подставьте ваше устройство. Если вы пользуетесь услугами кабельного провайдера, то он может транслировать передачи в стандарте PAL. Ничего страшного в этом нет. Канал будет найден все равно. Изменить кодировку для конкретного канала можно будет позднее в файле stationlist.xml.
После сканирования каналов открываем stationlist.xml, удаляем лишние каналы, добавляем, если что-то не нашлось (но это вряд ли).
Так выглядит строка с каналом.

<station name="1" active="1" position="1" band="VHF Russia" channel="R1" finetune="0" norm="SECAM" audio="auto"/>

name — имя канала, которое будет выводиться на экране при переключении. Если в именах каналах будут не только английские буквы, добавьте в объявление xml

 encoding="UTF-8"

Иначе после запуска tvtime буквы преобразуются в Unicode коды.
active — если 0, то при листании каналов он будет пропущен
position — на какой кнопке будет сидеть канал.
Остальные параметры нет необходимости менять вручную.

Программа телепередач

Самое большое преимущество компьютерного тюнера по сравнению с обычным телевизором — это возможность выводить программу телепередач прямо на экран. Переключаем канал и видим рекламу, но мы то знаем ЧТО будет сразу после нее и делаем звук погромче скорее листаем дальше.

Настройка tv тюнера Beholder 609 на linux Mint 13
Tvtime умеет работать с файлами формата xmltv и мы воспользуемся этим.
В tvtime.xml добавляем.

 <option name="XMLTVFile" value="~/.tvtime/xmltv.xml"/> 
 <option name="XMLTVLanguage" value="ru"/> 

Качаем и распаковываем программу.

cd ~/.tvtime 
wget http://www.teleguide.info/download/new3/xmltv.xml.gz 
gzip -f -d xmltv.xml.gz > xmltv.xml 

Теперь нужно связать каналы из xmltv.xml и stationlist.xml. У каждого канала в xmltv.xml есть id. Прописываем его в атрибут xmltvid в файл stationlist.xml вот так:

<station name="Первый" xmltvid="1" active="1" position="1" band="VHF Russia" channel="R1" finetune="0" norm="SECAM" audio="auto"/>

Вот и все. Теперь можно включить телевизор и наслаждаться программой передач на экране. Правда если вы живете не в Default city столице нашей родины Москве, то ваша радость, скорее всего, будет неполной. Так как время фактической трансляции не будет совпадать со временем в программе телепередач. Причем для разных каналов отклонение во времени будет различным.
Исправим это:

sed -i '/channel="1"/s/+0400/+0600/g' xmltv.xml # Первый канал: +2 часа

Изначально в файле xmltv.xml указан часовой пояс +4 часа (видимо от Гринвича), а мы сделаем +6 часов. Нужно выполнить подобную команду для каждого канала.

Настройка пульта

Самый сложный и самый затратный по времени этап.
Есть два способа работы с пультом:
1. Через lirc,
2. Как с дополнительно клавиатурой.
Мы пойдем по второму пути. Частично пульт уже должен работать. Работают цифровые клавиши и кнопки регулировки громкости. Остальные кнопки нет.
Дело в том, что пульт уже определился системой как клавиатура. Соответствие сканкодов и кейкодов клавиатуры задается на уровне ядра.
Порядок конвертации значений следующий (описываю как сам понял дилетантским языком, исправления и уточнения приветствуются):
1. Драйвер переводит сканкод (физический сигнал) кнопки в однобайтный или многобайтный кейкод (код клавиши) и отправляет «заинтересованным лицам».
2. Заинтересованным лицом, в нашем случае, является X сервер, который в зависимости от модели клавиатуры определяет как интерпретировать полученный кейкод. Т.е. Даже один и тот же код, но полученный от разных моделей устройств X сервер может интерпретировать по разному. Это, обычно не касается буквенно-цифровых символов и основных (вроде стрелок и ентера) кнопок. А вот интересующих нас мультимедийных кнопок очень даже касается.
Есть и еще одна проблема. X сервер способен принимать только однобайтные кейкоды, а некоторые кнопки у пульта бехолдера имеют более длинный код. Будем исправлять. Устанавливаем утилиты:

sudo apt-get install ir-keytable input-utils

Считываем текущую кодовую таблицу для пульта:

sudo ir-keytable -r -d /dev/input/event`cat /proc/bus/input/devices | grep -3 "i2c-.*/.*/ir0" | grep "H:" | awk '{ sub(/event/, "", $3); print $3}'` >/etc/rc_keymaps/behold-key

Пояснение для новичков. На самом деле все не так страшно. Эту строку можно заменить на такую

sudo ir-keytable -r -d /dev/input/event5 > /etc/rc_keymaps/behold-key

и она будет работать ничуть не хуже. Просто нужно знать каким именно event'ом числится ваш пульт в системе. Вся остальная страшная строка — это просто вычисление номера. Этой командой можно прочитать кодовую таблицу любой клавиатуры подключенной к компьютеру.

Появился файл /etc/rc_keymaps/behold-key с текущей раскладкой. Выглядит он так:

scancode 0x6b8600 = KEY_0 (0x0b) 
scancode 0x6b8601 = KEY_1 (0x02) 
scancode 0x6b8602 = KEY_2 (0x03) 
scancode 0x6b8603 = KEY_3 (0x04) 
scancode 0x6b8604 = KEY_4 (0x05) 
scancode 0x6b8605 = KEY_5 (0x06) 
scancode 0x6b8606 = KEY_6 (0x07) 
scancode 0x6b8607 = KEY_7 (0x08) 
scancode 0x6b8608 = KEY_8 (0x09) 
scancode 0x6b8609 = KEY_9 (0x0a) 
scancode 0x6b860a = KEY_AGAIN (0x81) 
scancode 0x6b860b = KEY_CHANNELUP (0x192) 
scancode 0x6b860c = KEY_VOLUMEUP (0x73) 
scancode 0x6b860d = KEY_INFO (0x166) 
scancode 0x6b860e = KEY_TEXT (0x184) 
scancode 0x6b860f = KEY_RECORD (0xa7) 
scancode 0x6b8610 = KEY_ZOOM (0x174) 
scancode 0x6b8611 = KEY_MUTE (0x71) 
scancode 0x6b8612 = KEY_POWER (0x74) 
scancode 0x6b8613 = KEY_GREEN (0x18f) 
scancode 0x6b8614 = KEY_SCREEN (0x177) 
scancode 0x6b8615 = KEY_CHANNELDOWN (0x193) 
scancode 0x6b8616 = KEY_OK (0x160) 
scancode 0x6b8617 = KEY_MODE (0x175) 
scancode 0x6b8618 = KEY_VOLUMEDOWN (0x72) 
scancode 0x6b8619 = KEY_BLUE (0x191) 
scancode 0x6b861a = KEY_STOP (0x80) 
scancode 0x6b861b = KEY_PLAYPAUSE (0xa4) 
scancode 0x6b861c = KEY_TUNER (0x182) 
scancode 0x6b861d = KEY_SLEEP (0x8e) 
scancode 0x6b861e = KEY_VIDEO (0x189) 
scancode 0x6b861f = KEY_RED (0x18e) 
scancode 0x6b8658 = KEY_SLOW (0x199) 
scancode 0x6b865c = KEY_CAMERA (0xd4)

Редактируем этот файл так чтобы не осталось многобайтных кодов и кодов, которые не понимает X сервер:

gksudo gedit /etc/rc_keymaps/behold-key

Записываем обратно:

ir-keytable -c -w /etc/rc_keymaps/behold-key -d /dev/input/event`cat /proc/bus/input/devices | grep -3 "i2c-.*/.*/ir0" | grep "H:" | awk '{ sub(/event/, "", $3); print $3}'`

Получаем до перезагрузки пульт с новой кодовой таблицей. После перезагрузки все станет как раньше. Я не знаю как сделать чтобы результат оставался навсегда, поэтому последнюю команду добавил в автозагрузку файл /etc/rc.local.
Привожу для примера мой отредактированный файл behold-key:

scancode 0x6b861c = KEY_PROG1 (0x94) 
scancode 0x6b8612 = KEY_CLOSE (0xce) 
scancode 0x6b8600 = KEY_0 (0x0b) 
scancode 0x6b8601 = KEY_1 (0x02) 
scancode 0x6b8602 = KEY_2 (0x03) 
scancode 0x6b8603 = KEY_3 (0x04) 
scancode 0x6b8604 = KEY_4 (0x05) 
scancode 0x6b8605 = KEY_5 (0x06) 
scancode 0x6b8606 = KEY_6 (0x07) 
scancode 0x6b8607 = KEY_7 (0x08) 
scancode 0x6b8608 = KEY_8 (0x09) 
scancode 0x6b8609 = KEY_9 (0x0a) 
scancode 0x6b860a = KEY_PROG2 (0x95) 
scancode 0x6b8614 = KEY_PROG3 (0xca) 
scancode 0x6b8617 = KEY_SWITCHVIDEOMODE (0xe3) 
scancode 0x6b8610 = KEY_F11 (0x57) 
scancode 0x6b860b = KEY_UP (0x67) 
scancode 0x6b8615 = KEY_DOWN (0x6c) 
scancode 0x6b860c = KEY_RIGHT (0x6a) 
scancode 0x6b8618 = KEY_LEFT (0x69) 
scancode 0x6b8616 = KEY_ENTER (0x1c) 
scancode 0x6b8611 = KEY_MUTE (0x71) 
scancode 0x6b860d = KEY_KPEQUAL (0x75) 
scancode 0x6b860f = KEY_RECORD (0xa7) 
scancode 0x6b861b = KEY_PLAYPAUSE (0xa4) 
scancode 0x6b861a = KEY_STOPCD (0xa6) 
scancode 0x6b860e = KEY_PAUSECD (0xc9) 
scancode 0x6b861f = KEY_PREVIOUSSONG (0xa5) 
scancode 0x6b861e = KEY_NEXTSONG (0xa3) 
scancode 0x6b861d = KEY_MEDIA (0xe2) 
scancode 0x6b8613 = KEY_VOLUMEDOWN (0x72) 
scancode 0x6b8619 = KEY_VOLUMEUP (0x73) 
scancode 0x6b865c = KEY_CAMERA (0xd4) 
scancode 0x6b8658 = KEY_SPORT (0xdc)

А вот некоторые коды, которые нормально воспринимает X сервер (данные получены методом сурового брутфорса). Обращаю ваше внимание, что так воспринимаются коды именно от пульта бехолдер. От других клавиатур код 0x94 может идентифицироваться вовсе не как KEY_PROG1.

KEY_CLOSE (0xce) 
KEY_EXIT (0xae) 
KEY_PROG1 (0x94) 
KEY_PROG2 (0x95) 
KEY_PROG3 (0xca) 
KEY_PROG4 (0xcb) 
KEY_POWER (0x74) 
KEY_VOLUMEDOWN (0x72) 
KEY_VOLUMEUP (0x73) 
KEY_NEXTSONG (0xa3) 
KEY_PLAYPAUSE (0xa4) 
KEY_PREVIOUSSONG (0xa5) 
KEY_STOPCD (0xa6) 
KEY_RECORD (0xa7) 
KEY_PLAYCD (0xc8) 
KEY_PAUSECD (0xc9) 
KEY_PLAY (0xcf) 
KEY_FASTFORWARD (0xd0) 
KEY_BASSBOOST (0xd1) 
KEY_CAMERA (0xd4) 
KEY_SOUND (0xd5) 
KEY_FINANCE (0xdb) 
KEY_SPORT (0xdc) 
KEY_SHOP (0xdd) 
KEY_ALTERASE (0xde) 
KEY_MEDIA (0xe2) 
KEY_VIDEO_NEXT (0xf1) 
KEY_VIDEO_PREV (0xf2) 
KEY_LINEFEED (0x65) 
KEY_MACRO (0x70) 
KEY_MIN_INTERESTING (0x71) 
KEY_KPEQUAL (0x75) 
KEY_KPPLUSMINUS (0x76) 
KEY_PAUSE (0x77) 
KEY_KPCOMMA (0x79) 
KEY_HANJA (0x7b) 
KEY_YEN (0x7c) 
KEY_STOP (0x80) 
KEY_AGAIN (0x81) 
KEY_PROPS (0x82) 
KEY_UNDO (0x83) 
KEY_FRONT (0x84) 
KEY_COPY (0x85) 
KEY_OPEN (0x86) 
KEY_PASTE (0x87) 
KEY_CUT (0x89) 
KEY_FIND (0x88) 
KEY_MENU (0x8b) 
KEY_CALC (0x8c) 
KEY_SETUP (0x8d) 
KEY_WAKEUP (0x8f) 
KEY_FILE (0x90) 
KEY_SENDFILE (0x91) 
KEY_DELETEFILE (0x92) 
KEY_XFER (0x93) 
KEY_WWW (0x96) 
KEY_MSDOS (0x97) 
KEY_DIRECTION (0x99) 
KEY_CYCLEWINDOWS (0x9a) 
KEY_MAIL (0x9b) 
KEY_BOOKMARKS (0x9c) 
KEY_COMPUTER (0x9d) 
KEY_BACK (0x9e) 
KEY_FORWARD (0x9f) 
KEY_CLOSECD (0xa0) 
KEY_EJECTCD (0xa1) 
KEY_EJECTCLOSECD (0xa2) 
KEY_REWIND (0xa8) 
KEY_PHONE (0xa9) 
KEY_ISO (0xaa) 
KEY_CONFIG (0xab) 
KEY_REFRESH (0xad) 
KEY_EDIT (0xb0) 
KEY_SCROLLUP (0xb1) 
KEY_SCROLLDOWN (0xb2) 
KEY_NEW (0xb5) 
KEY_REDO (0xb6) 
KEY_HOMEPAGE (0xac)111 
KEY_DASHBOARD (0xcc) 
KEY_HP (0xd3) 
KEY_QUESTION (0xd6) 
KEY_EMAIL (0xd7) 
KEY_CHAT (0xd8) 
KEY_CONNECT (0xda) 
KEY_SEARCH (0xd9) 
KEY_CANCEL (0xdf) 
KEY_BRIGHTNESSDOWN (0xe0) 
KEY_BRIGHTNESSUP (0xe1) 
KEY_SWITCHVIDEOMODE (0xe3) 
KEY_KBDILLUMTOGGLE (0xe4) 
KEY_KBDILLUMDOWN (0xe5) 
KEY_KBDILLUMUP (0xe6) 
KEY_SEND (0xe7) 
KEY_REPLY (0xe8) 
KEY_FORWARDMAIL (0xe9) 
KEY_SAVE (0xea) 
KEY_DOCUMENTS (0xeb) 
KEY_WLAN (0xee) 
KEY_UWB (0xef) 
KEY_BRIGHTNESS_CYCLE (0xf3) 
KEY_BRIGHTNESS_ZERO (0xf4) 
KEY_DISPLAY_OFF (0xf5) 
KEY_WIMAX (0xf6) 
KEY_RFKILL (0xf7) 

При проведении работ по настройке кнопок пульта удобно пользоваться следующим методом мониторинга. Запускаем

sudo input-events -t60 5

Где 60 это время ожидания нажатия в секундах, 5 номер клавиатуры в системе. И жмем кнопки на пульте.
Выдача имеет примерно следующий вид.

00:56:27.954276: EV_MSC MSC_SCAN 7046683 
00:56:27.954281: EV_KEY KEY_PLAYPAUSE (0xa4) pressed 
00:56:27.954281: EV_SYN code=0 value=0 
00:56:28.062206: EV_MSC MSC_SCAN 7046683 
00:56:28.062207: EV_SYN code=0 value=0 
00:56:28.314253: EV_KEY KEY_PLAYPAUSE (0xa4) released 
00:56:28.314254: EV_SYN code=0 value=0

Вывод происходит при нажатии и при отпускании кнопки.
7046683 — это физический сканкод кнопки пульта в десятичной системе. Он будет выводиться в любом случае.
(0xa4) — кейкод который драйвер отправил дальше. Если его длина не равна одному байту, то X сервер его не увидит.
KEY_PLAYPAUSE — это имя кнопки. Если имени нет, то на эту кнопку нельзя будет повесить команду. Меняйте кейкод.

Последние штрихи

Мы получили пульт воспринимаемый системой как дополнительная клавиатура с мультимедийными клавишами. Осталось настроить реакцию системы на нажатия. Громкость и переключение каналов в tvtime уже работают, так как кнопки крестовины настроены как стрелки и Enter.
Идем в Настройки клавиатуры и задаем клавиши воспроизведения, которые будут работать в большинстве плееров.
Настройка tv тюнера Beholder 609 на linux Mint 13
На остальные кнопки настраиваем дополнительные команды.
Я назначил клавише FullScreen пульта значение F11. Эту клавишу понимает большинство программ как переход в полноэкранный режим и обратно, но не tvtime. Поэтому добавляем в файл tvtime.xml

  <bind command="toggle_fullscreen"> 
    <keyboard key="F11"/> 
  </bind> 

К сожалению tvtime не понимает мультимедийные клавиши, поэтому задать действие на нажатие KEY_SWITCHVIDEOMODE не получится. Но для этого есть другой способ.
В разделе дополнительных команд настроек клавиатуры задаем команду

tvtime-command TOGGLE_ASPECT

полный список команд tvtime читайте в документации.
Если нужна кнопка для закрытия активного окна, устанавливаем:

sudo apt-get wmctrl

И добавляем допкоманду:

wmctrl -c :ACTIVE:

Вот и все. Буду рад исправлениям и уточнениям. Если тема интересна, то можно будет изучить вопрос по настройке медиакомбайна MythTV в многотюнерной конфигурации и с сетевыми клиентами. Между прочим, у MythTV есть бэкэнды под андроид. Можно смотреть эфирное ТВ с планшета или смарта… Заманчиво?!

Автор: UrsusMaritimus

Источник

* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js