Skip to main content

KeePassXC-Features, die mehr Beachtung verdienen: Multiple URLs, Sharing, AutoOpen

(Anm. d. Autors: Dies ist die zweite Fassung, nachdem die erste im Cache des Browsers verloren ging. Es kann meiner Ungeduld angelastet werden, wenn der Text irgendwo inhaltliche Sprünge macht. Sie waren in der ersten Fassung nicht vorhanden. 🙂

Multiple URLs

Sowohl bei meinem ehemaligen wie auch meinem Aktuellen Arbeitgeber nutzen wir ja einen zentralen Verzeichnisdienst (LDAP dort, Active Directory hier), um Authentifizierung bei div. Diensten umzusetzen. Die laufen aber teilweise unter verschiedenen Subdomänen.

KeePassXC bietet aber nur ein Feld für eine URL, mit der die Browser-Erweiterung KeePassXC-Browser (Firefox-Erweiterung, Chrome-Erweiterung) einen Vergleich durchführen kann.

Ein ehemaliger Kollege</span></span> hat mir mal gezeigt, dass man dem URL-Feld ODER-Verknüpfungen injizieren kann, aber das bricht die Funktionalität des Doppelklicks auf den URL-Eintrag in der Listenansicht (Öffnen der hinterlegten URL).

Eine andere langjährige Empfehlung war es, einfach einen "Klon" des Eintrags mit den Zugangsdaten zu machen, wo der Klon dann nur Verweise auf die ursprünglichen Daten enthält (die GUI bietet leider keine Möglichkeit, Verweise manuell anzulegen).

Jetzt habe ich aber herausgefunden, dass KeePassXC seit 2.5.0 (erschienen Oktober 2019, aktuell ist 2.5.3) die erweiterten Attributen von KeePass2Android für das Hinterlegen weiterer URLs unterstützt. Neben dem direkten Bearbeiten der erweiterten Attribute gibt es unter dem Tab "Browser-Integration" auch das Feld "zusätzliche URL's (sic!)", dessen Einträge dann auch als KP2A_URL(_#)-Attribute auftauchen.

Fehlt nur noch die GUI, um die Einträge aus KeePassXC heraus aufrufbar zu machen.

Sharing

Während meines Umzugs von 1Password –was mir bei Secuinfra nahegelegt wurde und dem ich einen Monat lang eine Chance gegeben habe, mich zu überzeugen– zu KeePassXC habe ich mir meine Einträge schon ordentlich in Gruppen sortiert. Dabei fiel mir der Einstellungsreiter "KeeShare" auf, wo mir allerdings nur angezeigt wurde, dass KeeShare derzeit deaktiviert sei. Flugs mal gesucht, was es damit auf sich hat, und diese Dokumentation gefunden.

Die Anleitung finde ich jetzt nicht sonderlich gelungen. Aber sie ist ausreichend für erste Tests.

Prinzipiell erstelle ich mir für jede Installation, wo ich Export oder Sync nutzen will, einen Schlüssel, mit dem ich meine Änderungen signieren kann. Wo ich Import oder Sync nutzen will, muss ich dem Schlüssel vertrauen.

Sync besteht de facto aus einem Export und einem Import.

Was gibt es zu beachten? Effektiv ist KeeShare nichts anderes als die Erstellung eines Auszugs des aktuellen Schlüsselrings in einem neuen</span></span> Schlüsselring. Das wird bei jeder Sicherung durchgeführt. Wer also die Option zur automatischen Sicherung aktiv hat, löst nach jeder Änderung einen Export aus. Ich verwende momentan nur die Sync-Option, kann also nicht sagen, wann der Import durchgeführt wird. Aber in anderen Kontexten erkennt KeePassXC sofort, wenn eine Datei geändert wurde, also gehe ich davon aus, dass der Sync- bzw. Import-Schlüsselring dauerhaft auf Veränderungen überwacht wird (kostet ja nichts).</div>

Das bedeutet aber eben, dass eine Änderung in Verbindung mit Autosave eine Kaskade an Änderungen auslösen kann. In meinem Fall wurde munter hin und her ge-sync-t. Ich gleiche nur eine Gruppe mit meinen persönlichen beruflichen Einträgen mit meinem privaten Schlüsselring ab, so dass ich ggf. auch von anderen Rechnern auf meine Mails und Kalender zugreifen kann. Vorsicht ist geboten bei dem Feature, Einträge in andere Schlüsselringe zu verschieben. Ich habe durch schlechtes Timing des Syncs dabei meinen Eintrag für Office 365 verloren. Glücklicherweise hatte ich noch auf einem anderen Gerät die alte Version und konnte meine Daten retten.</div>

KeeShare nutzt für Import und Sync die Funktion zum Zusammenführen (Merge) (s.a. Menü "Datenbanken" -&amp;gt; "Datenbanken zusammenführen"), ein ebenfalls sehr praktisches Feature. Letztlich ist KeeShare nur ein Automatismus für das Mergen: Eine Gruppe wird in einen Schlüsselring exportiert, diese wird am Ziel wieder importiert. Wie dieser Export-Schlüsselring seinen Weg ans Ziel findet, ist jeder und jedem selbst überlassen. Ich verwende das momentan nur lokal, aber Teams könnten so einzelne Gruppen teilen und die Datei dann mittels Nextcloud, Syncthing oder Netzlaufwerk austauschen.</div>

AutoOpen

Beim Suchen nach der Doku zu KeeShare stieß ich auf die Sonderbehandlung des Ordners "AutoOpen". Einträge in AutoOpen werden beim Entsperren des Schlüsselrings automatisch geöffnet und entsperrt. Dazu muss der Pfad im URL-Feld, das Passwort im Passwort-Feld und ggf. die Schlüsseldatei im Benutzernamens-Feld stehen. Sehr praktisch für all die, die mit mehreren Schlüsselringen jonglieren müssen.</div>

Das funktioniert so auch mit KeePass2Android.</div>

Die schöne neue Musikstreamingdienstwelt ist eine Playlisthölle

Als Amazon-Prime-Kunde habe ich ja Zugriff auf einen beschränkten Musikkatalog via Amazon Music Prime. Die Android-App nervt aber bei jedem Start, ob ich nicht Amazon Music Unlimited für nur 4,99€ pro Monat buchen möchte. Vor drei Wochen oder so hat's mir dann gereicht: Die ständige Aufforderung war mir dann doch zu viel und außerdem bot Amazon die ersten drei Monate kostenlos an. Und ich kann den Zugriff auf die große Musikbibliothek ja sicher auch fürs Rollenspiel und so nutzen. Super!

Jetzt werde ich genervt mit einem Upgrade auf Amazon Music HD. Für nur 5€ mehr. Ich bin angepisst. Und ich werde dieses Mal ganz sicher nicht … zumindest hoffe ich das 😀.

Wie auch immer. Ich habe es oben angedeutet, ich will den Musikkatalog fürs Rollenspiel nutzen. Und da ich eine Numenera-Runde plane, habe ich mal geschaut, was denn andere Spielrunden so an Musik nutzen. Ich habe zwar Vorstellungen, aber kann sie nicht in Worte fassen, weswegen ich gehofft habe, dass ich dann ein paar exemplarische Tracks abgreifen kann.

Nebenbei: Der Soundtrack zu Bastion ist großartig. Nicht meine Vorstellung von Numenera, aber großartig.

In einem Reddit-Thread teilen dann also auch viele Leute ihre Playlists. Leider, leider bei verschiedensten Anbietern. Will ich überall ein Konto anlegen, einen Tarif buchen?

NEIN, natürlich nicht. Die Frage war rhetorisch!.

Aber die Playlists lassen sich doch bestimmt exportieren und importieren, oder?

Nun, ja und nein. Die erst später von mir aufgerufene Seite im Amazonforum besagt recht deutlich, dass Amazon diesen Featurewunsch bereits seit Jahren ignoriert.

Die Dienste selbst bieten zumindest größtenteils keine Option dazu an. Das hat aber ein paar Web- und Appentwickler</span></span> auf den Plan gerufen, da Abhilfe zu schaffen.

Der Playlist-Converter kann sich nur mit einer handvoll Dienste verbinden, und Amazon Music ist keiner davon. Zumindest steht Amazon Music auf der Roadmap. Bringt mich jetzt also auch nicht weiter.

Liste der unterstützten Dienste von Soundiiz

Liste der unterstützten Dienste von Soundiiz

Die Webapp Soundiiz bietet eine beeindruckende Liste an Diensten, mit denen sie sich verbinden kann – zu Amazon Music ist jedoch nur ein Lesezugriff implementiert, Playlists können also nur gelesen, aber nicht erstellt werden.

Mooval wiederum unterstützt nur die drei Dienste Napster, Deezer und Spotify.

Im oben verlinkten Forumsbeitrag wurde auf Stamp verwiesen. Stamp scheint zu können, was ich brauche. Aber sie wollen 8,99€ dafür. Jetzt stehe ich also vor dem Problem, was mir meine eigene Arbeitszeit wert ist, und ob ich mir Stamp leisten möchte. Immerhin gibt es eine Gratisversion, mit der ich anhand einer Playlist und 10 Titeln testen kann, ob sie was taugt.

Was aber macht den Unterschied zwischen den Diensten aus? Tja, öffentliche Schnittstellen. Die allermeisten Dienste bieten API-Zugriff auf ihre Dienste, und die Entwickler machen davon reichlich Gebrauch. Und Amazon? Nun … lest selbst.

Für die meisten Menschen mag ein API-Zugriff auf den Dienst der Wahl uninteressant sein. API-Zugriff bedeutet aber, dass sich überhaupt erst ein Ökosystem an interessanten Anwendungen (Apps) entwickeln kann. Wer mit den vom Dienstanbieter bereitgestellten Möglichkeiten zufrieden ist, braucht diesen Aspekt nicht bei seiner Auswahl berücksichtigen.</div>

Im Moment würde ich von Amazon Music Unlimited abraten, sofern ihr nicht bereits Prime-Kunde seid und ein bisschen aufs Geld achten müsst. Vermutlich werde ich aus dem Grund meinen Unlimited-Tarif auch nach den drei Monaten wieder beenden.</div>

Erlösung und Algorithmen

Erlösung. Lasst uns über Erlösung reden. Damit meine ich die spirituelle Erlösung.

Kann es sein, dass des Menschen größte Erlösung ist, von der Verantwortung seines eigenen Treiben freigesprochen zu werden? Die Welt so erklärt werden kann, dass jeder und alle Gruppen, mit denen er sich identifiziert, frei von Schuld seien?

Aber ganz ohne Schuld geht es ja auch nicht, denn irgendwas Schlimmes passiert ja doch in der Welt, also braucht es Schuldige. Da man selber keine Verantwortung hat und demnach nicht Schuld sein kann –oder ist man nicht schuld und hat demnach keine Verantwortung?–, muss es jemand anders sein.

Spannend finde ich, dass es nie ohne Absicht geht. Es passiert was Schlimmes? Jemand _wollte_, dass dieses Schlimme passiert! Das kann wohl als böse bezeichnet werden, und die Person oder Gruppe als das Böse. Früher hielt noch der Teufel dafür her, heute sind es Verschwörer, die Geheimdienste, Juden (naja, das ist nicht neu), Rothschilds, Soros, das Kapital (alle drei als Stellvertreter für "die Juden") oder –ganz abgefahren– Aliens, Echsenmenschen, Hohlweltler.

Wie komme ich darauf? Deswegen.

YouTube announced they will stop recommending some conspiracy theories such as flat earth.

I worked on the AI that promoted them by the billions.

Here is why it’s a historic victory. Thread. 1/ https://t.co/wJ1jbUcvJE

—Guillaume Chaslot (@gchaslot) 9. Februar 2019

Guillaume Chaslot beschreibt darin, wie der Empfehlungsalgorithmus von YouTube schon nach kurzer Zeit Verschwörungsphantasien befeuerte, weil einige wenige Intensivnutzer ihm beibrachten, dass darüber die Aufmerksamkeitszeit maximimiert werden kann. Und diese Videos bieten genau das an, was diese Zielgruppe offensichtlich am meisten ersehnt: Erlösung. Erlösung von der Last, selber an ihrem Zustand, der ihnen so viel Zeit auf YouTube beschert, schuld zu sein. Es sind natürlich Ausländer, Migranten und Flüchtlinge, die ihm die Arbeit wegnehmen und seinem Staat Fantastilliarden an Geld kosten, die ansonsten ihm zustünden. Es sind böse Ölmultis (Rockefeller, bestimmt auch Juden) und Echsenmenschen, die die Vermarktung seines Perpetuum Mobiles behindern. Es sind die Verschwörer der NWO und deren Geheimdienste, die Chemtrails versprühen und mittels HAARP jedwede selbstverständlich ihm innewohnende Brillianz und Grandesse unterdrücken.

Natürlich kann es sein, dass er oder sie vollkommen unverschuldet in diese Lebenslage gerutscht ist. Den Unterschied macht aber aus, ob er oder sie sich als Kollateralschaden wirtschaftlicher Umstände und Unglücke sieht oder als Opfer finsterer Machenschaften und Umtriebe.

Und YouTubes Empfehlungsalgorithmus bietet eben auch Erklärungen, die klar benennbaren Personen oder Gruppen die Verantwortung dafür zuschieben. Videos über Wirtschaftstheorie und -politik sind eben keine Hingucker.

Dieser Tweet bringt es auf den Punkt:

Huh, we were worried we’d build a paperclip maximizer, but instead we built an engagement maximizer, and it might be just as bad.

—Filippo Valsorda (@FiloSottile) 10. Februar 2019

Falls jemanden die Anspielung nicht auffällt, sie stammt hierher: "Suppose we have an AI whose only goal is to make as many paper clips as possible. The AI will realize quickly that it would be much better if there were no humans because humans might decide to switch it off. Because if humans do so, there would be fewer paper clips. Also, human bodies contain a lot of atoms that could be made into paper clips. The future that the AI would be trying to gear towards would be one in which there were a lot of paper clips but no humans." ( Nick Bostrom, as quoted in "Artificial Intelligence May Doom The Human Race Within A Century, Oxford Professor Says")

Die gute Nachricht ist, dass Google wohl jetzt an der Stellschraube dreht, mit der beständig neue Süchtige nach Erlösung geschaffen wurden. Wir werden sehen, welche Auswirkungen das hat.

HeXXen 1733 – erste Eindrücke

Vor einer Woche kam HeXXen 1733 bei mir an. Ich gebe zu, es war ein Impulskauf – sowohl die Aufmachung als auch das Thema sprachen mich an. Es geht um dunkle Mächte, Dämonen, Teufel und den Kampf der Menschen dagegen in einer Epoche, die mich schon immer fasziniert hat, dem Barock, wenn auch in einer seit fast 100 Jahren abweichenden Zeitlinie. Voller Vorfreude fing ich mit der Lektüre an.

The Good, …

Natürlich ist nichts perfekt, aber im Falle von HeXXen 1733 ist leider bis zur Publikation mehr als ein Missgeschick passiert. Fangen wir mal mit den positiven Aspekten an.

Das Buch ist von hervorragender Qualität. Die 40€ war es auf jeden Fall wert. Kunstledereinband mit Goldprägung; hochwertiges Papier; gelungene Illustrationen, die die Epoche vielfältiger darstellen als vergleichbare Populärpublikationen, wenn auch sehr weißhäutig, was aber sicher der Thematik geschuldet ist.

Die Regeln beinhalten schöne Ideen wie bis zu drei wählbare Rollen und später Professionen, die sich aus den gewählten Rollen ergeben. Von den Rollen und der Profession hängen wiederum die erlernbaren Kräfte ab. Außerdem ist HeXXen 1733 das bislang einzige mir bekannte Regelwerk, das die Art der Charakterkleidung regeltechnische Auswirkungen abseits eines Rüstungswerts haben lässt.

… the Bad, …

Ausschnitt aus dem Regelwerk, worin die Anrede von Spielerinnen geklärt werden soll.

Die Lektüre des Grundregelwerks habe ich mit Beiträgen bei Facebook begleitet. Es fällt mir schwer, heutzutage Texte, Bilder, Filme nicht aus feministischer Perspektive zu sehen, so dass mir gleich übel aufstieß, dass der Autor sich zwar der Thematik bewusst zu sein schien, aber den Aufwand vermeiden wollte, der mit sprachlicher Selbstdisziplin einhergeht, um Spielerinnen auch wirklich wörtlich zu erwähnen (Seite 9). In der Facebookdiskussion wurde das auch meiner Meinung nach gut auf den Punkt gebracht (sinngemäß): Ein Text, der ohne so einen Hinweis auskommt, kann ich problemlos im generischen Maskulinum lesen, denn ich vermute Nachlässigkeit und mangelndes Problembewusstsein. Ein Text mit so einem Hinweis zeugt zwar von Problembewusstsein, zeigt aber auch mangelndes Interesse an wirklicher Kenntnisnahme. Salopp gesagt: "Fuck off!"

Das war sicher nicht die beabsichtigte Wirkung.

Ausschnitt aus dem Regelwerk, worin alternative Bezeichnungen für Spieler, Charaktere und Spielleiter etabliert werden.

Die vermeintliche bessere Lesbarkeit wird dann ein paar Seiten gleich wieder mit Füßen getreten, indem extra in einem Textkasten Synonyme für Bezeichnungen eingeführt werden. Im nächsten Abschnitt gehe ich noch intensiver auf den didaktischen Aufbau des Regelwerks ein, aber hier möchte ich vorgreifen: Wir befinden uns mit dem Ausschnitt auf Seite 21, wir haben also schon einige KiByte an Text konsumiert, in denen beide Begriffe immer wieder auftauchen, ohne zu erklären, warum mal der eine, mal der andere Begriff genutzt wird. Als Leser hatte ich also erstmal Fragezeichen über dem Kopf, ob es einen Grund für die unterschiedlichen Bezeichnungen gibt (Spoiler: Nein, gibt es nicht), und musste die ganze Zeit im Hinterkopf behalten, ob die Unterscheidung noch relevant wird.

In Hinblick auf den Anspruch, bessere Lesbarkeit anzustreben, empfinde ich das als schlampig. Immerhin ließe sich das leicht in einer zukünftigen Auflage korrigieren, indem jedes Vorkommen von entweder "Spielleiter" oder "HeXXenmeister" erstmal durch das jeweils andere ersetzt wird. Eine inklusivere Sprache dürfte ein deutlich größeres Unterfangen sein.

Wirklich schade ist es deswegen, weil die Darstellungen von Held*innen recht ausgewogen ist. Hier werden Frauen auch mal bewaffnet und abseits der dauernden Klischeerollen dargestellt. Großes Lob an die Illustrator*innen. Auch inhaltlich betont der Autor immer wieder, dass es in der Welt von HeXXen 1733 selbstverständlich sei, dass auch Frauen alle Rollen übernehmen könnten, die Männer offenstünden – vielleicht mit Ausnahme des Papstes und der Kardinäle, aber die katholische Kirche als Bollwerk patriarchaler Strukturen im Spiel empfinde ich dann nicht als so dramatisch. Inquisitorinnen hingegen sind problemlos möglich.

Neben diesen Kritikpunkten fallen die gelegentlichen Satz- und Druckfehler nicht sonderlich ins Gewicht.

… and the Ugly.

Didaktisch empfinde ich das Regelwerk als Katastrophe. Es ist nicht immer ersichtlich, ob die Beschreibungen von Moden, Waffen und Bräuchen sich auf realweltliche Begebenheiten beziehen, die im Spiel Widerhall finden, oder ob die Beschreibungen allein spielweltliche Zustände wiedergeben. Deutlich schlimmer wiegt jedoch, dass das Regelwerk als "einfach" beworben wird (Seite 8).

Vermutlich ist es gar nicht unüblich, dass die Charaktererschaffung von der Regelwerksmechanik getrennt behandelt wird. Hier folgen auf 74 Seiten Regeln dann 77 Seiten zur Charaktererschaffung und Wertesteigerung. In den Regeln erfahre ich erstmal nichts darüber, in welchen Größen sich überhaupt die Werte für einen typischen SC so tummeln oder mit wie vielen Würfeln Proben bestritten werden. Ja, dort steht was von Attribut + Fertigkeitswert, aber in Hinblick auf die Frage nach der Größenordnung sagt mir so eine Angabe erstmal gar nichts. Für mathematisch weniger bewanderte Menschen mag das einerlei sein – mir ist das wichtig. Die Antwort darauf finde ich halt erst so 100 Seiten später.

Während ich den vorigen Absatz geschrieben habe, schlug ich eine zufällige Seite auf (Seite 42, entscheidet selbst, wie zufällig das war) und fand dort die Antwort auf die Frage, die mich über dutzende Seiten Kräftebeschreibungen (119-149 und 160-176) plagte: Wo finde ich die Erklärung dafür, was bei den Kräften immer in Klammern hinter der Bezeichnung angegeben wird (Beispiel: "Überlegene Fechtkunst (allgemeine Jägerkraft / Bande / Gestik")? Am Anfang des Abschnitts über Kräfte fand ich dazu nichts, nicht mal einen Hinweis darauf, dass ich die Regeln dazu auf Seite 42 fände. Und das lässt sich gut verallgemeinern: Es gibt wenige, ganz wenige Querverweise zu den relevanten Stellen. Zu viele Querverweise schaden der Lesbarkeit, schon klar, zu wenige jedoch machen das Verständnis jedoch unnötig schwer.

Unnötig kompliziert ist auch die Notation von Proben: "Att + Fw (Fertigkeit)" (Attribut + Fertigkeitswert (Fertigkeit)). Ich sehe keinen Vorteil gegenüber der Notation "Att + Fertigkeit". Die ersten paar Male hat es meinen Lesefluss grob gestört, später empfand ich es nur noch als Ärgernis. Was auch immer für die gewählte Notation sprechen mag, konsequenterweise hätte es dann "Aw (Attribut) + Fw (Fertigkeit)" heißen sollen. Eine Doppelnennung "Spielerinnen und Spieler" hätte der Lesbarkeit jedenfalls sicher nicht mehr geschadet.

Dann fuchst es mich, dass es zwischen Lebenspunkten und Schaden noch so Halblebenspunkte und Halbschaden gibt, und das jeweils in mehreren Geschmacksrichtungen. Es gibt auf der Bonusseite "Coups", die körperliche Tricks ermöglichen, "Ideen" für geistige Dinge, "Segnungen" für Würfeldinge und heilige Tricks, "Aktionspunkte" für Handlungen im Kampf (Rüstungswert ließe sich auch noch nennen, aber der ist nur das Komplement der Aktionspunkte zur 6). Zusätzlich gibt es noch "Puffer-Lebenspunkte", temporäre Lebenspunkte, die nach Ende eines Konflikts zurückgesetzt werden.

Auf der Malusseite gibt es "Lähmungsstufen", die die Aktionspunkte verringern, es gibt "innere Schadensstufen" und "äußere Schadensstufen", über die getrennt Buch geführt werden muss, aber letztlich die gleichen Auswirkungen haben und trotzdem unterschiedlich behandelt werden müssen, und "Malusstufen", die sich allgemein als Malus auf Proben auswirken. Als Gegenwert zu "Segnungen", die nur einen temporären Wert darstellen, gibt es "Verderbnis", die effektiv das Maximum an "Segnungen" begrenzt.

All das wechselwirkt mit einem Sammelsurium an Kräften, von denen manche nur bei bestimmten Würfelergebnissen genutzt werden können, andere sind in 10 Stufen ausbaubar und andere sind fast schon langweilig durch Ausgabe von "Coups", "Ideen" oder "Segnungen" anzuwenden, und Kleidungssets. Ja, Kleidungssets! Da scheiden sich bestimmt die Geister, ich find die Idee jedoch sehr erfrischend. Warum sollten auch nur alchimistische Tränke irgendwelche tollen Boni bringen, warum nicht auch Kleidung? Leider wirkt das nur sehr halbherzig umgesetzt und durch die Brille des 20./21. Jahrhunderts beschrieben. Sollte das Regelwerk irgendwann mal überarbeitet werden – an der Stelle könnten die Macher*innen mehr draus machen. Jedenfalls hatte ich nach dem ersten Lesen und anfänglichem Verstehen dieser Wechselwirkungen nicht das Gefühl, darüber jemals einen Überblick behalten zu können. Und ständig im Regelwerk nachzuschlagen, scheint mir den Spielfluss doch zu stark zu beeinträchtigen. Als Spieler*in mag das nicht so dramatisch sein, hat man doch selbst immer nur einen kleinen Ausschnitt aller Kräfte im Kopf zu haben.

Die im Regelwerk skizzierte Handhabung von NSC finde ich mit am abschreckendsten, was ich je gesehen habe. Es gibt zwar, ähnlich wie bei 7te See, eine Unterscheidung zwischen relevanten und weniger relevanten NSC, wobei letztere durch allein zwei Werte abgebildet werden, aber die relevanten NSC erfahren fast die komplette Regel-Aufmerksamkeit, die auch SC erfahren. Es wird an einzelnen Punkten (stark) vereinfacht, aber der Bau interessanter NSC wirkt eher wie Arbeit denn Spaß. Auch kann ich mir schwer vorstellen, einen NSC improvisiert aufzustellen. Natürlich kann ich als Spielleiter tun und lassen, was ich will, aber die Vorstellung der Macher*innen finde ich, wie geschrieben, abschreckend.

250 Seiten umfasst das Regelwerk, davon sind ungefähr 25 Seiten 10 sogenannten Archetypen vorbehalten, sofort spielbaren Charakteren auf Stufe 1. Reguläre Charakterbögen sind zweiseitig, also würde ich erwarten, dass ich dort auch 10 Charakterbögen finde. Stattdessen finde ich dort 10 Abschnitte für die Werte, die alle jeweils ungefähr ein Viertel einer Seite einnehmen. Der Rest sind Illustrationen, Charakterhintergründe und Prosa zu den Charakteren. Ohne Zweifel stimmungsvoll, aber ich kann mich nicht erinnern, dass Hintergründe und Prosa in der Charaktererschaffung Erwähnung fand über einen kurzen Zweizeiler hinweg. Mit diesen Archetypen wird ein nicht ansatzweise im Regelwerk erwähnter Anspruch an Charaktere und ihre Erschaffung gesetzt. Kann ich ignorieren, finde ich nur furchtbar ungeschickt. Wenn der Hintergrund irgendwie wichtig sein soll, dann gehört er meiner Meinung nach deutlich in den Prozess der Erschaffung eingebunden, was ich aber kaum im skizzierten Prozess erkennen kann.

Auch nicht lustig fand ich den mehrfach im Regelwerk auftauchenden Hinweis auf spätere Publikationen zur Vervollständigung des Regelwerks, z.B. behandelt das Grundregelwerk nur die Charakterstufen 1 bis 12, es soll aber noch deutlich darüber hinaus gehen (20? 25?).

Das Beste habe ich mir aber für den Schluss aufgehoben: Die Würfel.

Ausschnitt aus dem Regelwerk, Tabelle der Würfelflächen der verwendeten Würfel

HeXXen 1733 verwendet sechsseitige Würfel (W6), aber mit eigener Beschriftung. Kenne ich ja schon von Fate mit den dort verwendeten Fudge-Würfeln. Aber hier wurde nicht nur ein eigenes Konzept erstellt, sondern es wurden gleich mehrere eigene Beschriftungen der Würfelflächen vorgenommen. Der sogenannte HeXXenwürfel (1:2:3) hat drei leere Flächen, die Misserfolge darstellen, zwei Flächen mit Krähenköpfen für Erfolge und einen Stern für Esprit (für Espritkräfte oder als halber Erfolg). NSC nutzen keine Espritkräfte, deswegen hat der HeXXenwürfel für SL (3:3) drei Flächen für Erfolge. Januswürfel (3:3) haben drei leere und drei beschriftete Flächen und werden in Höhe errechneter Boni oder Mali mitgewürfelt. Je nach Vorzeichen gelten sie dann als zusätzliche Erfolge oder werden von den Erfolgen abgezogen. Segnungswürfel haben wiederum eine eigene Einteilung, 1:1:2:2. Das gilt natürlich auch für Blutwürfel, bei denen kommt hinzu, dass ich nur vermuten kann, dass die Wertigkeit der Flächen 0, 1, 1, 2, 2 und 3 ist - im Regelwerk wird nichts dazu geschrieben, außer dass die Anzahl der Blutstropfen der Wertigkeit entspricht, die ich nicht mit Sicherheit auf den Bildern erkennen kann. Und dann gibt es den Elixierwürfel mit der Aufteilung 2:1:1:1:1 – effektiv ist die 6 eines normalen W6 durch eine 1 ersetzt.

Bei Proben wird wie angedeutet mit einer Anzahl an HeXXenwürfeln gewürfelt, die sich aus Attribut und Fertigkeit ergibt. Bei der Lektüre hat es eine Weile gedauert, bis ich herausfand, wie viele Würfel das also sein werden. Spoiler: Es sind bis zu 10 Würfel. Attribute und Fertigkeiten spielen sich im Bereich bis 5 ab, was der Charakterbogen dank eines Freifeldes an der Stelle nicht wirklich nahelegt. Hätte ja auch wie bei DSA im Bereich bis 20 sein können.

So ein Päckchen *HeXXenwürfel* mit 10 *HeXXenwürfeln*, 5 *Januswürfeln* und je 1 *Blut-, Segnungs- und Elixierwürfel* geht momentan für 20€ über die virtuelle Ladentheke, denn im Einzelhandel werde ich die wohl kaum finden. Wir alle kennen das sicherlich, dass Spieler*innen in Sachen Würfel mitunter sehr eigen sein können und niemanden anderen damit würfeln lassen. Wollte ich also eine 4köpfige Spielrunde vollständig ausstatten, wären das 80€. Ich kann nur vermuten, dass die HeXXenwürfel für die SL in der SL-Box "Werkzeuge des Meisters" (50€) enthalten sind.

Eine Substitution durch reguläre W6 wird zwar durch die Tabelle nahegelegt, ich kann mir aber nicht vorstellen, dass damit eine schnelle Auswertung der Würfelergebnisse möglich ist. Ich gehe davon aus, dass während der Spieltestphase die Spielrunde mit normalen W6 gespielt hat. Im Zuge dessen werden sie wohl erkannt haben, dass angepasste W6 nicht nur besser aussehen (den Punkt gestehe ich gerne ein), sondern auch die Würfelauswertung beschleunigt. Da es an vielen Punkten im Regelwerk heißt "würfele [Januswürfel, Segnungswürfel, Blutwürfel, Elixierwürfel] mit" kann auch nicht einfach die Würfelzahl erhöht werden, sondern sie müssen ja optisch unterscheidbar bleiben.

Schluss

Wie die Macher*innen das Regelwerk "einfach" nennen können, ohne in schallendes Gelächter auszubrechen, kann ich nicht verstehen.

Ich finde es wirklich schade, dass HeXXen 1733 und ich nicht miteinander warm werden können. Die ohne Frage vorhandenen sehr guten Ideen (Kräfte in Abhängigkeit gewählter Rollen und Profession, regeltechnisch relevante Kleidung) und die Spielwelt können leider nicht über die vorhandenen Kritikpunkte hinwegtäuschen.

Bei den Teilzeithelden gibt es eine Rezension von Michael Fuchs, die einige meiner Kritikpunkte ebenfalls erwähnt, in Sachen "einfache Regeln" aber zu einem gänzlich anderen Schluss kommt. Hey, DSA 1 hat einfache Regeln, HeXXen 1733 nicht.

Mediatheken, MediathekView und ein paar Skripte

Ich finde die Mediatheken der ÖR ja total toll. Aber für einen Heimmediaserver brauchen die Dateien doch noch ein bisschen Nacharbeit.

Die meisten Videos, die mir MediathekView herunterlädt, liegen im MP4-Container vor. Manchmal macht es mir auch eine Matroska-Datei daraus, so wie ich das will. Von denen scheinen aber manche wiederum nicht als solche erkannt zu werden – manche sind tatsächlich nur MP4-Container mit .mkv-Erweiterung, andere werden nur als application/octet-stream erkannt. So richtig rund läuft der Download da nicht.

Also bastele ich mir ein paar Skripte, die die MKV-Nachbearbeitung übernehmen. Das erste Skript sorgt erstmal dafür, dass alle Dateien die richtige Dateiendung haben. Manche Videodateien liegen nämlich gänzlich ohne vor, z.B. "Yakari 15. Wo ist dieser verdammte Teamgeist?". Erschwerend kommt hinzu, dass da schon ein Punkt im Dateinamen ist. So ein Skript muss unbeaufsichtigt arbeiten können, also müssen solche Sonderfälle berücksichtigt werden können.

Wie schon angedeutet: Wenn ich also eine Matroska-Datei habe und dort auch eine drin ist, kann es immer noch sein, dass sie nicht von allen Programmen als solche erkannt wird. Widerwillige Dateien werden also von einem Format ins selbe "konvertiert". Mit dem richtigen Werkzeug wird auch eine spezifikationsgetreue Datei daraus. Natürlich überschreibt man nicht die Originaldatei, sondern schreibt eine temporäre Datei. Diese wird nach Abschluss an die ursprüngliche Stelle kopiert. Doof, wenn da was schief läuft, dann passiert das nicht. Auch nicht das abschließende Löschen der temporären Datei. Dafür aber das Löschen des Originals, weil man vergessen hat zu prüfen, ob die vorigen Schritte erfolgreich verlaufen sind.

Dann stellt man fest, dass manche Dateien unvollständig sind und bei der Konvertierung einen Fehler werfen. Genug, dass das Dateisystem für temporäre Dateien vollläuft. (Die Verluste hielten sich in Grenzen, zumeist nur Bob-Ross-Videos).

Das nächste Skript überprüft dann Videodateien darauf, ob es sich um keine Matroska-Datei handelt. Ist das der Fall: Konvertierung ohne Transkodierung – es werden einfach nur die Spuren in einen neuen Container gepackt. Zumeist heißt das, MP4-Videos umzucontainern. Auch hier kann obiger Fehler auftreten. Verluste: keine, nur ein wenig Selbstachtung.

Jetzt bietet Arte aber oft auch französische Produktionen an, die ich gerne mit beiden Audiospuren vorliegen hätte. Ohne Handarbeit geht es da nicht wirklich, aber es beschränkt sich darauf, dass ich die Dateien halt "Film (french).mkv" und "Film (deutsch).mkv) nenne. Das dritte Skript erkennt dann die Sprachangabe und bestimmt alle Videodateien gleichen Schemas, aber mit anderen Sprachangaben. Dort extrahiert es die Tonspuren und multiplext sie in eine neue Datei.

Es ist mir übrigens total unverständlich, warum nicht die Möglichkeit mehrerer Tonspuren in einer Datei genutzt wird. Nicht nur bei französischen Produktionen auf Arte, sondern auch bei englischen oder amerikanischen auf allen ÖR-Sendern. Ich nutze ja meinen TV-Anschluss schon geraume Zeit nicht mehr, kann mich aber erinnern, dass sogar im analogen Fernsehen gelegentlich Mehrkanalton ausgestrahlt wurde.

Das vierte Skript greift sich zuguterletzt die gelegentlich bereitgestellten Untertiteldateien und multilplext sie als Untertitelspur in die Videodatei. Auch hier: Warum wird das nicht gleich so gemacht? Antwort: Weil das Containerformat MP4 –nicht zu verwechseln mit dem Codec MP4; der Container ist ein abgespeckter Quicktime-Container– keine gottverdammten Untertitel zu unterstützen scheint. Ernsthaft. Ich habe mich jetzt nicht sonderlich bemüht, aber ich bin damit gescheitert, dort Untertitel hinein zu mulltiplexen. Es scheint nicht zu gehen. Matroska bietet das problemlos an.

MKV ist MP4 in so vielerlei Hinsicht überlegen, da fragt sich der gequälte Leser: Warum wird denn das nicht benutzt? Antwort: Es wird nicht das Beste genutzt, sondern das, was den eigenen wirtschaftspolitischen Interessen am ehesten entspricht. Matroska stammt grob gesagt aus der Filesharer-Community, um die Beschränkungen der kommerziellen Formate aufzuheben. MP4 ist ein Produkt des MPEG-Konsortiums, wo auch Apple drinsitzt, die natürlich ihr Quicktime-Format propagiert haben. Außerdem hat das Konsortium kein Interesse daran, die Bedürfnisse von Powerusern zu befriedigen, sondern die ihrer Mitglieder und Kunden und der kommerziellen Videoproduzenten.

Bis hierhin sind die Werkzeuge bash, mediainfo, mkvtoolnix und file. Als Kür und letzten Schritt strebe ich noch an, die resultierende Videodatei mit filebot gleich gemäß Online-Datenbanken wie TheMovieDB oder TheTVDB so zu benennen, dass Plex (ein Heimmediaserver) sie sofort akzeptiert.

Wenn das passiert ist, und ich mir also das Programm der ÖR selbst zusammengestellt habe, dann werde auch ich von merkwürdigen Lobby-Verbänden unter TV-Piraterie geführt.

DECT im neuen Eigenheim

Es ist schlicht nicht möglich mit den Gigasets durch die Zwischendecke zu funken. Ich stand heute direkt unter der Basis im Obergeschoss und konnte nicht telefonieren.

Was sind jetzt die Optionen?

Ich kann eine zweite Basis im EG anstöpseln und dort die gleichen SIP-Accounts konfigurieren. Nachteil: Damit geht kein Handover, wenn man während eines Telefonats das Stockwerk wechselt. Geschätzte Kosten: ca. 100€.

Ich kann auf WLAN-SIP-Telefone setzen. Erfordert einen kompletten Hardwareaustausch und wird beim Handover von Accesspoint zu Accesspoint auch die Verbindung verlieren. Immerhin würde das eine komplette Infrastruktur überflüssig machen. Geschätzte Kosten: 100€ bis 150€ pro Mobilteil. Eigentlich kann ich auch alte Smartphones dafür nehmen, aber der Komfort ist da mit dem Anstecken zum Aufladen doch eher mau.

Ich kann mich mal mit dem Theme "DECT-Mehrzellsysteme" auseinandersetzen. So tadellos Gigasets Pro 720 DM im Büro funktioniert – Kosten von 400€ pro Basisstation (zwei Stück benötigt) und für den DECT-Master (wird leider benötigt) sind indiskutabel. Das wären also 1200€ für die Grundausstattung.

Man sollte doch meinen, dass bei modernen Häusern das Problem häufiger auftritt und eine, sagen wir mal Prosumer-Lösung auf dem Markt ist, die zwei oder drei Basisstationen erlaubt. Pustekuchen! Es geht immer gleich in die Vollen. Für Privatverbraucher werden sogenannte DECT-Repeater angeboten, die ein DECT-Signal aufgreifen und weiterreichen. Bloß kommt nichts durch den Beton, was weitergereicht werden kann.

Das günstigste Multizellensystem, was ich finden konnte, ist das RTX8660, was ohne eine DECT-Zentrale auskommt. Auch da muss ich mit Kosten von 360€ für zwei Stationen zusammen rechnen. Und dann verlieren wir den Komfort, mit den Gigaset-Telefonen in einem abgestimmten System unterwegs zu sein. Wobei es ja Hoffnung gibt, dass die Gigasets untereinander wunderbar klarkommen und sie keine Gigaset-Basis dafür benötigen. Ansonsten müssten halt noch RTX-Mobilteile her … die kosten sicher auch 100€ pro Stück.

LineageOS auf Oneplus One (bacon) installieren

Urlaub. Mistwetter. Da könnte man ja mal das Oneplus One (OPO) mit LineageOS bespielen, oder?

Was gibt es zu berücksichtigen?

seufz

Hürden

Signal. Die Schlüssel von Signal lassen sich leider nicht retten, da ich das OPO nicht gerootet hatte. Jeder App-Entwickler kann in der Manifest-Datei seiner App angeben, ob sie auf "adb backup" reagieren soll oder nicht. Und OpenWhispersystems hat sich dagegen entschieden aus Sicherheitsgründen (die ich komplett nachvollziehen kann, mir aber so ein wenig die Motivation nehmen).

Google Authenticator. Ich habe sechs Dienste in den Authenticator eingebunden. Was für Signal gilt, gilt auch hier: kein Backup möglich. Immerhin kann ich die Verknüpfung temporär auf ein anderes Gerät schieben, um das später wieder zurück auf das OPO zu schieben. Nicht, dass ich falsch verstanden werde: Es gibt keine Automatik. Das muss bei jedem Dienst so gemacht werden, als würde ich die Zweifaktorauthentifizierung neu einrichten.

Syncthing. Auch hier liegen die kryptographischen Schlüssel außerhalb meines Zugriffs. Hier muss ich im Anschluss all meinen Geräten die neue Installation wieder bekanntmachen.

Vorbereitung

Laden wir erstmal die passenden Pakete herunter:

Netterweise stellen die Leute von LineageOS auch eine leichtverständliche Anleitung zu Verfügung.

Hintergrund

An der Stelle kann ich mal kurz erläutern, warum ich das überhaupt auf mich nehme. Seit September 2016 hat das OPO keine Updates mehr bekommen. Das war auch ungefähr der Zeitpunkt, als Cyanogen Inc. beschlossen hat, den Betrieb und die Weiterentwicklung ihres Cyanogen OS einzustellen. Schon vorher fiel Cyanogen Inc. durch fragwürdige Geschäftsentscheidungen auf:

  • Exklusive, wenn auch zeitlich befristete Vertriebsrechte für einen indischen Smartphone-Hersteller für Cyanogen OS in Indien, was Oneplus als early supporter verärgerte.

  • Einführung von Microsoft-Apps in das System-Image von Cyanogen OS.

  • Entwicklung von "MOD ready", einer Infrastruktur im OS, um Bestandteile durch Komponenten anderer Anbieter austauschen zu können

Das alles hinterließ einen schalen Nachgeschmack zu einem Produkt, das zu großen Teilen auf dem Engagement der Community beruht, die sich um Emanzipation ihrer Nutzer*innen bemüht. Der Name Cyanogen jedenfalls erschien der Community derart beschädigt, dass sie das Community-Projekt CyanogenMod zu LineageOS umbenannten. Cyanogen Inc. ist jedenfalls nicht mehr, und damit sind auch eventuelle Updates eher fragwürdig, zumal Oneplus sicher mehr Interesse daran hat, ihr hervorragendes Oneplus 5 (und bald 5T) zu verkaufen.

An der Stelle wäre es interessant mal zu recherchieren, wie Wileyfox mit dem Cyanogen-Debakel umgegangen ist. Kolleg*innen haben mir berichtet, dass die Swifts (1. Generation) noch Updates auf Android 7.0 oder 7.1 bekommen hätten, die aber sicher nicht von Cyanogen Inc. stammen konnten. Aber auch auf den Swifts hat sich LineageOS 14.1 als bessere Wahl herausgestellt.

Zwei meiner Motivationen sind aber KRACK, ein Angriff auf die WiFi-Verschlüsselung WPA2, für die LineageOS seit Mitte Oktober wohl Patches eingespielt hat, und BlueBorne, ein Angriff auf Bluetooth, der entfernte Code-Ausführung allein über aktiviertes und sogar ungepaartes Bluetooth ermöglicht, was bei LineageOS seit Anfang Oktober gepatcht ist. Ist ersteres vielleicht nur eine theoretische Bedrohung, ist zweiteres komplett fahrlässig zu ignorieren.

Weiterhin gibt es ein paar Ärgernisse, die ich hoffe behoben zu sehen:

  • Das OPO versucht ständig Kontakt zum sog. Cyanogen-Konto aufzunehmen, dessen Server aber längst abgeschaltet ist. Selbst mit deaktiviertem "Sicherheit-&amp;gt;Geräteadministrator" von Cyanogen belastet das den Akku.

  • Wenn der Massenspeicher des OPO voll läuft, so ab 80 bis 90 Prozent Belegung, scheitern nicht nur Bluetooth-Verbindungen häufiger mal, das Gerät vergisst auch Paarungen.

  • Bluetooth selber frisst im Leerlauf enorm viel Akkukapazität. Der Unterschied über Nacht ist ungefähr 100 → 85 Prozent zu 100 → 45 Prozent. Ich kann mich ehrlich gesagt nicht daran erinnern, dass das anfangs auch so war. Ich vermute ja, das letzte Cyanogen-OS-Update hat diesen Regress mitgebracht.

  • Das Mikrofon wird offensichtlich stummgeschaltet, wenn ich beim Telefonieren auf freisprechen schalte. Das war anfangs ganz sicher nicht der Fall.

Durchführung

Heute geht es hier um LineageOS auf dem OPO, weswegen ich den Umzug der Authenticator-ZFA auf das andere Gerät nicht beschreibe.

Zwingend notwendig ist die Android Debug Bridge (adb). Unter Linux ist sie einfach über das Paketmanagement zu installieren, unter Windows … nun, Windows-Nutzer*innen müssen sich was suchen.

Am OPO wird dann Android-Debugging in den Entwickleroptionen aktiviert. Dazu müssen diese erstmal freigeschaltet werden: In den Einstellungen wird heruntergescrollt bis "Über das Telefon". Dort wird 7× auf die Buildnumber getippt. Im Anschluss können die "Entwickleroptionen" oberhalb von "Über das Telefon" gefunden werden. Ein bis zwei Bildschirme heruntergescrollt ist "Android-Debugging aktivieren" zu finden.

An der Stelle ließe sich dann das Telefon ans USB-Kabel und dieses an den Computer anschließen. Mein Arch Linux hat hier aber die Kooperation verweigert, indem es das Telefon nicht mehr finden wollte, nachdem USB-Debugging aktiviert wurde. Dementsprechend konnte ich nicht

adb reboot bootloader

ausführen. In den Entwickleroptionen konnte ich aber ein etwas besser ausgestattetes Neustart-Menü aktivieren, was mir das direkte Booten in den Bootloader Fastboot erlaubt.

Sobald auf dem Display des OPO "fastboot" erscheint, kann es über den Befehl "fastboot" angesprochen werden. Bei Linux ist das meines Wissens Teil des adb-Pakets, bei Windows … siehe oben. Mit

fastboot devices

lässt sich anzeigen, ob das Gerät zu finden ist. Ist dem so, lässt sich das OPO mit folgendem Befehl entsperren, falls es noch nicht entsperrt ist:

fastboot unlock oem

Das Gerät wird gelöscht (auf Werkseinstellungen zurückgesetzt)! Im Anschluss startet es neu. Android-Debugging ist leider wieder deaktiviert worden, deswegen erneut aktivieren und wieder in den Fastboot-Bootloader booten. Jetzt lässt sich das oben heruntergeladene TWRP vorübergehend installieren:

fastboot flash recovery twrp-x.x.x-x-bacon.img

Die Versionsnummer ist entsprechend anzupassen. "Vorübergehend" deswegen, weil ich Warnungen gelesen habe, dass ein dann startendes Cyanogen OS das TWRP-Recovery einfach wieder löscht und durch das originale ersetzt. Sollte aus Versehen das OPO also nicht ins Recovery, sondern ins Android gebootet werden, muss diese Prozedur ggf. wiederholt werden. Ist TWRP geschrieben worden, kommt der Teil, der etwas Fingerfertigkeit erfordert: Das OPO muss ausgeschaltet werden. Bei mir half es nicht, lange auf den Power-Button zu drücken – ich musste mit [Power]+[Vol-Down] hart ausschalten. Netterweise ist das gleich die Tastenkombination, mit der auch ins Recovery gebootet werden kann, was dann jetzt ansteht.

TWRP erlaubt es, die benötigten Daten per adb oder per Dateimanager auf das OPO zu kopieren. Da eh schon das Terminal offen ist, heißt es

adb push lineage-14.1-20171023-nightly-bacon-signed.zip /sdcard

LineageOS darf die Google-Apps nicht beinhalten. Deswegen müssen diese für die Verwendung des Play Store gesondert heruntergeladen werden, z.B. von OpengGApps.org. Das OPO braucht Pakete für die ARM-Plattform, LineageOS 14.1 entspricht Android 7.1. Mit ein bisschen Herumprobieren fand ich heraus, dass das größte installierbare Paket die Mini-Version ist (hier direkt verlinkt). Dieses wird dann auch auf das OPO kopiert:

adb push opengapps-arm-7.1-mini.zip /sdcard

Werden optional root-Rechte gewünscht, ist noch das LineageOS-SU-Addon von https://download.lineageos.org/extras zu beschaffen: ebenfalls ARM, ebenfalls für 14.1. Auch dieses dann rüberkopieren:

adb push addonsu-14.1-arm-signed.zip /sdcard

Damit wäre alles beisammen. Am OPO dann in TWRP "Wipe" auswählen, "Advanced Wipe" und dort dann System, Data und Cache auswählen. Das Löschen bestätigen, kurz warten und zurück ins Hauptmenü. Jetzt können die ZIP-Dateien installiert werden mit "Install". Dort können die eben kopierten Dateien dann nacheinander ausgewählt werden, und zum Schluss wird die Installation dann bestätigt. Weil es nichts kostet, habe ich das Angebot, Dalvik Cache und Data zu wipen angenommen, ebenso die Installation der TWRP-Android-App (die eigentlich nur ein Platzhalter für die richtige App ist). Jetzt kann neugestartet werden. Das erste Mal Android 7.1. zu booten, kann ein wenig länger dauern.

Anmerkung: Mein adb-Problem in Arch Linux habe ich nicht behoben bekommen. Netterweise stellte mir Katja kurzzeitig ihren Ubuntu-Laptop zur Verfügung, wo das Kopieren per adb problemlos verlief. Trotzdem hat mich das wahnsinnig gemacht, da ich in dmesg mitansehen konnte, wie das OPO am USB im Halbsekundentakt die USB-Verbindung verlor und wiederherstellte. Wenn ich ehrgeizig bin, recherchiere ich da mal eine Lösung.

Nach dem Bootvorgang bot mir LineageOS die Wiederherstellung aus verschiedenen Quellen an, unter anderem über mein Google-Konto. Dort konnte ich dann mein A0001 auswählen. Ärgerlicherweise wurde mir keine Option zur Auswahl des WLAN gegeben, bevor ich mit der Ersteinrichtung durch war. Immerhin stellte das Gerät nicht alles wieder her, bevor ich durch war. Sobald ich auf dem Startbildschirm war, aktivierte ich das WLAN und war beruhigt, nicht mein Datenvolumen aufzubrauchen. Immerhin fing es an, mehr als 150 Apps herunterzuladen.

Fazit

Abgesehen von meinen adb-Schwierigkeiten war der Vorgang eigentlich recht problemlos. Ärgerlich ist natürlich, dass einige Apps unwiderruflich ihre Einstellungen verlieren (Signal, Syncthing, Authenticator, WhatsApp (naja, WhatsApp ist mir egal)). Das OPO bootet Android N klaglos und verrichtet seinen Dienst. Bacon, so der Codename des OPO, ist ein offiziell unterstütztes Gerät von LineageOS. Ich erwarte nicht mehr Probleme von LineageOS als vom vorher installierten Cyanogen OS, eher weniger, wegen gereifterer Software und engagierter Community. Ich bin sicher, es wird seine eigenen Macken mitbringen. Mal schauen. So weit bin ich bislang ganz angetan.

Raspberry Pi als Netzwerk- und Bluetooth-Audiogerät (Teil 1)

If you are interested in an english version of this post just ask in the comments. Almost all of the instructions I used for this blog post were in english anyway so there might not be that much use for an english version.


Seit zwei Jahren spiele ich mit dem Gedanken, einen Raspberry Pi als Netzwerk- und Bluetooth-Audiogerät zu konfigurieren, um die alte Mini-Kompaktstereoanlage von Technics im Wohnzimmer mal ins aktuelle Jahrzehnt zu holen. Zu diesem Zweck habe ich mir damals einen Raspberry Pi 2 B und ein Hifiberry DAC+-Board inkl. passendem Gehäuse besorgt. Der Spaß hat zusammen 70 bis 80 € gekostet – je nach Anbieter kann der eine oder andere Euro gespart werden.

Heute würde ich für meinen Anwendungsfall sicher nicht zum 2 B greifen, sondern eher zum Zero W, der Bluetooth und WiFi bereits eingebaut hat. Für 30 € gibt es ein Starterset mit vorbestückter GPIO-Stiftleiste und Netzteil sowie Adaptern. Der passende Hifiberry DAC+ Zero kostet auch nur 15 €. Mit 45 € plus den Kosten für ein passendes Gehäuse liegen die Kosten doch deutlich niedriger.

Meinen 2 B habe ich mit einem USB-Wifi-Adapter und einem Bluetooth-Adapter aus Restbeständen ergänzt. Dafür müssten auch noch so 10 € eingeplant werden, müssten die gekauft werden. Eine passende Micro-SD-Karte ist auch für ein paar Euro zu haben. Ich habe eine mit 2 GB Kapazität genommen, die ich noch da hatte. Vermutlich noch aus einem meiner frühen Nokia-Smartphones.

Warum nicht den Audioausgang des Pi benutzen? Der verbaute DAC des Pi ist von so grausamer Qualität, dass so manches Telefon der Deutschen Post im Vergleich als Hifigerät gelten kann.

Warum überhaupt ein Hifiberry? Sicher wäre auch eine USB-Soundkarte gegangen. Sieht halt nur nicht schick aus. Schon der Wifi-Adapter ist eher hässlich.

Anforderungen 2015

Mein Audiogerät soll folgende Anforderungern erfüllen:

  • Pulseaudio im Netzwerk bereitstellen

  • Bluetoothaudio entgegennehmen und ausgeben

  • Audio per DLNA abspielen

  • sich als Element einer Multiroom-Lösung auf Pulseaudio-Basis verhalten

Erster Versuch

Zu meinem Unglück musste ich 2015 feststellen, dass Raspbian –die offizielle Distribution von der Raspberry Pi Foundation basierend auf Debian– leider ein 4-GB-Medium erfordert. Ich versuchte mein Glück also erstmal mit Arch Linux ARM. Neben der Tatsache, dass es auf ein Datenträger deutlich kleiner als 4 GB passt, fand ich die Installation auch viel angenehmer, da ich dabei das Gefühl von mehr Kontrolle hatte. Für Anfänger ist das aber sicherlich nichts, auch wenn die Anleitung wenig Raum für Fragen lässt. Ein Showstopper mag sein, dass die Anleitung voraussetzt, dass ein laufendes Linux-System benutzt wird.

Bevor das hier jetzt ausufert: Aus dem Audioausgang kam nur furchtbare Statik. Nix zu machen. Nada.

Glücklicherweise stieß ich während meiner Websuche auf Minibian. In der Hoffnung, dass ich mir nach der Installation selektiv die Pakete nachinstallieren kann, die ich für mein Projekt brauche, habe ich es damit probiert. Minibian produzierte kein Rauschen – die Hardware schien also nicht kaputt zu sein. Beruhigend.

Tatsächlich klappte es außergewöhnlich einfach, Pulseaudio so zu konfigurieren, dass es Audio aus dem Netzwerk entgegennimmt – genau, was ich mir heutzutage von modernen Systemen erhoffe. Bluetooth wollte aber partout nicht funktionieren. Nach tagelanger Recherche schob ich die Schuld einfach darauf, dass Minibian sich doch irgendwie susbtantiell von einem regulären Raspbian unterscheidet.

Aus Gründen, die mir nicht mehr einfallen wollen, kam mein Vorhaben erstmal zum Erliegen. 2016 schob sich dann ein Retropie-Vorhaben dazwischen (funktioniert auch wunderbar). Und vor zwei Wochen wollte ich dann mal wieder loslegen.

Nächster Versuch

Zwei Jahre später kann ich ja mal wieder Arch Linux ARM ausprobieren, dachte ich mir. Was auch immer damals schiefgegangen war – vielleicht wurde es ja ausgebügelt.

Installation Hifiberry

Hifiberry stellt eine allgemeine Installationsanleitung zur Verfügung, die auch für Arch Linux ARM gilt. Meine /boot/config.txt sieht danach folgendermaßen aus:

# See /boot/overlays/README for all available options

gpu_mem=64
initramfs initramfs-linux.img followkernel

dtoverlay=hifiberry-dacplus

Je nach Modell des Hifiberry muss natürlich ein anderes Overlay eingefügt werden. Das reicht dann auch bereits schon aus, um dem Hifiberry nach einem Neustart Töne zu entlocken.

Konfiguration Pulseaudio

Als erstes müssen ein paar Pakete installiert werden:

[root@alarmpi ~]# pacman -S pulseaudio pulseaudio-zeroconf pulseaudio-bluetooth

Das Zeroconf-Paket dient dazu, damit Pulseaudio per Avahi im Netzwerk seine Dienste anbieten, das Bluetooth-Paket sorgt dafür, dass Pulseaudio den Audioeingang per Bluetooth via BlueZ erstellen kann.

Entgegen aller Ratschläge im Web wird Pulseaudio als Systemdienst betrieben. Üblicherweise wird der Pulseaudio-Dämon als Benutzer-Dämon betrieben, aber der Audio-Pi soll ja ohne Benutzer-Anmeldung ganz stupide Audio entgegennehmen und auf dem Audioausgang des Hifiberry ausgeben. Auf einem regulären Desktop oder Laptop sollte das tatsächlich nicht so gemacht werden.

Damit Pulseaudio als Systemdienst starten kann, braucht systemd eine Datei namens bspw. /etc/systemd/system/pulseaudio.service:

[Unit]
Description=PulseAudio system server

[Service]
ExecStart=/usr/bin/pulseaudio --system --disallow-exit --log-target=journal
#ExecStart=/usr/bin/pulseaudio --system --disallow-exit --disallow-module-loading --log-target=journal
ExecReload=/bin/kill -HUP $MAINPID

[Install]
WantedBy=multi-user.target

Solange die Konfiguration nicht finalisiert ist, bleibt --disallow-module-loading auskommentiert. Wenn Pulseaudio als Systemdienst betrieben wird, braucht es einen Nutzer namens pulse und zwei Gruppen, pulse und pulse-access:

[root@alarmpi ~]# groupadd --system pulse
[root@alarmpi ~]# groupadd --system pulse-access
[root@alarmpi ~]# useradd --system -g pulse -G audio -d /var/run/pulse -m pulse
[root@alarmpi ~]# usermod -G pulse-access root
[root@alarmpi ~]# usermod -G pulse-access alarm

Ich habe keine Ahnung, ob die beiden letzten Befehle wirklich notwendig sind, schaden tun sie aber auch erstmal nicht. Als nächstes wird verhindert, dass Pulseaudio bei Anmeldung eines Nutzers normal startet:

[root@alarmpi ~]# echo "default-server = /var/run/pulse/native" >> /etc/pulse/client.conf
[root@alarmpi ~]# echo "autospawn = no" >> /etc/pulse/client.conf

Der Dienst kann jetzt enabled und gestartet werden:

[root@alarmpi ~]# systemctl daemon-reload
[root@alarmpi ~]# systemctl enable pulseaudio.service
[root@alarmpi ~]# systemctl start pulseaudio.service

Bevor alles funktioniert, wird Pulseaudio sicher noch ein paar Mal neu gestartet. Für die Konfiguration von Pulseaudio werden die Dateien system.pa und daemon.conf in /etc/pulse benutzt.

/etc/pulse/system.pa:

#!/usr/bin/pulseaudio -nF
#
# This file is part of PulseAudio.
#
# PulseAudio is free software; you can redistribute it and/or modify it
# under the terms of the GNU Lesser General Public License as published by
# the Free Software Foundation; either version 2 of the License, or
# (at your option) any later version.
#
# PulseAudio is distributed in the hope that it will be useful, but
# WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
# General Public License for more details.
#
# You should have received a copy of the GNU Lesser General Public License
# along with PulseAudio; if not, see <http://www.gnu.org/licenses/>.

# This startup script is used only if PulseAudio is started in system
# mode.

### Automatically load driver modules depending on the hardware available
.ifexists module-udev-detect.so
load-module module-udev-detect tsched=0
.else
### Use the static hardware detection module (for systems that lack udev/hal support)
load-module module-detect
.endif

### Load several protocols
.ifexists module-esound-protocol-unix.so
load-module module-esound-protocol-unix
.endif
load-module module-native-protocol-unix

### Automatically restore the volume of streams and devices
load-module module-stream-restore
load-module module-device-restore

### Automatically restore the default sink/source when changed by the user
### during runtime
### NOTE: This should be loaded as early as possible so that subsequent modules
### that look up the default sink/source get the right value
load-module module-default-device-restore

### Automatically move streams to the default sink if the sink they are
### connected to dies, similar for sources
load-module module-rescue-streams

### Make sure we always have a sink around, even if it is a null sink.
load-module module-always-sink

### Automatically suspend sinks/sources that become idle for too long
load-module module-suspend-on-idle

### Enable positioned event sounds
load-module module-position-event-sounds

### Customizations
#load-module module-native-protocol-unix auth-anonymous=1
load-module module-zeroconf-publish
load-module module-native-protocol-tcp auth-ip-acl=127.0.0.1;192.168.1.0/24 auth-anonymous=1

set-default-sink 0
#set-card-profile 0 stereo-fallback

### Automatically load driver modules for Bluetooth hardware
.ifexists module-bluetooth-policy.so
load-module module-bluetooth-policy
.endif

.ifexists module-bluetooth-discover.so
load-module module-bluetooth-discover
.endif

/etc/pulse/daemon.conf:

# This file is part of PulseAudio.
#
# PulseAudio is free software; you can redistribute it and/or modify
# it under the terms of the GNU Lesser General Public License as published by
# the Free Software Foundation; either version 2 of the License, or
# (at your option) any later version.
#
# PulseAudio is distributed in the hope that it will be useful, but
# WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
# General Public License for more details.
#
# You should have received a copy of the GNU Lesser General Public License
# along with PulseAudio; if not, see <http://www.gnu.org/licenses/>.

## Configuration file for the PulseAudio daemon. See pulse-daemon.conf(5) for
## more information. Default values are commented out.  Use either ; or # for
## commenting.

; daemonize = no
; fail = yes
; allow-module-loading = yes
; allow-exit = yes
; use-pid-file = yes
; system-instance = no
; local-server-type = user
; enable-shm = yes
; enable-memfd = yes
; shm-size-bytes = 0 # setting this 0 will use the system-default, usually 64 MiB
; lock-memory = no
; cpu-limit = no

; high-priority = yes
; nice-level = -11

; realtime-scheduling = yes
; realtime-priority = 5

; exit-idle-time = 20
; scache-idle-time = 20

; dl-search-path = (depends on architecture)

; load-default-script-file = yes
; default-script-file = /etc/pulse/default.pa

; log-target = auto
; log-level = notice
; log-meta = no
; log-time = no
; log-backtrace = 0

; resample-method = speex-float-1
resample-method = trivial
; avoid-resampling = false
; enable-remixing = yes
; remixing-use-all-sink-channels = yes
; enable-lfe-remixing = no
; lfe-crossover-freq = 0

flat-volumes = no
; flat-volumes = yes

; rlimit-fsize = -1
; rlimit-data = -1
; rlimit-stack = -1
; rlimit-core = -1
; rlimit-as = -1
; rlimit-rss = -1
; rlimit-nproc = -1
; rlimit-nofile = 256
; rlimit-memlock = -1
; rlimit-locks = -1
; rlimit-sigpending = -1
; rlimit-msgqueue = -1
; rlimit-nice = 31
; rlimit-rtprio = 9
; rlimit-rttime = 200000

; default-sample-format = s16le
; default-sample-rate = 44100
; alternate-sample-rate = 48000
; default-sample-channels = 2
; default-channel-map = front-left,front-right

; default-fragments = 4
; default-fragment-size-msec = 25

; enable-deferred-volume = yes
; deferred-volume-safety-margin-usec = 8000
; deferred-volume-extra-delay-usec = 0<

Nach einem Neustart von Pulseaudio

[root@alarmpi ~]# systemctl restart pulseaudio.service

finden andere Pulseaudio-Dämonen im Netz dann auch schon den Pi. Vielleicht müssen noch entsprechende Zeroconf-Pulseaudio-Pakete auf den jeweiligen Rechnern installiert werden, sollte der Pi nicht in der Liste der Audioausgabegeräte auftauchen.

Audio-Pi als Ausgabegerät in den Pulseaudioeinstellungen. Ich habe keine Ahnung, warum er zwei Mal auftaucht

Audio-Pi als Ausgabegerät in den Pulseaudioeinstellungen. Ich habe keine Ahnung, warum er zwei Mal auftaucht

Konfiguration Bluetooth

Bluetooth unter Linux kann einen in den Wahnsinn treiben. Als Lektüre dazu empfehle ich Bluez must be one of the best kept secrets in Linux und Bluez – greatest Linux mystery. Ohne ordentliche Dokumentation sehe ich leider auch kaum eine Möglichkeit, die letzten Bluetooth-Baustellen zu beseitigen.

Natürlich werden erstmal ein paar Pakete benötigt:

[root@alarmpi ~]# pacman -S bluez bluez-utils

Dann wird die /etc/bluetooth/main.conf bearbeitet:

[General]

# Default adapter name
# Defaults to 'BlueZ X.YZ'
Name = wohn

# Default device class. Only the major and minor device class bits are
# considered. Defaults to '0x000000'.
#Class = 0x000100
Class = 0x200420

# How long to stay in discoverable mode before going back to non-discoverable
# The value is in seconds. Default is 180, i.e. 3 minutes.
# 0 = disable timer, i.e. stay discoverable forever
DiscoverableTimeout = 0

# How long to stay in pairable mode before going back to non-discoverable
# The value is in seconds. Default is 0.
# 0 = disable timer, i.e. stay pairable forever
PairableTimeout = 0

# Automatic connection for bonded devices driven by platform/user events.
# If a platform plugin uses this mechanism, automatic connections will be
# enabled during the interval defined below. Initially, this feature
# intends to be used to establish connections to ATT channels. Default is 60.
#AutoConnectTimeout = 60

# Use vendor id source (assigner), vendor, product and version information for
# DID profile support. The values are separated by ":" and assigner, VID, PID
# and version.
# Possible vendor id source values: bluetooth, usb (defaults to usb)
#DeviceID = bluetooth:1234:5678:abcd

# Do reverse service discovery for previously unknown devices that connect to
# us. This option is really only needed for qualification since the BITE tester
# doesn't like us doing reverse SDP for some test cases (though there could in
# theory be other useful purposes for this too). Defaults to 'true'.
#ReverseServiceDiscovery = true

# Enable name resolving after inquiry. Set it to 'false' if you don't need
# remote devices name and want shorter discovery cycle. Defaults to 'true'.
#NameResolving = true

# Enable runtime persistency of debug link keys. Default is false which
# makes debug link keys valid only for the duration of the connection
# that they were created for.
#DebugKeys = false

# Restricts all controllers to the specified transport. Default value
# is "dual", i.e. both BR/EDR and LE enabled (when supported by the HW).
# Possible values: "dual", "bredr", "le"
#ControllerMode = dual

# Enables Multi Profile Specification support. This allows to specify if
# system supports only Multiple Profiles Single Device (MPSD) configuration
# or both Multiple Profiles Single Device (MPSD) and Multiple Profiles Multiple
# Devices (MPMD) configurations.
# Possible values: "off", "single", "multiple"
#MultiProfile = off

# Permanently enables the Fast Connectable setting for adapters that
# support it. When enabled other devices can connect faster to us,
# however the tradeoff is increased power consumptions. This feature
# will fully work only on kernel version 4.1 and newer. Defaults to
# 'false'.
#FastConnectable = false

# Default privacy setting.
# Enables use of private address.
# Possible values: "off", "device", "network"
# "network" option not supported currently
# Defaults to "off"
# Privacy = off

Enable=Source,Sink,Media,Socket

[GATT]
# GATT attribute cache.
# Possible values:
# always: Always cache attributes even for devices not paired, this is
# recommended as it is best for interoperability, with more consistent
# reconnection times and enables proper tracking of notifications for all
# devices.
# yes: Only cache attributes of paired devices.
# no: Never cache attributes
# Default: always
#Cache = always

[Policy]
#
# The ReconnectUUIDs defines the set of remote services that should try
# to be reconnected to in case of a link loss (link supervision
# timeout). The policy plugin should contain a sane set of values by
# default, but this list can be overridden here. By setting the list to
# empty the reconnection feature gets disabled.
#ReconnectUUIDs=00001112-0000-1000-8000-00805f9b34fb,0000111f-0000-1000-8000-00805f9b34fb,0000110a-0000-1000-8000-00805f9b34fb

# ReconnectAttempts define the number of attempts to reconnect after a link
# lost. Setting the value to 0 disables reconnecting feature.
#ReconnectAttempts=7

# ReconnectIntervals define the set of intervals in seconds to use in between
# attempts.
# If the number of attempts defined in ReconnectAttempts is bigger than the
# set of intervals the last interval is repeated until the last attempt.
#ReconnectIntervals=1,2,4,8,16,32,64

# AutoEnable defines option to enable all controllers when they are found.
# This includes adapters present on start as well as adapters that are plugged
# in later on. Defaults to 'false'.
AutoEnable=true

Die wichtigen Dinge passieren in "Enable=" und ich habe keine Ahnung, warum "Source, Sink, Media" nicht ausgereicht hat. "Name=" ist frei wählbar – ich würde auf Sonderzeichen verzichten. "Class=0x200420" sagt an, dass der Bluetooth-Adapter sich als Car Audio System ausgeben soll (Quelle). Vermutlich gehen auch andere – hilfreich dabei dürfte der Bluetooth Class of Device (CoD) Generator sein. Auf der linken Seite einfach Audio oben und Audio unten auswählen, dann erscheint rechts eine Liste möglicher Minor Device Classes. Ich habe es erst mit 0x200428 probiert, aber ohne Erfolg, was aber wohl eher an den fehlenden DBus-Konfigurationen lag.

Konfiguration DBus

Unter Linux kommunizieren Prozesse untereinander auf verschiedenen Wegen, und DBus ist einer davon. Das ganze Setup erfordert, dass verschiedene Dienste unter verschiedenen Benutzerkonten miteinander sprechen dürfen.

/etc/dbus-1/system.d/pulseaudio.conf:

<?xml version="1.0"?> <!--*-nxml-*-->
<!DOCTYPE busconfig PUBLIC "-//freedesktop//DTD D-BUS Bus Configuration 1.0//EN"
 "http://www.freedesktop.org/standards/dbus/1.0/busconfig.dtd">
<busconfig>
    <policy group="pulse">
        <allow own="org.pulseaudio.Server"/>
    </policy>

    <policy context="default">
        <allow send_destination="org.pulseaudio.Server"/>
        <allow receive_sender="org.pulseaudio.Server"/>
    </policy>
</busconfig>

/etc/dbus-1/system.d/pulseaudio-bluetooth.conf:

<busconfig>
  <policy user="pulse">
    <allow send_destination="org.bluez"/>
  </policy>
</busconfig>

/etc/dbus-1/system.d/bluetooth.conf:

<!-- This configuration file specifies the required security policies
     for Bluetooth core daemon to work. -->

<!DOCTYPE busconfig PUBLIC "-//freedesktop//DTD D-BUS Bus Configuration 1.0//EN"
 "http://www.freedesktop.org/standards/dbus/1.0/busconfig.dtd">
<busconfig>

  <!-- ../system.conf have denied everything, so we just punch some holes -->

  <policy user="root">
    <allow own="org.bluez"/>
    <allow send_destination="org.bluez"/>
    <allow send_interface="org.bluez.Agent1"/>
    <allow send_interface="org.bluez.MediaEndpoint1"/>
    <allow send_interface="org.bluez.MediaPlayer1"/>
    <allow send_interface="org.bluez.ThermometerWatcher1"/>
    <allow send_interface="org.bluez.AlertAgent1"/>
    <allow send_interface="org.bluez.Profile1"/>
    <allow send_interface="org.bluez.HeartRateWatcher1"/>
    <allow send_interface="org.bluez.CyclingSpeedWatcher1"/>
    <allow send_interface="org.bluez.GattCharacteristic1"/>
    <allow send_interface="org.bluez.GattDescriptor1"/>
    <allow send_interface="org.freedesktop.DBus.ObjectManager"/>
    <allow send_interface="org.freedesktop.DBus.Properties"/>
    <allow send_destination="org.bluez.Manager"/>
    <allow receive_sender="org.bluez.Manager"/>
    <allow send_destination="org.bluez.Adapter"/>
    <allow receive_sender="org.bluez.Adapter"/>
    <allow send_destination="org.bluez.Device"/>
    <allow receive_sender="org.bluez.Device"/>
    <allow send_destination="org.bluez.Service"/>
    <allow receive_sender="org.bluez.Service"/>
    <allow send_destination="org.bluez.Database"/>
    <allow receive_sender="org.bluez.Database"/>
    <allow send_destination="org.bluez.Security"/>
    <allow receive_sender="org.bluez.Security"/>
  </policy>

  <policy at_console="true">
    <allow send_destination="org.bluez"/>
  </policy>

  <!-- allow users of lp group (printing subsystem) to
       communicate with bluetoothd -->
  <policy group="lp">
    <allow send_destination="org.bluez"/>
  </policy>

  <policy context="default">
    <deny send_destination="org.bluez"/>
  </policy>

</busconfig>

Das ist aus verschiedenen Quellen zusammengetragen. Falls jemand versteht, was die einzelnen Zeilen tun: Ich freue mich über Kommentare. Ich vermute, die Zeilen mit Bluetooth-Druckern sind überflüssig, aber es funktioniert so erstmal. In der verwendeten Anleitung fand ich den Hinweis, dass

[root@alarmpi ~]# systemctl restart dbus &amp;&amp; systemctl restart polkit &amp;&amp; systemctl restart systemd-logind

bereits reichen sollte, ein Neustart aber die sichere Variante sei. Wie jetzt über Bluetooth Audio empfangen kann, erkläre ich im Abschnitt "Baustellen".

Baustellen

Bluetooth-Kopplung

Der Audio-Pi sollte jetzt unter dem gewählten Namen, bei mir "wohn", per Bluetooth gefunden werden können. Mein Android-Tablet konnte jedenfalls erfolgreich ein Pairing durchführen. Aber: Eine Verbindung ist damit noch nicht möglich. Ich muss bislang auf der Kommandozeile bluetoothctl aufrufen und in der interaktiven Shell dann explizit trust <device bt mac> eingeben. Erst danach verbindet sich mein Tablet mit dem Pi und kann darüber dann auch Audio ausgeben. Angeblich solle dieser Schritt ausbleiben können, wenn eine PIN gesetzt würde. Ich habe aber nicht herausfinden können, wie ich meinen Pi mit einer PIN sichere. Ich würde ja so eine Alibi-PIN wie 0000 oder 1234 setzen – auch das fände ich dann noch hinreichend komfortabel. Idealerweise möchte ich aber komplett auf eine PIN verzichten – einfach paaren, verbinden, Audio abspielen. Aber die Dokumentation zu BlueZ ist verbesserungswürdig. Stark verbesserungswürdig.

DLNA

DLNA habe ich hier noch nicht konfiguriert. Ich hatte bei meiner 2015er-Recherche aber schon ein paar verständliche Anleitungen gefunden – es sollte also gehen. Wenn ich dann noch zusätzlich Video über den HDMI-Anschluss ausgeben könnte, wäre das ein netter Zuspieler für Fernseher.

MPD

Das ist neu in der Liste meiner Anforderungen. Bei meiner aktuellen Recherche stieß ich vermehrt auf Audioausgabe via MPD. Beim kurzen Überfliegen der Anleitungen sah das nicht so schwer aus. MPD-Clients gibt es auch für Smartphones, und was meine Auswahl an Software vergrößert, mit der ich Audio wiedergeben kann, ist mir immer willkommen. Ich finde ja, Bluetooth-Audio ist für Zwecke der Audio-Wiedergabe im Netz eher eine Krücke, wenn nichts anderes vorhanden ist, und nicht meine Wahl-Lösung.

Multiroom-Audiowiedergabe

Wenn ich bedenke, dass das mein ursprüngliches Anliegen war, dann habe ich bislang aber mächtig versagt. Mit Pulseaudio ist das aber wohl sehr einfach umzusetzen. Mir mangelt es im Moment natürlich ganz klar an weiteren entsprechende Audio-Pis, aber ich werde einfach demnächst mal meiner eigenen Pi-Zero-Kaufempfehlung folgen und mir noch zwei weitere Audio-Pis basteln. So finde ich auch den Hifiberry Amp+ sehr spannend, da ich darüber recht einfach einen regulären Lautsprecher netzwerkfähig bekommen könnte. Zu schade, dass es gerade den nicht im Zero-Format gibt, aber die zusätzlichen Verstärkerbausteine dürften einfach zu viel sein dafür, von den Anschlüssen ganz zu schweigen.

WLAN-Einbindung

Momentan macht der Audio-Pi nur LAN, obwohl der Wifi-Stick dranhängt. Ich muss also noch die WLAN-Konfiguration machen. Toll wäre natürlich, würde er ein eigenes Netz aufspannen, wenn kein bekanntes in der Nähe ist, um dann per Webinterface sein WLAN konfigurieren zu lassen.


Sobald ich Inhalt für Teil 2 habe, werde ich den hier auch verlinken. Im Moment reicht mir das von der Länge her. Wenn ich mir meinen zweiten Audio-Pi bastele, werde ich der Anleitung hier folgen und schauen, ob ich grobe Fehler gemacht habe, die ich dann natürlich korrigieren werde.

If you are interested in an english version of this post just ask in the comments.

Erster Blogeintrag

Lange, lange habe ich überlegt, dass ich doch mal bloggen sollte.

Als ich Anno 2003 oder so erstmalig von Blogs hörte, habe ich mich gefragt, was denn bitteschön so toll daran sein soll, jeden erdenklichen Erguss ins WWW zu stellen und was daran besser sein soll als eine normale, handgepflegte Homepage.

Aber man wird ja auch älter und weiser (sage ich mir jedenfalls), und so hat sich auch meine Position zu Blogs im Laufe der Jahre gewandelt. Sicher auch deshalb, weil ich viele positive Beispiele neben den ganzen Blogleichen und Selbstbeweihräucherungsblogs finden konnte. Ganz besonders aber dank Facebook.

Facebook?

Ja, Facebook. Irgendwann fiel mir auf, dass ich meine Beiträge dazu nutzte – zu bloggen.

Nicht alle, keineswegs, sondern halt nur ein kleiner Teil. Ich werde sicher nicht zu denen gehören, die einen vollen Blogeintrag pro Tag veröffentlichen werden. Aber alle paar Wochen überkommt mich dann doch irgendein Gedanke, der eine kurze Schreibwut in mir auslöst und einen mehr oder minder interessanten Text hervorbringt. Oftmals fand ich das dann im nachhinein schade, dass der Beitrag bei Facebook untergeht und dass er in einem Blog besser aufgehoben wäre.

Und da ist es! Unser Blog. Zumindest der erste Versuch.

Ich bin immer noch ein Fan handgepflegter Homepages. Aber ich sehe auch ein, dass Handpflegen echt aufwendig ist, CMS muss also sein. Und darüberhinaus sind viele Beiträge nur im zeitlichen Kontext sinnvoll einzuordnen; kaum eine*r will heutzutage noch ein Tutorial zur Einrichtung einer Grafikkarte von 2001 lesen wollen. Natürlich könnte ich solche Beiträge händisch jäten, aber ich kann sie auch einfach online und in der Versenkung des Archivs verschwinden lassen. Ein Blog hindert mich ja nicht daran, es als Homepage zu betreiben – viele andere machen es ja auch so.

Und so stürze ich uns als Familie also ins Abenteuer Blogbetrieb 😀.