ubuntuusers.de

29. August 2017

Wenn man aktiv im Internet ist und sich zudem auch noch mit Linux beschäftigt kommt man um die englische Sprache eigentlich nicht herum. Auch wenn mein Englisch ziemlich gut ist, hakt es ab und zu an manchen Stellen. Besonders wenn es beispielsweise um gewisse Formulierungen oder speziellere Wörter geht.

Eben habe ich bei golem.de einen Bericht über DeepL gelesen. Hierbei handelt es sich um einen neuen Übersetzungsdienst welcher aktuell nur per Browser unter https://www.deepl.com/translator erreichbar ist. Apps sollen bis Ende des Jahres erscheinen. An sich ist das jetzt nicht unbedingt etwas weltbewegends. Bisher nutze ich beim Problemfällen das Angebot von Google in Kombination mit dict.cc.

Nun kommt aber das Aber. Google übersetzt häufig zwar richtig aber es fühlt sich oft “falsch” an. Irgendwie hölzern. Und genau an der Stelle hat mich DeepL erstaunt. Die Übersetzungen (Deutsch -> Englisch, Englisch -> Deutsch) waren deutlich flüssiger zu lesen. Irgendwie menschlicher. Und genau das will der Betreiber auch erreichen. Übersetzungen bei denen man es so wenig wie möglich merkt, dass diese durch eine Maschine erstellt wurden. Zum Einsatz kommt hier ein neuronales Netzwerk welches auf einem Supercomputer mit 5,1 Petaflops läuft.

Nach einigen Minuten des Testens bin ich von der Leistung sehr angetan. Allerdings fürchte ich, dass genau das ein Problem sein wird. Bin mal gespannt, wann zum Beispiel Google seine Portokasse aufmacht und DeepL schluckt.

Kommen wir abschließend noch zum leidigen Thema “was hat das jetzt mit dem OSBN zu tun?”. Im Grunde nichts. Wobei auf dem Supercomputer bestimmt Linux oder etwas ähnliches läuft. Allerdings kenne ich einige Nutzer die zum Beispiel gerne Bugmeldungen bei OSS-Projekten erstellen würden, sich aufgrund der Sprachbarriere aber nicht so recht trauen. Bzw. sich zwar trauen aber diese im so einem bescheidenen Englisch abliefern, dass die Entwickler oft nur Bahnhof verstehen. Für solche Fälle ist der Dienst 1A, da hier eben flüssige Übersetzungen herauskommen. Daher denke ich, dass man hier mal wieder eine Ausnahme machen kann.

28. August 2017

Im Chat zum Kuketzblog wurde ich auf Searx aufmerksam gemacht. Searx ist eine Metasuchmaschine, die sich selbst wie folgt beschreibt:

Searx is a metasearch engine, aggregating the results of other search engines while not storing information about its users.

Ich habe zwar bei blogbasis.net und techregion.de zwei Anleitungen für searx auf Uberspace.de gefunden, aber leider sind diese wohl veraltet und funktionierten bei mir nicht.

Ich habe searx bei mir im Verzeichnis ~/build installiert, da ich zuerst dachte searx müsste kompiliert werden. Ich habe es erst mal dort gelassen, aber vielleicht ziehe ich es mal nach ~ um, wichtig ist nur, dass es in keinem öffentlich zugänglichen Ordner, also nicht in ~/html oder /var/www/virtual/$USER/ liegt.

Zuerst habe ich die aktuelle Version von searx heruntergeladen und in das Verzeichnis gewechselt:

git clone https://github.com/asciimoo/searx.git && cd ~/build/searx

Anschließend habe ich die Datei manage.sh folgendermaßen bearbeitet:

update_packages() {
    pip3 install --upgrade pip --user
    pip3 install --upgrade setuptools --user
    pip3 install --upgrade -r "$BASE_DIR/requirements.txt" --user
}

Nun wird die Datei ausgeführt um alle für searx benötigten Abhängigkeiten zu installieren:

./manage.sh update_packages

Dann wird in der Datei searx/settings.yml ein eigener geheimer Key eingetragen:

sed -i -e "s/ultrasecretkey/`openssl rand -hex 16`/g" searx/settings.yml 

Für searx muss auch ein Port auf Uberspace geöffnet gewählt werden. Achtet dabei darauf, dass dieser noch frei ist um Kollisionen zu vermeiden.

Dieser wird in die Datei searx/settings.yml eingetragen:

server:
    port : DER_PORT

Nun legen wir einen Starter mit den daemontools an:

$ cat <<__EOF__ > ~/etc/searx/run
#!/bin/sh
exec /usr/local/bin/python3 /home/$USER/build/searx/searx/webapp.py 2>&1
__EOF__

$ chmod +x ~/etc/searx/run
$ ln -s ~/etc/searx ~/service/searx

Searx kann nun mit svc -u ~/service/searx gestartet, mit svc -d ~/service/searx beendet oder mit svc -du ~/service/searx neu gestartet werden.

Ich wollte searx unter der Subdomain search.mdosch.de erreichbar machen, also habe ich den Ordner /var/www/virtual/$USER/search.mdosch.de erstellt und dort die Datei /var/www/virtual/$USER/search.mdosch.de/.htaccess mit diesem Inhalt angelegt:

RewriteBase /
RewriteEngine On
RewriteRule (.*) http://localhost:DER_PORT/$1 [P]

DER_PORT ist natürlich mit dem freigeschalteten gewählten Port zu ersetzen.

Jetzt ist searx fertig eingerichtet und kann per searx gestartet werden.

Ich habe searx auch über search.4bkxscubgtxwvhpe.onion als "hidden service" per Tor verfügbar gemacht.

Mein erster Eindruck ist soweit ganz gut, auch wenn die Qualität der Suchergebnisse nicht ganz mit meiner bisherigen Suchmaschine StartPage mithalten kann.

[Update 2017-08-30]

Ich wurde im Kommentar von Tom darauf hingewiesen, dass der Port nicht in der Firewall geöffnet werden muss.

[Update 2017-08-31]

Ich habe den daemontools-Starter wieder herausgenommen, da er nicht funktioniert. Das scheint mit Pythonscripten nicht ohne Weiteres zu gehen. Wenn ich eine Lösung gefunden habe werde ich den Beitrag wieder aktualisieren.

[Update 2017-09-03]

Der daemontools-Starter ist wieder eingefügt, da es nun doch funktioniert.

Seit 21. August 2017 steht die neuste Android-Version, Oreo mit der Versionsnummer 8.0 in den Startlöchern. Interessant für Entwickler ist parallel auch der Umstieg auf das API-Level 26 und die damit verbundenen Neuerungen. So sollen auf der einen Seite Bild-in-Bild-Darstellung für Apps und Font-Ressourcen eingeführt werden, auf der anderen Seite muss insbesondere bei den Benachrichtigungen Acht gegeben werden: die neuen Notification Channels bieten dem Nutzer die Möglichkeit, dass *alle* Benachrichtigungen gruppiert ankommen, so dass er channelweise diese abschalten kann.

Ein einfaches Beispiel: eine Wetterapp benachrichtigt den Nutzer bei drohendem Gewitter und bei einem neuen Wochenbericht. Der App-Entwickler sollte jetzt optimalerweise zwei getrennte Channels erstellen und das im NotificationBuilder entsprechend implementieren. Mehr dazu hier.

Allerdings soll es unabhängig von den API-Neuerungen hier auch um das Thema Migration gehen. Denn einfach auf targetSdkVersion 26 stellen, reicht diesmal nicht aus. Insbesondere Android Studio-Projekte, die auf App Flavors setzen, um verschiedene Versions-APKs aus dem gleichen Quellcode zu generieren, müssen aufpassen, denn ebenfalls da gibt es eine kleine, aber feine Änderung: jeder Flavour bekommt eine eigene „Dimension“, um auch hier Ordnung zu schaffen. Hat eine App bisher einen Flavor „Lite“ und „Pro“, so kann zu diesen Flavors jetzt z.B. die Dimension „Edition“ zugeordnet werden, damit alles wieder läuft.

flavorDimensions "edition"
productFlavors {
   pro {
       dimension "edition"
   }
   lite {
       dimension "edition"
       applicationIdSuffix ".lite"
       versionNameSuffix "-lite"
   }
}

Wer in seinen Gradle-Files irgendwas von Google drin hat, muss nun auch darauf achten, dass das neue Maven-Repository eingetragen wird.

allprojects {
    repositories {
        jcenter()
        maven {
            url "https://maven.google.com"
        }
    }
}

Und zu guter Letzt ein nerviger Bug aus den Android Studio 3 Development Releases: hier kommt Android Studio scheinbar nicht mit multinationalen Spracheinstellungen zurecht und hat Probleme mit internen Files und Werten wie 0.5.

Das lässt sich durch folgenden Workaround vorerst umgehen, aber ich bin sicher, dass das Problem bis zum fertigen Release noch gelöst wird.

android.enableAapt2=false

Quellen

  • Android Studio Logo: Google/Android.com http://developer.android.com/license.html (https://commons.wikimedia.org/wiki/File:Android_Studio_icon.svg)

Im Chat zum Kuketzblog wurde ich auf Searx aufmerksam gemacht. Searx ist eine Metasuchmaschine, die sich selbst wie folgt beschreibt:

Searx is a metasearch engine, aggregating the results of other search engines while not storing information about its users.

Ich habe zwar bei blogbasis.net und techregion.de zwei Anleitungen für searx auf Uberspace.de gefunden, aber leider sind diese wohl veraltet und funktionierten bei mir nicht.

Ich habe searx bei mir im Verzeichnis ~/build installiert, da ich zuerst dachte searx müsste kompiliert werden. Ich habe es erst mal dort gelassen, aber vielleicht ziehe ich es mal nach ~ um, wichtig ist nur, dass es in keinem öffentlich zugänglichen Ordner, also nicht in ~/html oder /var/www/virtual/$USER/ liegt.

Zuerst habe ich die aktuelle Version von searx heruntergeladen und in das Verzeichnis gewechselt:

git clone https://github.com/asciimoo/searx.git && cd ~/build/searx

Anschließend habe ich die Datei manage.sh folgendermaßen bearbeitet:

update_packages() {
    pip3 install --upgrade pip --user
    pip3 install --upgrade setuptools --user
    pip3 install --upgrade -r "$BASE_DIR/requirements.txt" --user
}

Nun wird die Datei ausgeführt um alle für searx benötigten Abhängigkeiten zu installieren:

./manage.sh update_packages

Dann wird in der Datei searx/settings.yml ein eigener geheimer Key eingetragen:

sed -i -e "s/ultrasecretkey/`openssl rand -hex 16`/g" searx/settings.yml 

Für searx muss auch ein Port auf Uberspace geöffnet gewählt werden. Achtet dabei darauf, dass dieser noch frei ist um Kollisionen zu vermeiden.

Dieser wird in die Datei searx/settings.yml eingetragen:

server:
    port : DER_PORT

Nun legen wir einen Starter mit den daemontools an:

$ cat <<__EOF__ > ~/etc/searx/run
#!/bin/sh
exec /usr/local/bin/python3 /home/$USER/build/searx/searx/webapp.py 2>&1
__EOF__

$ chmod +x ~/etc/searx/run
$ ln -s ~/etc/searx ~/service/searx

Searx kann nun mit svc -u ~/service/searx gestartet, mit svc -d ~/service/searx beendet oder mit svc -du ~/service/searx neu gestartet werden.

Ich wollte searx unter der Subdomain search.mdosch.de erreichbar machen, also habe ich den Ordner /var/www/virtual/$USER/search.mdosch.de erstellt und dort die Datei /var/www/virtual/$USER/search.mdosch.de/.htaccess mit diesem Inhalt angelegt:

RewriteBase /
RewriteEngine On
RewriteRule (.*) http://localhost:DER_PORT/$1 [P]

DER_PORT ist natürlich mit dem freigeschalteten gewählten Port zu ersetzen.

Jetzt ist searx fertig eingerichtet und kann per searx gestartet werden.

Ich habe searx auch über search.4bkxscubgtxwvhpe.onion als “hidden service” per Tor verfügbar gemacht.

Mein erster Eindruck ist soweit ganz gut, auch wenn die Qualität der Suchergebnisse nicht ganz mit meiner bisherigen Suchmaschine StartPage mithalten kann.

[Update 2017-08-30]

Ich wurde im Kommentar von Tom darauf hingewiesen, dass der Port nicht in der Firewall geöffnet werden muss.

[Update 2017-08-31]

Ich habe den daemontools-Starter wieder herausgenommen, da er nicht funktioniert. Das scheint mit Pythonscripten nicht ohne Weiteres zu gehen. Wenn ich eine Lösung gefunden habe werde ich den Beitrag wieder aktualisieren.

[Update 2017-09-03]

Der daemontools-Starter ist wieder eingefügt, da es nun doch funktioniert.

Im Chat zum Kuketzblog wurde ich auf Searx aufmerksam gemacht. Searx ist eine Metasuchmaschine, die sich selbst wie folgt beschreibt:

Searx is a metasearch engine, aggregating the results of other search engines while not storing information about its users.

Ich habe zwar bei blogbasis.net und techregion.de zwei Anleitungen für searx auf Uberspace.de gefunden, aber leider sind diese wohl veraltet und funktionierten bei mir nicht.

Ich habe searx bei mir im Verzeichnis ~/build installiert, da ich zuerst dachte searx müsste kompiliert werden. Ich habe es erst mal dort gelassen, aber vielleicht ziehe ich es mal nach ~ um, wichtig ist nur, dass es in keinem öffentlich zugänglichen Ordner, also nicht in ~/html oder /var/www/virtual/$USER/ liegt.

Zuerst habe ich die aktuelle Version von searx heruntergeladen und in das Verzeichnis gewechselt:

git clone https://github.com/asciimoo/searx.git && cd ~/build/searx

Anschließend habe ich die Datei manage.sh folgendermaßen bearbeitet:

update_packages() {
    pip3 install --upgrade pip --user
    pip3 install --upgrade setuptools --user
    pip3 install --upgrade -r "$BASE_DIR/requirements.txt" --user
}

Nun wird die Datei ausgeführt um alle für searx benötigten Abhängigkeiten zu installieren:

./manage.sh update_packages

Dann wird in der Datei searx/settings.yml ein eigener geheimer Key eingetragen:

sed -i -e "s/ultrasecretkey/`openssl rand -hex 16`/g" searx/settings.yml 

Für searx muss auch ein Port auf Uberspace geöffnet gewählt werden. Achtet dabei darauf, dass dieser noch frei ist um Kollisionen zu vermeiden.

Dieser wird in die Datei searx/settings.yml eingetragen:

server:
    port : DER_PORT

Nun legen wir einen Starter mit den daemontools an:

$ cat <<__EOF__ > ~/etc/searx/run
#!/bin/sh
exec /usr/local/bin/python3 /home/$USER/build/searx/searx/webapp.py 2>&1
__EOF__

$ chmod +x ~/etc/searx/run
$ ln -s ~/etc/searx ~/service/searx

Searx kann nun mit svc -u ~/service/searx gestartet, mit svc -d ~/service/searx beendet oder mit svc -du ~/service/searx neu gestartet werden.

Ich wollte searx unter der Subdomain search.mdosch.de erreichbar machen, also habe ich den Ordner /var/www/virtual/$USER/search.mdosch.de erstellt und dort die Datei /var/www/virtual/$USER/search.mdosch.de/.htaccess mit diesem Inhalt angelegt:

RewriteBase /
RewriteEngine On
RewriteRule (.*) http://localhost:DER_PORT/$1 [P]

DER_PORT ist natürlich mit dem freigeschalteten gewählten Port zu ersetzen.

Jetzt ist searx fertig eingerichtet und kann per searx gestartet werden.

Ich habe searx auch über search.4bkxscubgtxwvhpe.onion als “hidden service” per Tor verfügbar gemacht.

