Fork me on GitHub Fork me on GitHub

uninformativ.de

GNU, Linux, Shell und Co.

UW ttyp0

Pingu-Avatar

2015-07-27, 19:32:15

So um die sieben Jahre habe ich jetzt Terminus als Schriftart benutzt. So gut wie überall. Warum? Weil es ein scharfer Bitmap-Font ist und er eine ganz gute Unicode-Abdeckung hat. Leider ist die Unicode-Abdeckung nur „gut“ und nicht „großartig“. Deswegen habe ich irgendwann angefangen, Terminus zu patchen, um die paar Zeichen nachzutragen, die mir gefehlt haben. Besonders viel Wartungsaufwand entstand dadurch nicht – das war eigentlich jeweils eine einmalige Sache. Trotzdem habe ich mich immer mal wieder nach Alternativen umgesehen.

So einfach ist das aber gar nicht. Zumindest nicht, wenn man aus Deutschland kommt und mal mindestens Umlaute benötigt. Wenn man dann noch gerne weitere Sonderzeichen oder Box Drawing oder so haben möchte, dann sieht es ganz schnell ganz duster aus. Unsere Freunde aus dem Osten, die gerne ein kyrillisches Alphabet oder gar arabische oder asiatische Zeichen haben möchten, sind wohl noch schlechter dran. So gut wie alle Bitmap-Fonts unterstützen ASCII und vielleicht noch Latin1. Das war’s. Ist ja, zugegebenermaßen, auch ziemlich viel Arbeit so in der Summe.

Eine Alternative ist „fixed“. Die Unicode-Abdeckung ist hier auch ziemlich gut – bloß leider nur in genau einer Variante: „-*-fixed-medium-r-semicondensed-*-13-*-*-*-*-*-iso10646-*“. Ich brauche aber mehrere Größen, zum einen für mein Notebook, welches eine Auflösung von 1920x1080 bei 15" hat und damit einen größeren Font braucht, zum anderen für Terminal-Sessions am Beamer.

Die andere Alternative ist, in den sauren Apfel zu beißen und Vector Fonts zu verwenden. Hier scheiden sich jetzt die Geister. Manche finden das ohnehin besser, anderen kommt ein Vector Font einfach nur matschig und unscharf vor. Ich gehöre leider zu letzterer Gruppe. Ich habe es mehrfach probiert, mich dazu gezwungen und viel experimentiert. Am Ende bin ich immer wieder zu Terminus zurück. Ich habe halt auch (bis auf das Notebook) noch Displays mit weniger als 100 dpi. Wenn sich so richtig hochauflösende Displays mal flächendeckend durchgesetzt haben, dann sprechen wir nochmal.

Die Tage bin ich dann über einen Font gestoßen, von dem ich noch nie gehört hatte: UW ttyp0. Dass mir der Font bisher unbekannt war, könnte daran liegen, dass er noch vergleichsweise jung ist, nämlich von 2012. Ich finde, dass UW ttyp0 mehr Aufmerksamkeit verdient. So sieht er aus:

inline thumbnail

Er kommt mir ein bisschen „fuzzier“ vor als Terminus. Vielleicht habe ich mich auch nur noch nicht daran gewöhnt. Es gibt auch eine Bold-Variante (ich habe „bold face“ aber generell im Terminal nicht aktiviert – ursprünglich, weil das mit Terminus nicht ging, heute habe ich mich völlig dran gewöhnt und brauche es einfach nicht) und verschiedene Größen. Und alle Größen haben dieselben ca. 3000 Unicode-Zeichen. Keine halben Sachen. Prima.

Hier noch ein Screenshot in ganz groß:

inline thumbnail

Auch die kleinste Variante ist noch super lesbar:

inline thumbnail

Den Font gibt’s im AUR unter „uw-ttyp0-font“.

Window Managing: Privatsphäre am Beamer

Pingu-Avatar

2015-05-24, 11:37:32

