Smart TV, DLNA, Linux, Samba és egyéb turpisságok
Laikus szekció
Ha valaki arra adta a fejét, hogy Smart TV-t vett és azt gondolta, hogy milyen jó, mert majd az otthoni hálózaton szanaszét lévő gépek megosztásairól majd mindent lehet vetíteni, meg hallgatni, nos téved.
Sok fórum inkább csak "csúnyán beszél mások mamájáról" - s van igazság sajnos a dologban, mert megint sikerült valami újat összehozni, ami komoly kérdéseket vet fel.
Gondolom sok vezető beosztású ember a legjobbat akarta magának, mikor komoly márkát választott SMART TV ügyben, hazavitte, majd pár napos küzdelem után kiadta a céges informatikusnak a feladatot. Mégis olcsóbb, mint a szakszervízt hívni. Ez a cikk elsősorban nekik készült, meg azoknak az informatikusoknak, akik ilyen feladattal szembesülnek.
Tehát a jelenség:
Smart TV haza, beállítás, első öröm, hogy milyen szép a kép, duzzadó kebel.
Majd az otthoni hálózati gépeken lévő megosztásokról mediaanyagok lejátszása. Első botlás.
Esetleg jó lenne, ha lehetne egy kiszolgálóról (Debian vagy más linux dist. és Samba - rendszergazdáknál inkább ez található otthon) az összes "gyűjtést" nézni a TV-n.
Először a mese!
(Ez a cikk hosszú. Azért hosszú, mert a probléma hosszú. S hogy ne csak recepteket adjak, hanem némi indoklást, talán véleményt is, ezért nyúlik, mint a rétestészta.)
Azért adtam a fejem e cikk megírására, mert alapvetően "otthoni" dolgokkal nem foglalkozom, azonban volt egy visszautasíthatatlan "baráti" kérés, ezért elvállaltam egy meglévő nagyon márkás - a gyártó neve most lemarad, nem véletlenül - 3D Smart TV integrálását egy szintén meglévő, alapvetően Win7 és WinXP oprendszerekkel felvértezett klienseket tartalmazó hálózatba. Az igény végeredményben nagyon egyszerűnek indult, a feladat az, hogy a meglévő hálózatba kellene egy olyan gép, ami egyrészt elérhető a TV-ről, vetítés céljából, másrészről biztonságos adattárolásra alkalmas.
Nosza, erre a legalkalmasabb egy kis linux szerver, debian alapokon, samba, két, software-es raidbe kötött 1 T Western Digital hard drive, core2 duo alapokon. Ez bőségesen megfelelő sebességgel tudja szolgáltatni a video folyamatos lejátszásához a streamet, akadni nem fog.
El is készültem, kisebb fejfájást okozott Samba alatt a "mindenki mindent lát" megosztás létrehozása úgy, hogy kell lennie olyannak is, amit csak "megfelelő felhasználók látnak". Ez is ment végül.
Gondoltam, hogy ha a TV egyébként látja a helyi hálózat Win alapú gépeinek tartalmát, akkor a Sambát is kell látnia.
Tévedtem.
Nos, TV leírás elő. Nem viccelek, a magyar nyelvű leírás egy majdnem kétszáz oldalas könyvben 5, azaz öt oldal, erről a kérdésről egy szó sincs benne.
Aztán természetesen jött a net, ott találtam rá a DLNA-ra.
De kezdjük ott, hogy mi is az a DLNA? Nem szeretnék most itt elveszni a részletekben, erről igen szépen és kimerítően írnak itt. Az ügynökség honlapját itt lehet megtalálni.
A debian squeezehez nincs DLNA csomag, ezért külső forrást kerestem. Van több is, nekem a minidlna okozott sikert, tehát erről írok most részletesebben.
A csomagot innen lehet letölteni.
Kis bosszankodás és kísérletezgetés után hajlandó volt feltelepülni - erről később -, majd a megfelelő beállítások után kipróbálás indult.
Siker!
A TV látta a gépet, a megosztást, a feltöltött videókat. Ez volt az öröm helye.
Nem sokáig.
Kiderült ugyanis, hogy a TV nem játszik le "bármit". Például egy Win7 alatt képekből és zenéből szerkesztett videót sem, pedig az egy MS Windows 7 alapú gép kifejezetten erre a célra nyitott dlna kompatibilis könyvtárából lett indítva, illetve nem igaz, mert a zene átjött, csak valahogy a képek maradtak le.
A szomorú végeredmény, hogy a TV szigorúan véve csak pár formátumú videót volt hajlandó lejátszani (például az mkv felejtendő). Az érdekesség az, hogy végeredményben a formátumnak nem lehetne köze a lejátszáshoz, mert ugye a dlna-nak éppen ez lenne a lényege. Azonban - ahogy később látni fogjuk - a minidlna, amit már más is tesztelt sikeresen normál TV-vel mkv formátum alatt, nos azt a mi esetünkben a TV nem "szerette".
Ha valaki belekerült ebbe a helyzetbe, akkor még kísérletezhet ezzel, igaz olcsó, mert csak 15$. De ez az én szememben mégiscsak egy probléma elhárítása, ami egyébként nem lett volna.
Javaslat:
1. NE, tehát NE vegyünk SMART TV-t.
2. A SMART TV ártöbbletét költsük minőségre, felbontásra és átlóméret növelésre.
3. Vegyünk egy lejátszógépet ITX alapokon, sok ilyen található a neten. Abból is erősebbet, proc, memó, videókártya és hdd tekintetében (esetleg ssd). Ezekbe beépíthető a blueray lejátszó is. Ettől a pillanattól kezdve gond nélkül internetezhetünk, videózhatunk, zenét hallgathatunk.
Egyszerűbb, frissíthető, jobb, gyorsabb, megbízhatóbb. A kiszolgáltatottság nulla.
Szakmai szekció
S ha ezekután mégis valaki nekiszalad vagy esetleg más célja van a DLNA/Samba/Local net kapcsán, akkor most nézzük a hogyant!
Környezet: Debian squeeze, Samba 3.5.6, minidlna 1.0.25
Sajnos csak a debian wheezy kiadásának lesz része a minidlna. A neten angolul található kifejezetten debian környezetre vonatkozó cikk itt, ami nagyon jó, azonban vannak problémák. Például az, hogy nemcsak a leírt csomagok hiányoznak, továbbá az apt-cache search által felhozott csomagokból nem mindegy, hogy melyiket telepítjük. Az is probléma, hogy a leírt conf file tartalmát a boot folyamán felülírja a melléklelt boot script, tehát azt is módosítani kell.
További kérdés, hogy hogyan lehet a sambát arra késztetni, hogy legyen neki egy olyan megosztása, amire semmilyen autentikáció nincs, magyarán bárki számára hozzáférhető, amellett, hogy más megosztásai pedig valamilyen feltetelek szerint legyenek elérhetők.
És most csapjunk a configok közé:
A minidlna, ahogy már írtam letölthető innen
A kicsomagolás, ez alapvetően a saját /home vagy /root könyvtárban történik:
tar -xvf minidlna_1.0.25_src.tar.gz
cd minidlna-1.0.25/
make
A make ha nem fut, akkor nincs C fordítónk, apt-gettel telepítsük.
A make után függőségekre fog hivatkozni folyton. Azokat is telepíteni kell, fontos odafigyelni, hogy nem elegendő az alapcsomag, egyből érdemes a -dev csomagokat telepíteni, akkor az működni fog.
Ezt követően:
make
make install
Majd kedvenc szövegszerkesztőnkkel: /etc/minidlna.conf
A hozzáfűzéseimet pirossal szedtem.
# port for HTTP (descriptions, SOAP, media transfer) traffic
port=8200 # Ha van tűzfal tessék kinyitni
# network interfaces to serve, comma delimited
network_interface=eth0 # Csak eth csatolót tudtam megadni, IP-t nem
# set this to the directory you want scanned.
# * if have multiple directories, you can have multiple media_dir= lines
# * if you want to restrict a media_dir to a specific content type, you
# can prepend the type, followed by a comma, to the directory:
# + "A" for audio (eg. media_dir=A,/home/jmaggard/Music)
# + "V" for video (eg. media_dir=V,/home/jmaggard/Videos)
# + "P" for images (eg. media_dir=P,/home/jmaggard/Pictures)
media_dir=/server/Media # Ez a DLNA alatt megosztott könyvtár útvonala
# set this if you want to customize the name that shows up on your clients
friendly_name=NEV_DLNA # Ezen a néven fog látszani a megosztás a hálózaton
# set this if you would like to specify the directory where you want MiniDLNA to store its database and album art cache
db_dir=/var/cache/minidlna
# set this if you would like to specify the directory where you want MiniDLNA to store its log file
log_dir=/var/log # Illetve oda kell linkelni, ahol a logok vannak
# this should be a list of file names to check for when searching for album art
# note: names should be delimited with a forward slash ("/")
album_art_names=Cover.jpg/cover.jpg/AlbumArtSmall.jpg/albumartsmall.jpg/AlbumArt.jpg/albumart.jpg/Album.jpg/album.jpg/Folder.jpg/folder.jpg/Thumb.jpg/thumb.jpg
# set this to no to disable inotify monitoring to automatically discover new files
# note: the default is yes
inotify=yes
# set this to yes to enable support for streaming .jpg and .mp3 files to a TiVo supporting HMO
enable_tivo=no # ezt nem próbáltam ki, itt lehet olvasni róla
# set this to strictly adhere to DLNA standards.
# * This will allow server-side downscaling of very large JPEG images,
# which may hurt JPEG serving performance on (at least) Sony DLNA products.
strict_dlna=no
# default presentation url is http address on port 80
#presentation_url=http://www.mylan/index.php
# notify interval in seconds. default is 895 seconds.
notify_interval=900
# serial and model number the daemon will report to clients
# in its XML description
serial=12345678
model_number=1
# specify the path to the MiniSSDPd socket
minissdpdsocket=/var/run/minissdpd.sock
# use different container as root of the tree
# possible values:
# + "." - use standard container (this is the default)
# + "B" - "Browse Directory"
# + "M" - "Music"
# + "V" - "Video"
# + "P" - "Pictures"
# if you specify "B" and client device is audio-only then "Music/Folders" will be used as root
#root_container=.
A minidlna init script:
A hozzáfűzéseimet pirossal szedtem. Természetesen egy csak egy minta!
#!/bin/sh
# chkconfig: 345 99 10
# description: Startup/shutdown script for MiniDLNA daemon
#
# Based on the MiniUPnPd script by Thomas Bernard
# Modified for MiniDLNA by Justin Maggard
# Modified: status-function, another check of the media folder and some useful arguments Igor Drobot
#
### BEGIN INIT INFO
# Provides: minidlna
# Required-Start: $network $local_fs $remote_fs
# Required-Stop:: $network $local_fs $remote_fs
# Should-Start: $all
# Should-Stop: $all
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: DLNA-Server
### END INIT INFO
MINIDLNA=/usr/sbin/minidlna
MEDIADIR=/server/Media # Itt kell átállítani, mert a fordításnál bekerül egy kitalált megosztási hely. Ez az a könyvtár, amit majd a külvilág DLNA helynek fog látni.
ARGS='-R -f /etc/minidlna.conf'
test -f $MINIDLNA || exit 0
test -d $MIDIADIR || exit 0
. /lib/lsb/init-functions
case "$1" in
start) log_daemon_msg "Starting minidlna" "minidlna"
start-stop-daemon --start --quiet --pidfile /var/run/minidlna.pid --startas $MINIDLNA -- $ARGS $LSBNAMES
log_end_msg $?
;;
stop) log_daemon_msg "Stopping minidlna" "minidlna"
start-stop-daemon --stop --quiet --pidfile /var/run/minidlna.pid
log_end_msg $?
;;
restart|reload|force-reload)
log_daemon_msg "Restarting minidlna" "minidlna"
start-stop-daemon --stop --retry 5 --quiet --pidfile /var/run/minidlna.pid
start-stop-daemon --start --quiet --pidfile /var/run/minidlna.pid --startas $MINIDLNA -- $ARGS $LSBNAMES
log_end_msg $?
;;
status)
status_of_proc -p /var/run/minidlna.pid $MINIDLNA minidlna && exit 0 || exit $?
;;
*) log_action_msg "Usage: /etc/init.d/minidlna {start|stop|restart|reload|force-reload|status}"
exit 2
;;
esac
exit 0
A samba.conf:
A hozzáfűzéseimet pirossal szedtem.
#======================= Global Settings =======================
[global]
## Browsing/Identification ###
workgroup =
server string = SERVER_NEVE # A samba szerver neve, ez a gépnevet látják a Windows kliensek.
wins support = yes
# wins server = w.x.y.z
dns proxy = no
#A name resolve order = lmhosts host wins bcast
#### Networking ####
interfaces = 192.168.0.50/24 eth0 # Ez annak az ethernet kártyának az IP-je, amin a Samba szolgáltati.
bind interfaces only = yes # Ez azt jelenti, hogy ha több eth kártya is van a gépben, akkor is csak a fentin fog szolgáltatni.
#### Debugging/Accounting ####
log file = /var/log/samba/log.%m # Samba logolási ügyek
max log size = 1000
# If you want Samba to only log through syslog then set the following
# parameter to 'yes'.
# syslog only = no
# We want Samba to log a minimum amount of information to syslog. Everything
# should go to /var/log/samba/log.{smbd,nmbd} instead. If you want to log
# through syslog you should set the following parameter to something higher.
syslog = 0
# Do something sensible when Samba crashes: mail the admin a backtrace
# panic action = /usr/share/samba/panic-action %d
####### Authentication #######
security = user
encrypt passwords = true
# passdb backend = tdbsam
passdb backend = smbpasswd:/etc/samba/smbpasswd # Visszaállítottam a régi jelszókezelést, nem fontos, de lehet
# obey pam restrictions = yes
unix password sync = no
# passwd program = /usr/bin/passwd %u
# passwd chat = *Enter\snew\s*\spassword:* %n\n *Retype\snew\s*\spassword:* %n\n *password\supdated\ssuccessfully* .
# pam password change = yes
domain master = no
# domain logons = yes
# logon path = \\%N\profiles\%U
# logon path = \\%N\%U\profile
# logon drive = H:
# logon home = \\%N\%U
# logon script = logon.cmd
# add user script = /usr/sbin/adduser --quiet --disabled-password --gecos "" %u
# add machine script = /usr/sbin/useradd -g machines -c "%u machine account" -d /var/lib/samba -s /bin/false %u
# add group script = /usr/sbin/addgroup --force-badname %g
# include = /home/samba/etc/smb.conf.%m
# socket options = TCP_NODELAY
#======================= Share Definitions =======================
[media] # Itt van minden tárva, nyitva
comment = Media
browseable = yes
read only = no
create mask = 0777
directory mask = 0777
# valid users = user, guest
# comment = Network Logon Service
path = /server/Media # Ez azonos a minidlna.conf-ban leírt ösvénnyel
guest ok = yes
guest only = yes
[privat] # Ez a privát könyvtár
comment = Privat
browseable = yes
read only = no
create mask = 0777
directory mask = 0777
writeable = yes
valid users = antal
read list = antal
write list = antal
# comment = Network Logon Service
path = /server/Privat
guest ok = no
# guest only = yes
Ha azt szeretnénk, hogy automatikusan induljon bootoláskor:
update-rc.d minidlna defaults
Ha boot folyamatból ki akarjuk venni:
update-rc.d -f minidlna remove