Ich habe nie verstanden, warum ReadyMedia (früher Minidlna) bei der Einbindung des Icons einen so umständlichen Weg eingeschlagen hat.
ReadyMedia – aus dem offiziellen Quell-Code – verwendet je nach System unterschiedliche Symbole. So sehen Linux-Benutzer etwa den Tux-Pinguin, BSD-Benutzer hingegen Beastie, den kleinen Teufel. Zudem existiert für spezielle Konfigurationen ein Logo Netgears.
Um jedoch ein eigenes Symbol zu verwenden, reicht es nicht aus, die ein oder andere Grafik auszutauschen. Die Grafiken liegen als „dumps“ in der Datei „icons.c“.
Das macht einen Eingriff in den Quell-Code unumgänglich.
Die Grafiken werden – wie ReadyMedia es verlangt – einmal in das JPEG- sowie PNG-Format umgewandelt. Im gleichen Schritt werden beiden Dateien auf die Größe 120×120 bzw. 40×40 Pixel skaliert.
Getestet habe ich alles Folgende unter Ubuntu Server 13.10. Es sollte jedoch problemlos auf nahen Derivaten läuffähig sein.
Zu Beginn installiere ich diverse Abhängigkeiten, wovon „imagemagick“ und „xd“ für das Script notwendig sind:
sudo apt-get install autoconf gettext autopoint build-essential libvorbis-dev libsqlite3-dev libogg-dev libjpeg-dev libid3tag0-dev libflac-dev libexif-dev libavutil-dev libavformat-dev libavcodec-dev debhelper imagemagick xd
Als nächstes die aktuellste Version herunterladen und entpacken. Gearbeitet wird im Verzeichnis „~/build“:
mkdir ~/build cd ~/build wget --content-disposition -O - http://sourceforge.net/projects/minidlna/files/latest/download | tar xfvz -
Nun in das neue Verzeichnis wechseln und das Script erstellen:
cd ~/build/minidlna* nano minidlna_icon_patch.sh
Dort folgenden Inhalt einfügen:
#!/bin/bash PATH=/usr/bin:/usr/local/bin:$PATH command -v convert >/dev/null 2>&1 || { echo >&2 "Please install imagemagick"; exit 1; } command -v xxd >/dev/null 2>&1 || { echo >&2 "Please install xd"; exit 1; } if [ -z "$1" ]; then echo "Usage: $0 imagefile" exit 1 fi if [ ! -f $1 ]; then echo "Image does not exist" exit 1 fi if [ -f icons.c ]; then mv icons.c icons.c_bak fi convert $1 -resize 40x40\! tmp_png_sm.png convert $1 -flatten -resize 40x40\! tmp_jpeg_sm.jpeg convert $1 -resize 120x120\! tmp_png_lrg.png convert $1 -flatten -resize 120x120\! tmp_jpeg_lrg.jpeg xxd -p -c 24 tmp_png_sm.png | sed -e ' s/../\\x&/g' \ -e '1 s/^/unsigned char png_sm\[\] = "/' \ -e '1 ! s/^/ "/' \ -e ' s/$/"/' \ -e '$ s/$/;/' >> icons.c xxd -p -c 24 tmp_jpeg_sm.jpeg | sed -e ' s/../\\x&/g' \ -e '1 s/^/unsigned char jpeg_sm\[\] = "/' \ -e '1 ! s/^/ "/' \ -e ' s/$/"/' \ -e '$ s/$/;/' >> icons.c xxd -p -c 24 tmp_png_lrg.png | sed -e ' s/../\\x&/g' \ -e '1 s/^/unsigned char png_lrg\[\] = "/' \ -e '1 ! s/^/ "/' \ -e ' s/$/"/' \ -e '$ s/$/;/' >> icons.c xxd -p -c 24 tmp_jpeg_lrg.jpeg | sed -e ' s/../\\x&/g' \ -e '1 s/^/unsigned char jpeg_lrg\[\] = "/' \ -e '1 ! s/^/ "/' \ -e ' s/$/"/' \ -e '$ s/$/;/' >> icons.c rm tmp_*jpeg tmp_*png
Nun das Script als ausführbar markieren:
chmod +x minidlna_icon_patch.sh
Das neue Symbol sollte eine Aspect Ratio von 1:1 haben, also genauso breit wie hoch sein. Am besten wird ein Bild >= 120×120 Pixel ausgewählt. Das Format spielt keine Rolle.
Diese Bild-Datei, angenommen „image.png“, lege ich in diesem Beispiel im Verzeichnis des Scripts ab. Die Syntax lautet „./minidlna_icon_patch.sh grafik.ext“:
./minidlna_icon_patch.sh image.png
Es wurde ein Backup der originalen Datei „icon.c“ unter dem Namen „icon.c_bak“ angelegt.
Die Installation konfiguriere ich ohne besondere Parameter (etwa „prefix“ etc.):
./configure make -j2 sudo make install
Die ausführbare Datei befindet sich so unter „/usr/local/sbin/minidlnad“.
Nun zur ReadyMedia-Konfiguration, welche ich sehr simpel halte. Hierzu bitte einfach in die man-page schauen. Ausgeführt wird ReadyMedia als Benutzer „nobody“.
sudo nano /etc/minidlna.conf
Inhalt:
user=nobody media_dir=/opt/files friendly_name=ReadyMedia inotify=yes log_dir=/var/log log_level=warn root_container=B
Diverse Verzeichnisse wird ReadyMedia nicht selbstständig anlegen, da der Benutzer „nobody“ dies nicht darf. Das erledige ich manuell:
sudo mkdir /var/{run,cache}/minidlna sudo touch /var/log/minidlna.log sudo chown -R nobody:nogroup /var/{run,cache}/minidlna /var/log/minidlna.log
Das Verzeichnis „/opt/files“, welches die Medien-Dateien (Urlaubsbilder ;) ) enthält, muss natürlich für den Benutzer „nobody“ lesbar sein.
Für den automatischen Start, wird ein Init-Script angelegt:
sudo nano /etc/init.d/minidlna
Der Inhalt:
#!/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# Status function added by 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/UPnP-AV media server ### END INIT INFO MINIDLNA=/usr/local/sbin/minidlnad PIDFILE=/var/run/minidlna/minidlna.pid CONF=/etc/minidlna.conf ARGS="-f $CONF" test -f $MINIDLNA || exit 0 . /lib/lsb/init-functions case "$1" in start) log_daemon_msg "Starting minidlna" "minidlna" start-stop-daemon --start --quiet --pidfile $PIDFILE --startas $MINIDLNA -- $ARGS $LSBNAMES log_end_msg $? ;; stop) log_daemon_msg "Stopping minidlna" "minidlna" start-stop-daemon --stop --quiet --pidfile $PIDFILE log_end_msg $? ;; restart|reload|force-reload) log_daemon_msg "Restarting minidlna" "minidlna" start-stop-daemon --stop --retry 5 --quiet --pidfile $PIDFILE start-stop-daemon --start --quiet --pidfile $PIDFILE --startas $MINIDLNA -- $ARGS $LSBNAMES log_end_msg $? ;; status) status_of_proc -p $PIDFILE $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
Das Script als ausführbar markieren und den Dienst installieren:
sudo chmod +x /etc/init.d/minidlna sudo update-rc.d minidlna defaults
Bevor der Dienst gestartet wird, erhöhe ich die „max_user_watches“ für „inotify“, damit ReadyMedia vernünftig arbeiten kann. Dies dient zur Erkennung neuer Medien-Dateien:
sudo bash -c "echo fs.inotify.max_user_watches=1048576 >> /etc/sysctl.conf" && sudo sysctl -p
Nun den Dienst starten:
sudo service minidlna start
Hi
Hab heute auf MiniDlan v1.1.5 Update gemacht und im source order die icons.c gelöscht und mit deiner ausgetauscht und minidlan Update gemacht,jetzt hab ich das dlan logo am tv und am ipad,danke dir für die Datei
Lg Philippe
Danke für deine support,aber mit der Datei hat es leider nicht funktioniert,schade aber Danke
Hi
Danke für die Beschreibung,ich habe seit 6Mo meinen minidlan Server laufen,war schwer alles so einzustellen wie es jetzt leuft.
Ich würde gerne nur das Icon so wie du hast gegen das dlan icon tauschen.
Ist es vielleicht möglich das ich deine icon.c datei kriegen könnte als Download ?
Danke Philippe
Hi,
habe die Datei leider nicht mehr gehabt, aber schnell eine neue erzeugt.
Kannst du mir Bescheid geben, ob alles geklappt hat? :-)
Download: https://www.debinux.de/wp-content/uploads/icons.c
Viele Grüße
Hallo Andre,
ich besitze seit kurzer Zeit einen Odroid-U3. Darauf ist Ubuntu 14.04 mit einem Rootnutzer. Nach deiner Anleitung habe ich minidlna mit eigenem Symbol kompiliert und starte dieses als „root“. Auf dem Handy verwende ich Bubbleupnp und der Server taucht auch auf. Allerdings sehe ich keine Tags, die in den mp3´s hinterlegt sind. Ich „sehe nur“ die vorhandene Ordnerstruktur und keine Tags wie Album, Genre, Interpret …
Hast du eine Idee, an was das liegen kann?
Hi Chris,
die Dateien an sich siehst du aber, richtig?
Kannst du mal die Tags einiger MP3s in UTF8 konvertieren? Schau dazu mal hier: http://wiki.linuxmce.org/index.php/Converting_MP3_Tags_To_UTF-8
Ja, die Dateien sehe ich. Das könnte ich probieren. Momentan habe ich minidlna auf einer gefreetzten Fritzbox und da sehe ich alle Tags (möchte aber minidlna auf den Odroid umziehen, da ich auch den Bubbleupnp-Server installieren möchte). Die „Musikdaten“ sind die gleichen, quasi mit den gleichen Tags. Kannst du alle Tags sehen?
Kannst du vielleicht einen Audio-Medienordner definieren?
Vielleicht braucht er das, um die Tags bereitzustellen.
So sieht meine Config auch aus:
user=root
media_dir=A,/opt/Musik
media_dir=V,/opt/Video
media_dir=P,/opt/Pics
friendly_name=MiniDLNA-O
inotify=yes
log_dir=/var/log
log_level=warn
root_container=B
Fazit:
Es liegt an der Einstellung für „root_container=B“ ! Das B steht für Browse. Hier eine kurze Auflistung:
# 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“
# + Or, you can specify the ObjectID of your desired root container (eg. 1$F for Music/Playlists)
# if you specify „B“ and client device is audio-only then „Music/Folders“ will be used as root
#root_container=.
Da ich „nur“ ein Musiklager habe, habe ich ein „M“ eingetragen. Danach findet er alle Tags. „.“ ist Standard. Vielleicht kannst du in deiner Anleitung darauf hinweisen.
Noch eine Frage, die Tags sind jetzt bei mir alle Englisch. Liegt es an der Konfiguration der Sprache von Ubuntu auf dem Odroid oder am kompilieren?
Hi,
danke für die Rückmeldung!
Die Sprache macht er tatsächlich vom System abhängig.
Aber: Du kannst
dpkg-reconfigure locales
ausführen, „de_DE.utf8“ generieren (aber en_EN etc. als default belassen) und anschließend Programme mit DE locales starten. Zum Beispiel:Du könntest das „LANG“ mal vor „start-stop-daemon“ setzen oder „MINIDLNA=“LANG=de_DE.utf8 /usr/local/sbin/minidlnad“ ausprobieren, kann es leider gerade nicht testen.
Sollte eigentlich funktionieren. :-)
Viele Grüße
André
Wenn ich minidlna so hier starte:
LANG=de_DE.utf8 ./minidlnad
ist es trotzdem noch auf englisch. Woran kann das noch liegen?