Beim Anschluss des Notebooks an den Beamer gibt es zwei sehr gängige Optionen:

  • Klonen des Laptop-Monitors auf den Beamer.
  • „Erweitern“ des Desktops: Laptop und Beamer sind getrennte Flächen und man kann Fenster hin- und herschieben.

Beides hat Vor- und Nachteile. Ich habe es eigentlich viel lieber, wenn ich am Laptop auch das sehe, was am Beamer zu sehen ist. Schon alleine deshalb, weil ich manchmal mit dem Rücken zum Beamer sitze. Der Nachteil am Klon-Modus ist natürlich, dass alles, was ich mache, am Beamer sichtbar ist. Das ist vielleicht nicht immer gewünscht.

Jetzt haben wir natürlich schon 2015 und damit haben eigentlich fast alle neuen Laptops Displays mit 1920x1080 Pixeln (oder „Full-HD“ oder „1080p“ oder wie auch immer das heute von den Marketing-Fuzzis genannt wird). Diese Menge an Pixeln ist aber bei den Beamern noch nicht so richtig üblich – und selbst wenn, kann ich immer noch eine niedrigere Auflösung benutzen. Das heißt, ich habe eigentlich die Möglichkeit, an meinem Laptop das Beamer-Bild und einen privaten Bereich anzuzeigen. Prinzipiell ist das machbar, die Frage ist nur, wie man das der genutzten Software verklickert.

[…]

webdump: Temporär Daten veröffentlichen

Pingu-Avatar

2015-05-24, 10:13:37

Manchmal will man jemandem eine Datei schicken. Ein Bild, ein Stück Code, einen Auszug einer Logfile, … Manchmal auch mehreren Leuten gleichzeitig. Wenn man könnte, würde man das den Leuten direkt schicken – per IRC, Jabber oder was auch immer –, aber hin und wieder geht das aus verschiedenen Gründen nicht: Vielleicht unterstützt der gewählte Kommunikationskanal keine Dateitransfers, vielleicht ist die Zielperson gerade nicht am Platz oder vielleicht sind es einfach zu viele Empfänger auf einmal für einen direkten Transfer.

Was macht man da? Man lädt die Datei irgendwo ins Web hoch.

Es gibt diverse kostenfreie Dienste für derlei Aktivitäten. Wenn man einen eigenen Server hat, möchte man das aber vielleicht lieber dort ablegen. Dabei bekommt man aber zwangsläufig ein Problem: Es sammelt sich Müll an. Viele Daten sind schlichtweg nur für ganz kurze Zeit interessant und danach völlig wertlos. Im Jahre 2015 kann man natürlich argumentieren, dass das keine Rolle mehr spielt, weil man eh genug Platz auf den Platten hat. Einen Mehrwert sehe ich darin, jeden Mist aufzuheben, allerdings auch nicht. Was weg kann, kann weg.

[…]

Eigener IPv6-Tunnel mit OpenVPN

Pingu-Avatar

2015-03-24, 12:46:18

Ich habe zuhause noch kein IPv6, aber einen Server im Internet mit einem /64-Netz. Weil ich trotzdem daheim damit experimentieren will, hatte ich mir vor einiger Zeit einen Tunnel gebaut, der SSH benutzt hat. Das war keine besonders tolle Lösung, aber sie hat erstmal funktioniert.

Jetzt habe ich mir die Sache noch einmal angeschaut und gesehen, dass OpenVPN mittlerweile (seit 2.3.0, also schon seit Januar 2013) nativ IPv6 kann. Das heißt, man kann direkt aus OpenVPN heraus IPv6-Adressen an die Clients vergeben und ist nicht mehr darauf angewiesen, mit OpenVPN nur eine IPv4-Verbindung aufzubauen, über die man dann zum Beispiel einen SIT-Tunnel aufbaut (siehe auch). Man braucht auch keinen radvd oder irgendwas in dieser Richtung, sondern OpenVPN verwaltet den IPv6-Adresskreis eigenständig.