Mein erster Eindruck ist soweit ganz gut, auch wenn die Qualität der Suchergebnisse nicht ganz mit meiner bisherigen Suchmaschine StartPage mithalten kann.

[Update 2017-08-30]

Ich wurde im Kommentar von Tom darauf hingewiesen, dass der Port nicht in der Firewall geöffnet werden muss.

[Update 2017-08-31]

Ich habe den daemontools-Starter wieder herausgenommen, da er nicht funktioniert. Das scheint mit Pythonscripten nicht ohne Weiteres zu gehen. Wenn ich eine Lösung gefunden habe werde ich den Beitrag wieder aktualisieren.

[Update 2017-09-03]

Der daemontools-Starter ist wieder eingefügt, da es nun doch funktioniert.

27. August 2017

Nachdem der originale Browser Opera eingestellt wurde, war ich auf der Suche nach einer Alternative. Ein Kanditat war QupZilla. Dieser wurde nun zu Falkon umbenannt.

Nachdem QupZilla nun ein offizielles KDE-Projekt geworden ist, war es Zeit für einen neuen Namen. Der Entwickler David Rosca, der laut eigener Aussage kein glückliches Händchen bei der Namengeben gezeigt hat, hat daher die Gemeinschaft um QupZilla aufgerufen Vorschläge zu machen. Gewonnen hat der Name “Falkon”.

Eventuell beerbt Falkon nun auch Konqueror und wird offizieller Browser unter Plasma.

26. August 2017

Der OSBN-Kollege tux hat mir hier vorgeschlagen auch mal seinen statischen Blogcompiler Blogcpp zu testen.

Mittlerweile habe ich es, mit viel Hilfe von tux, geschafft blogcpp unter Debian Stretch und Buster zu kompilieren. Dazu musste ich die Pakete g++, cmake, libicu-dev und libcurl4-gnutls-dev installieren.

Blogcpp funktioniert gut und ich habe damit auch schon ein paar temporäre Testblogeinträge geschrieben. Nun kommt aber schwierige Teil zu versuchen die bisherigen Beiträge und mein Theme von acrylamid zu blogcpp zu portieren.

Ich habe auch mal die aktuelle Version BlogC++ 5 für Debian hochgeladen. Im Archiv sind ein binary für Stretch und eines für Buster enthalten. Vermutlich wird eines von diesen auch auf einem aktuellen Ubuntu funktionieren, aber ich habe das nicht getestet und würde mich über Feedback freuen.

Mozilla hat ein weiteres Update für Firefox 55 veröffentlicht. Firefox 55.0.3 behebt mehrere Probleme der Versionsreihe 55.

Download Mozilla Firefox 55.0.3 für Microsoft Windows, Apple macOS und Linux

Mit Firefox 55.0.3 behebt Mozilla zwei Probleme von Firefox 55. Zum einen wurde für Nutzer von Windows ein Fehler mit Sonderzeichen im Benutzernamen des Windows-Profils behoben, welches zu deaktivierten Firefox-Erweiterungen führen konnte. Zum anderen wurde ein Problem beim Bilder-Upload auf diversen Webseiten, unter anderen YouTube, behoben.

Mit dem Update auf Firefox 55.0.3 wurden auch die Updates für Nutzer von Firefox 54 und niedriger wieder aktiviert.

Der Beitrag Mozilla veröffentlicht Firefox 55.0.3 erschien zuerst auf soeren-hentzschel.at.

Der OSBN-Kollege tux hat mir hier vorgeschlagen auch mal seinen statischen Blogcompiler Blogcpp zu testen.

Mittlerweile habe ich es, mit viel Hilfe von tux, geschafft blogcpp unter Debian Stretch und Buster zu kompilieren. Dazu musste ich die Pakete g++, cmake, libicu-dev und libcurl4-gnutls-dev installieren.

Blogcpp funktioniert gut und ich habe damit auch schon ein paar temporäre Testblogeinträge geschrieben. Nun kommt aber schwierige Teil zu versuchen die bisherigen Beiträge und mein Theme von acrylamid zu blogcpp zu portieren.

Ich habe auch mal die aktuelle Version BlogC++ 5 für Debian hochgeladen. Im Archiv sind ein binary für Stretch und eines für Buster enthalten. Vermutlich wird eines von diesen auch auf einem aktuellen Ubuntu funktionieren, aber ich habe das nicht getestet und würde mich über Feedback freuen.

Der OSBN-Kollege tux hat mir hier vorgeschlagen auch mal seinen statischen Blogcompiler Blogcpp zu testen.

Mittlerweile habe ich es, mit viel Hilfe von tux, geschafft blogcpp unter Debian Stretch und Buster zu kompilieren. Dazu musste ich die Pakete g++, cmake, libicu-dev und libcurl4-gnutls-dev installieren.

Blogcpp funktioniert gut und ich habe damit auch schon ein paar temporäre Testblogeinträge geschrieben. Nun kommt aber schwierige Teil zu versuchen die bisherigen Beiträge und mein Theme von acrylamid zu blogcpp zu portieren.

Ich habe auch mal die aktuelle Version BlogC++ 5 für Debian hochgeladen. Im Archiv sind ein binary für Stretch und eines für Buster enthalten. Vermutlich wird eines von diesen auch auf einem aktuellen Ubuntu funktionieren, aber ich habe das nicht getestet und würde mich über Feedback freuen.

22. August 2017

New Tab Override ist eine Erweiterung zum Ersetzen der Seite, welche beim Öffnen eines neuen Tabs in Firefox erscheint. Die beliebte Erweiterung mit mehr als 100.000 Nutzern ist seit diesem Monat als WebExtension verfügbar. New Tab Override 8.0 bringt weitere Funktionen.

Was ist New Tab Override?

Seit Firefox 41 ist es nicht länger möglich, die Seite anzupassen, welche beim Öffnen eines neuen Tabs erscheint, indem die Einstellung browser.newtab.url über about:config verändert wird. Da diese Einstellung – wie leider viele gute Dinge – in der Vergangenheit von Hijackern missbraucht worden ist, hatte sich Mozilla dazu entschieden, diese Einstellung aus dem Firefox-Core zu entfernen. Glücklicherweise hat Mozilla nicht einfach nur die Einstellung entfernt, sondern gleichzeitig auch eine neue API bereitgestellt, welche es Entwicklern von Add-ons erlaubt, diese Funktionalität in Form eines Add-ons zurück in Firefox zu bringen.

New Tab Override war das erste Add-on, welches diese Möglichkeit zurückgebracht hat, und ist damit das Original. Mittlerweile hat New Tab Override mehr als 100.000 Nutzer und wurde im Dezember 2016 sogar auf dem offiziellen Mozilla-Blog vorgestellt.

Download New Tab Override (WebExtension) für Firefox

Die Neuerungen von New Tab Override 7.1

Am 11. August wurde mit New Tab Override 7.0 die große Neuentwicklung als sogenannte WebExtension veröffentlicht. Die Architektur der WebExtensions ist die einzige, welche von Firefox noch ab Version 57 unterstützt wird. Einen Überblick über alle Änderungen von Version 7.0 gibt es in einem ausführlichen Vorstellungs-Artikel.

Feedback-basiertes Update

Bereits einen Tag später stand mit New Tab Override 7.1 ein erstes Update bereit. Damit wurde die Unterstützung von localhost-URLs (http://localhost/irgendwas/) wieder zurück gebracht, was aufgrund einer zu strikten Validierung in Version 7.0 nicht unterstützt wurde. Da wegen der derzeitigen Restriktionen seitens Firefox sowieso nur URLs erlaubt sind, welche mit http:// oder https:// beginnen, nimmt New Tab Override seit Version 7.1 automatisch http:// als Protokoll an, wenn das Protokoll bei der Eingabe weggelassen wird. Außerdem wurden mit diesem Update die Übersetzungen auf den aktuellen Stand gebracht.

Die Neuerungen von New Tab Override 8.0

Nur weitere zehn Tage später steht New Tab Override 8.0 bereit und bringt zwei große, von Nutzern gewünschte, Neuerungen plus weitere Verbesserungen mit.

Unterstützung von lokalen Dateien

Aus Sicherheitsgründen ist es für WebExtensions nicht erlaubt, auf lokale Dateien via file://-Protokoll als Inhalt für den neuen Tab zuzugreifen. Während dieses Problem durch die Verwendung eines lokalen Webservers umgangen werden kann, welcher die Inhalte via HTTP erreichbar macht, ist dies für einige Nutzer nicht gut genug. Darum kommt New Tab Override 8.0 mit einer neuen Option, um den Inhalt einer lokalen Datei in den Speicher der Erweiterung zu laden und von dort aus als Inhalt für den neuen Tab zu verwenden. Achtung: werden in dieser Datei Bilder, CSS- oder JavaScript-Dateien referenziert, müssen diese via Web erreichbar sein, da der Zugriff auf lokale Dateien ja nicht möglich ist.

New Tab Override 8.0 (WebExtension)

Unterstützung für Hintergrundfarbe

Ein weiteres neues Feature ist die Auswahl einer beliebigen Farbe als Hintergrundfarbe. New Tab Override greift dabei auf den vom Betriebssystem bereitgestellten Farb-Picker zurück und erlaubt so die Auswahl einer Farbe, in welcher neue Tabs dann erstrahlen.

New Tab Override 8.0 (WebExtension)

New Tab Override 8.0 (WebExtension)

Fokus auf Suchfeld von about:home

Schon New Tab Override 7.0 hatte das bereits aus der Legacy-Version bekannte Feature, den Fokus bei neuen Tabs auf die Webseite statt auf die Adressleiste zu legen, was besonders praktisch bei Suchmaschinen wie Google ist, da so der Cusor automatisch im Suchfeld der Suchmaschine platziert wird. Ab New Tab Override 8.0 steht diese Option auch für die Standard-Startseite von Firefox, about:home, zur Verfügung.

New Tab Override 8.0 (WebExtension)

Sonstige Verbesserungen

Ein paar Texte wurden überarbeitet, um es noch klarer zu machen, dass der Zugriff auf lokale Dateien via file://-Protokoll nicht länger möglich ist. Neben der neuen Option für lokale Dateien wird außerdem die Verwendung eines lokalen Webservers, zum Beispiel über MAMP oder XAMPP, als Alternative vorgeschlagen.

New Tab Override 8.0 (WebExtension)

Der Teil des Codes, welcher die Sichtbarkeit der erweiterten Optionen steuert, wurde überarbeitet, um die Implementierung zusätzlicher Features zu vereinfachen. Auch die Übersetzungen wurden aktualisiert.

Der Beitrag Neue Features – New Tab Override 8.0 (WebExtension) veröffentlicht erschien zuerst auf soeren-hentzschel.at.

Letztes Wochenende fand die 12. FrOSCon in St. Augustin statt. Für mich war es die dritte FrOSCon in Folge. Ich selbst habe diesmal zwar nicht den Ubuntu Stand betreut, stattdessen habe ich einen „Git für Einsteiger Workshop“ durchgeführt, sowie den Vortrag „Nicht alltägliche Git-Funktionen“ gehalten.

Nicht alltägliche Git-Funktionen

Der Talk war schönerweise gut besucht und wurde auch, wie zahlreiche anderen Talks, aufgezeichnet. Die „Folien“ des Talks finden sich auf meinem Speakerdeck-Account.

Alle Aufzeichnungen der FrOSCon finden sich auf media.ccc.de. Meinen Vortrag findet man hier.

Thema des Talks ist die Übersicht von Git-Funktionen, die man explizit nicht jeden Tag braucht, aber immer mal wieder gebrauchen kann. Einige sind dabei alltäglicher als die anderen Befehle. Details lassen sich dazu in dem Talk ansehen, wie zuvor verlinkt.

Git-Workshop für Einsteiger

Während der Talk sich an fortgeschrittene Git-Nutzer richtete, war der Git-Workshop für „blutige“ Anfänger. Auch hier waren erfreulicherweise genau die passenden Leute da, die entweder noch nie ein Versionskontrollsystem verwendet haben, oder die von Subversion umsteigen bzw. umsteigen wollen.

Die „Folien“ sind hier ohne Erläuterungen, da ich diese mündlich erfolgten. Die Folien finden sich ebenfalls auf meinem Speakerdeck-Account.

Alternativ lohnt sich auch hier wieder mein Git Tutorial auf meinem Blog bzw. auch mein Buch. Das Buch basiert nämlich auf meine Git Tutorial Reihe und der Workshop basiert ebenfalls darauf.

Fazit

Unabhängig von meinem Vortrag und Workshop fand ich die FrOSCon wieder einmal sehr schön. Auch in diesem Jahr merkt man, wie sich die Organisation der Veranstaltung sich jedes Jahr Schritt für Schritt verbessert, auch wenn sie schon zum 12. Mal hintereinander stattfindet. In diesem Sinne: Vielen Dank an das Organisationsteam der FrOSCon für die tolle Konferenz! Nächstes Jahr bin ich dann wohl wieder dabei. :)

Letztes Wochenende fand die 12. FrOSCon in St. Augustin statt. Für mich war es die dritte FrOSCon in Folge. Ich selbst habe diesmal zwar nicht den Ubuntu Stand betreut, stattdessen habe ich einen „Git für Einsteiger Workshop“ durchgeführt, sowie den Vortrag „Nicht alltägliche Git-Funktionen“ gehalten.

Nicht alltägliche Git-Funktionen

Der Talk war schönerweise gut besucht und wurde auch, wie zahlreiche anderen Talks, aufgezeichnet. Die „Folien“ des Talks finden sich auf meinem Speakerdeck-Account.

Alle Aufzeichnungen der FrOSCon finden sich auf media.ccc.de. Meinen Vortrag findet man hier.

Thema des Talks ist die Übersicht von Git-Funktionen, die man explizit nicht jeden Tag braucht, aber immer mal wieder gebrauchen kann. Einige sind dabei alltäglicher als die anderen Befehle. Details lassen sich dazu in dem Talk ansehen, wie zuvor verlinkt.

Git-Workshop für Einsteiger

Während der Talk sich an fortgeschrittene Git-Nutzer richtete, war der Git-Workshop für „blutige“ Anfänger. Auch hier waren erfreulicherweise genau die passenden Leute da, die entweder noch nie ein Versionskontrollsystem verwendet haben, oder die von Subversion umsteigen bzw. umsteigen wollen.

Die „Folien“ sind hier ohne Erläuterungen, da ich diese mündlich erfolgten. Die Folien finden sich ebenfalls auf meinem Speakerdeck-Account.

Alternativ lohnt sich auch hier wieder mein Git Tutorial auf meinem Blog bzw. auch mein Buch. Das Buch basiert nämlich auf meine Git Tutorial Reihe und der Workshop basiert ebenfalls darauf.

Fazit

Unabhängig von meinem Vortrag und Workshop fand ich die FrOSCon wieder einmal sehr schön. Auch in diesem Jahr merkt man, wie sich die Organisation der Veranstaltung sich jedes Jahr Schritt für Schritt verbessert, auch wenn sie schon zum 12. Mal hintereinander stattfindet. In diesem Sinne: Vielen Dank an das Organisationsteam der FrOSCon für die tolle Konferenz! Nächstes Jahr bin ich dann wohl wieder dabei. :)

20. August 2017

Servus,

ich nutze für meinen Mailverkehr Mutt. Hier habe ich alle meine E-Mailadresse (5) untergebracht. Ich weiß das meine Konfig nicht die einzige Lösung ist und sicherlich nicht die beste. Doch ich komme sehr gut zurecht, und da ich gefragt wurde, diese zu Teilen, werde ich das hier gerne tun. Wenn es fragen dazu gibt, könnt ihr mich gerne in Jabber/XMPP anschreiben

pr3ach3r@trashserver.net

Installation

Im folgenden werden wir Mutt und einige zusätzliche Programme die wir für die Darstellung und Anhänge benötigen installieren:

