23 Октября 2011 01:33

Как я победил XBMC

Linux Mini-ITX XBMC

или домашний медиа-центр на базе Linux

Начальная идея выглядела как необходимость иметь дома возможность резервного копирования самых нужных данных, но чтобы не плодить компы было решено обновить существующий медиа-плеер на базе Windows. В дополнение к уже имеющемуся железу был куплен новый корпус Morex 6600B (в него таки можно одновременно установить 3 HDD и CD-ROM), 2 жестких диска Western Digital серии green 1.0Tb и самый маленький и дешевый SATA контроллер на два устройства - ST-Lab A-410 (на основе чипа Silicon Image 3132, у него полноценный биос, но он все же не умеет аппаратный RAID). Все это, хоть и не просто, но собралось и, что самое главное завелось без проблем.

В качестве ОС была выбрана Ubuntu, как имеющая лучшую поддержку имеющегося железа, после Windows. На нее планировалась установка XBMC. Были опробованы Lubuntu 11.10, Xubuntu 11.04, Ubuntu 11.10, Xubuntu 11.04, но у всех них была одна серьезная проблема - не было возможности вывода звука через HDMI штатными средствами.

В процессе этих перестановок был таки найден рабочий рецепт для вывода звука через HDMI на чипах Nvidia MCP73, который вкратце сводится к тому, что:


1) Через alsamixer включаем все S/PDIF (m to unmute and MM should change to OO)
2) Правим /etc/pulse/default.pa там нужно раскомментировать и поправить в районе строк 44-45

load-module module-alsa-sink
load-module module-alsa-source device=hw:0,3

где 0,3 - это HDMI выход, узнать точно какой он у вас можно через aplay -l. Подробную инструкцию на английском можно почитать здесь.

Также неплохо сделать HDMI устройством вывода по-умолчанию для текущего пользователя, для этого нужно вписать в ~/.asoundrc что-то вроде

pcm.dmixer {
type dmix
 slave {
pcm "hw:0,3"
rate 48000
 channels 2
}
}

pcm.!default {
type plug
slave.pcm "dmixer"

Обратите внимание, что через HDMI обычно поддерживается только 48000 вместо стандартных 44100, что может затруднить воспроизведение через некоторые программы.

После массы неудач и проблем, было решено попробовать XBMCLive 10.1. Оказалось, что он основан на Ubuntu 10.10 и может быть установлен на жесткий диск. В качестве эксперимента так и было сделано, и оказалось, что это просто лучшее решение в данной ситуации.

Его установка на жесткий диск сначала не пошла гладко, установщик упорно пытался поставить GRUB в /dev/sda, а поскольку в моем случае основным диском был /dev/sdc, то перед завершением установки пришлось запустить оболочку и в ней сказать

chroot /target
/usr/sbin/grub-intall /dev/sdc
/usr/sbin/update-grub 

Только после этого установку можно было завершать и система сама загружалась.

По началу также не было звука через HDMI, но интерфейс для его настройки оказался вполне вменяемым. Для начала вбиваем в /etc/asound.conf и ~xbmc/.asoundrc содержимое, как показано выше, потом идем в меню Settings > System > Audio и там Audio Output ставим Analog и в Audio Output Device ставим Custom и вписываем plughw:0,3 Дальше перезагружаемся и смотрим кино со звуком. Подробнее можно посмотреть здесь и здесь.

Но в разделе Music звука может и не быть (при том что Video отлично показывает со звуком). Для исправления этой ситуации идем в файл advancedsettings.xml и дописываем в него

<audio>
<resample>48000</resample>
</audio>

Таким образом мы говорим плееру, чтоб он перекодировал аудио, в формат, который поддерживает HDMI.

Для полного кайфа настраиваем инфракрасный пульт управления, у меня был GoTView, что нужно докрутить для его корректной работы описано здесь. Однако моя конфигурация немного отличалась от предлагаемой. В /usr/share/xbmc/system/keymaps/keyboard.xml я вписал

<one mod="ctrl,alt,shift">ContextMenu</one>
<two mod="ctrl,alt,shift">ActivateWindow(PlayerControls)</two>
<three mod="ctrl,alt,shift">ActivateWindow(music)</three>
<four mod="ctrl,alt,shift">ActivateWindow(pictures)</four>
<five mod="ctrl,alt,shift">ActivateWindow(video)</five>
<!--home mod="ctrl,alt,shift">ActivateWindow(MusicPlaylist)</home-->
<home mod="ctrl,alt,shift">ActivateWindow(Home)</home>
<r mod="ctrl">Queue</r>
<h mod="ctrl,alt,shift">Info</h>
<b mod="ctrl,alt,shift">ActivateWindow(MusicOSD)</b>
<f mod="ctrl,alt,shift">ActivateWindow(VisualisationPresetList)</f>
<s mod="ctrl">Stop</s>

Ну и в довершение картины, устанавливаем Samba сервер и размечаем новые диски. Полезный мануал по разметке дисков под Ubuntu можно найти здесь.

Резюме, полезные ссылки по теме:

В процессе эксплуатации выяснилось, что массив, который был виден в процессе установки, не работал в самой ОС. Это особенность дистрибутива Ubuntu 10.04 на котором построен XBMC: dmraid загружается в установщике но не устанавливается.

RAID на основе Silicon Image 3132 под Linux

Поскольку RAID таки оказался не совсем аппаратным и из-за глюков Ubuntu 10.04 (в 10.10 ситуация кажется не улучшилась) все данные уходили только на один диск, то пришлось заняться правильной конфигурацией рейда. А работать рейд массив на основе этого чипа должен по средствам dmraid, который пришлось специально доставлять.

apt-get intsall dmraid

После установки dmraid и перезагрузки ранее размеченные разделы на raid-массиве которые были созданы напрямую оказываются недоступны. Чтобы вынуть оттуда данные можно просто удалить массив в биосе контроллера, загрузиться, взять данные и снова собрать массив в биосе.

Так вот после установки dmraid можно приступать к разметке разделов на массиве в /dev/mapper/sil_****. Тут есть только одно отличие: после записи таблицы разделов fdisk ругается, что не может ее считать, это лечится перезагрузкой. Далее все как обычно.

Полезные ссылки про RAID на Silicon Image 3132:

Напоследок подстава с /tmp

В Ubuntu (а возможно и в других дистрибутивах) есть настройка, которая позволяет убивать файлы из /tmp после прошествии определенного времени, и у многих настроено так, что они удаляются при перезагрузке. Незнание этого может принести неприятные неожиданности.

Настраивается это в файле /etc/default/rcS параметр TMPTIME.

TMPTIME=7 - удалять файлы после 7 дней или
TMPTIME=0 - удалять при перезагрузке или
TMPTIME=-1 - не удалять никогда

Взято отсюда.

Фильтр