Mal angenommen, man hat schon eine ganz einfache OpenVPN-Konfiguration so wie hier beschrieben, die dem Client eine private IPv4-Adresse zuweist. Dann kann man das auf Seite des Servers so erweitern:

tun-ipv6
server-ipv6 fd00:aaaa:bbbb:cccc::/112
push "route-ipv6 ::/0"

script-security 2
learn-address /etc/openvpn/scripts/learn-address

Ich habe einfach aus meinem /64er-Netz einen /112er-Block genommen, aus dem dann die Clients eine meiner öffentlichen IPv6-Adressen bekommen. Die gepushte Route erzeugt ein Default-Gateway für IPv6, sorgt also dafür, dass ein Client, der eigentlich nur in einem IPv4-Netz ist, seinen IPv6-Traffic über das VPN schickt.

Was hat es mit „learn-address“ auf sich? Angenommen, man hat auf eth0 eine öffentliche IPv4- und IPv6-Adresse des Servers:

$ ip -4 a show dev eth0
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
    inet 37.221.198.6/22 scope global eth0
       valid_lft forever preferred_lft forever

$ ip -6 a show dev eth0
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qlen 1000
    inet6 2a03:4000:2:364:aec2:3146:f481:13f6/64 scope global 
       valid_lft forever preferred_lft forever
    ...

Durch das OpenVPN entsteht erst einmal nur zusätzlich ein tun0. Damit das ganze Konstrukt funktioniert, muss man dem Server noch sagen, dass er auch auf eth0 auf Pakete reagieren muss, die an eine der IPv6-Adressen der VPN-Clients adressiert sind. Erst dadurch landen Antworten von Remotes beim Client und de facto hat der Client dann eine IPv6-Adresse, über die er direkt aus dem Internet heraus erreichbar ist. Sprich, er hängt mit dem nackten Hintern im Internet ohne den üblichen „NAT-Schutz“ des DSL-Routers – you have been warned. Dafür ist einerseits das Skript „learn-address“ zuständig, das für jeden Client, der sich erfolgreich verbunden hat, einen entsprechenden NDP-Proxy-Eintrag auf eth0 anlegt und beim Disconnect wieder entfernt:

#!/bin/bash

action="$1"
addr="$2"
pubif=eth0

if [[ "${addr//:/}" == "$addr" ]]
then
    # not an ipv6 address
    exit
fi

case "$action" in
    add|update)
        ip neigh replace proxy "$addr" dev "$pubif"
        ;;
    delete)
        ip neigh del proxy "$addr" dev "$pubif"
        ;;
esac

(Wenn OpenVPN mit „user“ und „group“ Privilegien abgibt, dann muss hier natürlich „sudo“ im Spiel sein o.ä.)

Andererseits muss proxy_ndp und Forwarding aktiviert sein, was man zum Beispiel über eine /etc/sysctl.d/10-openvpn.conf lösen kann:

net.ipv6.conf.all.forwarding = 1
net.ipv6.conf.all.proxy_ndp = 1

Das war’s.

Auf Seite des Clients muss man nur „tun-ipv6“ einfügen.

Ich finde, das ist eine recht schnucklige Lösung. Einfach aufzubauen. Bis auf das mit dem NDP-Proxy und abgesehen vom üblichen PKI-Overhead von OpenVPN auch recht elegant.

Noch mehr ASCII-Spielzeug und ein PDF zur perspektivischen Projektion

Pingu-Avatar

2015-02-28, 13:00:45

Letzte Woche habe ich noch viel an asciiworld geschraubt. Dabei habe ich mich ein bisschen mit sphärischer Geometrie beschäftigt und auf einigen Seitengassen auch ISO-Surfaces als alte Bekannte wiedergetroffen. Ins eigentliche Programm ist dann aber doch wieder nur eine recht „plumpe“ kartesische Lösung zum Zeichnen des Footprints eines Satelliten gewandert (Zusatzskript „asciiworld-sat-track“):

[…]