apt install mutt w3m sxiv mpv apvlv libreoffice urlview
  • w3m => Darstellung von HTML Mails
  • sxiv => Anzeigen von Bildern
  • mpv => Abspielen von Mediendateien
  • apvlv => PDF Dokumente anzeigen
  • libreoffice => ist glaube ich klar
  • urlview => wie Links geöffnet werden sollen

Ordner

Als nächstes erstellen wir alle wichtigen Ordner:

mkdir .mutt/{alias,cache/{bodies,headers},temp} -p

Anlegen der Konfiguration

Fangen wir mit den leichten Teilen an, und erstellen als erste im Ordner .mutt/ die Datei mailcap und füllen Sie mit folgenden Inhalt:

message/rfc822; less %s; edit=${EDITOR-vi} %s; compose=${EDITOR-vi} %s; needsterminal;
text/html; w3m -I %{charset} -T text/html; copiousoutput;
image/*; sxiv %s &>/dev/null
video/*; mpv %s
audio/*; mpv %s
text/*; vim %s
application/pdf; apvlv %s
application/odt; libreoffice %s
application/ods; libreoffice %s
application/msword; libreoffice %s
application/vnd.oasis.opendocument.text; libreoffice %s
application/vnd.openxmlformats-officedocument.wordprocessingml.document; libreoffice %s &>/dev/nul

Diese Datei sagt Mutt, wie bestimmte Dateitypen zu handhaben sind.

Als nächstes legen wir im selben Ordner die Datei gpg.rc an, diese Schritt ist optional und gibt an wie wir gerne mit GPG umgehen wollen:

set crypt_use_gpgme = yes
set crypt_autosign = yes
set pgp_timeout = 1800
set pgp_good_sign="gpg: (Korrekte Unterschrift von|Good signature from) "

set crypt_replysign = yes
set crypt_replyencrypt = yes
set crypt_replysignencrypted = yes
set crypt_verify_sig = yes
  • crypt_replysign => Signiert antworten
  • crypt_replyencrypt => verschlüsselt antworten
  • crypt_replysignencrypted => Signiert und verschlüsselt antworten
  • crypt_verify_sig => Signatur überprüfen

Diese Optionen können noch erweitert werden Mutt Doku

Jetzt legen wir die Datei colors an, diese ist einfach eine Theme, in diesem Fall solarized dark :

# vim: filetype=muttrc

# basic colors ---------------------------------------------------------
color normal        brightyellow    default         
color error         red             default         
color tilde         black           default         
color message       cyan            default         
color markers       red             white           
color attachment    white           default         
color search        brightmagenta   default         
#color status        J_black         J_status        
color status        brightyellow    black           
color indicator     brightblack     yellow          
color tree          yellow          default                                     # arrow in threads

# basic monocolor screen
mono  bold          bold
mono  underline     underline
mono  indicator     reverse
mono  error         bold

# index ----------------------------------------------------------------

color index         red             default         "~A"                        # all messages
color index         brightred       default         "~E"                        # expired messages
color index         blue            default         "~N"                        # new messages
color index         blue            default         "~O"                        # old messages
color index         brightmagenta   default         "~Q"                        # messages that have been replied to
color index         brightgreen     default         "~R"                        # read messages
color index         blue            default         "~U"                        # unread messages
color index         blue            default         "~U~$"                      # unread, unreferenced messages
color index         brightyellow    default         "~v"                        # messages part of a collapsed thread
color index         brightyellow    default         "~P"                        # messages from me
color index         cyan            default         "~p!~F"                     # messages to me
color index         cyan            default         "~N~p!~F"                   # new messages to me
color index         cyan            default         "~U~p!~F"                   # unread messages to me
color index         brightgreen     default         "~R~p!~F"                   # messages to me
color index         red             default         "~F"                        # flagged messages
color index         red             default         "~F~p"                      # flagged messages to me
color index         red             default         "~N~F"                      # new flagged messages
color index         red             default         "~N~F~p"                    # new flagged messages to me
color index         red             default         "~U~F~p"                    # new flagged messages to me
color index         black           red             "~D"                        # deleted messages
color index         brightcyan      default         "~v~(!~N)"                  # collapsed thread with no unread
color index         yellow          default         "~v~(~N)"                   # collapsed thread with some unread
color index         green           default         "~N~v~(~N)"                 # collapsed thread with unread parent
color index         red             black           "~v~(~F)!~N"                # collapsed thread with flagged, no unread
color index         yellow          black           "~v~(~F~N)"                 # collapsed thread with some unread & flagged
color index         green           black           "~N~v~(~F~N)"               # collapsed thread with unread parent & flagged
color index         green           black           "~N~v~(~F)"                 # collapsed thread with unread parent, no unread inside, but some flagged
color index         cyan            black           "~v~(~p)"                   # collapsed thread with unread parent, no unread inside, some to me directly
color index         yellow          red             "~v~(~D)"                   # thread with deleted (doesn't differentiate between all or partial)

# message headers ------------------------------------------------------

#color header        brightgreen     default         "^"
color hdrdefault    brightgreen     default         
color header        brightyellow    default         "^(From)"
color header        blue            default         "^(Subject)"

# body -----------------------------------------------------------------

color quoted        blue            default         
color quoted1       cyan            default         
color quoted2       yellow          default         
color quoted3       red             default         
color quoted4       brightred       default         

color signature     brightgreen     default         
color bold          black           default         
color underline     black           default         
color normal        default         default         
#
color body          brightcyan      default         "[;:][-o][)/(|]"    # emoticons
color body          brightcyan      default         "[;:][)(|]"         # emoticons
color body          brightcyan      default         "[*]?((N)?ACK|CU|LOL|SCNR|BRB|BTW|CWYL|\
                                                     |FWIW|vbg|GD&R|HTH|HTHBE|IMHO|IMNSHO|\
                                                     |IRL|RTFM|ROTFL|ROFL|YMMV)[*]?"
color body          brightcyan      default         "[ ][*][^*]*[*][ ]?" # more emoticon?
color body          brightcyan      default         "[ ]?[*][^*]*[*][ ]" # more emoticon?

## pgp
color body          red             default         "(FALSCHE Unterschrift)"
color body          black           red             "(WARNUNG: Wir haben KEINEN Beleg, dass der Schlüssel zur oben genannten Person gehört)"
color body          green           default         "(Gültige Unterschrift)"
color body          brightblack     default         "^gpg: Gültige Unterschrift .*"
color body          brightyellow    default         "^gpg: "
color body          brightyellow    red             "^gpg: FALSCHE Unterschrift von.*"
mono  body          bold                            "^gpg: Gültige Unterschrift von.*"

# yes, an insance URL regex
color body          red             default         "([a-z][a-z0-9+-]*://(((([a-z0-9_.!~*'();:&=+$,-]|%[0-9a-f][0-9a-f])*@)?((([a-z0-9]([a-z0-9-]*[a-z0-9])?)\\.)*([a-z]([a-z0-9-]*[a-z0-9])?)\\.?|[0-9]+\\.[0-9]+\\.[0-9]+\\.[0-9]+)(:[0-9]+)?)|([a-z0-9_.!~*'()$,;:@&=+-]|%[0-9a-f][0-9a-f])+)(/([a-z0-9_.!~*'():@&=+$,-]|%[0-9a-f][0-9a-f])*(;([a-z0-9_.!~*'():@&=+$,-]|%[0-9a-f][0-9a-f])*)*(/([a-z0-9_.!~*'():@&=+$,-]|%[0-9a-f][0-9a-f])*(;([a-z0-9_.!~*'():@&=+$,-]|%[0-9a-f][0-9a-f])*)*)*)?(\\?([a-z0-9_.!~*'();/?:@&=+$,-]|%[0-9a-f][0-9a-f])*)?(#([a-z0-9_.!~*'();/?:@&=+$,-]|%[0-9a-f][0-9a-f])*)?|(www|ftp)\\.(([a-z0-9]([a-z0-9-]*[a-z0-9])?)\\.)*([a-z]([a-z0-9-]*[a-z0-9])?)\\.?(:[0-9]+)?(/([-a-z0-9_.!~*'():@&=+$,]|%[0-9a-f][0-9a-f])*(;([-a-z0-9_.!~*'():@&=+$,]|%[0-9a-f][0-9a-f])*)*(/([-a-z0-9_.!~*'():@&=+$,]|%[0-9a-f][0-9a-f])*(;([-a-z0-9_.!~*'():@&=+$,]|%[0-9a-f][0-9a-f])*)*)*)?(\\?([-a-z0-9_.!~*'();/?:@&=+$,]|%[0-9a-f][0-9a-f])*)?(#([-a-z0-9_.!~*'();/?:@&=+$,]|%[0-9a-f][0-9a-f])*)?)[^].,:;!)? \t\r\n<>\"]"
# and a heavy handed email regex
#color body          J_magent        default         "((@(([0-9a-z-]+\\.)*[0-9a-z-]+\\.?|#[0-9]+|\\[[0-9]?[0-9]?[0-9]\\.[0-9]?[0-9]?[0-9]\\.[0-9]?[0-9]?[0-9]\\.[0-9]?[0-9]?[0-9]\\]),)*@(([0-9a-z-]+\\.)*[0-9a-z-]+\\.?|#[0-9]+|\\[[0-9]?[0-9]?[0-9]\\.[0-9]?[0-9]?[0-9]\\.[0-9]?[0-9]?[0-9]\\.[0-9]?[0-9]?[0-9]\\]):)?[0-9a-z_.+%$-]+@(([0-9a-z-]+\\.)*[0-9a-z-]+\\.?|#[0-9]+|\\[[0-2]?[0-9]?[0-9]\\.[0-2]?[0-9]?[0-9]\\.[0-2]?[0-9]?[0-9]\\.[0-2]?[0-9]?[0-9]\\])"

Ok kommen wir zum komplizierten Teil, zur eigentlich Mutt Konfiguration. Im folgenden werde ich immer Abschnitt für Abschnitt machen. Am Ende gibt es das Ding dann komplett. Wir legen die Datei muttrc im besagten Ordner an, und fangen an Sie zu befüllen:

source "~/.mutt/account.exmaple2"
folder-hook $folder 'source ~/.mutt/example2'
source "~/.mutt/account.example1"
folder-hook $folder 'source ~/.mutt/example1'

macro index <f3> '<sync-mailbox><enter-command>source ~/.mutt/account.example1<enter><change-folder>!<enter>'
macro index <f4> '<sync-mailbox><enter-command>source ~/.mutt/account.example2<enter><change-folder>!<enter>'

So, wir legen jetzt zwei Tasten für das Wechseln zwischen den Accounts fest, hier F6 und F7. Diese binden wir an die entsprechenden Account Dateien, die wir dann noch erstellen werden. Zum Schluss sagen wir noch welche Account der default Account ist und beim Start geladen werden soll

macro pager \cb <pipe-entry>'urlview'<enter> 'Follow links with urlview'
auto_view text/html                                      # view html automatically
alternative_order text/plain text/enriched text/html     # save html for lastw

source ~/.mutt/colors
source ~/.mutt/gpg.rc

Als nächstes legen wir die Taste fest, mit dem wir Links in Mails folgen, und das wir wollen das HTML Mails mit w3m gerendert werden. Zum Schluss binden wir noch die colors und die gpg Datei ein.

Im folgenden noch ein paar Einstellungen, da alle mit Kommentaren versehen sind, werde ich nicht mehr viel dazu sagen:

set header_cache        = ~/.mutt/cache/headers                  # where to store headers        
set message_cachedir    = ~/.mutt/cache/bodies                   # where to store bodies
#set certificate_file    = ~/.mutt/certificates                   # where to store certs
set mailcap_path        = ~/.mutt/mailcap                        # entrys for filetypes
set tmpdir              = ~/.mutt/temp                           # where to keep temp files
set editor 				= "vim +13 -c 'set nobackup' -c 'set noswapfile' -c 'set nowritebackup' -c 'set tw=72 ft=mail noautoindent'" ft=mail noautoindent'"
set ispell              = "/usr/bin/aspell -e -c"                # use aspell as ispell
set imap_peek           = no                                     # Gmail mark as read
set sleep_time          = 0                                      # instantaneous mailbox change

set timeout             = 3                                      # idle time before scanning
set mail_check          = 0                                      # minimum time between scans
set sort_alias          = alias                                  # sort alias file by alias
set reverse_alias                                                # show names from alias file in index
unset move                                                       # gmail does that
set delete                                                       # don't ask, just do
unset confirmappend                                              # don't ask, just do!
set quit                                                         # don't ask, just do!!
unset mark_old                                                   # read/new is good enough for me
set beep_new                                                     # bell on new mails
set pipe_decode                                                  # strip headers and eval mimes when piping
set thorough_search                                              # strip headers and eval mimes before searching
set text_flowed         = yes                                    # no hard breaks in quoted text
unset help
set record            	=+Sent					 # Gesendet Ordner
set sig_on_top          = yes					 # Signatur am Anfang

# index options
set sort                = threads                                # like gmail 
set sort_aux            = reverse-last-date-received             # like gmail
set uncollapse_jump                                              # don't collapse on an unread message 
set sort_re                                                      # thread based on regex
#set reply_regexp        = "^(([Rr][Ee]?(\[[0-9]+\])?: *)?(\[[^]]+\] *)?)*"

set pager_index_lines   = 10                                     # number of index lines to show 
set pager_context       = 5                                      # number of context lines to show
set pager_stop                                                   # don't go to next message automatically
set menu_scroll                                                  # scroll in menus 
set smart_wrap                                                   # don't split words
set tilde                                                        # show tildes like in vim
unset markers                                                    # no ugly plus signs
set quote_regexp        = "^( {0,4}[>|:#%]| {0,4}[a-z0-9]+[>|]+)+"
set status_on_top                                                # as you'd expect

set date_format         = "%d/%m/%y at %I:%M%P"
#set index_format        = "%3C %?X?A& ? %S   %D  •  %-25.25L %s %> %c"
#set pager_format        = "Reading message %C of %m %> %lL [%P]" # pager statusbar
#set folder_format       = "%2C %t %N %8s %d %f"                  # mailbox list view
#set status_format       = " %?M?%M/?%m Mails %?n?%n new, ?%?u?%u unread, ?%?p?%p drafts, ?%?t?%t +tagged, ?%?d?%d deleted, ?[%f %l]  %?b?%b unread messages. ?%>  %V  [%P]"
##set alias_format        = "%4n %t %-20a  %r"

set realname            = "Malte Kiefer"                           # who am i?
set envelope_from                                                # which from?
set sig_dashes                                                   # dashes before my sig... sweet
set edit_headers                                                 # show headers when composing
set fast_reply                                                   # skip to compose when replying
set sendmail_wait       = -1                                     # don't wait for sending... to complete
set askcc                                                        # ask for CC
set askbcc                                                       # and blind CC
set fcc_attach                                                   # save attachments with the body
set mime_forward                                                 # forward attachments as part of body
set mime_forward_rest                                            # include attachments
set forward_format      = "Fwd: %s"                              # format for subject when forwarding
set forward_decode                                               # decode when forwarding
set attribution         = "On %d, %n wrote:"                     # set the attribution
set reply_to                                                     # reply to Reply to: field
set reverse_name                                                 # reply as whomever it was to
set include                                                      # include message in replies
set forward_quote                                                # include message in forwards

ignore *                                                         # ignore all headers
unignore from: to: cc: date: subject:                            # show only these
hdr_order from: to: cc: date: subject:                           # and in this order

Wenn man khard als Adressbuch nutzt, kann man am Ende noch das einfügen:

set query_command= "khard email --parsable %s"
bind editor <Tab> complete-query
bind editor ^T    complete

So kann man beim Eingeben der Empfängeradresse einfach zwiemal Tab drücken und die Adresse wirde aus dem Adressbuch genommen bzw. gesucht.

my_hdr X-PGP-Key: https://malte-kiefer.de/media/pub_maltekiefer.asc
set user_agent = no

Hier die vollständige Datei:

source "~/.mutt/account.exmaple2"
folder-hook $folder 'source ~/.mutt/example2'
source "~/.mutt/account.example1"
folder-hook $folder 'source ~/.mutt/example1'

macro index <f3> '<sync-mailbox><enter-command>source ~/.mutt/account.example1<enter><change-folder>!<enter>'
macro index <f4> '<sync-mailbox><enter-command>source ~/.mutt/account.example2<enter><change-folder>!<enter>'

macro pager \cb <pipe-entry>'urlview'<enter> 'Follow links with urlview'
auto_view text/html                                      # view html automatically
alternative_order text/plain text/enriched text/html     # save html for lastw

set header_cache        = ~/.mutt/cache/headers                  # where to store headers
set message_cachedir    = ~/.mutt/cache/bodies                   # where to store bodies
#set certificate_file    = ~/.mutt/certificates                   # where to store certs
set mailcap_path        = ~/.mutt/mailcap                        # entrys for filetypes
set tmpdir              = ~/.mutt/temp                           # where to keep temp files
set editor 				= "vim +13 -c 'set nobackup' -c 'set noswapfile' -c 'set nowritebackup' -c 'set tw=72 ft=mail noautoindent'" ft=mail noautoindent'"
set ispell              = "/usr/bin/aspell -e -c"                # use aspell as ispell
set imap_peek           = no                                     # Gmail mark as read
set sleep_time          = 0                                      # instantaneous mailbox change

set timeout             = 3                                      # idle time before scanning
set mail_check          = 0                                      # minimum time between scans
set sort_alias          = alias                                  # sort alias file by alias
set reverse_alias                                                # show names from alias file in index
unset move                                                       # gmail does that
set delete                                                       # don't ask, just do
unset confirmappend                                              # don't ask, just do!
set quit                                                         # don't ask, just do!!
unset mark_old                                                   # read/new is good enough for me
set beep_new                                                     # bell on new mails
set pipe_decode                                                  # strip headers and eval mimes when piping
set thorough_search                                              # strip headers and eval mimes before searching
set text_flowed         = yes                                    # no hard breaks in quoted text
unset help
set sig_on_top          = yes					 # Signatur am Anfang

# index options
set sort                = threads                                # like gmail
set sort_aux            = reverse-last-date-received             # like gmail
set uncollapse_jump                                              # don't collapse on an unread message
set sort_re                                                      # thread based on regex
#set reply_regexp        = "^(([Rr][Ee]?(\[[0-9]+\])?: *)?(\[[^]]+\] *)?)*"

set pager_index_lines   = 10                                     # number of index lines to show
set pager_context       = 5                                      # number of context lines to show
set pager_stop                                                   # don't go to next message automatically
set menu_scroll                                                  # scroll in menus
set smart_wrap                                                   # don't split words
set tilde                                                        # show tildes like in vim
unset markers                                                    # no ugly plus signs
set quote_regexp        = "^( {0,4}[>|:#%]| {0,4}[a-z0-9]+[>|]+)+"
set status_on_top                                                # as you'd expect

set date_format         = "%d/%m/%y at %I:%M%P"
#set index_format        = "%3C %?X?A& ? %S   %D  •  %-25.25L %s %> %c"
#set pager_format        = "Reading message %C of %m %> %lL [%P]" # pager statusbar
#set folder_format       = "%2C %t %N %8s %d %f"                  # mailbox list view
#set status_format       = " %?M?%M/?%m Mails %?n?%n new, ?%?u?%u unread, ?%?p?%p drafts, ?%?t?%t +tagged, ?%?d?%d deleted, ?[%f %l]  %?b?%b unread messages. ?%>  %V  [%P]"
##set alias_format        = "%4n %t %-20a  %r"

set realname            = "Malte Kiefer"                           # who am i?
set envelope_from                                                # which from?
set sig_dashes                                                   # dashes before my sig... sweet
set edit_headers                                                 # show headers when composing
set fast_reply                                                   # skip to compose when replying
set sendmail_wait       = -1                                     # don't wait for sending... to complete
set askcc                                                        # ask for CC
set askbcc                                                       # and blind CC
set fcc_attach                                                   # save attachments with the body
set mime_forward                                                 # forward attachments as part of body
set mime_forward_rest                                            # include attachments
set forward_format      = "Fwd: %s"                              # format for subject when forwarding
set forward_decode                                               # decode when forwarding
set attribution         = "On %d, %n wrote:"                     # set the attribution
set reply_to                                                     # reply to Reply to: field
set reverse_name                                                 # reply as whomever it was to
set include                                                      # include message in replies
set forward_quote                                                # include message in forwards

ignore *                                                         # ignore all headers
unignore from: to: cc: date: subject:                            # show only these
hdr_order from: to: cc: date: subject:                           # and in this order
source ~/.mutt/colors
source ~/.mutt/gpg.rc
set query_command= "khard email --parsable %s"
bind editor <Tab> complete-query
bind editor ^T    complete

my_hdr X-PGP-Key: https://malte-kiefer.de/media/pub_maltekiefer.asc
set user_agent = no

Acounts

Jetzt fehlen uns noch die Account Dateien, fangen wir gleich an: account.example1

set from=mail@example.de
set hostname="example.de"
set folder="imaps://mail.example.de/"
set postponed="=Drafts"
set spoolfile="imaps://mail.example.de/INBOX"
set smtp_url="smtps://$imap_user:$imap_pass@mail.example.de:465"
set imap_user="USERNAME"
set imap_pass="PASSWORD"

# SSL hardening
set ssl_force_tls=yes
set ssl_starttls=yes
set ssl_use_sslv3=no
set ssl_use_tlsv1=no
set ssl_use_tlsv1_1=no
set ssl_use_tlsv1_2=yes
set ssl_verify_dates=yes
set ssl_verify_host=yes

Und den Zweiten account.example2

set from=mail@example2.org
set hostname="example2.org"
set folder="imaps://imap.example2.org"
set postponed="=Drafts"
set spoolfile="imaps://imap.example2.org/INBOX"
set smtp_url="smtp://$imap_user:$imap_pass@smtp.example2.org"
set imap_user="USERNAME"
set imap_pass="PASSWORD"

# SSL hardening
set ssl_force_tls=yes
set ssl_starttls=yes
set ssl_use_sslv3=no
set ssl_use_tlsv1=no
set ssl_use_tlsv1_1=no
set ssl_use_tlsv1_2=yes
set ssl_verify_dates=yes
set ssl_verify_host=yes

Nutzung

Durch das eingeben von mutt im Terminal wird das Mailprogramm gestartet. Die erste Übersicht, die ihr seht, nennt man index. Jetzt könnt ihr mit F6 und F7 zwischen den Accounts hin und her springen.

Hier mal die wichtigsten Keys:

Mutt Cheat Sheet

Seit zwei Tagen steht Raspbian Stretch zum Download zur Verfügung, also die auf Debian 9 (»Stretch«) aktualisierte Version der Rasbperry-Pi-Distribution Raspbian. An der Oberfläche hat sich wenig verändert, Raspbian lässt sich wie bisher bedienen. Hinter den Kulissen haben sich ein paar Details verändert. Der Hauptvorteil von Raspbian Stretch besteht aber darin, dass viele Software-Versionen aktualisiert wurden. Vielleicht am wichtigsten: Der aktuelle Kernel 4.9 beseitigt eine Sicherheitslücke im WLAN-Treiber.

Updates 21.8.2017, 5.10.2017: diverse Ergänzungen.

Wie bei jedem »Major Update« empfiehlt die Raspberry Pi Foundation eine Neuinstallation. Ein Update ist grundsätzlich auch möglich (Details dazu weiter unten). Dabei kann es aber unter Umständen zu Problemen kommen.

Neuinstallation

Eine Neuinstallation, sei es mit NOOBS oder durch das Kopieren der Image-Datei auf eine SD-Karte, verläuft exakt wie bei der Vorgängerversion Raspbian Jessie. Nach der Installation sollte als erstes das Konfigurationsprogramm Raspberry Pi Configuration ausgeführt werden. Dort können Sie diverse Einstellungen durchführen:

  • ein eigenes Passwort (aus Sicherheitsgründen unbedingt empfehlenswert!)
  • einen eigenen Hostnamen
  • die Sprache
  • die Zeitzone
  • das Tastaturlayout
  • das Land (damit der WLAN-Adapter die örtlichen Funkrichtlinien einhält)
  • SSH und diverse andere Dienste aktivieren

Beim Versuch, das Tastaturlayout einzustellen, treten die ersten Probleme auf. Ein Klick auf den betreffenden Button führt zu keinerlei Reaktion. Abhilfe: Öffnen Sie ein Terminal-Fenster und führen Sie dort die beiden folgenden Kommandos aus:

apt update
apt full-upgrade

Danach starten Sie das Konfigurationsprogramm neu — dann funktioniert auch die Konfiguration des Tastaturlayouts!

Um zu überprüfen, welche Raspbian-Version auf Ihrem Raspberry Pi läuft, führen Sie cat /etc/os-release aus:

cat /etc/os-release 

  PRETTY_NAME="Raspbian GNU/Linux 9 (stretch)"
  NAME="Raspbian GNU/Linux"
  VERSION_ID="9"
  VERSION="9 (stretch)"
  ID=raspbian
  ID_LIKE=debian
  HOME_URL="http://www.raspbian.org/"
  SUPPORT_URL="http://www.raspbian.org/RaspbianForums"
  BUG_REPORT_URL="http://www.raspbian.org/RaspbianBugs"

Software-Versionen

Das Software-Angebot entspricht naturgemäß jenem von Debian Stretch, wenn auch standardmäßig andere Komponenten zum Einsatz kommen — z.B. der Webbrowser Chromium anstelle von Firefox.

Basis           Desktop             Programmierung   Server
--------------  ------------------  --------------   --------------
Kernel     4.9  Chromium        60  bash       4.4   Apache    2.4
glibc     2.24  Gimp           2.8  gcc        6.3   CUPS      2.2
X-Server  1.19  LibreOffice    5.2  Java         8   MariaDB  10.1
Systemd    232  LXDE        0.99.2  PHP        7.0   OpenSSH   7.5
                Mathematica   11.0  Python 2.7/3.5   Samba     4.5

Umfassende Änderungen ergeben sich durch das Update vor allem für Raspberry-Pi-Fans, die den Minicomputer als Server eingesetzt haben. Der Wechsel von MySQL zu MariaDB und das Update von PHP 5.n auf PHP 7 können großen Migrationsaufwand verursachen.

Zuletzt noch ein paar Raspbian-spezifische Versionsangaben:

  • Sonic Pi liegt nun in Version 3.0.1 vor.
  • Scratch 2 kommt dank einer zusätzlichen Bibliothek nun mit den »Sense Hat«-Erweiterungen zurecht.

  • WiringPi liegt in Version 2.44 vor.

  • python.rpi hat die Version 0.6.3.

  • Der Raspberry Pi war wie viele Smartphones und andere Geräte von einem Firmware-Bug im Broadcom-WLAN-Chip betroffen (vom sogenannten Broadpawn Exploit). Raspbian Stretch enthält dafür einen Patch. (Der Patch steht auch für Raspbian Jessie zur Verfügung. Wenn Sie weiterhin Raspbian Jessie verwenden, sollten Sie sicherstellen, dass Sie alle Updates installiert haben!)

Technische Neuerungen

Hinter den Kulissen gibt es in Raspbian Stretch auch einige technische Details, die sich verändert haben:

  • Benutzer-Accounts: Zwar lautet der Default-Benutzer von Raspbian weiterhin pi, die Distribution und insbesondere das Raspberry-Pi-Konfigurationsprogramm kommt nun aber auch damit zurecht, wenn Sie einen anderen Account nutzen. Voraussetzung ist allerdings, dass dieser Benutzer ebenfalls sudo-Rechte hat.
  • Bluetooth/ALSA/PulseAudio: PulseAudio ist standardmäßig nicht mehr installiert. Bluetooth kommuniziert nun nicht mehr über PluseAudio mit dem Sound-System ALSA, sondern direkt über die Bibliothek bluez-alsa.

  • MySQL -> MariaDB: Der Datenbank-Server MySQL steht unter Raspbian Stretch nicht mehr zur Verfügung. Stattdessen kommt jetzt das weitgehend dazu kompatible Programm MariaDB zum Einsatz. Wenn Sie ein neues Datenbankprojekt starten, werden Sie vermutlich keinen Unterschied bemerken. Wenn Sie aber eine vorhandene Datenbank übernehmen möchten, müssen Sie diese mit mysqldump sichern und mit mysql neu wieder einspielen. (Die Kommandos mysql und mysqldump heißen auch in MariaDB so.) Führen Sie das Backup unbedingt durch, bevor Sie ein Update von Debian Jessie auf Debian Stretch durchführen!

  • USB-Datenträger: USB-Sticks, Festplatten etc. werden nun automatisch im Verzeichnis /media/pi/<name> in den Verzeichnisbaum eingebunden (bisher /media/<name>).

Netzwerkonfiguration

Größere Umbauten gab es bei der Netzwerkonfiguration. Anstelle von eth0, eth1 etc. heißen die Netzwerkschnittstellen jetzt enxb827eb11442e etc. Das ist zwar äußerst unhandlich, hat aber den Vorteil, dass die Schnittstellennamen mit Hardware-IDs verbunden sind. D.h., die Schnittstellennamen sind reproduzierbar immer gleich.

Die Datei /etc/network/interfaces ist jetzt standardmäßig leer und bleibt dies auch nach einer WLAN-Konfiguration. Für die Konfiguration der Ethernet-Schnittstelle ist jetzt dhcpcd zuständig.

Solange Sie die Netzwerkkonfiguration über GUI-Tools durchführen, ändert sich am Default-Verhalten nichts: Die Ethernet-Schnittstelle empfängt weiterhin Ihre IP-Konfiguration über DHCP. Die WLAN-Einstellungen werden weiterhin in /etc/wpa_supplicant/wpa_supplicant.conf gespeichert.

Die empfohlene Vorgehensweise zur Konfiguration einer statischen IP-Konfiguration für die Ethernet-Schnittstelle besteht darin, /etc/dhcpcd.conf zu verändern, z.B. nach dem folgenden Muster:

# Datei /etc/dhcpcd.conf
...
interface enxb827eb11442e
static ip_address=10.0.0.99/24
static routers=10.0.0.138
static domain_name_servers=10.0.0.138 8.8.8.8

Damit die Änderungen wirksam werden, führen Sie

sudo systemctl restart dhcpcd

aus. Alternativ können Sie den Rasbperry Pi natürlich auch neu starten.

WLAN-Konfiguration vorweg (speziell für Raspberry Zero)

Wie ich in diesem Blog-Beitrag beschrieben habe, können Sie bei einer Raspbian-Image-Installation (nicht NOOBS) das WLAN-Passwort vorweg einstellen und den SSH-Server aktivieren. Das ermöglicht die Inbetriebnahme eines Raspberry Pi ohne USB-Tastatur.

Mit Raspbian Stretch funktioniert diese Vorgehensweise weiterhin. Allerdings muss die Datei wpa_supplicant.conf jetzt die zusätzlichen Parameter ctrl_interface und update_config enthalten, idelerweise auch country. Die folgende Datei gibt ein Muster an:

# Datei wpa_supplicant.conf in der Boot-Partition
country=DE  #omit if US
ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev
update_config=1
network={
       ssid="wlan-bezeichnung"
       psk="passwort"
       key_mgmt=WPA-PSK
}

Quellen:

Probleme nach einer Neuinstallation

Wie bereits erwähnt, funktioniert die Tastaturkonfiguration durch das Raspberry-Pi-Konfigurationsprogramm nicht. Dieses Problem lässt sich durch die Installation der Updates leicht beheben.

Des Weiteren gibt es aktuell Probleme mit dem RealVNC-Server. Hierfür gibt es noch keine Lösung. Meine Empfehlung lautet, statt den RealVNC-Server zu deaktivieren und stattdessen xrdp zu installieren (siehe auch diesen Blog-Beitrag).

sudo apt-get remove realvnc-vnc-server
sudo apt-get install xrdp

Schließlich fehlen japanische und chinesische Fonts. Das wird Sie vermutlich nicht stören. Wenn doch, führen Sie sudo apt-get install fonts-droid-fallback aus.

Update von Raspbian Jessie auf Raspbian Stretch

Grundsätzlich ist es möglich, eine vorhandene Raspbian-Jessie-Installation auf Raspbian Stretch zu aktualisieren. Die Raspberry Pi Foundation rät von derartigen Updates ab, und diesem Ratschlag schließe ich mich an. In 25 Linux-Jahren hatte ich schon zu oft Probleme mit derartigen Updates.

Das heißt aber nicht, dass Sie es nicht versuchen können :-) Ich habe es natürlich auch probiert; die hier geschilderten Erfahrungen sind aber nur ein Einzelfall.

Als erstes sollten Sie ein vollständiges Backup aller für Sie wichtigen Dateien durchführen. Speichern Sie das Backup auf einem anderen Datenträger, z.B. auf einem USB-Stick oder in einem Netzwerkverzeichnis.

Danach führen Sie ein letztes Update für Debian Jessie durch, wie immer mit den Kommandos:

sudo apt update
sudo apt full-upgrade

Damit Sie das Update durchführen können, muss im Dateisystem auf der SD-Karte ausreichend freier Platz sein. Auf eine genaue Zahl will ich mich hier nicht festlegen, aber alleine der Download-Bedarf für alle Pakete beträgt rund 1 GByte. Mit 2 bis 3 GByte freien Speicher sind Sie auf der sicheren Seite. (Wenn Sie nicht wissen, wie viel Speicherplatz frei ist, führen Sie df -h / aus.)

Anschließend öffnen Sie mit sudo-Rechten die Dateien /etc/apt/sources.list und /etc/apt/sources.list.d/raspi.list sowie gegebenenfalls weitere *.list-Dateien in /etc/apt/sources.list.d. In all diesen Dateien ersetzen Sie jessie durch stretch. Statt eines Editors können Sie auch das Kommando sed zu Hilfe nehmen:

cd /etc/apt
sudo sed -i 's/jessie/stretch/g' /etc/apt/sources.list
sudo sed -i 's/jessie/stretch/g' /etc/apt/sources.list.d/raspi.list

Danach führen Sie nochmals die beiden folgenden Kommandos aus. Die Ausführung des Updates dauert je nach Raspberry-Pi-Modell und Geschwindigkeit der SD-Karte mehrere Stunden. Wenn Sie die Möglichkeit haben, sollten Sie das Update nicht via SSH durchführen, sondern sich direkt auf dem Rasbperry Pi einloggen. (Bei einem Update via SSH besteht die Gefahr, dass während des Updates die Netzwerkverbindung unterbrochen wird. Dann ist auch der Update-Prozess unterbrochen, und Sie müssen u.U. mit dpkg --configure -a die Paketdatenbank reparieren, bevor Sie den Update-Prozess mit apt full-upgrade neuerlich starten können.)

Das Update verläuft nicht einfach vollautomatisch: Sie müssen vielmehr immer wieder Fragen beantworten, ob Sie die eine oder die andere Version einer Konfigurationsdatei verwenden möchten etc. Ohne profundes Linux-Wissen ist die richtige Entscheidung schwierig — ebenso wie die Abschätzung, welche Folgen sich daraus ergeben.

sudo apt update
sudo apt full-upgrade

Die Durchführung des Updates hat bei mir mehrere Stunden gedauert, wesentlich länger als eine Neuinstallation! (Eine exakte Zeitangabe kann ich nicht geben, weil ich zwischendurch mehrfach den Rechner verlassen habe und der Update-Prozess bei meiner Rückkehr jedesmal auf eine Entscheidung von mir wartete.)

Der einzige Vorteil eines Updates im Vergleich zu einer Neuinstallation besteht darin, dass alle bisherigen Einstellungen und Dateien erhalten bleiben. Das kann im Vergleich zu einer Neuinstallation natürlich viel Zeit sparen. In der Regel geht diese Zeit aber an anderer Stelle verloren — nämlich bei der Fehlersuche, wenn ein aktualisiertes Programm nicht mehr so funktioniert wie vorher …

Wie bereits erwähnt, kann der Umstieg von MySQL zu MariaDB zu Problemen führen. Lesen Sie vor einem Update unbedingt diesen Knowledge-Base-Beitrag der MariaDB-Webseite.

Bei meinem Test war das Update prinzipiell erfolgreich, wenngleich ein paar Kleinigkeiten das Bild trüben: Der Auto-Login für den Nutzer pi funktioniert nicht mehr und die Schrift im Terminal sieht hässlich aus. phpMyAdmin funktionierte erstaunlicherweise nach dem Update, allerdings konnte das Programm auf die phpMyAdmin-interne Datenbank nicht mehr zugreifen. (Dadurch gehen einige Zusatzfunktionen von phpMyAdmin verloren.)

Ich habe mir nicht die Mühe gemacht, diese Probleme zu beheben. Auch auf wirklich tiefgreifende Tests habe ich verzichtet und stattdessen wieder die SD-Karte mit der Raspbian-Stretch-Neuinstallation in den Slot gesteckt :-)

Quellen

Wer eigene Themes für WordPress entwickelt sollte sie mit allen möglichen Arten von Inhalten testen. Das kann man manuell machen – oder klug.

Als ich angefangen habe, meine ersten eigenen WordPress-Themes zu entwickeln, habe ich immer mit kopierten Inhalten aus meinen Live-Seiten gearbeitet. Man kann die Inhalte bei WordPress
sehr einfach ex- und importieren. Nur hängt es dann vom Zufall ab, ob ich daran denke, alle wichtigen Funktionen zu testen.

Theme Unit Test

Eine Möglichkeit ist der WordPress Theme Unit Test. Das ist ein Paket mit WordPress-Inhalten, die alle Möglichkeiten des Systems ausschöpfen. Wenn Du das Paket installisiert, bekommst Du lauter neue Artikel in Deiner Test-Site. In den Artikeln werden jeweils alle möglichen Funktionen ausprobiert. Es gibt einen Artikel, in dem alle HTML-Formate verwendet sind: Aufzählungen, Zitate, Tabellen usw. Es gibt einen Artikel mit einer Bilder-Galerie oder einen, in dem alle Möglichkeiten ausgeschöpft werden, Bilder in Text einzubauen.

Wenn Du es schaffst, dass all diese Artikel gut aussehen, dann ist Dein Theme auf alles vorbereitet, was zukünftige Nutzerinnen und Nutzer damit machen können.

Monster Widget

Auf diese Art kannst Du auch Deine Widget-Areas testen. Das Developer-Plugin von Automattic bietet die Möglichkeit, „Monster Widgets“ zu installieren. Das ist ein Widget, in dem alles angezeigt wird, was man in einer Widget-Area anzeigen lassen könnte. Für des echten Einsatz ist das natürlich viel zu viel, aber Du kannst sehen, wie Aufzählungen in der Widget-Area aussehem, wie Kalender dort aussehen usw.

WP Lorem Ipsum

Wenn Dein Theme all diese Test besteht, kann es aber trotzdem sein, dass Du sehen möchtest, wie es denn eigentlich mit richtigen Artikeln und Artikel-Bildern aussieht – und zwar gerade nicht mit Deinen eigenen Inhalten, um ein Gefühl dafür zu kriegen, wie das Theme bei anderen später aussehen könnte.

Mit dem Plugin WP Lorem Ipsum kannst Du Dir automatisch Lorem Ipsum-Artikel samt Artikelbild erstellen lassen. Das sind dann ein paar Absätze Blindtext mit unterschiedlich langen Überschriften und großen, schönen Bildern.

Am Ende all dieser Tests, kannst Du ziemlich sicher sein, dass es nicht an Deinem Theme liegt, wenn eine Site damit nicht gut aussieht.

Über weitere gute Tipps für Test-Inhalte in WordPress, würde ich mich in den Kommentaren freuen. Und wenn Dir der Artikel gefallen hat – sag es weiter:

Test-Inhalte für Dein eigenes WordPress-Theme

Ich wurde mal wieder gebeten einen Artikel zu schreiben. Dieses mal über Genesis Mining, dem Anbieter bei dem ich Cloud Mining in Anspruch nehme.

Warum Cloud Mining?

Als ich mich anfing mit Bitcoin zu beschäftigen, war mir schnell klar, dass es sich nicht lohnen würde selber zu minen. Hierfür gibt es viele Gründe, für mich die Auschlaggebenenden waren:

  • Stromkosten
  • Anschaffungskosten
  • Wärmeproduktion
  • Lärmbelästigung

Jedoch wollte ich auch nicht nur immer Bitcoins kaufen und handeln. Also musste eine Lösung her. Nachdem vergleich von einigen Cloud Mining Anbietern bin ich bei Genesis Mining gelandet.

Genesis Mining

GM bietet verschiedene Mining Verträge für verschiedene Kryptowährungen an. Ich habe mich für BTC Mining entschieden.

Das schöne bei GM ist, das erstellen eines Accounts ist schnell geschehen. Hashpower kann dann mit Kreditkarte bzw. verschiedener Kryptowährung erworben werden. Hier findet man im Netz schnell Gutscheincodes. Diese Codes gehöhren zum Partnerprogramm von Genesis Mining. Jeder Benutzer erhält seinen eignen Code den er teilen kann. Der Nutzer dieses Codes hat den Vorteil, dass er 3% auf den Preis für den Erwerb von Haspower spart. Der Besitzer des Codes, bekommt in verschiedenen Stufen einen Bonus als Hashpower oder als Auszahlungsbetrag gutschrieben.

Lifetime

GM verschpricht Lifetime Verträge, außer folgende Dinge treten ein:

  • BTC Preis fällt zu tief
  • Kosten/Leistungrechnung aufgrund von Wartungskosten rechnen sich nicht mehr

Auszahlung

Die Auszahlung bei GM erfolgt täglich, wenn folgende Bedinungen gegeben sind:

  • die erminten Bitcoins haben min. den Betrag 0.0015 BTC, wenn nicht wird die Summe jeden Tag addiert bis der Betrag erreicht ist und wird dann ausgezahlt

  • wenn Hashpower mit Kreditkarte erworben ist, dauert es 30 Tage bis zur ersten Auszahlung um Geldwäsche zu verhindern.

Das besondere bei GM ist, dass man entscheiden kann, welche Kryptowährung man ausgezahlt haben möchte. Bedeutet, selbst wenn ich Bitcoin Hashpower erworben habe, kann ich mit den Gewinn z.B. in Litecoins oder Dashcoins auszahlen lassen.

Zusätzlich ist zu beachten, dass noch eine Wartungsgebühr abgezogen wird, diese aber in der ganzen Branche den geringsten Satz hat.

Fazit

Ich besitze 1.5 Th/z Hashpower bei GM. Ich bekomme aktuell alle 5 Tage eine Auszahlung von ca. 5 €. Hierfür habe ich knapp 190 € bezahlt. Somit (190 € (Investion) / 5 € (in Btc alle 5 Tage)) * 5 Tage = 190 Tage bis der Betrag wieder erwirtschaftet ist. Somit war bei mir der Einsatz schnell wieder drinne. Was diese Grafik von meinen Auszahlung schnell zeigt:

payouts

Für mich persönlich hat es sich sehr gelohnt, weil ich auch den Gewinn direkt wieder reinvestiert habe und so schnell mehr erwirtschaftet habe.

Mein Gutscheincode für euch: WCi9ON

BTC

Servus,

ich nutze für meinen Mailverkehr Mutt. Hier habe ich alle meine E-Mailadresse (5) untergebracht. Ich weiß das meine Konfig nicht die einzige Lösung ist und sicherlich nicht die beste. Doch ich komme sehr gut zurecht, und da ich gefragt wurde, diese zu Teilen, werde ich das hier gerne tun. Wenn es fragen dazu gibt, könnt ihr mich gerne in Jabber/XMPP anschreiben

pr3ach3r@trashserver.net

Installation

Im folgenden werden wir Mutt und einige zusätzliche Programme die wir für die Darstellung und Anhänge benötigen installieren:

apt install mutt w3m sxiv mpv apvlv libreoffice urlview
  • w3m => Darstellung von HTML Mails
  • sxiv => Anzeigen von Bildern
  • mpv => Abspielen von Mediendateien
  • apvlv => PDF Dokumente anzeigen
  • libreoffice => ist glaube ich klar
  • urlview => wie Links geöffnet werden sollen

Ordner

Als nächstes erstellen wir alle wichtigen Ordner:

mkdir .mutt/{alias,cache/{bodies,headers},temp} -p

Anlegen der Konfiguration

Fangen wir mit den leichten Teilen an, und erstellen als erste im Ordner .mutt/ die Datei mailcap und füllen Sie mit folgenden Inhalt:

message/rfc822; less %s; edit=${EDITOR-vi} %s; compose=${EDITOR-vi} %s; needsterminal;
text/html; w3m -I %{charset} -T text/html; copiousoutput;
image/*; sxiv %s &>/dev/null
video/*; mpv %s
audio/*; mpv %s
text/*; vim %s
application/pdf; apvlv %s 
application/odt; libreoffice %s
application/ods; libreoffice %s
application/msword; libreoffice %s
application/vnd.oasis.opendocument.text; libreoffice %s
application/vnd.openxmlformats-officedocument.wordprocessingml.document; libreoffice %s &>/dev/nul

Diese Datei sagt Mutt, wie bestimmte Dateitypen zu handhaben sind.

Als nächstes legen wir im selben Ordner die Datei gpg.rc an, diese Schritt ist optional und gibt an wie wir gerne mit GPG umgehen wollen:

set crypt_use_gpgme = yes
set crypt_autosign = yes
set pgp_timeout = 1800
set pgp_good_sign="gpg: (Korrekte Unterschrift von|Good signature from) "

set crypt_replysign = yes
set crypt_replyencrypt = yes
set crypt_replysignencrypted = yes
set crypt_verify_sig = yes

crypt_replysign => Signiert antworten crypt_replyencrypt => verschlüsselt antworten crypt_replysignencrypted => Signiert und verschlüsselt antworten crypt_verify_sig => Signatur überprüfen

Diese Optionen können noch erweitert werden Mutt Doku

Jetzt legen wir die Datei colors an, diese ist einfach eine Theme, in diesem Fall solarized dark :

# vim: filetype=muttrc

# basic colors ---------------------------------------------------------
color normal        brightyellow    default         
color error         red             default         
color tilde         black           default         
color message       cyan            default         
color markers       red             white           
color attachment    white           default         
color search        brightmagenta   default         
#color status        J_black         J_status        
color status        brightyellow    black           
color indicator     brightblack     yellow          
color tree          yellow          default                                     # arrow in threads

# basic monocolor screen
mono  bold          bold
mono  underline     underline
mono  indicator     reverse
mono  error         bold

# index ----------------------------------------------------------------

color index         red             default         "~A"                        # all messages
color index         brightred       default         "~E"                        # expired messages
color index         blue            default         "~N"                        # new messages
color index         blue            default         "~O"                        # old messages
color index         brightmagenta   default         "~Q"                        # messages that have been replied to
color index         brightgreen     default         "~R"                        # read messages
color index         blue            default         "~U"                        # unread messages
color index         blue            default         "~U~$"                      # unread, unreferenced messages
color index         brightyellow    default         "~v"                        # messages part of a collapsed thread
color index         brightyellow    default         "~P"                        # messages from me
color index         cyan            default         "~p!~F"                     # messages to me
color index         cyan            default         "~N~p!~F"                   # new messages to me
color index         cyan            default         "~U~p!~F"                   # unread messages to me
color index         brightgreen     default         "~R~p!~F"                   # messages to me
color index         red             default         "~F"                        # flagged messages
color index         red             default         "~F~p"                      # flagged messages to me
color index         red             default         "~N~F"                      # new flagged messages
color index         red             default         "~N~F~p"                    # new flagged messages to me
color index         red             default         "~U~F~p"                    # new flagged messages to me
color index         black           red             "~D"                        # deleted messages
color index         brightcyan      default         "~v~(!~N)"                  # collapsed thread with no unread
color index         yellow          default         "~v~(~N)"                   # collapsed thread with some unread
color index         green           default         "~N~v~(~N)"                 # collapsed thread with unread parent
color index         red             black           "~v~(~F)!~N"                # collapsed thread with flagged, no unread
color index         yellow          black           "~v~(~F~N)"                 # collapsed thread with some unread & flagged
color index         green           black           "~N~v~(~F~N)"               # collapsed thread with unread parent & flagged
color index         green           black           "~N~v~(~F)"                 # collapsed thread with unread parent, no unread inside, but some flagged
color index         cyan            black           "~v~(~p)"                   # collapsed thread with unread parent, no unread inside, some to me directly
color index         yellow          red             "~v~(~D)"                   # thread with deleted (doesn't differentiate between all or partial)

# message headers ------------------------------------------------------

#color header        brightgreen     default         "^"
color hdrdefault    brightgreen     default         
color header        brightyellow    default         "^(From)"
color header        blue            default         "^(Subject)"

# body -----------------------------------------------------------------

color quoted        blue            default         
color quoted1       cyan            default         
color quoted2       yellow          default         
color quoted3       red             default         
color quoted4       brightred       default         

color signature     brightgreen     default         
color bold          black           default         
color underline     black           default         
color normal        default         default         
#
color body          brightcyan      default         "[;:][-o][)/(|]"    # emoticons
color body          brightcyan      default         "[;:][)(|]"         # emoticons
color body          brightcyan      default         "[*]?((N)?ACK|CU|LOL|SCNR|BRB|BTW|CWYL|\
                                                     |FWIW|vbg|GD&R|HTH|HTHBE|IMHO|IMNSHO|\
                                                     |IRL|RTFM|ROTFL|ROFL|YMMV)[*]?"
color body          brightcyan      default         "[ ][*][^*]*[*][ ]?" # more emoticon?
color body          brightcyan      default         "[ ]?[*][^*]*[*][ ]" # more emoticon?

## pgp
color body          red             default         "(FALSCHE Unterschrift)"
color body          black           red             "(WARNUNG: Wir haben KEINEN Beleg, dass der Schlüssel zur oben genannten Person gehört)"
color body          green           default         "(Gültige Unterschrift)"
color body          brightblack     default         "^gpg: Gültige Unterschrift .*"
color body          brightyellow    default         "^gpg: "
color body          brightyellow    red             "^gpg: FALSCHE Unterschrift von.*"
mono  body          bold                            "^gpg: Gültige Unterschrift von.*"

# yes, an insance URL regex
color body          red             default         "([a-z][a-z0-9+-]*://(((([a-z0-9_.!~*'();:&=+$,-]|%[0-9a-f][0-9a-f])*@)?((([a-z0-9]([a-z0-9-]*[a-z0-9])?)\\.)*([a-z]([a-z0-9-]*[a-z0-9])?)\\.?|[0-9]+\\.[0-9]+\\.[0-9]+\\.[0-9]+)(:[0-9]+)?)|([a-z0-9_.!~*'()$,;:@&=+-]|%[0-9a-f][0-9a-f])+)(/([a-z0-9_.!~*'():@&=+$,-]|%[0-9a-f][0-9a-f])*(;([a-z0-9_.!~*'():@&=+$,-]|%[0-9a-f][0-9a-f])*)*(/([a-z0-9_.!~*'():@&=+$,-]|%[0-9a-f][0-9a-f])*(;([a-z0-9_.!~*'():@&=+$,-]|%[0-9a-f][0-9a-f])*)*)*)?(\\?([a-z0-9_.!~*'();/?:@&=+$,-]|%[0-9a-f][0-9a-f])*)?(#([a-z0-9_.!~*'();/?:@&=+$,-]|%[0-9a-f][0-9a-f])*)?|(www|ftp)\\.(([a-z0-9]([a-z0-9-]*[a-z0-9])?)\\.)*([a-z]([a-z0-9-]*[a-z0-9])?)\\.?(:[0-9]+)?(/([-a-z0-9_.!~*'():@&=+$,]|%[0-9a-f][0-9a-f])*(;([-a-z0-9_.!~*'():@&=+$,]|%[0-9a-f][0-9a-f])*)*(/([-a-z0-9_.!~*'():@&=+$,]|%[0-9a-f][0-9a-f])*(;([-a-z0-9_.!~*'():@&=+$,]|%[0-9a-f][0-9a-f])*)*)*)?(\\?([-a-z0-9_.!~*'();/?:@&=+$,]|%[0-9a-f][0-9a-f])*)?(#([-a-z0-9_.!~*'();/?:@&=+$,]|%[0-9a-f][0-9a-f])*)?)[^].,:;!)? \t\r\n<>\"]"
# and a heavy handed email regex
#color body          J_magent        default         "((@(([0-9a-z-]+\\.)*[0-9a-z-]+\\.?|#[0-9]+|\\[[0-9]?[0-9]?[0-9]\\.[0-9]?[0-9]?[0-9]\\.[0-9]?[0-9]?[0-9]\\.[0-9]?[0-9]?[0-9]\\]),)*@(([0-9a-z-]+\\.)*[0-9a-z-]+\\.?|#[0-9]+|\\[[0-9]?[0-9]?[0-9]\\.[0-9]?[0-9]?[0-9]\\.[0-9]?[0-9]?[0-9]\\.[0-9]?[0-9]?[0-9]\\]):)?[0-9a-z_.+%$-]+@(([0-9a-z-]+\\.)*[0-9a-z-]+\\.?|#[0-9]+|\\[[0-2]?[0-9]?[0-9]\\.[0-2]?[0-9]?[0-9]\\.[0-2]?[0-9]?[0-9]\\.[0-2]?[0-9]?[0-9]\\])"

Ok kommen wir zum komplizierten Teil, zur eigentlich Mutt Konfiguration. Im folgenden werde ich immer Abschnitt für Abschnitt machen. Am Ende gibt es das Ding dann komplett. Wir legen die Datei muttrc im besagten Ordner an, und fangen an Sie zu befüllen:

macro index <f6> '<sync-mailbox><enter-command>source ~/.mutt/account.example1<enter><change-folder>!<enter>'
macro index <f7> '<sync-mailbox><enter-command>source ~/.mutt/account.example2<enter><change-folder>!<enter>'

folder-hook 'Example1' 'source ~/.mutt/account.example1'
folder-hook 'Example2' 'source ~/.mutt/account.example2'
# switch to default account on startup
source ~/.mutt/account.example1

So, wir legen jetzt zwei Tasten für das Wechseln zwischen den Accounts fest, hier F6 und F7. Diese binden wir an die entsprechenden Account Dateien, die wir dann noch erstellen werden. Zum Schluss sagen wir noch welche Account der default Account ist und beim Start geladen werden soll.

macro pager \cb <pipe-entry>'urlview'<enter> 'Follow links with urlview'
auto_view text/html                                      # view html automatically
alternative_order text/plain text/enriched text/html     # save html for lastw

source ~/.mutt/colors
source ~/.mutt/gpg.rc

Als nächstes legen wir die Taste fest, mit dem wir Links in Mails folgen, und das wir wollen das HTML Mails mit w3m gerendert werden. Zum Schluss binden wir noch die colors und die gpg Datei ein.

Im folgenden noch ein paar Einstellungen, da alle mit Kommentaren versehen sind, werde ich nicht mehr viel dazu sagen:

set header_cache        = ~/.mutt/cache/headers                  # where to store headers        
set message_cachedir    = ~/.mutt/cache/bodies                   # where to store bodies
#set certificate_file    = ~/.mutt/certificates                   # where to store certs
set mailcap_path        = ~/.mutt/mailcap                        # entrys for filetypes
set tmpdir              = ~/.mutt/temp                           # where to keep temp files
set editor 				= "vim +13 -c 'set nobackup' -c 'set noswapfile' -c 'set nowritebackup' -c 'set tw=72 ft=mail noautoindent'" ft=mail noautoindent'"
set ispell              = "/usr/bin/aspell -e -c"                # use aspell as ispell
set imap_peek           = no                                     # Gmail mark as read
set sleep_time          = 0                                      # instantaneous mailbox change

set timeout             = 3                                      # idle time before scanning
set mail_check          = 0                                      # minimum time between scans
set sort_alias          = alias                                  # sort alias file by alias
set reverse_alias                                                # show names from alias file in index
unset move                                                       # gmail does that
set delete                                                       # don't ask, just do
unset confirmappend                                              # don't ask, just do!
set quit                                                         # don't ask, just do!!
unset mark_old                                                   # read/new is good enough for me
set beep_new                                                     # bell on new mails
set pipe_decode                                                  # strip headers and eval mimes when piping
set thorough_search                                              # strip headers and eval mimes before searching
set text_flowed         = yes                                    # no hard breaks in quoted text
unset help
set record            	=+Sent					 # Gesendet Ordner
set sig_on_top          = yes					 # Signatur am Anfang

# index options
set sort                = threads                                # like gmail 
set sort_aux            = reverse-last-date-received             # like gmail
set uncollapse_jump                                              # don't collapse on an unread message 
set sort_re                                                      # thread based on regex
#set reply_regexp        = "^(([Rr][Ee]?(\[[0-9]+\])?: *)?(\[[^]]+\] *)?)*"

set pager_index_lines   = 10                                     # number of index lines to show 
set pager_context       = 5                                      # number of context lines to show
set pager_stop                                                   # don't go to next message automatically
set menu_scroll                                                  # scroll in menus 
set smart_wrap                                                   # don't split words
set tilde                                                        # show tildes like in vim
unset markers                                                    # no ugly plus signs
set quote_regexp        = "^( {0,4}[>|:#%]| {0,4}[a-z0-9]+[>|]+)+"
set status_on_top                                                # as you'd expect

set date_format         = "%d/%m/%y at %I:%M%P"
#set index_format        = "%3C %?X?A& ? %S   %D  •  %-25.25L %s %> %c"
#set pager_format        = "Reading message %C of %m %> %lL [%P]" # pager statusbar
#set folder_format       = "%2C %t %N %8s %d %f"                  # mailbox list view
#set status_format       = " %?M?%M/?%m Mails %?n?%n new, ?%?u?%u unread, ?%?p?%p drafts, ?%?t?%t +tagged, ?%?d?%d deleted, ?[%f %l]  %?b?%b unread messages. ?%>  %V  [%P]"
##set alias_format        = "%4n %t %-20a  %r"

set realname            = "Malte Kiefer"                           # who am i?
set envelope_from                                                # which from?
set sig_dashes                                                   # dashes before my sig... sweet
set edit_headers                                                 # show headers when composing
set fast_reply                                                   # skip to compose when replying
set sendmail_wait       = -1                                     # don't wait for sending... to complete
set askcc                                                        # ask for CC
set askbcc                                                       # and blind CC
set fcc_attach                                                   # save attachments with the body
set mime_forward                                                 # forward attachments as part of body
set mime_forward_rest                                            # include attachments
set forward_format      = "Fwd: %s"                              # format for subject when forwarding
set forward_decode                                               # decode when forwarding
set attribution         = "On %d, %n wrote:"                     # set the attribution
set reply_to                                                     # reply to Reply to: field
set reverse_name                                                 # reply as whomever it was to
set include                                                      # include message in replies
set forward_quote                                                # include message in forwards

ignore *                                                         # ignore all headers
unignore from: to: cc: date: subject:                            # show only these
hdr_order from: to: cc: date: subject:                           # and in this order

Wenn man khard als Adressbuch nutzt, kann man am Ende noch das einfügen:

set query_command= "khard email --parsable %s"
bind editor <Tab> complete-query
bind editor ^T    complete

So kann man beim Eingeben der Empfängeradresse einfach zwiemal Tab drücken und die Adresse wirde aus dem Adressbuch genommen bzw. gesucht.

my_hdr X-PGP-Key: https://malte-kiefer.de/media/pub_maltekiefer.asc
set user_agent = no

Die Infos für diese Zeilen findet ihr hier.

Hier die vollständige Datei:

macro index <f6> '<sync-mailbox><enter-command>source ~/.mutt/account.example1<enter><change-folder>!<enter>'
macro index <f7> '<sync-mailbox><enter-command>source ~/.mutt/account.example2<enter><change-folder>!<enter>'

folder-hook 'mailgermania' 'source ~/.mutt/account.example1'
folder-hook 'kiefer-networks' 'source ~/.mutt/account.example2'
# switch to default account on startup
source ~/.mutt/account.example1
macro pager \cb <pipe-entry>'urlview'<enter> 'Follow links with urlview'
auto_view text/html                                      # view html automatically
alternative_order text/plain text/enriched text/html     # save html for lastw

set header_cache        = ~/.mutt/cache/headers                  # where to store headers        
set message_cachedir    = ~/.mutt/cache/bodies                   # where to store bodies
#set certificate_file    = ~/.mutt/certificates                   # where to store certs
set mailcap_path        = ~/.mutt/mailcap                        # entrys for filetypes
set tmpdir              = ~/.mutt/temp                           # where to keep temp files
set editor 				= "vim +13 -c 'set nobackup' -c 'set noswapfile' -c 'set nowritebackup' -c 'set tw=72 ft=mail noautoindent'" ft=mail noautoindent'"
set ispell              = "/usr/bin/aspell -e -c"                # use aspell as ispell
set imap_peek           = no                                     # Gmail mark as read
set sleep_time          = 0                                      # instantaneous mailbox change

set timeout             = 3                                      # idle time before scanning
set mail_check          = 0                                      # minimum time between scans
set sort_alias          = alias                                  # sort alias file by alias
set reverse_alias                                                # show names from alias file in index
unset move                                                       # gmail does that
set delete                                                       # don't ask, just do
unset confirmappend                                              # don't ask, just do!
set quit                                                         # don't ask, just do!!
unset mark_old                                                   # read/new is good enough for me
set beep_new                                                     # bell on new mails
set pipe_decode                                                  # strip headers and eval mimes when piping
set thorough_search                                              # strip headers and eval mimes before searching
set text_flowed         = yes                                    # no hard breaks in quoted text
unset help
set sig_on_top          = yes					 # Signatur am Anfang

# index options
set sort                = threads                                # like gmail 
set sort_aux            = reverse-last-date-received             # like gmail
set uncollapse_jump                                              # don't collapse on an unread message 
set sort_re                                                      # thread based on regex
#set reply_regexp        = "^(([Rr][Ee]?(\[[0-9]+\])?: *)?(\[[^]]+\] *)?)*"

set pager_index_lines   = 10                                     # number of index lines to show 
set pager_context       = 5                                      # number of context lines to show
set pager_stop                                                   # don't go to next message automatically
set menu_scroll                                                  # scroll in menus 
set smart_wrap                                                   # don't split words
set tilde                                                        # show tildes like in vim
unset markers                                                    # no ugly plus signs
set quote_regexp        = "^( {0,4}[>|:#%]| {0,4}[a-z0-9]+[>|]+)+"
set status_on_top                                                # as you'd expect

set date_format         = "%d/%m/%y at %I:%M%P"
#set index_format        = "%3C %?X?A& ? %S   %D  •  %-25.25L %s %> %c"
#set pager_format        = "Reading message %C of %m %> %lL [%P]" # pager statusbar
#set folder_format       = "%2C %t %N %8s %d %f"                  # mailbox list view
#set status_format       = " %?M?%M/?%m Mails %?n?%n new, ?%?u?%u unread, ?%?p?%p drafts, ?%?t?%t +tagged, ?%?d?%d deleted, ?[%f %l]  %?b?%b unread messages. ?%>  %V  [%P]"
##set alias_format        = "%4n %t %-20a  %r"

set realname            = "Malte Kiefer"                           # who am i?
set envelope_from                                                # which from?
set sig_dashes                                                   # dashes before my sig... sweet
set edit_headers                                                 # show headers when composing
set fast_reply                                                   # skip to compose when replying
set sendmail_wait       = -1                                     # don't wait for sending... to complete
set askcc                                                        # ask for CC
set askbcc                                                       # and blind CC
set fcc_attach                                                   # save attachments with the body
set mime_forward                                                 # forward attachments as part of body
set mime_forward_rest                                            # include attachments
set forward_format      = "Fwd: %s"                              # format for subject when forwarding
set forward_decode                                               # decode when forwarding
set attribution         = "On %d, %n wrote:"                     # set the attribution
set reply_to                                                     # reply to Reply to: field
set reverse_name                                                 # reply as whomever it was to
set include                                                      # include message in replies
set forward_quote                                                # include message in forwards

ignore *                                                         # ignore all headers
unignore from: to: cc: date: subject:                            # show only these
hdr_order from: to: cc: date: subject:                           # and in this order
source ~/.mutt/colors
source ~/.mutt/gpg.rc
set query_command= "khard email --parsable %s"
bind editor <Tab> complete-query
bind editor ^T    complete

my_hdr X-PGP-Key: https://malte-kiefer.de/media/pub_maltekiefer.asc
set user_agent = no

Acounts

Jetzt fehlen uns noch die Account Dateien, fangen wir gleich an: account.example1

set from=mail@example.de
set hostname="example.de"
set folder="imaps://mail.example.de/"
set postponed="=Drafts"
set spoolfile="imaps://mail.example.de/INBOX"
set smtp_url="smtps://$imap_user:$imap_pass@mail.example.de:465"
set imap_user="USERNAME"
set imap_pass="PASSWORD"

# SSL hardening
set ssl_force_tls=yes
set ssl_starttls=yes
set ssl_use_sslv3=no
set ssl_use_tlsv1=no
set ssl_use_tlsv1_1=no
set ssl_use_tlsv1_2=yes
set ssl_verify_dates=yes
set ssl_verify_host=yes

Und den Zweiten account.example2

set from=mail@example2.org
set hostname="example2.org"
set folder="imaps://imap.example2.org"
set postponed="=Drafts"
set spoolfile="imaps://imap.example2.org/INBOX"
set smtp_url="smtp://$imap_user:$imap_pass@smtp.example2.org"
set imap_user="USERNAME"
set imap_pass="PASSWORD"

# SSL hardening
set ssl_force_tls=yes
set ssl_starttls=yes
set ssl_use_sslv3=no
set ssl_use_tlsv1=no
set ssl_use_tlsv1_1=no
set ssl_use_tlsv1_2=yes
set ssl_verify_dates=yes
set ssl_verify_host=yes

Nutzung

Durch das eingeben von mutt im Terminal wird das Mailprogramm gestartet. Die erste Übersicht, die ihr seht, nennt man index. Jetzt könnt ihr mit F6 und F7 zwischen den Accounts hin und her springen.

Hier mal die wichtigsten Keys:

Mutt Cheat Sheet

Vor ein paar Tagen wurde Raspbian, die Debian-Distribution für den Raspberry Pi, auf das neue Release mit dem Namen Stretch aktualisiert. Debian benennt seine Releases nach Figuren aus dem Toy Story Universum. Nach dem Cowgirl Jessi, folgt nun der Octopus Stretch, Um bestehende Installationen, welche noch mit der älteren Version laufen, zu aktualisieren, sollte man sich per SSH mit dem entsprechenden Raspberry Pi verbinden. Dort gibt man dann folgendes ein:

apt-get update
apt-get dist-upgrade

Damit wird die bestehende Version (Jessi) auf die aktuelle Version aktualisiert. Im nächsten Schritt müssen die Paketquellen angepasst werden. Dazu muss die sources.list-Datei in einem Editor geöffnet werden:

nano /etc/apt/sources.list

Die Datei sieht dabei im Normalfall wie folgt aus:

deb http://mirrordirector.raspbian.org/raspbian/ jessi main contrib non-free rpi
# Uncomment line below then 'apt-get update' to enable 'apt-get source'
#deb-src http://archive.raspbian.org/raspbian/ jessie main contrib non-free rpi

Die Zeichenkette jessi muss nun durch stretch ausgetauscht werden. Das gleiche gilt für Dateien die im Ordner /etc/apt/sources.list.d/ liegen. Anschließend müssen die Pakete auf die neue Version (Stretch) aktualisiert werden:

apt-get update
apt-get dist-upgrade

Je nach Anzahl der installierten Pakete, kann dieser Vorgang durchaus einige Stunden in Anspruch nehmen. Unter Umständen wird gefragt, ob bestimmte Konfigurationsdateien überschrieben oder behalten werden sollen. Hier sollte man je nach Fall abwägen. Bei Konfigurationen, die manuell angepasst worden sind, kann ein Überschreiben derselben zu Problemen führen, da die Dienste dann eventuell nicht mehr so laufen wie ursprünglich gewünscht. Wenn der Vorgang abgeschlossen ist, sollten noch einige Aufräumarbeiten angestartet werden:

apt-get autoremove
apt-get autoclean

Anschließend kann der Raspberry Pi mittels des Befehls reboot neugestartet werden.

Servus,

ich nutze für meinen Mailverkehr Mutt. Hier habe ich alle meine E-Mailadresse (5) untergebracht. Ich weiß das meine Konfig nicht die einzige Lösung ist und sicherlich nicht die beste. Doch ich komme sehr gut zurecht, und da ich gefragt wurde, diese zu Teilen, werde ich das hier gerne tun. Wenn es fragen dazu gibt, könnt ihr mich gerne in Jabber/XMPP anschreiben

pr3ach3r@trashserver.net

Installation

Im folgenden werden wir Mutt und einige zusätzliche Programme die wir für die Darstellung und Anhänge benötigen installieren:

apt install mutt w3m sxiv mpv apvlv libreoffice urlview
  • w3m => Darstellung von HTML Mails
  • sxiv => Anzeigen von Bildern
  • mpv => Abspielen von Mediendateien
  • apvlv => PDF Dokumente anzeigen
  • libreoffice => ist glaube ich klar
  • urlview => wie Links geöffnet werden sollen

Ordner

Als nächstes erstellen wir alle wichtigen Ordner:

mkdir .mutt/{alias,cache/{bodies,headers},temp} -p

Anlegen der Konfiguration

Fangen wir mit den leichten Teilen an, und erstellen als erste im Ordner .mutt/ die Datei mailcap und füllen Sie mit folgenden Inhalt:

message/rfc822; less %s; edit=${EDITOR-vi} %s; compose=${EDITOR-vi} %s; needsterminal;
text/html; w3m -I %{charset} -T text/html; copiousoutput;
image/*; sxiv %s &>/dev/null
video/*; mpv %s
audio/*; mpv %s
text/*; vim %s
application/pdf; apvlv %s
application/odt; libreoffice %s
application/ods; libreoffice %s
application/msword; libreoffice %s
application/vnd.oasis.opendocument.text; libreoffice %s
application/vnd.openxmlformats-officedocument.wordprocessingml.document; libreoffice %s &>/dev/nul

Diese Datei sagt Mutt, wie bestimmte Dateitypen zu handhaben sind.

Als nächstes legen wir im selben Ordner die Datei gpg.rc an, diese Schritt ist optional und gibt an wie wir gerne mit GPG umgehen wollen:

set crypt_use_gpgme = yes
set crypt_autosign = yes
set pgp_timeout = 1800
set pgp_good_sign="gpg: (Korrekte Unterschrift von|Good signature from) "

set crypt_replysign = yes
set crypt_replyencrypt = yes
set crypt_replysignencrypted = yes
set crypt_verify_sig = yes
  • crypt_replysign => Signiert antworten
  • crypt_replyencrypt => verschlüsselt antworten
  • crypt_replysignencrypted => Signiert und verschlüsselt antworten
  • crypt_verify_sig => Signatur überprüfen

Diese Optionen können noch erweitert werden Mutt Doku

Jetzt legen wir die Datei colors an, diese ist einfach eine Theme, in diesem Fall solarized dark :

# vim: filetype=muttrc

# basic colors ---------------------------------------------------------
color normal        brightyellow    default         
color error         red             default         
color tilde         black           default         
color message       cyan            default         
color markers       red             white           
color attachment    white           default         
color search        brightmagenta   default         
#color status        J_black         J_status        
color status        brightyellow    black           
color indicator     brightblack     yellow          
color tree          yellow          default                                     # arrow in threads

# basic monocolor screen
mono  bold          bold
mono  underline     underline
mono  indicator     reverse
mono  error         bold

# index ----------------------------------------------------------------

color index         red             default         "~A"                        # all messages
color index         brightred       default         "~E"                        # expired messages
color index         blue            default         "~N"                        # new messages
color index         blue            default         "~O"                        # old messages
color index         brightmagenta   default         "~Q"                        # messages that have been replied to
color index         brightgreen     default         "~R"                        # read messages
color index         blue            default         "~U"                        # unread messages
color index         blue            default         "~U~$"                      # unread, unreferenced messages
color index         brightyellow    default         "~v"                        # messages part of a collapsed thread
color index         brightyellow    default         "~P"                        # messages from me
color index         cyan            default         "~p!~F"                     # messages to me
color index         cyan            default         "~N~p!~F"                   # new messages to me
color index         cyan            default         "~U~p!~F"                   # unread messages to me
color index         brightgreen     default         "~R~p!~F"                   # messages to me
color index         red             default         "~F"                        # flagged messages
color index         red             default         "~F~p"                      # flagged messages to me
color index         red             default         "~N~F"                      # new flagged messages
color index         red             default         "~N~F~p"                    # new flagged messages to me
color index         red             default         "~U~F~p"                    # new flagged messages to me
color index         black           red             "~D"                        # deleted messages
color index         brightcyan      default         "~v~(!~N)"                  # collapsed thread with no unread
color index         yellow          default         "~v~(~N)"                   # collapsed thread with some unread
color index         green           default         "~N~v~(~N)"                 # collapsed thread with unread parent
color index         red             black           "~v~(~F)!~N"                # collapsed thread with flagged, no unread
color index         yellow          black           "~v~(~F~N)"                 # collapsed thread with some unread & flagged
color index         green           black           "~N~v~(~F~N)"               # collapsed thread with unread parent & flagged
color index         green           black           "~N~v~(~F)"                 # collapsed thread with unread parent, no unread inside, but some flagged
color index         cyan            black           "~v~(~p)"                   # collapsed thread with unread parent, no unread inside, some to me directly
color index         yellow          red             "~v~(~D)"                   # thread with deleted (doesn't differentiate between all or partial)

# message headers ------------------------------------------------------

#color header        brightgreen     default         "^"
color hdrdefault    brightgreen     default         
color header        brightyellow    default         "^(From)"
color header        blue            default         "^(Subject)"

# body -----------------------------------------------------------------

color quoted        blue            default         
color quoted1       cyan            default         
color quoted2       yellow          default         
color quoted3       red             default         
color quoted4       brightred       default         

color signature     brightgreen     default         
color bold          black           default         
color underline     black           default         
color normal        default         default         
#
color body          brightcyan      default         "[;:][-o][)/(|]"    # emoticons
color body          brightcyan      default         "[;:][)(|]"         # emoticons
color body          brightcyan      default         "[*]?((N)?ACK|CU|LOL|SCNR|BRB|BTW|CWYL|\
                                                     |FWIW|vbg|GD&R|HTH|HTHBE|IMHO|IMNSHO|\
                                                     |IRL|RTFM|ROTFL|ROFL|YMMV)[*]?"
color body          brightcyan      default         "[ ][*][^*]*[*][ ]?" # more emoticon?
color body          brightcyan      default         "[ ]?[*][^*]*[*][ ]" # more emoticon?

## pgp
color body          red             default         "(FALSCHE Unterschrift)"
color body          black           red             "(WARNUNG: Wir haben KEINEN Beleg, dass der Schlüssel zur oben genannten Person gehört)"
color body          green           default         "(Gültige Unterschrift)"
color body          brightblack     default         "^gpg: Gültige Unterschrift .*"
color body          brightyellow    default         "^gpg: "
color body          brightyellow    red             "^gpg: FALSCHE Unterschrift von.*"
mono  body          bold                            "^gpg: Gültige Unterschrift von.*"

# yes, an insance URL regex
color body          red             default         "([a-z][a-z0-9+-]*://(((([a-z0-9_.!~*'();:&=+$,-]|%[0-9a-f][0-9a-f])*@)?((([a-z0-9]([a-z0-9-]*[a-z0-9])?)\\.)*([a-z]([a-z0-9-]*[a-z0-9])?)\\.?|[0-9]+\\.[0-9]+\\.[0-9]+\\.[0-9]+)(:[0-9]+)?)|([a-z0-9_.!~*'()$,;:@&=+-]|%[0-9a-f][0-9a-f])+)(/([a-z0-9_.!~*'():@&=+$,-]|%[0-9a-f][0-9a-f])*(;([a-z0-9_.!~*'():@&=+$,-]|%[0-9a-f][0-9a-f])*)*(/([a-z0-9_.!~*'():@&=+$,-]|%[0-9a-f][0-9a-f])*(;([a-z0-9_.!~*'():@&=+$,-]|%[0-9a-f][0-9a-f])*)*)*)?(\\?([a-z0-9_.!~*'();/?:@&=+$,-]|%[0-9a-f][0-9a-f])*)?(#([a-z0-9_.!~*'();/?:@&=+$,-]|%[0-9a-f][0-9a-f])*)?|(www|ftp)\\.(([a-z0-9]([a-z0-9-]*[a-z0-9])?)\\.)*([a-z]([a-z0-9-]*[a-z0-9])?)\\.?(:[0-9]+)?(/([-a-z0-9_.!~*'():@&=+$,]|%[0-9a-f][0-9a-f])*(;([-a-z0-9_.!~*'():@&=+$,]|%[0-9a-f][0-9a-f])*)*(/([-a-z0-9_.!~*'():@&=+$,]|%[0-9a-f][0-9a-f])*(;([-a-z0-9_.!~*'():@&=+$,]|%[0-9a-f][0-9a-f])*)*)*)?(\\?([-a-z0-9_.!~*'();/?:@&=+$,]|%[0-9a-f][0-9a-f])*)?(#([-a-z0-9_.!~*'();/?:@&=+$,]|%[0-9a-f][0-9a-f])*)?)[^].,:;!)? \t\r\n<>\"]"
# and a heavy handed email regex
#color body          J_magent        default         "((@(([0-9a-z-]+\\.)*[0-9a-z-]+\\.?|#[0-9]+|\\[[0-9]?[0-9]?[0-9]\\.[0-9]?[0-9]?[0-9]\\.[0-9]?[0-9]?[0-9]\\.[0-9]?[0-9]?[0-9]\\]),)*@(([0-9a-z-]+\\.)*[0-9a-z-]+\\.?|#[0-9]+|\\[[0-9]?[0-9]?[0-9]\\.[0-9]?[0-9]?[0-9]\\.[0-9]?[0-9]?[0-9]\\.[0-9]?[0-9]?[0-9]\\]):)?[0-9a-z_.+%$-]+@(([0-9a-z-]+\\.)*[0-9a-z-]+\\.?|#[0-9]+|\\[[0-2]?[0-9]?[0-9]\\.[0-2]?[0-9]?[0-9]\\.[0-2]?[0-9]?[0-9]\\.[0-2]?[0-9]?[0-9]\\])"

Ok kommen wir zum komplizierten Teil, zur eigentlich Mutt Konfiguration. Im folgenden werde ich immer Abschnitt für Abschnitt machen. Am Ende gibt es das Ding dann komplett. Wir legen die Datei muttrc im besagten Ordner an, und fangen an Sie zu befüllen:

source "~/.mutt/account.exmaple2"
folder-hook $folder 'source ~/.mutt/example2'
source "~/.mutt/account.example1"
folder-hook $folder 'source ~/.mutt/example1'

macro index <f3> '<sync-mailbox><enter-command>source ~/.mutt/account.example1<enter><change-folder>!<enter>'
macro index <f4> '<sync-mailbox><enter-command>source ~/.mutt/account.example2<enter><change-folder>!<enter>'

So, wir legen jetzt zwei Tasten für das Wechseln zwischen den Accounts fest, hier F6 und F7. Diese binden wir an die entsprechenden Account Dateien, die wir dann noch erstellen werden. Zum Schluss sagen wir noch welche Account der default Account ist und beim Start geladen werden soll

macro pager \cb <pipe-entry>'urlview'<enter> 'Follow links with urlview'
auto_view text/html                                      # view html automatically
alternative_order text/plain text/enriched text/html     # save html for lastw

source ~/.mutt/colors
source ~/.mutt/gpg.rc

Als nächstes legen wir die Taste fest, mit dem wir Links in Mails folgen, und das wir wollen das HTML Mails mit w3m gerendert werden. Zum Schluss binden wir noch die colors und die gpg Datei ein.

Im folgenden noch ein paar Einstellungen, da alle mit Kommentaren versehen sind, werde ich nicht mehr viel dazu sagen:

set header_cache        = ~/.mutt/cache/headers                  # where to store headers        
set message_cachedir    = ~/.mutt/cache/bodies                   # where to store bodies
#set certificate_file    = ~/.mutt/certificates                   # where to store certs
set mailcap_path        = ~/.mutt/mailcap                        # entrys for filetypes
set tmpdir              = ~/.mutt/temp                           # where to keep temp files
set editor 				= "vim +13 -c 'set nobackup' -c 'set noswapfile' -c 'set nowritebackup' -c 'set tw=72 ft=mail noautoindent'" ft=mail noautoindent'"
set ispell              = "/usr/bin/aspell -e -c"                # use aspell as ispell
set imap_peek           = no                                     # Gmail mark as read
set sleep_time          = 0                                      # instantaneous mailbox change

set timeout             = 3                                      # idle time before scanning
set mail_check          = 0                                      # minimum time between scans
set sort_alias          = alias                                  # sort alias file by alias
set reverse_alias                                                # show names from alias file in index
unset move                                                       # gmail does that
set delete                                                       # don't ask, just do
unset confirmappend                                              # don't ask, just do!
set quit                                                         # don't ask, just do!!
unset mark_old                                                   # read/new is good enough for me
set beep_new                                                     # bell on new mails
set pipe_decode                                                  # strip headers and eval mimes when piping
set thorough_search                                              # strip headers and eval mimes before searching
set text_flowed         = yes                                    # no hard breaks in quoted text
unset help
set record            	=+Sent					 # Gesendet Ordner
set sig_on_top          = yes					 # Signatur am Anfang

# index options
set sort                = threads                                # like gmail 
set sort_aux            = reverse-last-date-received             # like gmail
set uncollapse_jump                                              # don't collapse on an unread message 
set sort_re                                                      # thread based on regex
#set reply_regexp        = "^(([Rr][Ee]?(\[[0-9]+\])?: *)?(\[[^]]+\] *)?)*"

set pager_index_lines   = 10                                     # number of index lines to show 
set pager_context       = 5                                      # number of context lines to show
set pager_stop                                                   # don't go to next message automatically
set menu_scroll                                                  # scroll in menus 
set smart_wrap                                                   # don't split words
set tilde                                                        # show tildes like in vim
unset markers                                                    # no ugly plus signs
set quote_regexp        = "^( {0,4}[>|:#%]| {0,4}[a-z0-9]+[>|]+)+"
set status_on_top                                                # as you'd expect

set date_format         = "%d/%m/%y at %I:%M%P"
#set index_format        = "%3C %?X?A& ? %S   %D  •  %-25.25L %s %> %c"
#set pager_format        = "Reading message %C of %m %> %lL [%P]" # pager statusbar
#set folder_format       = "%2C %t %N %8s %d %f"                  # mailbox list view
#set status_format       = " %?M?%M/?%m Mails %?n?%n new, ?%?u?%u unread, ?%?p?%p drafts, ?%?t?%t +tagged, ?%?d?%d deleted, ?[%f %l]  %?b?%b unread messages. ?%>  %V  [%P]"
##set alias_format        = "%4n %t %-20a  %r"

set realname            = "Malte Kiefer"                           # who am i?
set envelope_from                                                # which from?
set sig_dashes                                                   # dashes before my sig... sweet
set edit_headers                                                 # show headers when composing
set fast_reply                                                   # skip to compose when replying
set sendmail_wait       = -1                                     # don't wait for sending... to complete
set askcc                                                        # ask for CC
set askbcc                                                       # and blind CC
set fcc_attach                                                   # save attachments with the body
set mime_forward                                                 # forward attachments as part of body
set mime_forward_rest                                            # include attachments
set forward_format      = "Fwd: %s"                              # format for subject when forwarding
set forward_decode                                               # decode when forwarding
set attribution         = "On %d, %n wrote:"                     # set the attribution
set reply_to                                                     # reply to Reply to: field
set reverse_name                                                 # reply as whomever it was to
set include                                                      # include message in replies
set forward_quote                                                # include message in forwards

ignore *                                                         # ignore all headers
unignore from: to: cc: date: subject:                            # show only these
hdr_order from: to: cc: date: subject:                           # and in this order

Wenn man khard als Adressbuch nutzt, kann man am Ende noch das einfügen:

set query_command= "khard email --parsable %s"
bind editor <Tab> complete-query
bind editor ^T    complete

So kann man beim Eingeben der Empfängeradresse einfach zwiemal Tab drücken und die Adresse wirde aus dem Adressbuch genommen bzw. gesucht.

my_hdr X-PGP-Key: https://malte-kiefer.de/media/pub_maltekiefer.asc
set user_agent = no

Hier die vollständige Datei:

source "~/.mutt/account.exmaple2"
folder-hook $folder 'source ~/.mutt/example2'
source "~/.mutt/account.example1"
folder-hook $folder 'source ~/.mutt/example1'

macro index <f3> '<sync-mailbox><enter-command>source ~/.mutt/account.example1<enter><change-folder>!<enter>'
macro index <f4> '<sync-mailbox><enter-command>source ~/.mutt/account.example2<enter><change-folder>!<enter>'

macro pager \cb <pipe-entry>'urlview'<enter> 'Follow links with urlview'
auto_view text/html                                      # view html automatically
alternative_order text/plain text/enriched text/html     # save html for lastw

set header_cache        = ~/.mutt/cache/headers                  # where to store headers
set message_cachedir    = ~/.mutt/cache/bodies                   # where to store bodies
#set certificate_file    = ~/.mutt/certificates                   # where to store certs
set mailcap_path        = ~/.mutt/mailcap                        # entrys for filetypes
set tmpdir              = ~/.mutt/temp                           # where to keep temp files
set editor 				= "vim +13 -c 'set nobackup' -c 'set noswapfile' -c 'set nowritebackup' -c 'set tw=72 ft=mail noautoindent'" ft=mail noautoindent'"
set ispell              = "/usr/bin/aspell -e -c"                # use aspell as ispell
set imap_peek           = no                                     # Gmail mark as read
set sleep_time          = 0                                      # instantaneous mailbox change

set timeout             = 3                                      # idle time before scanning
set mail_check          = 0                                      # minimum time between scans
set sort_alias          = alias                                  # sort alias file by alias
set reverse_alias                                                # show names from alias file in index
unset move                                                       # gmail does that
set delete                                                       # don't ask, just do
unset confirmappend                                              # don't ask, just do!
set quit                                                         # don't ask, just do!!
unset mark_old                                                   # read/new is good enough for me
set beep_new                                                     # bell on new mails
set pipe_decode                                                  # strip headers and eval mimes when piping
set thorough_search                                              # strip headers and eval mimes before searching
set text_flowed         = yes                                    # no hard breaks in quoted text
unset help
set sig_on_top          = yes					 # Signatur am Anfang

# index options
set sort                = threads                                # like gmail
set sort_aux            = reverse-last-date-received             # like gmail
set uncollapse_jump                                              # don't collapse on an unread message
set sort_re                                                      # thread based on regex
#set reply_regexp        = "^(([Rr][Ee]?(\[[0-9]+\])?: *)?(\[[^]]+\] *)?)*"

set pager_index_lines   = 10                                     # number of index lines to show
set pager_context       = 5                                      # number of context lines to show
set pager_stop                                                   # don't go to next message automatically
set menu_scroll                                                  # scroll in menus
set smart_wrap                                                   # don't split words
set tilde                                                        # show tildes like in vim
unset markers                                                    # no ugly plus signs
set quote_regexp        = "^( {0,4}[>|:#%]| {0,4}[a-z0-9]+[>|]+)+"
set status_on_top                                                # as you'd expect

set date_format         = "%d/%m/%y at %I:%M%P"
#set index_format        = "%3C %?X?A& ? %S   %D  •  %-25.25L %s %> %c"
#set pager_format        = "Reading message %C of %m %> %lL [%P]" # pager statusbar
#set folder_format       = "%2C %t %N %8s %d %f"                  # mailbox list view
#set status_format       = " %?M?%M/?%m Mails %?n?%n new, ?%?u?%u unread, ?%?p?%p drafts, ?%?t?%t +tagged, ?%?d?%d deleted, ?[%f %l]  %?b?%b unread messages. ?%>  %V  [%P]"
##set alias_format        = "%4n %t %-20a  %r"

set realname            = "Malte Kiefer"                           # who am i?
set envelope_from                                                # which from?
set sig_dashes                                                   # dashes before my sig... sweet
set edit_headers                                                 # show headers when composing
set fast_reply                                                   # skip to compose when replying
set sendmail_wait       = -1                                     # don't wait for sending... to complete
set askcc                                                        # ask for CC
set askbcc                                                       # and blind CC
set fcc_attach                                                   # save attachments with the body
set mime_forward                                                 # forward attachments as part of body
set mime_forward_rest                                            # include attachments
set forward_format      = "Fwd: %s"                              # format for subject when forwarding
set forward_decode                                               # decode when forwarding
set attribution         = "On %d, %n wrote:"                     # set the attribution
set reply_to                                                     # reply to Reply to: field
set reverse_name                                                 # reply as whomever it was to
set include                                                      # include message in replies
set forward_quote                                                # include message in forwards

ignore *                                                         # ignore all headers
unignore from: to: cc: date: subject:                            # show only these
hdr_order from: to: cc: date: subject:                           # and in this order
source ~/.mutt/colors
source ~/.mutt/gpg.rc
set query_command= "khard email --parsable %s"
bind editor <Tab> complete-query
bind editor ^T    complete

my_hdr X-PGP-Key: https://malte-kiefer.de/media/pub_maltekiefer.asc
set user_agent = no

Acounts

Jetzt fehlen uns noch die Account Dateien, fangen wir gleich an: account.example1

set from=mail@example.de
set hostname="example.de"
set folder="imaps://mail.example.de/"
set postponed="=Drafts"
set spoolfile="imaps://mail.example.de/INBOX"
set smtp_url="smtps://$imap_user:$imap_pass@mail.example.de:465"
set imap_user="USERNAME"
set imap_pass="PASSWORD"

# SSL hardening
set ssl_force_tls=yes
set ssl_starttls=yes
set ssl_use_sslv3=no
set ssl_use_tlsv1=no
set ssl_use_tlsv1_1=no
set ssl_use_tlsv1_2=yes
set ssl_verify_dates=yes
set ssl_verify_host=yes

Und den Zweiten account.example2

set from=mail@example2.org
set hostname="example2.org"
set folder="imaps://imap.example2.org"
set postponed="=Drafts"
set spoolfile="imaps://imap.example2.org/INBOX"
set smtp_url="smtp://$imap_user:$imap_pass@smtp.example2.org"
set imap_user="USERNAME"
set imap_pass="PASSWORD"

# SSL hardening
set ssl_force_tls=yes
set ssl_starttls=yes
set ssl_use_sslv3=no
set ssl_use_tlsv1=no
set ssl_use_tlsv1_1=no
set ssl_use_tlsv1_2=yes
set ssl_verify_dates=yes
set ssl_verify_host=yes

Nutzung

Durch das eingeben von mutt im Terminal wird das Mailprogramm gestartet. Die erste Übersicht, die ihr seht, nennt man index. Jetzt könnt ihr mit F6 und F7 zwischen den Accounts hin und her springen.

Hier mal die wichtigsten Keys:

Mutt Cheat Sheet

19. August 2017

SSH-Tunnel sind eine feine Sache, ermöglichen sie doch, dass nach außen nicht erreichbare Ports auch auf dem lokalen Rechner getunnelt werden können. Beispielsweise ist so meine rspamd-Installation erreichbar. Diese lauscht serverseitig nur auf localhost, ist durch einen SSH-Tunnel allerdings für mich auch auf meinem lokalen Client nutzbar.

In der Regel nutzt man dafür einfach die Konsole. Ich selbst mag es allerdings ein wenig komfortabler und nutze nun seit einiger Zit Secure Pipes, einem Tunnelmanager für macOS.

secure_pipes

Läuft problemlos unter macOS Sierra und ist kostenlos. :-)

Secure Pipes - SSH-Tunnelmanager für macOS

SSH-Tunnel sind eine feine Sache, ermöglichen sie doch, dass nach außen nicht erreichbare Ports auch auf dem lokalen Rechner getunnelt werden können. Beispielsweise ist so meine rspamd-Installation erreichbar. Diese lauscht serverseitig nur auf localhost, ist durch einen SSH-Tunnel allerdings für mich auch auf meinem lokalen Client nutzbar.

In der Regel nutzt man dafür einfach die Konsole. Ich selbst mag es allerdings ein wenig komfortabler und nutze nun seit einiger Zit Secure Pipes, einem Tunnelmanager für macOS.

Secure Pipes - SSH-Tunnelmanager für macOS

Läuft problemlos unter macOS Sierra und ist kostenlos. :-)

Secure Pipes - SSH-Tunnelmanager für macOS

SSH-Tunnel sind eine feine Sache, ermöglichen sie doch, dass nach außen nicht erreichbare Ports auch auf dem lokalen Rechner getunnelt werden können. Beispielsweise ist so meine rspamd-Installation erreichbar. Diese lauscht serverseitig nur auf localhost, ist durch einen SSH-Tunnel allerdings für mich auch auf meinem lokalen Client nutzbar.

In der Regel nutzt man dafür einfach die Konsole. Ich selbst mag es allerdings ein wenig komfortabler und nutze nun seit einiger Zit Secure Pipes, einem Tunnelmanager für macOS.

Secure Pipes - SSH-Tunnelmanager für macOS

Läuft problemlos unter macOS Sierra und ist kostenlos. :-)

Secure Pipes - SSH-Tunnelmanager für macOS

SSH-Tunnel sind eine feine Sache, ermöglichen sie doch, dass nach außen nicht erreichbare Ports auch auf dem lokalen Rechner getunnelt werden können. Beispielsweise ist so meine rspamd-Installation erreichbar. Diese lauscht serverseitig nur auf localhost, ist durch einen SSH-Tunnel allerdings für mich auch auf meinem lokalen Client nutzbar.

In der Regel nutzt man dafür einfach die Konsole. Ich selbst mag es allerdings ein wenig komfortabler und nutze nun seit einiger Zit Secure Pipes, einem Tunnelmanager für macOS.

Secure Pipes - SSH-Tunnelmanager für macOS

Läuft problemlos unter macOS Sierra und ist kostenlos. :-)