Muziek delen in je lan
- July 31, 2019
- 0
Wil je je muziekcollectie delen tussen meerdere Linux-machines in je netwerk? Daarvoor bestaan verschillende oplossingen. Wij zochten uit hoe eenvoudig het is om muziek te delen via dlna, daap en nfs.
Voor deze workshop gaan we ervan uit dat je een aparte machine hebt als mediaserver. Op die machine installeren we extra software om de muziek te delen. Daarna krijgen andere machines in het netwerk toegang tot alle muziek op de mediaserver. Uiteraard mag je ook jouw desktop of laptop als mediaserver gebruiken. Dat heeft als nadeel dat jouw muziekcollectie onbeschikbaar is zodra die machine af staat. Het handigste is dus om een aparte server te hebben in je netwerk die 24/7 draait, zoals een Raspberry Pi met een externe schijf. Qua distributie maakt het weinig uit welke je kiest. Als er packages beschikbaar zijn van de gebruikte programma’s, is de installatie en configuratie grotendeels identiek op elke distributie. Voor de client gebruiken we Linux Mint 19 met drie muziekspelers: Rhythmbox, Banshee en VLC.
Dlna
Een eerste methode om muziek te delen is via het dlna-protocol, een afkorting voor Digital Living Network Alliance. Vaak gebruikt men ook de term UPnP (Universal Plug and Play) of UPnP AV voor dit protocol. Dlna is al jaren het standaardprotocol om multimedia te delen tussen apparaten zoals een smartphone, nas of router met bestandsdeling enerzijds en smart tv’s, av-receivers, blu-ray spelers, etc. anderzijds. Wil je jouw muziek niet enkel op een computer, maar ook op een av-receiver of tv afspelen? Dan is dlna zeker de eerste optie die je moet uittesten. Helaas is de ondersteuning voor dlna in Linux nogal matig, vooral wat betreft de clients (muziekspelers). Gelukkig bestaan er wel enkele prima dlna-servers voor Linux.
ReadyMedia
Zoek je een eenvoudige oplossing om muziek te delen via dlna, dan is ReadyMedia de beste keuze. Het heeft niet de meeste features, maar is wel erg stabiel en eenvoudig te configureren. (ReadyMedia ondersteunt trouwens ook video en afbeeldingen, maar dat valt buiten het thema van deze workshop.) Onder Debian en afgeleiden installeer je het pakket ‘minidlna’: dat is de vroegere naam van ReadyMedia. Stop daarna de minidlna-service om de configuratie aan te passen:
sudo service minidlna stop
Open vervolgens /etc/minidlna.conf en vul bij de ‘media_dir’-optie de locatie van jouw muziekcollectie in (in plaats van /var/lib/minidlna). Maar let goed op: ReadyMedia draait als de minidlna-gebruiker. Die gebruiker moet dan ook ten minste leestoegang hebben tot de media_dir. Controleer dus eerst de bestandspermissies van de mediabestanden in die mappen. De eenvoudigste oplossing is om minidlna toe te voegen aan de primary group van de eigenaar van die map(pen). Hebben de bestanden bijvoorbeeld read/write-toegang voor gebruiker ‘filip’ en readonly-toegang voor groep ‘users’, voeg de minidlna-gebruiker dan toe aan de groep ‘users’:
sudo gpasswd -a minidlna users
Kies tot slot nog een naam voor jouw mediaserver met de optie ‘friendly_name’ (verwijder ook de # aan het begin van die regel). Die naam krijg je te zien op alle clients.
Tags en afbeeldingen
We zijn nu bijna klaar om ReadyMedia te starten en de media_dir te laten doorzoeken. Voor de database van beschikbare mediabestanden baseert ReadyMedia zich op bestandsnamen én eventuele metadata zoals ID3-tags. Het is dus erg belangrijk dat zowel de bestandsnamen als de metadata zo accuraat mogelijk zijn. Worden speciale karakters in ID3-tags niet correct weergegeven? Dan moet je die tags wellicht eerst omzetten in UTF-8-tekencodering met een programma zoals EasyTag. Verder ondersteunt ReadyMedia ook albumafbeeldingen, maar het maakt die zelf niet aan. Plaats elk muziekalbum daarom in een afzonderlijke map, samen met een afbeelding genaamd cover.jpg. Start nu minidlna om de database van mediabestanden aan te maken:
sudo service minidlna start
In het logbestand /var/log/minidlna.log zie je welke map momenteel geïndexeerd wordt en hoeveel bestanden ReadyMedia al heeft gevonden. Wacht zeker tot de database volledig klaar is, want een onvolledige database brengt clients in de war. Je ziet niet alleen maar een deel van je mediacollectie, ook het afspelen van bestanden loopt op dat ogenblik geregeld mis.
Dlna clients
Rhythmbox in Linux Mint 19 ondersteunt helaas geen dlna. In oudere versies was het mogelijk om via de Grilo-plugin muziek van dlna-servers af te spelen. Echt stabiel is die functie nooit geweest en nu is ze dus niet meer beschikbaar. De erg gelijkaardige Banshee-mediaspeler heeft dan weer wél een dlna-plugin. Die schakel je in via Voorkeuren > Uitbreidingen > UPnP Client. Er verschijnt dan een mapje Shared Media onder Online Media. In onze test gaf Banshee netjes aan dat onze ReadyMedia-server 6774 muzieknummers bevat. Helaas bleek de dlna-ondersteuning toch eerder gebrekkig te zijn. Banshee toonde slecht een deel van onze collectie (131 van de 696 albums), maar elk nummer kregen we wel 8 keer te zien! Ook voor Banshee is dlna dus niet geschikt…
VLC
Enkel met VLC konden we vrij probleemloos onze volledige collectie doorbladeren en afspelen. Daarvoor ga je naar Weergave > Afspeellijst en scroll je in de navigatiebalk links naar Lokaal netwerk > Universele Plug’n’Play. Dubbelklik op de naam van je mediaserver en doorblader de collectie naar keuze op album, artiest, genre, enzovoorts. Handig is ook de Recently Added map, die automatisch de nummers toont die onlangs zijn toegevoegd. Over het algemeen verloopt alles erg vlot: de bibliotheek laden, een nummer afspelen, doorspoelen binnen een nummer of naar het volgende nummer, shufflen doorheen de hele collectie, … Maar af en toe haperde VLC even gedurende de eerste vijf seconden van een nieuw nummer. Dat is best storend. VLC gaf de albumafbeeldingen probleemloos weer, maar de zoekfunctie is bijna onbruikbaar. Je moet immers alle albums één voor één uitklappen om de resultaten te bekijken.
Daap
Een alternatief voor dlna is daap, ofwel Digital Audio Access Protocol. Het vindt zijn oorsprong in de Apple-wereld. De bekendste daap-client én server is natuurlijk Apple’s eigen iTunes, maar ook voor Linux bestaan er verschillende clients en servers. Daap-ondersteuning vind je niet terug op apparaten zoals smart tv’s of av-receivers. Daap is dus vooral interessant als je je muziek uitsluitend met pc’s wilt delen. Daap is in oorsprong een gesloten protocol. Via reverse engineering zijn ontwikkelaars erin geslaagd om eigen daap-applicaties te schrijven. Desondanks is de Linux-ondersteuning béter dan die voor dlna. Een populaire dlna-server is forked-daapd (een fork van het vroegere Firefly). Intussen ondersteunt forked-daapd ook andere vormen van streaming (bijvoorbeeld naar een Chromecast), maar wij hebben enkel de daap-functionaliteit getest.
Installatie
De installatieprocedure lijkt erg op die van minidlna. Je installeert het pakket forked-daapd en stopt de service:
sudo service forked-daapd stop
Vervolgens open je het bestand /etc/forked-daapd.conf en pas je deze opties aan:
* name: de naam waaronder jouw muziekcollectie wordt weergegeven in muziekspelers
* directories: de map(pen) die jouw muziekbestanden bevatten, bijvoorbeeld { “/home/filip/Muziek” }
Forked-daapd zet muziekbestanden automatisch om naar een ander formaat als het denkt dat de client het oorspronkelijke formaat niet kent. Voor Linux clients zet forked-daapd alle formaten om, behalve mp3 en wav. Dat is best vervelend, want dat zorgt ervoor dat je niet meer binnen één nummer kan terug- of verderspoelen. Bevat jouw muziekcollectie bijvoorbeeld flac- en ogg-bestanden, pas dan volgende optie nog aan:
no_decode = { “flac”, “ogg” }
Start de service nu opnieuw op:
sudo service forked-daapd start
En controleer in het logbestand /var/log/forked-daapd.log of de muziekcollectie correct geladen wordt. De daap-server draait als gebruiker daapd. Net zoals bij minidlna moet die gebruiker dus leestoegang hebben tot jouw muziekbestanden.
Daap clients
Rhythmbox, de standaard muziekspeler in Mint, heeft ingebouwde daap-ondersteuning. Normaal zie je de naam van jouw daap-server vrijwel onmiddellijk verschijnen in de navigatiebalk links onder Gedeeld. Is dat niet het geval, controleer dan even onder Hulpmiddelen > Invoegtoepassingen of ‘DAAP muziek delen’ is aangevinkt. De bibliotheek laden, door de albums bladeren, nummers doorspoelen, …: alles verliep erg vlot. We hebben Rhythmbox geen enkele keer op een hapering betrapt. Ook de zoekfunctie is erg snel én gebruiksvriendelijk. Vreemd genoeg gaf Rhythmbox voor een deel van onze collectie de metadata (zoals album, nummer en genre) steeds tweemaal achter elkaar weer. Vermoedelijk komt dat omdat onze muziekcollectie doorheen de jaren met verschillende tools is opgebouwd. Eén van die tools heeft de metadata allicht dubbel weggeschreven, bijvoorbeeld in id3-tags én in flac-tags. Daar zouden forked-daapd en Rhythmbox niet over mogen struikelen, maar je kan het natuurlijk wel oplossen door de tags aan te passen.
Met de andere clients hadden we minder geluk: Banshee kon geen verbinding maken met onze server (hoewel het daap zou ondersteunen) en VLC bevat geen daap-ondersteuning.
Nfs
Daap en dlna hebben enkele gemeenschappelijke voor- en nadelen. De client detecteert automatisch gedeelde bestanden op het netwerk en kan ze meteen afspelen. Er is geen enkele vorm van beveiliging voorzien, want dat staat haaks op het beoogde gebruiksgemak. Je kan je muziekcollectie dus niet afschermen voor gasten op jouw thuisnetwerk. Een tweede nadeel is dat je via dlna of daap je muziekcollectie ook niet kan beheren. Merk je dat er een foutje staat in één van de tags? Dan kan je die niet vanuit je muziekspeler op je client aanpassen, maar moet je de bestanden op je server wijzigen.
Volledige toegang
Muziekbestanden vanaf je server delen via nfs lost bovenstaande problemen op. In nfs-terminologie exporteer je een bepaalde map naar één of meerdere machines. Vervolgens mount je die export op de client. De muziek van jouw server is dan op de client beschikbaar alsof het een lokale map is. Die aanpak biedt verschillende voordelen:
* je gebruikt je favoriete muziekspeler, want die heeft geen speciale ondersteuning nodig voor gedeelde muziek
* je kiest welke computers toegang krijgen tot jouw muziek (dat werkt wel enkel goed als alle machines een vast ip-adres hebben)
* je past de tags van de muziekbestanden aan vanuit je muziekspeler, tenzij je readonly-toegang hebt ingesteld
Nfs server
Na installatie van het pakket nfs-kernel-server definieer je de exports in het bestand /etc/exports. Elke regel bevat één export, in het formaat: <map> <clients>(<opties>), bijvoorbeeld:
/home/filip/Muziek 192.168.1.0/255.255.255.0(ro)
deelt de map /home/filip/Muziek naar alle ip-adressen in het netwerk 192.168.1.0 en geeft clients readonly-toegang. Dat lijkt erg eenvoudig, maar let op: nfs geeft gebruikers al dan niet toegang op basis van hun user id (uid) en group id (gid). Als jouw gebruiker een ander uid en gid heeft op je client als op je server, kan je dus niet aan de gedeelde map! Controleer dat even met het id-commando op beide machines. Is dat bij jou het geval, dan is de eenvoudigste oplossing om de gedeelde map voor iedereen toegankelijk te maken. Dat doe je door de nfs server elk uid en gid op de client(s) om te laten zetten naar het uid en gid van de gebruiker die op de server rechten heeft op de map in kwestie, bijvoorbeeld gebruiker filip (uid 1000) en groep users (gid 1000). Voeg daarvoor volgende opties toe aan de export-definitie in /etc/exports:
all_squash,anonuid=1000,anongid=1000
Na elke aanpassing aan /etc/exports moet je dat bestand herladen met:
sudo exportfs -ra
Wil je ook tags aanpassen, dan moet je read/write-toegang instellen (vervang ro door rw in /etc/exports). We raden je wel aan om de export dan enkel voor specifieke machines open te zetten én om de all_squash/anonuid/anonguid-opties niet meer te gebruiken.
Nfs client
Om je muziekbestanden te benaderen vanaf de client, controleer je eerst of de export zichtbaar is:
sudo showmount -e <ip-adres-nas>
Vervolgens mount je de export via je grafische bestandsbeheerder of met volgend commando:
sudo mount <ip-adres>:<export> <mountpoint>
Nu importeer je gewoon <mountpoint> in je muziekspeler om de gedeelde muziek af te spelen alsof het lokale muziekbestandne zijn. Wil je een snelkoppeling naar de nfs export in de navigatiebalk van de bestandsbeheerder? Voeg dan een regel zoals die in listing 1 toe aan /etc/fstab (uiteraard met het correcte ip-adres van de server en pad van de gedeelde map). Je mount en unmount de export daarna eenvoudig vanuit je bestandsbeheerder. Staat je server 24/7 aan en wil je de export automatisch mounten bij het booten? Verander dan ‘noauto’ in ‘auto’ in listing 1.
########## BEGIN LISTING 1 ##########
192.168.1.14:/home/filip/Muziek /home/filip/Muziek nfs user,noauto
########## EINDE LISTING 1 ##########
Conclusie
In deze workshop hebben we drie gangbare methodes getest om muziek te delen van een Linux-server met Linux Mint-clients. Elke methode heeft zijn voor- en nadelen. Dlna is ideaal als je je muziek ook op een smart tv of av-receiver wilt afspelen, maar de Linux-ondersteuning is eigenlijk ondermaats. Geen van de geteste muziekspelers zouden we aanraden in combinatie met dlna. Daap werkt daarentegen prima samen met Rhythmbox, Linux Mints standaard muziekspeler. Let wel op dat je de encoding-opties juist configureert, anders verlies je de mogelijkheid om binnen één nummer verder te spoelen. Banshee en VLC kunnen dan weer niets aanvangen met daap. Wil je de flexibiliteit om de tags van je muziekcollectie eenvoudig aan te passen én je muziekspeler vrij te kiezen? Dan moet je je muziekmap(pen) op de server via nfs delen. Het is iets omslachtiger om op te zetten, maar werkt veel betrouwbaarder en biedt je de meeste mogelijkheden. Helaas ondersteunen smart tv’s en av-receivers zelden daap of nfs. Enkel een combinatie van twee protocols laat je dus toe om je muziek te delen met alle apparaten in huis.