Исследуем варианты
Судя по статье на elinux.org существует 3 реализации DLNA сервера под Linux:
1. uShare
2. Rygel
3. minidlna
Не буду писать много букв про преимущества и недостатки каждого. Скажу просто, Rygel у меня вылетел и высыпал в консоль кучу debug информации. uShare заработал, но остановился на сканировании первого же каталога. Не понимает он кириллицу. Проблема известная и вроде как не решена, впрочем я сильно не исследовал этот вопрос, потому могу ошибаться. Остался minidlna. И он у меня заработал на ура.
Настраиваем и поднимаем
Скачиваем последнюю версию сервера и распаковываем архив. Внутри не будет исходников, там лежит бинарник minidlna и файл конфигурации minidlna.conf. Файл конфигурации копируем в /etc, а бинарник в /usr/sbin.
Приступим к конфигурированию сервера. Ни чего сложного в этом нет. Приведу часть моего конфига, ту, которую я изменил.
media_dir=V,/media/hdd/Медиа/Видео
media_dir=A,/home/user/Моя музыка
media_dir=P,/home/user/Мои рисунки
notify_interval=60То есть я указал путь для контента (media_dir=). При этом буквы V, A и P указывают на характер контента. V — видео, A — аудио и P — картинки. Можно без этих букв, просто после знака равно сразу указать путь. Обратите внимание, название некоторых каталогов у меня просто ужасны. Мало того, что там кириллица, так еще и пробелы. Но minidlna все кушает на ура, даже пробелы не нужно экранировать, и это приятно меня удивило.
Параметром notify_interval я указал интервал в секундах для автоматического обнаружения новых файлов. Тут по вкусу. Иногда, после копирования нового фильма, хочется сразу его посмотреть, и не ждать 900 секунд, которые установлены по умолчанию.
Запускаем
Все просто
minidlna -d -f /etc/minidlna.conf
и можно идти и смотреть фильмы. Но как быть с автозапуском? Можно конечно поместить команду в стандартный гномовский или кдешный автозапуск. Но на мой взгляд лучше воспользоваться init.d скриптом.
#! /bin/sh
# chkconfig: 345 99 10# description: Fedora Startup/shutdown script for MiniDLNA daemon
# If you have chkconfig, simply:
# chkconfig —add minildna
# Proper init scripts on Linux systems normally require setting lock
# and pid files under /var/run as well as reacting to network
# settings, so you should treat this with care.
# Original author: Perry Clark
### BEGIN INIT INFO
# Provides: minidlna
# Required-Start: $local_fs $remote_fs $syslog $network
# Should-Start:
# Required-Stop: $local_fs $remote_fs $syslog $network
# Should-Stop:
# Default-Start: 3 4 5
# Default-Stop: 0 1 2 6
# Short-Description: Minidlna
# Description: DLNA Media Server
### END INIT INFO
## EDIT FROM HERE
# Installation details
MINIDLNA=»/usr/sbin/minidlna»
ARGS=»/etc/minidlna.conf»
# Where to keep a log file
MINIDLNA_LOG=»/var/log/minidlna.log»
# Where the PID lives
PID_FILE=»/var/run/minidlna.pid»
## STOP EDITING HERE
# The path that is to be used for the script
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
set -e
# Only start if we can find the minidlna.conf.
test -x $MINIDLNA || exit 0
# Parse command line parameters.
case $1 in
start)
echo -n «Starting MiniDLNA: »
$MINIDLNA -f $ARGS -P $PID_FILE >> $MINIDLNA_LOG 2>&1
echo «ok»
;;
stop)
echo -n «Stopping MiniDLNA: »
for pidf in `/bin/ls $PID_FILE 2>/dev/null`; do
if [ -s $pidf ]; then
kill `cat $pidf` >/dev/null 2>&1
fi
rm -rf $PIF_FILE
done
echo «ok»
;;
restart|reload|force-reload)
echo «Restarting MiniDLNA: »
$0 stop
sleep 2
$0 start
;;
*)
# Print help
echo «Usage: /etc/init.d/minidlna {start|stop|restart| reload|force-reload}»
exit 1
;;
esac
exit 0
Подглядел тут. Называем скрипт minidlna, копируем в /etc/init.d, присваиваем права 755 и добавляем в автозапуск.
chmod 755 minidlna
sudo chkconfig minidlna on
Запускать и останавливать minidlna вручную можно командами:
sudo /etc/init.d/minidlna start
sudo /etc/init.d/minidlna stop
После запуска minidlna будет сканировать каталоги с контентом. Это может занят несколько минут. За ходом сканирования можно следить в файле /tmp/minidlna/minidlna.log. Если после изменения путей в файле конфигурации телевизор не видит новых каталогов, попробуйте удалить /tmp/minidlna/files.db и перезапустить сервер.