staging.inyokaproject.org

13. August 2025

Kürzlich fiel mir auf, dass Medal of Honor: Allied Assault (MoHAA) vom Projekt OpenMoHAA als OpenSource Software (GPL-2.0) nachgebaut wurde. Mit dem kürzlich erschienenen Debian Trixie ist jetzt OpenMoHAA als Debianpaket verfügbar. Da ich MoHAA als Jugendlicher sehr gerne gespielt habe, möchte ich mir natürlich nicht die Gelegenheit entgehen lassen es unter Debian zu spielen.

Spieldaten

Der Nachbau von MoHAA ist zwar frei, die Grafiken und Sounds sind es aber nicht. Um OpenMoHAA spielen zu können, benötigt man also die Daten des Originalspiels. Da ich die Spiel-CD von früher nicht mehr zur Hand habe, habe ich mir MoHAA bei GOG gekauft.

Debianquellen bearbeiten

Da man die unfreien Spieldaten benötigt kann OpenMoHAA nicht über Debian main bereitgestellt werden, sondern befindet sich in contrib. Darum muss man sicher stellen, dass die contrib-Quellen eingebunden sind.

Wenn man das bisherige Format mit /etc/apt/sources.list nutzt, muss man sicherstellen, dass contrib enthalten ist. Die entsprechende Zeile sieht dann z.B. so aus:

deb https://deb.debian.org/debian trixie main contrib non-free-firmware

Nutzt man schon das neue deb822-Format kann man in die entsprechende Datei, z.B. /etc/apt/sources.list.d/debian.sources, bei Components: contrib hinzufügen. Das sieht dann z.B. so aus:

# Modernized from /etc/apt/sources.list
Types: deb
URIs: https://deb.debian.org/debian/
Suites: trixie
Components: main contrib non-free-firmware non-free
Signed-By: /usr/share/keyrings/debian-archive-keyring.gpg

Benötigte Pakete installieren

Nachdem man die Debianquellen bearbeitet hat, aktualisiert man die Quellen:

# apt update

Anschließend kann man die benötigten Pakete installieren:

# apt install game-data-packager openmohaa lgogdownloader

Spieldaten paketieren

Die im vorigen Schritt installierten Pakete game-data-packager und lgogdownloader werden nun genutzt um die Spieldaten herunterzuladen.

Hat man lgogdownloader bisher noch nicht genutzt, muss man sich erst anmelden:

$ lgogdownloader --login

Danach werden Benutzername und Passwort abgefragt und man wird eingeloggt. Danach kann mit dem game-data-packager fortgefahren werden:

$ mkdir -p ~/Games/mohaa
$ cd ~/Games/mohaa
$ game-data-packager mohaa

Spieldaten installieren

Nachdem nun die Spieldaten paketiert sind, können diese installiert werden:

# apt install /home/$USER/Games/mohaa/mohaa*.deb

Der Platzhalter $USER ist natürlich durch den entsprechenden Benutzer zu ersetzen.

Spielen

Nun kann man Medal of Honor: Allied Assault, sowie die Erweiterungen Spearhead und Breakthrough spielen und in Erinnerungen schwelgen, oder diese Spiele auch zum ersten Mal genießen. :)

Troubleshooting

Auflösung

Geht es um die Bildschirmauflösung, so merkt man dem Spiel das Alter an. 4:3 hat heute eigentlich kein Monitor mehr. Leider sind die Auswahlmöglichkeiten in den Spieloptionen fest einprogrammiert, deshalb muss man selbst in der Konfigurationsdatei ~/.openmohaa/main/configs/omconfig.cfg anpassen.

Entweder kann man den Parameter r_mode auf -2 setzen und die Zeilen r_customwidth und r_customheight entfernen. Dann sollte das Spiel mit der nativen Auflösung im Vollbild laufen.

Sollte das nicht wie gewünscht funktionieren, so muss man die Auflösung manuell angeben. Dazu muss man den Parameter r_mode auf -1 setzen und mit r_customwidth und r_customheight die gewünschte Auflösung eintragen, z.B.:

seta r_mode "-1"
seta r_customwidth "1920"
seta r_customheight "1080"

BTW

…es gibt auch Pakete namens rtcw und dhewm3 in Debian. Bei ersterem geht es um die Rückkehr zu einer Burg namens Wolfenstein und bei zweitem um die dritte Version des Verhängnis. Diese Spiele lassen sich auch analog zu dem für OpenMoHAA beschriebenen Verfahren installieren. ;)

Seit Jahren habe ich Pi-hole zusammen mit Unbound genutzt. Pi-hole um ungewünschte Werbung, Tracker usw. zu blockieren. Und Unbound als DNS Resolver der bei Pi-hole eingetragen ist. Beide Programme habe ich nun durch Technitium ersetzt.

Bei Technitium handelt es sich um einen richtigen DNS-Server der auch das Blocken von Werbung und anderen Mist unterstützt. Da Technitium darüber hinaus deutlich mehr Funktionen bietet, war ich etwas skeptisch, ob die Konfiguration klappt. Wenn man nur den Funktionsumfang von Pi-hole und Unbound ersetzen will, ist die Installation erstaunlich einfach.

Ich gehe bei der folgenden Anleitung davon aus, dass weder Pi-Hole noch Unbound oder vergleichbare Alternativen aktiv sind und die Internetverbindung funktioniert und Technitium auf einem extra Rechner im LAN installiert wird.

Nachdem man Technitium installiert hat, ruft man die Konfigurationsoberfläche im Browser beispielsweise mit 192.168.1.2:5380 auf. Anstelle von 192.168.1.2 trägt man die IP-Adresse des Rechners ein, auf dem der DNS-Server installiert wurde. Beim ersten Aufruf der Oberfläche muss man ein Passwort für das Administrator-Konto setzen.

Danach öffnet man den Reiter “Zones” und klickt dort auf “Add Zone”. Dann wählt man “Secondary ROOT Zone (RFC 8806)” aus und klickt anschließend auf “Add”. Dies sorgt dafür, dass eine Liste der Root-Nameserver erstellt wird, die für die DNS-Anfragen genutzt werden.

Ist dies erledigt, wählt unter dem Reiter “Settings” den Reiter “Blocking” aus. Im Bereich “Allow / Block List URLs” trägt man eine oder mehrere Listen ein anhand derer die Blockierungen durchgeführt werden und speichert die Änderungen. Unterstützt werden Listen die das Format von Adblock Plus verwenden. Alternativ kann man unterhalb dieses Eingabefelds auch vordefinierte Listen auswählen.

Mehr muss man im Grunde nicht machen. Ich habe aber zusätzlich unter Settings -> Recursion noch “Randomize Name” aktiviert. Vor Randomize Name wird zwar gewarnt, aber auch mit Unbound hatte ich damit noch keine Probleme. Weiterhin habe ich den Eintrag im Reiter “DHCP” gelöscht und somit den Server deaktiviert, da diesen Job aktuell mein Router erledigt.

Abschließend muss man noch bei Clients als DNS-Server die IP-Adresse des Rechners eintragen auf dem Technitium installiert ist. Wer DHCP verwendet, kann auch die Konfiguration (beispielsweise im Router) anpassen.

Was ist nun der Vorteil von Technitium gegenüber Pi-Hole und Unbound? Man muss nur noch einen Dienst betreuen. Zudem bietet Technitium mehr Funktionen. Und ich finde die Oberfläche angenehmer als die von Pi-hole, was aber subjektiv ist. Zudem übersteht der Cache einen Neustart des Servers.

Technitium hat aber auch Nachteile. Es bietet mehr Funktionen, sodass man mehr falsch machen kann, wenn man die Konfiguration weiter anpasst. Zudem ist es ziemlich umständlich eine Domain freizuschalten, die durch eine der verwendeten Listen geblockt wurde. Denn man muss diese manuell im Reiter “Allowed” eintragen. Da es oft nicht leicht ersichtlich ist, welche Domain man freischalten muss, würde ich empfehlen über den Reiter “Apps” die Erweiterung “Query Logs” zu installieren. Hiermit kann man die Log-Dateien filtern und sich beispielsweise nur die geblockten Domains anzeigen lassen. Hier merkt man, dass Technitium und Pi-hole nicht unbedingt die gleiche Zielgruppe haben.

Vermutlich wird sich jetzt der eine oder andere Leser fragen, warum ich beispielsweise nicht DoH verwende, da hiermit die DNS-Anfrage verschlüsselt stattfindet. Zum einen findet eben nur die Anfrage verschlüsselt statt. Der Aufruf der jeweiligen Internetseite hingegen meist nicht (https://huitema.wordpress.com/2021/10/25/to-doh-or-not-to-doh-or-to-encrypt-the-sni/). Zudem muss man dem Anbieter des verwendeten DNS-Servers vertrauen. Für meinen Anwendungsfall halte ich daher einen eigenen DNS-Server bzw. Resolver der die Root-Nameserver direkt abfragt für sinnvoller.

In den letzten Tagen haben einige Medien über eine angeblich hohe CPU-Auslastung auf Grund von KI-Funktionen für die Tab-Gruppen in Firefox berichtet. Das Ganze basierte auf den falschen Behauptungen, die im Rahmen eines Clickbait-Artikels aus dem englischsprachigen Raum verbreitet worden sind. Obwohl mittlerweile bekannt ist, dass die Aussagen nicht stimmen, sucht man Richtigstellungen häufig vergeblich. Dieser Artikel klärt über die fehlerhafte Berichterstattung anderer Medien auf und berichtet, was tatsächlich stimmt.

Die Quelle der falschen Behauptungen

Am 9. August hat das im englischsprachigen Raum populäre IT-Portal Neowin einen Artikel veröffentlicht, in welchem es hieß, dass KI-Funktionen für die Tab-Gruppen angeblich eine hohe CPU-Auslastung verursachten. Mehr noch: Der Artikel nutzte die Überschrift direkt für populistische Aussagen wie angeblichen „KI Bloat“ in Firefox und dass Mozilla „unter Beschuss“ seiner Nutzer stünde. Dies ist bereits die erste sogenannte „Red Flag“, die anderen Medien zwingend hätte auffallen müssen. Ein seriöses Medium würde bei den Fakten bleiben. Bei einer Seite, die ohne Werbeblocker mehr Werbung als redaktionellen Inhalt anzeigt, liegt die Vermutung nahe, worauf Neowin primär abzielt: Es geht um sogenannten Clickbait, sprich die Nutzer durch reißerische Überschriften auf die Website zu locken, um damit die Werbeeinnahmen zu maximieren, nicht um eine neutrale Berichterstattung im besten Sinne der Leser. Anders ist eine solche Herangehensweise nicht zu erklären.

Über angeblichen „Bloat“ und „Beschuss“ der Nutzer

Fakt ist: Der gesamte Artikel beruhte auf Mutmaßungen weniger Nutzer und die einzige Quelle dafür war die Plattform Reddit, die – freundlich formuliert – nicht gerade für Zurückhaltung seiner Nutzer bekannt ist und auf der jeder alles behaupten kann. Wobei man fairerweise sagen muss, dass es gerade für Reddit sogar nur wenige bestätigende Kommentare gab. Das kennt man von anderen Themen auch ganz anders. Von „unter Beschuss“ konnte also beim besten Willen nicht die Rede sein.

Was den vermeintlichen „Bloat“ betrifft: KI-Funktionen sind ein kontroverses Thema. Einige Nutzer reagieren reflexartig und bekommen bereits vom Lesen des Begriffes einen sprichwörtlichen Ausschlag. Andere Nutzer wollen möglichst viele „smarte“ Funktionen in ihrem Browser haben. Und zwischen diesem Schwarz und Weiß gibt es jede erdenkliche Art von Grauton. Mozilla entwickelt mit Firefox ein Produkt für die Massen und muss möglichst viele unterschiedliche Bedürfnisse abdecken, um den Anforderungen des Marktes gerecht zu werden. Aber für ausnahmslos alle KI-Features in Firefox gilt: Sie sind optional. Keinem Firefox-Nutzer wurden jemals KI-Funktionen aufgezwungen. Und für alle, die das wollen, ist es schön, wenn es entsprechende Möglichkeiten gibt. Unabhängig davon, wie man selbst zu bestimmten Funktionen steht (und das gilt ausdrücklich nicht nur für KI-Funktionen, sondern für ausnahmslos alle Funktionen!), sollte man es seinen Mitmenschen gönnen, wenn sie gewünschte Funktionen nutzen können, auch wenn man selbst keinen Bedarf hat.

Um welche Funktion ging es angeblich und wen hätte es überhaupt betroffen? (Spoiler: Keine deutschsprachigen Nutzer)

Tab-Gruppen sind ein relativ neues Feature seit Firefox 137 und waren bis dahin eines der meistgewünschten Funktionen der Firefox-Nutzer, basierend auf Mozillas Community-Plattform Mozilla Connect. Mit Firefox 141 hat Mozilla die Ausrollung von optionalen KI-Funktionen für Tab-Gruppen in Firefox begonnen. Konkret geht es dabei um das Vorschlagen von Namen für Tab-Gruppen sowie anderer geöffneter Tabs für bestehende Tab-Gruppen.

Irritierend an der Berichterstattung im deutschsprachigen Raum ist vor allem auch die Tatsache, dass diese KI-Funktionen für Nutzer mit einem nicht englischsprachigen Firefox standardmäßig überhaupt nicht verfügbar sind und der Umstand, dass das damit den Großteil der Leser überhaupt nicht betrifft, nicht einmal erwähnt worden ist; Anders als auf diesem Blog, wo man darüber bei der Vorstellung der Neuerungen von Firefox 141 informiert worden war.

Aber was ist denn nun die Wahrheit?

Tatsächlich gab es ein Problem mit einer erhöhten CPU-Auslastung und Mozilla hat dieses Problem auch schon untersucht und gelöst. Tab-Gruppen respektive KI-Funktionen für diese hatten damit aber überhaupt nichts zu tun.

Ursache war ein anderes neues Feature, welches die Suche bereits besuchter Websites in der Adressleiste verbessern soll. Ein Nutzer, der beispielsweise die Website nba.com besucht hat, würde diese bisher nicht wiederfinden, wenn er sich nur an den Begriff „Basketball“ erinnert, da dieser Begriff weder in der URL noch im Seitentitel vorkommt. Mit der neuen vektorbasierten Suche würde die Seite trotzdem gefunden werden.

Und wen betrifft das? (Spoiler: Nur wenige Nutzer und mittlerweile niemanden mehr)

Diese Neuerung wurde ebenfalls schrittweise ausgerollt, aber erst für einen ganz kleinen Teil der Nutzer. Voraussetzung hierfür war Firefox 141.0.2 oder höher, Firefox in englischer Sprache, Großbritannien oder Kanada als Region des Anwenders, ein System mit 64-Bit-CPU sowie mindestens 8 GB RAM. Niemand sonst hatte dieses Feature standardmäßig aktiviert.

Die Performance-Probleme waren in den bisherigen Tests, zu denen Mozilla seine Community bereits am 1. Juli eingeladen hatte, nicht gemeldet worden. Nach dem jüngsten Feedback hat sich Mozilla die Probleme angesehen, die Ausrollung umgehend gestoppt und die CPU-Auslastung durch mehrere Maßnahmen drastisch reduzieren können. Ein entsprechender Patch ist auch schon für Firefox 143 gelandet.

Richtigstellungen?

Neowin hat zumindest seinen Artikel um ein Update ergänzt. Dies ist besser als nichts, wenn auch die Veröffentlichung einer ordentlichen Richtigstellung samt Entschuldigung für die Verbreitung von Fehlinformationen angebracht wäre. Auf vielen Seiten, die sich auf den Neowin-Artikel beziehen, findet man nicht einmal das und es werden weiterhin falsche Dinge behauptet. Wer einen solchen Artikel findet, kann nun zumindest auf diesen Artikel verweisen.

Der Beitrag Richtigstellung zur Berichterstattung über angeblich hohe CPU-Auslastung durch KI-Funktionen für Tab-Gruppen in Firefox erschien zuerst auf soeren-hentzschel.at.

7. August 2025

Mozilla hat Firefox 141.0.3 veröffentlicht und behebt damit mehrere Probleme der Vorgängerversion.

Download Mozilla Firefox 141.0.3

Mit dem Update auf Firefox 141.0.3 behebt Mozilla ein Webkompatibilitätsproblem, von dem unter anderem Websites betroffen waren, die mit dem Svelte-Framework gebaut sind.

Außerdem wurde das Problem behoben, dass Krypto-Miner im strengen Schutz vor Aktivitätenverfolgung nicht länger blockiert worden sind.

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

6. August 2025

Wer KDE Plasma nutzt, verwendet in der Regel den Displaymanager SDDM. Dieser hat in der aktuellen Version aber noch den X.org Server als feste Abhängigkeit. Was mich stört, da ich bereits vor einiger Zeit auf Wayland umgestiegen bin aber den X.org Server nicht deinstallieren kann.

Im Grunde könnte ich auf einen Displaymanager verzichten, da meine Systeme komplett verschlüsselt sind und somit das Passwort für die Verschlüsselung schon vor einer unberechtigten Anmeldung schützt. Zudem in ich der einzige Nutzer. Da mich ein Displaymanager an sich aber auch nicht stört und das automatische Anmelden damit einfacher zu konfigurieren ist, habe ich mir Alternativen für SDDM angesehen, die ohne den X.org Server installierbar sind. Gelandet bin ich aktuell bei greetd.

Nach der Installation passt man folgende Bereiche in der Datei /etc/greetd/config.toml an.

1[default_session]
2command = "/usr/lib/plasma-dbus-run-session-if-needed /usr/bin/startplasma-wayland"
3user = "greeter"
4
5[initial_session]
6command = "startplasma-wayland"
7user = "xyz"

Unter default_session wird die Grundeinstellung konfiguriert. Und initial_session sorgt für die automatische Anmeldung. Anstelle von xyz trägt man den Benutzer ein, mit dem man sich anmelden will. Dass sich die beiden Befehle unterscheiden, ist übrigens Absicht.

Wer nicht KDE Plasma verwendet, muss die beiden Zeilen die mit command beginnen entsprechend anpassen. Ich kann hierbei allerdings nicht weiterhelfen.

Hat man greetd konfiguriert, deaktiviert man mit systemctl disable sddm.service SDDM und aktiviert mit systemctl enable greetd.service greetd. Mehr muss man nicht machen. Wenn alles funktioniert, kann abschließend SDDM und den X.org Server deinstallieren.

Greetd unterstützt neben dem Greeter greetd-agreety (Standard) auch noch Alternativen wie beispielsweise QtGreet, tuigreet oder ReGreet. Somit sollte auch für Nutzer, die sich nicht automatisch anmelden wollen, etwas dabei sein.

Und so wie es aussieht, wird in OpenSUSE 16 Leap wohl lightdm durch greetd und gtkgreet ersetzt werden (https://news.opensuse.org/2025/08/04/leap-16-rc/).

5. August 2025

Mozilla hat Firefox 141.0.2 veröffentlicht und behebt damit mehrere Probleme der Vorgängerversion.

Download Mozilla Firefox 141.0.2

Mozilla hat Firefox 141.0.2 für Windows, macOS und Linux veröffentlicht. Firefox 141.0.1 wurde für diese Plattformen übersprungen, da diese Versionsnummer einem Android-Update vorbehalten war.

Mit dem Update auf Firefox 141.0.2 umgeht Mozilla eine mögliche Absturzursache bei Programmstart, von der manche Linux-Nutzer mit veraltetem Grafiktreiber von Nvidia betroffen waren. Außerdem konnte Firefox auf manchen Linux-Systemen mit GTK+ ohne Wayland nicht mehr gestartet werden.

Das Anklicken eines angehefteten Tabs konnte den Fokus vom Content-Bereich nehmen, was Probleme bei der Navigation mit der Tastatur bereiten konnte.

Die Entwicklerwerkzeuge konnten auf Websites abstürzen, die iFrames verwenden.

Ein Webkompatibilitätsproblem wurde behoben, bei dem Canvas-Elemente verschiebbar wurden.

Verschiedene Darstellungsprobleme der Firefox-Oberfläche wurden korrigiert.

Dazu kommen noch kleinere Anpassungen in Zusammenhang mit bevorstehenden Experimenten.

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

4. August 2025

Wer auf einem Raspberry Pi ein Kiosk-System einrichten möchte, kann hierfür mit dem Raspberry OS Lite beginnen. Dort sollte über einen Aufruf von raspi-config der Autologin aktiviert werden (System Options -> S6 Auto Login).

Im nächsten Schritt wird der Wayland Compositor Sway installiert:

apt install sway xwayland

Nach der Installation wird im lokalen Nutzer, welcher für den Kiosk-Modus benutzt werden soll, eine Konfiguration-Datei angelegt:

mkdir -p ~/.config/sway/
nano ~/.config/sway/config

Diese wird mit folgender Konfiguration befüllt:

# Sway kiosk configuration for Raspberry Pi + Raspberry Pi Touch Display 2

# Configure sway
default_border none
default_floating_border none

# Set and transform output
output DSI-2 transform 90

# Execute application
exec_always sh -c '/home/seeseekey/testapp'

Die Konfiguration sorgt dafür das Sway rahmenlos arbeitet und der Bildschirm des Raspberry Touch 2 Display um 90 Grad gedreht wird. Im letzten Schritt wird in der Konfiguration eine Applikation gestartet.

Für Debugzwecke können daneben bei Bedarf noch folgende Zeilen hinzugefügt werden:

# Debug (write outputs and tree into file)
exec_always sh -c 'sleep 4 && swaymsg -t get_outputs > /tmp/outputs.json'
exec_always sh -c 'sleep 4 && swaymsg -t get_tree > /tmp/tree.json'

Zwar ist mit dieser Konfiguration das Display gedreht, aber die Eingaben werden noch in der ursprünglichen Rotation übermittelt. Hierzu muss im ersten Schritt mittels libinput-tools das Gerät ermittelt werden:

apt install libinput-tools
libinput list-devices

Nachdem das Touchscreen-Gerät ermittelt wurde, kann der Name des Gerätes genutzt werden, um eine udev-Regel zu definieren:

nano /etc/udev/rules.d/99-touch-rotation.rules

Dort wird die Rotation ebenfalls um 90 Grad gedreht:

ATTRS{name}=="11-005d Goodix Capacitive TouchScreen", ENV{LIBINPUT_CALIBRATION_MATRIX}="0 1 0 -1 0 1"

Nachdem diese Konfiguration hinterlegt sind, wird eine lokale systemd-Unit erstellt:

mkdir -p ~/.config/systemd/user
nano ~/.config/systemd/user/sway.service

Diese wird mit folgendem Inhalt befüllt:

[Unit]
Description=Sway
After=graphical-session.target
Requires=graphical-session.target

[Service]
ExecStart=/usr/bin/sway
Restart=always
Environment=XDG_RUNTIME_DIR=/run/user/%U

[Install]
WantedBy=default.target

Anschließend kann die systemd-Unit aktiviert werden.

systemctl --user enable sway

Nun kann der Raspberry Pi neugestartet werden. Im Idealfall startet das System führt den Login durch und startet die Applikation. Sollte es hier Probleme geben, kann es an bestimmten Bibliotheken wie libxi6 liegen, welche noch nachinstalliert werden müssen.

28. Juli 2025

In dem Fall muss ich etwas (sehr weit) ausholen. Als mein Vater vor einigen Jahren in Rente gegangen ist, habe ich ihm ein gebrauchtes Thinkcentre mit Windows 10 von Lenovo gekauft. Sofern ich keinen Mist gebaut habe, war es zu dem Zeitpunkt kompatibel mit Windows 11. Was aktuell nicht mehr der Fall ist. Was also machen?

Die erste Möglichkeit wäre neue Hardware zu kaufen. Was nicht infrage kommt. Von der Leistung her würde die vorhandene CPU für Windows 11 reichen. Und mein Vater nutzt den Rechner nur, um im Internet zu surfen und E-Mails abzurufen.

Die zweite Möglichkeit wäre, Windows 11 mit Tools wie Rufus oder Flyby11 zu installieren, die die von Microsoft bestimmten Voraussetzungen aushebeln. Das funktioniert aktuell. Aber ich bin mir ziemlich sicher, dass Microsoft das irgendwann mit einem Update unterbinden wird. Vermutlich auch bei bereits bestehenden Installationen.

Da die Anforderungen sehr überschaubar sind, habe ich mich für Lösung Nummer 3 entschieden. Ich installiere spätestens im September eine Linux-Distribution. Vermutlich openSUSE Tumbleweed. Zum einen, weil Tumbleweed rollt und ich somit im besten Fall von Upgrades alle paar Monate / Jahre verschont bleibe. Und zum anderen, weil Tumbleweed aktuell die wohl am besten getestete rollende Distribution sein dürfte.

Wie bringe ich meinen Vater bei, der schon Probleme hat E-Mail-Anhänge auszudrucken hat, Updates zu installieren? Ganz einfach, gar nicht.

Also werde ich es mit automatischen Updates versuchen. Ja, das kann schiefgehen. Muss es aber nicht. Mit Windows 10 hat es die letzten Jahre ja auch geklappt.

Mein erster Versuch habe ich mit yast2-online-update-configuration unternommen. Und ich bin gescheitert. Vermutlich ist das Tool nicht mit Tumbleweed kompatibel.

Den zweiten Versuch habe ich mit transactional-update durchgeführt. Was zwar technisch gesehen funktioniert hat, aber offiziell ebenfalls nicht mit Tumbleweed kompatibel ist.

Alle guten Dinge sind 3. Den nächsten Versuch habe ich mit os-update unternommen.

Hierbei handelt es sich im Grunde um einen Timer von systemd der regelmäßig, je nach verwendeter Version von openSUSE den richtigen Befehl für die Updates ausführt. Im Falle von Tumbleweed also zypper dup. Diese Lösung nutze ich nun seit einigen Wochen in einer virtuellen Umgebung und bisher funktioniert alles wie es soll. Der werde ich wohl diese Lösung bevorzugen.

Und ja, mir ist das Risiko automatischer Updates bewusst. Die Alternative wäre allerdings Updates manuell zu installieren, was in dem Fall zu Diskussionen führen würde, die ich nicht führen möchte.

25. Juli 2025

Firefox besitzt eine Übersetzungsfunktion für Websites, welche im Gegensatz zu Cloud-Übersetzern wie Google Translate lokal arbeitet, die eingegebenen Texte also nicht an einen fremden Server sendet. Nun wurde die Unterstützung weiterer Sprachen ergänzt.

Firefox wird seit Version 118 standardmäßig mit einer lokalen Funktion zur maschinellen Übersetzung von Websites für den Browser ausgeliefert. Das bedeutet, dass die Übersetzung vollständig im Browser geschieht und keine zu übersetzenden Inhalte an einen Datenriesen wie Google oder Microsoft übermittelt werden müssen.

Mozilla hat nun die Unterstützung weiterer Sprachen hinzugefügt, nämlich Albanisch, Gujarati, Hebräisch, Hindi, Kannada, Malaiisch, Malayalam, Persisch sowie Telugu.

Da die Sprachmodelle über die Remote-Einstellungen von Firefox bereitgestellt werden, ist die Unterstützung neuer Sprachen an kein Firefox-Update gebunden und funktioniert direkt in jedem Firefox mit aktivierter Übersetzungsfunktion.

Damit unterstützt die Übersetzungsfunktion Firefox bereits Übersetzungen aus 41 Sprachen respektive in 39 Sprachen.

Der Beitrag Neue Sprachen für Übersetzungsfunktion von Firefox erschien zuerst auf soeren-hentzschel.at.

Die folgende Geschichte soll mir zur Erinnerung und euch zur Unterhaltung dienen. Sie handelt von CentOS Stream 10, Containern und der Manpage dnf(8). Aber lest selbst.

Es war einmal ein Systemadministrator, der beim Training einige Subkommandos von dnf updateinfo kennenlernte, von deren Existenz er bislang nichts wusste. Und diese Subkommandos heißen list, info und summary. Neugierig schaute er in die Manpage dnf(8), doch zu seinem Erstaunen schwieg sich diese zu diesen Subkommandos aus.

Wut stieg in unserem Sysadmin auf. Wieder einmal haben sich die Entwickler keine Mühe gegeben, die Funktionalität ihrer Anwendung vernünftig zu dokumentieren. Die Qualitätssicherung hat geschlafen. So kann man doch nicht arbeiten. Doch nach dem ersten Wutanfall beschloss der Sysadmin, der Sache in Ruhe auf den Grund zu gehen, bevor er diesen Misstand anprangern würde.

Die Distribution des Sysadmins ist dafür bekannt, dass unter bestimmten Umständen Funktionalität von Upstream zurückportiert wird. Vielleicht hatte sich hier eine Diskrepanz eingeschlichen. Vielleicht war dieser Fehler in einer neueren Version ausgemerzt. Um dies schnell zu überprüfen, wollte unser Sysadmin einen Blick in dnf(8) in Centos 10 Stream werfen. Dazu führte er folgende Befehle in einer Kommandozeile aus:

$ podman run --rm -it centos:stream10
[root@01ede4521839 /]# man 8 dnf
bash: man: command not found
[root@01ede4521839 /]#

Mit einem Augenrollen erinnerte sich unser Sysadmin daran, dass Container-Images nur das absolut Notwendige enthalten, um möglichst wenig Speicherplatz auf der Festplatte zu belegen. Darüber, was absolut notwendig ist, werden seit anbeginn des Containerzeitalters philosophische Streitgespräche geführt. Also prüfte unser Sysadmin, ob es einen vertrauten Paketmanager gab, um die Manpages nachzuinstallieren:

[root@01ede4521839 /]# dnf in man-db man-pages
CentOS Stream 10 - BaseOS                       2.6 MB/s | 6.2 MB     00:02    
CentOS Stream 10 - AppStream                    1.5 MB/s | 2.4 MB     00:01    
CentOS Stream 10 - Extras packages              3.3 kB/s | 3.5 kB     00:01    
Dependencies resolved.
================================================================================
 Package             Architecture   Version                Repository      Size
================================================================================
Installing:
 man-db              x86_64         2.12.0-8.el10          baseos         1.3 M
 man-pages           noarch         6.06-3.el10            baseos         3.7 M
Installing dependencies:
 groff-base          x86_64         1.23.0-10.el10         baseos         1.1 M
 less                x86_64         661-3.el10             baseos         191 k
 libpipeline         x86_64         1.5.7-7.el10           baseos          53 k

Transaction Summary
================================================================================
Install  5 Packages

Total download size: 6.4 M
Installed size: 9.9 M
Is this ok [y/N]:
…
Installed:
  groff-base-1.23.0-10.el10.x86_64          less-661-3.el10.x86_64              
  libpipeline-1.5.7-7.el10.x86_64           man-db-2.12.0-8.el10.x86_64         
  man-pages-6.06-3.el10.noarch             

Complete!
[root@01ede4521839 /]# mandb
Processing manual pages under /usr/share/man...
Updating index cache for path `/usr/share/man/man7'. Wait...mandb: can't resolve man7/groff_man.7
mandb: warning: /usr/share/man/man7/man.7.gz: bad symlink or ROFF `.so' request
mandb: can't resolve man7/groff_man.7
mandb: warning: /usr/share/man/man7/man.man-pages.7.gz: bad symlink or ROFF `.so' request
Updating index cache for path `/usr/share/man/man3type'. Wait...done.
Checking for stray cats under /usr/share/man...
Checking for stray cats under /var/cache/man...
Processing manual pages under /usr/local/share/man...
Updating index cache for path `/usr/local/share/man/mann'. Wait...done.
Checking for stray cats under /usr/local/share/man...
Checking for stray cats under /var/cache/man/local...
45 man subdirectories contained newer manual pages.
2701 manual pages were added.
0 stray cats were added.
0 old database entries were purged.
[root@01ede4521839 /]# man 8 dnf
No manual entry for dnf in section 8

Resultat: Kein which-Befehl verfügbar. Diese Container-Image-Kuratöre sparten aber wirklich an allem. Doch der obige Codeblock enthüllt noch mehr. Zwar war der Paketmanager dnf installiert, auch die Manpages waren nun vorhanden, nur die Manpage dnf(8) fehlte immer noch. Und so bemühte der Sysadmin wieder die Tastatur, um zu prüfen, ob die entsprechende Datei tatsächlich fehlt, welches Paket sie bereitstellt und um das Problem zu lösen. Sehet und staunet:

[root@01ede4521839 /]# stat /usr/share/man/man8/dnf.8.gz
stat: cannot statx '/usr/share/man/man8/dnf.8.gz': No such file or directory
[root@01ede4521839 /]# dnf provides /usr/share/man/man8/dnf.8.gz
…    
dnf-4.20.0-9.el10.noarch : Package manager
Repo        : baseos
Matched from:
Filename    : /usr/share/man/man8/dnf.8.gz
[root@01ede4521839 /]# dnf reinstall dnf
Last metadata expiration check: 0:01:01 ago on Wed Jan  1 14:31:37 2025.
Dependencies resolved.
================================================================================
 Package       Architecture     Version                  Repository        Size
================================================================================
Reinstalling:
 dnf           noarch           4.20.0-9.el10            baseos           478 k

Transaction Summary
================================================================================

Total download size: 478 k
Installed size: 2.5 M
Is this ok [y/N]:y
…
Reinstalled:
  dnf-4.20.0-9.el10.noarch                                                      

Complete!
[root@01ede4521839 /]# stat /usr/share/man/man8/dnf.8.gz
  File: /usr/share/man/man8/dnf.8.gz -> dnf4.8.gz
  Size: 9         	Blocks: 8          IO Block: 4096   symbolic link
Device: 0,111	Inode: 6118189     Links: 1
Access: (0777/lrwxrwxrwx)  Uid: (    0/    root)   Gid: (    0/    root)
Access: 2024-10-28 20:00:00.000000000 -0400
Modify: 2024-10-28 20:00:00.000000000 -0400
Change: 2025-01-01 14:32:59.692356995 -0500
 Birth: 2025-01-01 14:32:59.691356987 -0500

Überzeugt, dass der Spuk nun ein Ende habe, versuchte es unser Sysadmin erneut:

[root@01ede4521839 /]# man 8 dnf
No manual entry for dnf in section 8

Moment! Die Datei ist da, die Manpage jedoch nicht? Sind hier dunkle Mächte am Werke? Nein, denn wie die folgenden Befehle offenbarten, lag die Ursache lediglich in kaputten Symlinks und fehlenden Paketen:

[root@01ede4521839 /]# ls -l /usr/share/man/man8/dnf.8.gz
lrwxrwxrwx. 1 root root 9 Oct 28 20:00 /usr/share/man/man8/dnf.8.gz -> dnf4.8.gz
[root@01ede4521839 /]# ls -l /usr/share/man/man8/dnf4.8.gz
ls: cannot access '/usr/share/man/man8/dnf4.8.gz': No such file or directory
[root@01ede4521839 /]# dnf provides /usr/share/man/man8/dnf4.8.gz
Last metadata expiration check: 0:05:59 ago on Wed Jan  1 14:31:37 2025.
…
python3-dnf-4.20.0-9.el10.noarch : Python 3 interface to DNF
Repo        : baseos
Matched from:
Filename    : /usr/share/man/man8/dnf4.8.gz

[root@01ede4521839 /]# dnf list python3-dnf
Last metadata expiration check: 0:06:16 ago on Wed Jan  1 14:31:37 2025.
Installed Packages
python3-dnf.noarch                     4.20.0-9.el10                     @System

Getrieben von Ungeduld und etwas Frust installierte unser Sysadmin nun auch das Paket python3-dnf.noarch neu, in einem letzten, verzweifelten Versuch, endlich die lang ersehnte Manpage zu erhalten.

[root@01ede4521839 /]# dnf reinstall python3-dnf.noarch
…
Reinstalled:
  python3-dnf-4.20.0-9.el10.noarch                                              

Complete!
[root@01ede4521839 /]# man 8 dnf
DNF4(8)                               DNF                              DNF4(8)

NAME
       dnf4 - DNF Command Reference

SYNOPSIS
       dnf [options] <command> [<args>...]

DESCRIPTION
       DNF  is  the  next upcoming major version of YUM, a package manager for
       RPM-based Linux distributions. It roughly maintains  CLI  compatibility
       with YUM and defines a strict API for extensions and plugins.

Na endlich! Da war sie, die so lang ersehnte und schmerzlich vermisste Manpage. Und die Mühe unseres Sysadmins wurde mit der Erkenntnis belohnt, dass die gesuchte Information auch in dieser Version von dnf(8) nicht enthalten war. Zufrieden wandte sich der Sysadmin nun dem Ticketsystem zu, um zu erfragen, warum die gesuchten Informationen nicht vorhanden sind und um eine Ergänzung anzuregen.

Und wenn er nicht gestorben ist, wartet er noch immer auf eine Antwort.

Und die Moral von der Geschichte?

Erwarte nicht Manpages in Container-Images zu finden. Unser Sysadmin wäre deutlich schneller am ZIel angelangt, hätte er direkt in den Quelltext geschaut: https://github.com/rpm-software-management/dnf/blob/master/doc/command_ref.rst

24. Juli 2025

Mozilla hat Version 2.30 seiner VPN-Clients für das Mozilla VPN veröffentlicht.

Mit dem Mozilla VPN bietet Mozilla in Zusammenarbeit mit Mullvad sein eigenes Virtual Private Network an und verspricht neben einer sehr einfachen Bedienung eine durch das moderne und schlanke WireGuard-Protokoll schnelle Performance, Sicherheit sowie Privatsphäre: Weder werden Nutzungsdaten geloggt noch mit einer externen Analysefirma zusammengearbeitet, um Nutzungsprofile zu erstellen.

Jetzt Mozilla VPN nutzen

Die Neuerungen vom Mozilla VPN 2.30

Das Update auf das Mozilla VPN 2.30 bringt keine neuen Funktionen, sondern vor allem Fehlerbehebungen und Verbesserungen unter der Haube.

Der Beitrag Mozilla VPN 2.30 veröffentlicht erschien zuerst auf soeren-hentzschel.at.

23. Juli 2025

Die MZLA Technologies Corporation hat mit Thunderbird 141 eine neue Version seines Open Source E-Mail-Clients für Windows, Apple macOS und Linux veröffentlicht.

Neuerungen von Thunderbird 141

Mit Thunderbird 141 hat die MZLA Technologies Corporation ein Update für seinen Open Source E-Mail-Client veröffentlicht.

Die Benachrichtigung für neue E-Mails wurde um eine Aktion zum Archivieren erweitert. Beim Verfassen von E-Mails gibt es eine Warnung, wenn der konfigurierte OpenPGP-Schlüssel des Anwenders bald abläuft.

Darüber hinaus gab es wie immer diverse Fehlerkorrekturen und Verbesserungen unter der Haube, welche sich in den Release Notes (engl.) nachlesen lassen. Auch Sicherheitslücken wurden behoben.

Der Beitrag Thunderbird 141 veröffentlicht erschien zuerst auf soeren-hentzschel.at.

Der Autor hatte Lust auf einen Erkundungsausflug in die Welt von NixOS. Ein Erfahrungsbericht.

Eigentlich wollte ich etwas ganz anderes machen: Einen Tiling Windowmanager wie Sway oder Hyprland ausprobieren. Irgendwie lief mir dann aber zum wiederholten Mal NixOS über den Weg, weswegen ich beide Erkundungen miteinander verbinden wollte. Sway und Co. habe ich als alter (und vielleicht etwas eingefahrener) KDE-User nach ersten Tests doch erst mal wieder hinten angestellt. Aber NixOS, das hat mich irgendwie erreicht.

In dem Artikel beschreibe ich (m)einen kleinen Streifzug durch NixOS, das den Ansatz einer deklarativen Systemkonfiguration verfolgt. NixOS soll dabei von Grund auf installiert und danach ein Desktop Environment (KDE Plasma) installiert werden. An der Stelle möchte ich auf die zahlreichen anderen NixOS-Artikel auf GNULinux.ch hinweisen. Der vorliegende Artikel ist einfach nur yet another Erfahrungsbericht.

Grundinstallation

Es gibt zwar einen grafischen Installer, für die volle Dröhnung habe ich mich allerdings für die manuelle Installation, also für das Minimal ISO Image entschieden. Ich habe mich nach der Installationsanleitung gerichtet. Außerdem wollte ich gerne ein verschlüsseltes System mit Btrfs haben, einfach um zu sehen, ob das auch gut machbar ist. Dieser Wiki-Eintrag geht darauf ein. Für den Artikel hier fasse ich mein Vorgehen also nur kurz zusammen – für nähere Informationen sei auf die verlinkten Seiten verwiesen.


Nach dem Booten des Installer-ISOs

Nach dem Booten des Minimal ISO Image findet man sich also – ganz ähnlich wie bei einer Installation von Arch Linux – in einer Konsole wieder. Mit sudo -i kann man gleich mal root-Rechte erlangen und ggf. mit loadkeys de auf deutsches Tastaturlayout umstellen.

Partitionierung

Für mein Setup genügen zwei Partitionen: Eine kleine für die EFI-Bootpartition und eine große für Btrfs. Für letzteres werden später noch Subvolumes erstellt. Partitionstabelle erstellen und partitionieren kann man mit printf "label: gpt\n,1G,U\n,,L\n" | sfdisk /dev/vda in einem Aufwasch machen. /dev/vda ist die virtuelle Festplatte in meiner VM und muss ggf. angepasst werden. Hier wird also eine GPT-Partitionstabelle erstellt und anschließend eine UEFI-konforme, kleine Partition sowie eine Linuxpartition, die den Rest der Festplatte einnimmt.

Die Bootpartition kann schonmal formatiert werden (nochmal: Pfad zum Device ggf. anpassen!):

mkfs.vfat -n BOOT /dev/vda1

Verschlüsselung

Die Btrfs-Partition soll ja verschlüsselt werden, daher müssen wir die Partition erstmal mit cryptsetup vorbereiten:

cryptsetup --verify-passphrase -v luksFormat /dev/vda2

WARNING!
========
This will overwrite data on /dev/vda2 irrevocably.

Are you sure? (Type 'yes' in capital letters): YES
Enter passphrase for /dev/vda2: 
Verify passphrase: 
Key slot 0 created.
Command successful.

Mit cryptsetup open /dev/vda2 enc öffnen wir nun die Partition; sie ist nun unter /dev/mapper/enc verfügbar.

Einhängen der Partitionen

Jetzt können die Btrfs-Subvolumes erstellt werden. Natürlich sind hier ganz ausgefuchste Setups denkbar. Ich möchte im Wesentlichen gerne von /home ein Backup machen können, weswegen das auf jeden Fall ein eigenes Subvolume bekommt; ansonsten halte ich es eher einfach. Zusammengefasst:

mkfs.btrfs /dev/mapper/enc          # Dateisystem erstellen

mount -t btrfs /dev/mapper/enc /mnt # Btrfs-System nach /mnt mounten

# Erstellen der Subvolumes

btrfs subvolume create /mnt/@       # /

btrfs subvolume create /mnt/@home   # /home

btrfs subvolume create /mnt/@nix    # /nix

Nachdem das gemacht ist, hängt man das Btrfs-Dateisystem mit umount /mnt zunächst aus und hängt dann nach /mnt wieder alles so ein, wie man es für die Installation haben möchte. Also zunächst @ als / und darin dann die anderen Subvolumes /home und /nix (und natürlich noch die Bootpartition):

mount -o subvol=@,compress=zstd,noatime /dev/mapper/enc /mnt 

mkdir /mnt/home

mount -o subvol=@home,compress=zstd,noatime /dev/mapper/enc /mnt/home

mkdir /mnt/nix

mount -o subvol=@nix,compress=zstd,noatime /dev/mapper/enc /mnt/nix

mkdir /mnt/boot

mount /dev/vda1 /mnt/boot

Let's go

Jetzt wird es spannend. Das Kommando nixos-generate-config --root /mnt erstellt zwei Konfigurationsdateien:

  • /mnt/etc/nixos/hardware-configuration.nix
  • /mnt/etc/nixos/configuration.nix

Vor der Installation müssen wir noch schnell die zweite Datei anfassen, da nixos-generate-config keine Mountoptionen erkennt. Folgendes muss also in configuration.nix eingetragen werden:

fileSystems = {
  "/".options = [ "compress=zstd" "noatime" ];
  "/home".options = [ "compress=zstd" "noatime" ];
  "/nix".options = [ "compress=zstd" "noatime" ];
};

Außerdem kann man hier noch die Zeitzone (time.timeZone) korrigieren und die Lokalisierung einstellen (i18n.defaultLocale, keymap in console sowie services.xserver.xkb.layout).

Und jetzt geht's los: nixos-install führt endlich die Installation aus. Dabei wird noch nach dem zukünftigen root-Passwort gefragt:

[…]
New password: 
Retype new password: 
passwd: password updated successfully
installation finished!

Das war's! Ein reboot startet das System neu und nach Eingabe des Passworts für die Festplattenverschlüsselung begrüßt uns NixOS mit dem Login-Prompt:


NixOS Login-Prompt

User einrichten, weitere Einstellungen

Um etwas Sinnvolles zu machen, sollten wir erst mal einen User erstellen. Das macht man aber nicht etwa mit dem altbekannten adduser o.ä., nein, wir machen das gleich mal entsprechend dem Nix-Way. Hierfür muss auch wieder die Datei /etc/nixos/configuration editiert werden. Ich habe hierfür die auskommentierte Vorgabe einfach angepasst:

users.users.martin = {
    isNormalUser = true;
    extraGroups = [ "wheel", "networkmanager" ]; # Enable ‘sudo’ for the user.
  #   packages = with pkgs; [
  #     tree
  #  ];
  };

Bei der Gelegenheit können wir auch gleich noch schauen, ob andere auskommentierte Einstellungen für uns sinnvoll sind. Ich habe z.B. noch den NetworkManager (networking.networkmanager.enable = true;), OpenSSH (services.openssh.enable = true;) sowie PipeWire (services.pipewire […]) aktiviert.

Unter environment.systemPackages kann man noch Programme auflisten, die systemweit installiert werden sollen. Für mich gehören da auf jeden Fall schon mal der Editor Helix und die Prozessanzeige htop mit dazu:

environment.systemPackages = with pkgs; [
  helix
  htop
];

Natürlich gibt es noch vieles andere mehr, was man hier tun oder lassen kann. Schlussendlich reicht ein nixos-rebuild switch` um sich ein System entsprechend den getätigten Vorgaben bauen zu lassen. An der Stelle habe ich einen Reboot gemacht und mich unter dem neu erstellten User angemeldet. Vor dem Reboot habe ich ihm noch mit passwd martin das gewünschte Passwort vergeben.

KDE Plasma …

Das Tolle ist: Man kann jetzt nach Lust und Laune ausprobieren und herumbasteln (zumindest in einem gewissen Rahmen). Wenn etwas schiefgeht, kann man einfach zur letzten funktionierenden Konfiguration zurückgehen (Rollback), etwa mittels nixos-rebuild switch --rollback.

In unserem NixOS-Test entscheide ich mich erst einmal dazu, KDE Plasma zu installieren. Um später einfacher zu einem anderen Desktop Environment wechseln zu können, lagere ich den KDE-spezifischen Teil in eine eigene Datei aus und binde diese in die configuration.nix Datei ein.

Hier meine /etc/nixos/kde.nix-Datei, die natürlich – wie alles hier – nur ein minimaler Test sein soll. Da ich die KDE-eigenen PIM-Programme (KMail, Akonadi, etc.) nicht benötige, exkludiere ich diese in der Config:

{ config, pkgs, ... }:

{
  services.xserver.enable = true; # optional
  services.displayManager.sddm.enable = true;
  services.displayManager.sddm.wayland.enable = true;
  services.desktopManager.plasma6.enable = true;

  environment.plasma6.excludePackages = with pkgs.kdePackages; [
    kdepim-runtime
  ];
}

Die Einbindung in configuration.nix darf nicht vergessen werden:

imports =
  [ # Include the results of the hardware scan.
    ./hardware-configuration.nix
    # KDE Plasma 6
    ./kde.nix
  ];

Und mit einem neuerlichen nixos-rebuild switch haben wir – schwuppdiwupp – ein mit KDE eingerichtetes System.


KDE Plasma

… oder doch etwas anderes?

Und wenn einem doch der Sinn danach steht, einen Tiling Windowmanager wie Sway auszuprobieren, ist das kein Problem. Dazu braucht es lediglich ein paar Änderungen, oder eben eine sway.nix-Datei, die man anstelle von kde.nix einbindet. Spaßhalber verwende ich nicht SDDM, sondern greetd als Login Manager: 

{ config, pkgs, lib, ... }:

{
  environment.systemPackages = with pkgs; [
    grim
    slurp
    wl-clipboard
    mako
  ];

  services.gnome.gnome-keyring.enable = true;

  programs.sway = {
    enable = true;
    wrapperFeatures.gtk = true;
  };

  services.greetd = {                                                      
    enable = true;                                                         
    settings = {                                                           
      default_session = {                                                  
        command = "${pkgs.greetd.tuigreet}/bin/tuigreet --time --cmd sway";
        user = "greeter";                                                  
      };                                                                   
    };                                                                     
  };
}


Sway

Durch das vorherige KDE Plasma ist das System nicht etwa verbastelt. Keine Spur mehr von den üblichen KDE-Anwendungen. Bei vielen anderen Linux-Distributionen wäre so ein "sauberer" Wechsel nur mit Aufwand möglich!

Aufräumen

Dabei wird grundsätzlich nichts überschrieben. Die KDE-Pakete sind im Nix-Store immer noch vorhanden (aber eben nicht "eingebunden"). Bei Bedarf könnte man einfach wieder auf die alte Konfiguration umschalten. Doch sammeln sich so natürlich immer mehr Dateien an und die Platte füllt sich. Auch die Bootloader-Einträge sammeln sich mit jedem nixos-rebuild an. NixOS bietet Mechanismen an, die alte Konfigurationen (bei Bedarf zyklisch) entfernt. Oder aber man räumt selbst auf. Nicht mehr referenzierte Pakete lassen sich mit nix-collect-garbage entfernen. Alte Systemkonfiguration werden dadurch jedoch nicht entfernt; ein Rollback wäre immer noch möglich. Möchte man alte Zöpfe abschneiden und ein Rollback somit unmöglich machen, ist dies mit nix-collect-garbage -d (als root) möglich.

Ausblick

Das bisherige hat wirklich nur an der Oberfläche von Nix(OS) gekratzt. Wir haben noch nicht einmal über Flakes gesprochen, ein experimentelles, aber sehr beliebtes Feature, das auch Versionspinning mittels lock-Dateien erlaubt. Im NixOS-Manual begegnet einem das aber nur am Rande.

Ebenso wenig betrachtet wurde Home Manager, womit man unter anderem die Dot-Dateien in den Homeverzeichnissen der Benutzer verwalten kann.

Und so gibt es sicherlich noch viele Features, die in dem kleinen NixOS-Ausflug hier völlig ignoriert wurden, da dem Autor womöglich gar nicht bekannt.

Möchte man sich ernsthaft mit NixOS beschäftigen, empfiehlt sich sicherlich die Lektüre des Nix-Manuals, das also den Nix-Paketmanager behandelt. Insbesondere der Teil über nix-shell ist interessant, womit man temporär einfach mal schnell Pakete "installieren" kann und die, wenn man diese Nix-Shell verlässt, wieder verschwunden sind. Das NixOS-Manual behandelt dann die NixOS-Distribution.

Fazit

NixOS bietet einen völlig anderen Ansatz als alle Linux-Distributionen, die ich bisher kennengelernt habe. Ich finde NixOS hochinteressant und es gefällt mir, wie einfach man ein neues "sauberes" Setup bauen kann, ohne dass es in Pakete(de)installationsarien ausartet. Warum also, um den Titel des Artikels nochmal aufzugreifen "… und zurück"? Ich fühle mich noch nicht bereit, um auf NixOS umzusteigen, es ist einfach zu … anders. Als alter Arch Linux User fühle ich mich mit pacman und Co. einfach noch sicherer. Ich habe das Gefühl, noch viel mehr über NixOS in Erfahrung bringen zu müssen, um den Schritt zum Umstieg zu wagen. Vielleicht würde die Lektüre des NixOS & Flakes Buchs helfen, das ich mir sicherlich mal zu Gemüte führen werde.

Wie sind eure Erfahrungen mit NixOS?

Quelle Titelbild: https://de.wikipedia.org (leicht angepasst)


GNU/Linux.ch ist ein Community-Projekt. Bei uns kannst du nicht nur mitlesen, sondern auch selbst aktiv werden. Wir freuen uns, wenn du mit uns über die Artikel in unseren Chat-Gruppen oder im Fediverse diskutierst. Auch du selbst kannst Autor werden. Reiche uns deinen Artikelvorschlag über das Formular auf unserer Webseite ein.

22. Juli 2025

Mozilla hat Firefox 141 für Windows, Apple macOS und Linux veröffentlicht. Dieser Artikel fasst die wichtigsten Neuerungen zusammen – wie immer auf diesem Blog weit ausführlicher als auf anderen Websites.

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

Smarte Tab-Gruppen dank lokaler KI

Auf Wunsch kann Firefox jetzt automatisch Namen für Tab-Gruppen sowie weitere geöffnete Tabs für bereits erstellte Tab-Gruppen vorschlagen. Dies geschieht mit Hilfe einer lokalen KI, es verlassen dabei also keine Daten den Browser.

Diese Neuerung wird schrittweise im Laufe der kommenden Wochen für Nutzer einer englischsprachigen Firefox-Version ausgerollt werden.

Außerdem lassen sich Tab-Gruppen jetzt auch im Menü „Alle Tabs auflisten“ verschieben.

Mehr Platz für vertikale Tabs

Nutzer vertikaler Tabs anstelle der standardmäßig aktiven horizontalen Tableiste können die Größe des Bereiches für die Werkzeuge am unteren Fensterrand nun anpassen, um mehr Platz für vertikale Tabs zu haben. Schaltflächen, die dadurch keinen Platz mehr haben, werden automatisch in einem Überlauf-Menü angezeigt.

Mehr Sicherheit für Firefox-Nutzer

Auch in Firefox 141 wurden wieder mehrere Sicherheitslücken geschlossen. Alleine aus Gründen der Sicherheit ist ein Update auf Firefox 141 daher für alle Nutzer dringend empfohlen.

Sonstige Endnutzer-Neuerungen in Firefox 141

Bei Verwendung des strengen Schutzes vor Aktivitätenverfolgung sowie in privaten Fenstern werden seit Firefox 136 auf Websites eingebettete Instagram- sowie TikTok-Inhalte durch einen Platzhalter ersetzt. Erst nach einem Klick auf einen Button wird dann der tatsächliche Inhalt geladen. Firefox 138 erweiterte diese Funktion um Unterstützung für Inhalte von X, früher auch als Twitter bekannt, Firefox 141 bringt Unterstützung für die Disqus-Kommentarplattform.

Der Schutz vor Aktivitätenverfolgung kann mitunter auch Scripts blockieren, welche Fingerprinting zur Betrugsbekämpfung einsetzen, ohne dass Tracking stattfindet. Anstatt die Scripts zu blockieren, setzt Firefox für diese jetzt auf seine Anti-Fingerprinting-Maßnahmen, um die Webkompatibilität zu verbessern.

Die Adressleiste kann nun auch zur Umrechnung von Einheiten genutzt werden. Ein Auswählen des entsprechenden Eintrags kopiert das Ergebnis in die Zwischenablage.

Firefox unterstützt jetzt PDF 2.0 Metatags für die Anzeige von Metadaten in den Dokumenteigenschaften von PDF-Dateien. Außerdem wird nicht länger eine Drucken-Schaltfläche im PDF-Betrachter angezeigt, wenn die Drucken-Funktion in Firefox deaktiviert ist. Auch die Performance der KI-basierten Generierung von Alternativ-Texten beim Einfügen von Bildern in PDF-Dateien wurde verbessert.

Der RAM-Verbrauch unter Linux wurde reduziert. Außerdem erzwingt Firefox nicht länger einen Neustart, wenn ein Update durch eine Paketverwaltung installiert worden ist. Deutliche Verbesserungen des RAM-Verbrauchs gab es außerdem bei der Übersetzungsfunktion.

Unter Windows 11 nutzt Firefox jetzt die vom System bereitgestellten Symbole für die Schaltflächen in der Titelleiste.

In der neuen Chronik-Sidebar lassen sich jetzt wie in der alten Implementierung Einträge mit der Tastatur auswählen. Außerdem wird der Sidebar-Button in der Navigationssymbolleiste nun nach rechts verschoben, wenn die Sidebar rechts angezeigt wird.

Das Speichern von Adressen wurde jetzt auch für Nutzer in Großbritannien, Spanien, Japan und Brasilien aktiviert. Das Speichern von Kreditkarten-Informationen wurde weltweit aktiviert. Wetter-Vorschläge in der Adressleiste wurden für Nutzer in Deutschland, Frankreich und Italien aktiviert.

Die Firefox-Startseite zeigt in den Content-Empfehlungen nicht länger Beschreibungstexte an.

Wird über about:config der Schalter browser.download.enableDeletePrivate auf true gesetzt, erscheint in den Firefox-Einstellungen für Downloads eine neue Option, um festzulegen, ob heruntergeladene Dateien im privaten Modus gelöscht werden sollen, wenn alle privaten Fenster geschlossen werden. Bisher ist dies immer der Fall.

Mit browser.screenshots.folderList gibt es einen weiteren neuen Schalter in about:config, der den Speicherort für Screenshots betrifft. Wird dieser auf 0 gesetzt, werden Screenshots auf dem Desktop gespeichert. Bei einem Wert von 1 (Standard), wird der Downloads-Ordner des Systems genutzt. Wird der Schalter auf 2 gesetzt, kann die Option browser.screenshots.dir genutzt werden, um einen Ordner festzulegen. Und bei einem Wert von 3 wird der Screenshot-Ordner des Systems genutzt.

Im Responsive Design Modus der Entwicklerwerkzeuge wird ein geänderter User-Agent nun direkt übernommen, wenn das entsprechende Eingabefeld den Fokus verliert, statt zwingend die Betätigung der Enter-Taste zu erwarten, und die Eingabe bei Betätigung der ESC-Taste zurückgesetzt. Auch die Eingaben für die Breite und Höhe des Festers werden durchd die ESC-Taste jetzt zurückgesetzt.

Verbesserungen der Webplattform

Unterstützung für Cookies mit unabhängigem Partitionierungsstatus (CHIPS) wurde hinzugefügt, so dass Entwickler ein Cookie in einem nach Top-Level-Site partitionierten Speicher ablegen können.

Auf Windows unterstützt Firefox jetzt die WebGPU-API. Unterstützung auf macOS, Linux und Android wird in den kommenden Monaten folgen.

In Eingabefeldern vom Typ search lässt sich die Eingabe jetzt mittels ESC-Taste leeren.

Weitere Verbesserungen der Webplattform und für Erweiterungsentwickler lassen sich wie immer in den MDN Web Docs nachlesen.

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

19. Juli 2025

Irgendwann im Jahre 2018 hatte ich bereits einen Artikel veröffentlicht, in dem ich auf ein schädliches Angebot im Arch User Repository (AUR) hingewiesen hatte. Jetzt hat es mal wieder jemand versucht und am 16.07.2025 um circa 20 Uhr (UTC+2) 3 Rezepte (librewolf-fix-bin, firefox-patch-bin, zen-browser-patched-bin) im AUR veröffentlicht.

Bei der Installation der betreffenden Rezepte wurde ein, auf Github gehostetes Script, heruntergeladen das einen Remote Access Trojan (RAT) installiert hat. Gesteuert wurde dieser scheinbar über einen der kostenlosen VPS, die Oracle anbietet.

Am 18.07.25 gegen 18 Uhr (UTC+2) wurden die betreffenden Angebote im AUR vom Arch Linux Team entfernt. Die offizielle Ankündigung findet man in der Mailing-List. Das Github-Repository ist ebenfalls nicht mehr erreichbar.

Solche Vorfälle zeigen weiterhin, dass man PKGBUILD-Dateien die im AUR angeboten werden weiterhin vor einer Installation bzw. einem Update prüfen sollte. Es zeigt aber auch weiterhin, dass solche Vorfälle ziemlich schnell erkannt werden, da das Prüfen recht einfach ist. Somit ist AUR zwar alles andere als sicher, aber immer noch sicherer als beispielsweise die PPA man unter Ubuntu nutzen kann, da darüber nur fertige Pakete angeboten werden.

17. Juli 2025

Der Repository slackware.lngn.net bietet Pakete zur vollständigen Installation der aktuellen Version von KDE Plasma 6 unter Slackware Linux an.

Die Pakete der aktuellen Version von KDE Plasma 6, sowie von KDE Frameworks 6, sind für Slackware-Nutzer unter slackware.lngn.net erhältlich. Der vollständige Desktop kann unter Slackware Current, der Entwicklerversion der Distribution, installiert werden. Voraussetzung dazu ist Slackpkg+, ein Plugin für slackpkg, das die Installation von Paketen aus Drittanbieter-Repositories ermöglicht. Zur Installation des Desktops sind die unten aufgelisteten Einträge in der Datei /etc/slackpkg/slackpkgplus.conf erforderlich:

Bei Verwendung einer CPU mit arm64/aarch64 Architektur:

PKGS_PRIORITY=( kde6 slackware )
REPOPLUS=( kde6 )
MIRRORPLUS['kde6']=https://slackware.lngn.net/pub/aarch64/slackwareaarch64-current/kde6/

Bei Verwendung einer CPU mit x86_64 Architektur:

PKGS_PRIORITY=( kde6 slackware64 )
REPOPLUS=( kde6 )
MIRRORPLUS['kde6']=https://slackware.lngn.net/pub/x86_64/slackware64-current/kde6/

Damit slackpkg auf alle verfügbaren Pakete zugreift, darf der Eintrag 'kde/' nicht in der schwarzen Liste von slackpkg (die Datei /etc/slackpkg/blacklist) enthalten sein. Im Anschluss werden die Pakete installiert:

root # slackpkg install kde6
root # slackpkg upgrade-all

Die aktuelle Version von KDE Plasma 6 arbeitet bislang zuverlässig und stabil unter Slackware Current.


Titelbild: Pixabay

Quellen:
KDE6 - [plasma-6.4.2, kf6-6.16.0, kf5-5.116.0, gear-25.04.3]
https://slackware.lngn.net/#kde6


GNU/Linux.ch ist ein Community-Projekt. Bei uns kannst du nicht nur mitlesen, sondern auch selbst aktiv werden. Wir freuen uns, wenn du mit uns über die Artikel in unseren Chat-Gruppen oder im Fediverse diskutierst. Auch du selbst kannst Autor werden. Reiche uns deinen Artikelvorschlag über das Formular auf unserer Webseite ein.

12. Juli 2025

Die MZLA Technologies Corporation hat mit Thunderbird 10.1 ein Update für die Android-Version seines E-Mail-Clients veröffentlicht.

Download Thunderbird für Android

Thunderbird 10.1 behebt das Problem, dass wenn mehrere Bilder aus der Android-Galerie geteilt wurden, nur eines statt alle Bilder an die E-Mail angehängt worden ist. Außerdem wurde das Problem behoben, dass die Anzeige der Neuerungen nach einem Update nicht funktionierte, wenn der Changelog-Eintrag unzulässige Zeichen beinhaltete.

Der Beitrag Thunderbird 10.1 für Android veröffentlicht erschien zuerst auf soeren-hentzschel.at.

11. Juli 2025

Ich nutze Quarto, um wissenschaftliche Artikel zu schreiben, und exportiere das Ergebnis als PDF mit Typst. Mein Layout ist dabei zweispaltig, was ich in meinem Typst-Template wie folgt aktiviere:

show: columns.with(2)

Manchmal möchte ich jedoch sehr breite Tabellen oder Bilder einfügen, die sich über beide Spalten erstrecken sollen.

In Typst selbst lässt sich das mit dem place-Befehl lösen:

#place(top+center, scope: "parent", float: true)[INHALT]

In Quarto kann man das umsetzen, indem man manuell zwei Typst-Codeblöcke (typst-Chunks) um den Inhalt legt – z. B. um eine Tabelle:

```{=typst}
#place(top+center, scope: "parent", float: true)[
```


| **Default** | **Left** | **Right** | **Center** | **Default** | **Left** | **Right** | **Center** |
|:-----------|:--------|---------:|:--------:|:-----------|:--------|---------:|:--------:|
| 12         | 12      | 12       | 12       | 12         | 12      | 12       | 12       |
| 123        | 123     | 123      | 123      | 123        | 123     | 123      | 123      |
| 1          | 1       | 1        | 1        | 1          | 1       | 1        | 1        |

: Tolle Tabelle {#tbl-mulitcolumn1}

```{=typst}
]
```

Das funktioniert, ist aber nicht wirklich „the Quarto way“.

Lua-Filter

Um das eleganter zu lösen, habe ich einen kleinen Lua-Filter geschrieben (multicolumn.lua), der automatisch jede ::: {.multicolumn}-Umgebung in den passenden #place(...)-Befehl für Typst übersetzt:

function Div(div)
  if div.classes:includes("multicolumn") then
    local typst_start = pandoc.RawBlock("typst", '#place(top+center, scope: "parent", float: true)[')
    local typst_end = pandoc.RawBlock("typst", ']')

    local result = {typst_start}
    for _, el in ipairs(div.content) do
      table.insert(result, el)
    end
    table.insert(result, typst_end)
    return result
  end
end

Den Filter aktiviere ich im YAML-Header wie folgt:

      filters:
        - multicolumn.lua

Dann kann ich im Markdown einfach folgende Struktur verwenden:


:::{.multicolumn}

| **Default** | **Left** | **Right** | **Center** | **Default** | **Left** | **Right** | **Center** |
|:-----------|:--------|---------:|:--------:|:-----------|:--------|---------:|:--------:|
| 12         | 12      | 12       | 12       | 12         | 12      | 12       | 12       |
| 123        | 123     | 123      | 123      | 123        | 123     | 123      | 123      |
| 1          | 1       | 1        | 1        | 1          | 1       | 1        | 1        |

: My span table {#tbl-span2}

:::

Das Ergebnis: Die Tabelle erscheint über beide Spalten hinweg, ganz ohne manuelle Typst-Blöcke. Das funktioniert genauso gut auch mit Bildern oder R-Code-Chunks.

Typsttabellen direkt spannen

Markdowntabellen sind in ihren Manipulationsmöglichkeiten stark eingeschränkt. Sie können z.B. kein colspan, keine Farben und keine Strichmodifikationen; Typst hingegen schon. Und so kann es bei aufwendigen Tabellen eine praktikable Lösung sein, direkt den Typst-Code zu verwenden.

Damit diese Tabelle per crossref referenziert werden kann, sollte die in Quarto integrierte Tabellenumgebung verwendet werden:

:::{#tbl-REFERENZLABEL}
```{=typst}
#table( TOLLE TYPST TABELLE )
```

BESCHRIFTUNG
:::

Die Tabelle kann jetzt per @tbl-REFERENZLABEL referenziert werden.

Damit diese aufwendig gestalteten Typsttabellen auch über beide Spalten gespannt werden, wickeln wir das Ganze in die oben erstellte .mulitcolumn Umgebung:

::::{.multicolumn}
:::{#tbl-REFERENZALBEL}
```{=typst}
#table( TOLLE TYPST TABELLE )
```

BESCHRIFTUNG
:::
::::

Viel Spass beim Coden!

Weblinks


Diskussion per Matrix unter https://matrix.to/#/#produnis-blog:tchncs.de

 

Die MZLA Technologies Corporation hat mit Thunderbird 140.0.1 ein Update für seinen Open Source E-Mail-Client veröffentlicht.

Neuerungen von Thunderbird 140.0.1

Mit Thunderbird 140.0.1 hat die MZLA Technologies Corporation ein Update für seinen Open Source E-Mail-Client veröffentlicht. Die neue Version behebt unter anderem den Fehler, dass das Einfügen eines Links in eine HTML-Mail nicht wie erwartet funktionierte.

Der Beitrag Thunderbird 140.0.1 veröffentlicht erschien zuerst auf soeren-hentzschel.at.

9. Juli 2025

8. Juli 2025

Mozilla hat Firefox 140.0.4 veröffentlicht und behebt damit mehrere Probleme der Vorgängerversion.

Download Mozilla Firefox 140.0.4

Mozilla hat Firefox 140.0.4 für Windows, macOS und Linux veröffentlicht. Firefox 140.0.3 wurde für diese Plattformen übersprungen, da diese Versionsnummer einem Android-Update vorbehalten war.

HuggingChat wurde als Chatbot-Anbieter entfernt, da der Dienst eingestellt worden ist.

Im Zuge der Pocket-Einstellung wurde in Firefox 140 fälschlicherweise auch die Unterstützung für die Optionen Pocket und SponsoredPocket aus der FirefoxHome-Unternehmensrichtlinie entfernt, obwohl es diese Optionen der Firefox-Startseite weiterhin geben wird. Die Optionen wurden zurückgebracht und gleichzeitig mit Stories sowie SponsoredStories neue Optionen eingeführt, die das Gleiche machen, aber nicht länger Pocket im Namen beinhalten.

Ein Problem wurde behoben, welches auf manchen Websites verursachte, dass PDF-Dateien unter Umständen nicht mehr heruntergeladen werden konnten. Dazu kommen zwei weitere Korrekturen, welche in Zusammenhang mit der Webkompatibilität stehen.

Die Animation des Schließens eines Tabs, welcher Audio wiedergibt, war ruckelig.

Ein fehlender Abstand zwischen zwei Buttons im Dialog zur Profilerstellung wurde wiederhergestellt.

Ein Fehler in der WebExtension-API browserSettings.useDocumentFonts wurde behoben.

Im Debugger Entwicklerwerkzeug konnten falsche Suchergebnisse zu sehen sein, wenn während einer Dateisuche die Quelle gewechselt wurde.

Dazu kommen mehrere Verbesserungen in Zusammenhang mit einem bevorstehenden Experiment für die Firefox-Startseite, welches für unter ein Prozent der Nutzer in den USA geplant ist.

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

Ich setze auf meinen Linux Installationen WireGuard als VPN Lösung ein. Meine FRITZ!Box kann auch WireGuard-Verbindungen erstellen und verwalten.
Bisher ist es mir noch nicht gelungen die von meiner FRITZ!Box erstellten VPN-Verbindung in meinem Linux im NetworkManager einzutragen. Auf dem Linuxrechner muss das Metapaket wireguard bzw. wireguard-tools installiert sein.

Auf der c-base habe ich nun erfahren wie ich die von der WireGuard erstellte wg_config.conf Datei im NetworkManager importiere. Dazu setze ich einen Befehl in der Konsole ab:

nmcli connection import type wireguard file "/home/andi/Downloads/wg_config.conf"

Nun kann ich meine VPN-Verbindungen im NetworkManager verwenden. Hier können dann noch Details eingestellt werden, etwa ob der VPN-Tunnel automatisch aufgebaut werden soll oder nicht.

4. Juli 2025

Die MZLA Technologies Corporation hat mit Thunderbird 140 eine neue Version seines Open Source E-Mail-Clients für Windows, Apple macOS und Linux veröffentlicht.

Neuerungen von Thunderbird 140

Mit Thunderbird 140 hat die MZLA Technologies Corporation ein Update für seinen Open Source E-Mail-Client veröffentlicht.

Thunderbird 140 bringt einen neuen Dialog zum Einrichten von E-Mail-Konten, welcher die bisherige Oberfläche in einem Tab ersetzt.

Thunderbird 140 Thunderbird 140

Die Benachrichtigungen für neue E-Mails haben eine Schaltfläche, um weitere Aktionen auszuführen. Darüber war es bereits möglich, E-Mails direkt als gelesen zu markieren oder diese zu löschen. Thunderbird 140 ergänzt die Optionen zum Markieren als Spam sowie zum Hinzufügen der Stern-Kennzeichnung.

Mehrere Optionen, welche das Erscheinungsbild von Thunderbird betreffen, wurden in die entsprechende Kategorie der Einstellungen verschoben.

Thunderbird 140

Darüber hinaus gab es wie immer diverse Fehlerkorrekturen und Verbesserungen unter der Haube, welche sich in den Release Notes (engl.) nachlesen lassen. Auch Sicherheitslücken wurden behoben.

Thunderbird ESR 140, die Version mit Langzeitunterstützung und Nachfolger von Thunderbird ESR 128, wurde noch nicht veröffentlicht. Dies ist für kommende Woche geplant.

Der Beitrag Thunderbird 140 veröffentlicht erschien zuerst auf soeren-hentzschel.at.

3. Juli 2025

KHangMan ist ein KDE-App, die auf dem klassischen Galgenmännchen-Spiel basiert. Sie ist Teil der KDE Software Compilation, genauer gesagt, des kdeedu-Pakets.

KHangMan funktioniert dabei nicht so, wie ihr vielleicht denkt. Denn die Wörter, die erraten werden sollen, können nicht selbst eingegeben werden. Vielmehr greift KHangMan auf eine Reihe von vorinstallierten Wortlisten zurück, die für verschiedene Kategorien bereitgestellt werden, z.B. “Zahlen”, “Hauptstädte”, “Tiere”, usw.

Möchte man eigene Wörter spielen, muss man eine eigene Wortliste erstellen und für KHangMan verfügbar machen.

custom word list

Die Wörterlisten liegen im Verzeichnis /usr/share/apps/kvtml/LANGUAE, wobei LANGUAGE durch den Ländercode ersetzt werden muss. Die deutschen Wörterlisten liegen also unter /usr/share/apps/kvtml/de und haben die Dateiendung .kvtml. Für jede Wörterliste existiert eine eigene .kvtml-Datei.

Die Skelettstruktur einer solchen Wörterliste sieht so aus:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE kvtml PUBLIC "kvtml2.dtd" "http://edu.kde.org/kvtml/kvtml2.dtd">
<kvtml version="2.0">
  <information>
    <generator>converter</generator>
    <title>TITEL DER LISTE</title>
    <comment>DEINE BESCHREIBUNG</comment>
  </information>

  <identifiers>
    <identifier id="0">
      <locale>de</locale>
    </identifier>
  </identifiers>
  
  <entries>
  
    <entry id="0">
      <inactive>false</inactive>
      <inquery>false</inquery>
      <translation id="0">
        <text>DEIN WORT</text>
        <comment>EIN KOMMENTAR</comment>
      </translation>
    </entry>

    </entries>
</kvtml>
  • in Zeile 6 und 7 wird der Name der Liste samt einer kleinen Beschreibung angegeben. Unter diesem Namen ist die Wortliste später in KHangMan auffindbar.
  • in Zeile 12 geben wir an, dass die Sprache der Liste de ist.
  • Die Zeilen 18 bis 25 bilden einen Entry-Block für ein gewünschtes Wort. Dabei wird
    • in Zeile 18 eine eindeutige <entry id> angegeben (hochzählen)
    • in Zeile 22 das eigentliche Wort definiert
    • in Zeile 23 ein kurzer Hilfetext gesetzt.
  • diese Entry-Blöcke müssen für jedes Wort erzeugt werden.

Für ein Statistik-Quiz könnte die vollständige Datei so aussehen:

sudo nano /usr/share/apps/kvtml/statistikquiz.kvtml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE kvtml PUBLIC "kvtml2.dtd" "http://edu.kde.org/kvtml/kvtml2.dtd">
<kvtml version="2.0">
  <information>
    <generator>converter</generator>
    <title>Statistik</title>
    <comment>Statistik</comment>
  </information>
  <identifiers>
    <identifier id="0">
      <locale>de</locale>
    </identifier>
  </identifiers>
  <entries>
    <entry id="0">
      <inactive>false</inactive>
      <inquery>false</inquery>
      <translation id="0">
        <text>Boxplot</text>
        <comment>graphische Darstellung einer metrischen Werteverteilung</comment>
      </translation>
    </entry>
    <entry id="1">
      <inactive>false</inactive>
      <inquery>false</inquery>
      <translation id="0">
        <text>Histogram</text>
        <comment>graphische Darstellung klassierter Häufigkeiten</comment>
      </translation>
    </entry>
    <entry id="2">
      <inactive>false</inactive>
      <inquery>false</inquery>
      <translation id="0">
        <text>Kausalität</text>
        <comment>ursächlicher Zusammenhang</comment>
      </translation>
    </entry>
    <entry id="3">
      <inactive>false</inactive>
      <inquery>false</inquery>
      <translation id="0">
        <text>Konfidenzintervall</text>
        <comment>Sicherheitsbereich</comment>
      </translation>
    </entry>
    <entry id="4">
      <inactive>false</inactive>
      <inquery>false</inquery>
      <translation id="0">
        <text>Korrelation</text>
        <comment>Zusammenhang (aber nicht kausal)</comment>
      </translation>
    </entry>
    <entry id="5">
      <inactive>false</inactive>
      <inquery>false</inquery>
      <translation id="0">
        <text>Regressionsgerade</text>
        <comment>Wird beschrieben mit y=a+bx</comment>
      </translation>
    </entry>
    <entry id="6">
      <inactive>false</inactive>
      <inquery>false</inquery>
      <translation id="0">
        <text>Signifikanz</text>
        <comment>liegt vor wenn p kleiner alpha ist</comment>
      </translation>
    </entry>
    <entry id="7">
      <inactive>false</inactive>
      <inquery>false</inquery>
      <translation id="0">
        <text>Standardabweichung</text>
        <comment>Wurzel aus der Varianz</comment>
      </translation>
    </entry>
    <entry id="8">
      <inactive>false</inactive>
      <inquery>false</inquery>
      <translation id="0">
        <text>Varianz</text>
        <comment>Quadrat der Standardabweichung</comment>
      </translation>
    </entry>
  </entries>
</kvtml>

Nachdem die Datei gespeichert ist, wird KHangMan gestartet.

Wordlist wechseln

Unten links wird die derzeit aktive Wörterliste angezeigt. In meinem Beispiel ist das “Tiere”.

Wenn man darauf klickt, kann eine andere Wörterliste ausgewählt werden. Da meine Systemsprache deutsch ist, sucht KHangMan im Ordner /usr/share/apps/kvtml/de nach validen .kvtml-Dateien.

eigene Wordlist auswählen

Hier sollte - wenn alles richtig gemacht wurde - die neue eigene Liste auftauchen.

Erstes Wort von der Liste

Ist diese ausgewählt, kann das Spiel beginnen.

:=)

Python-Script

Unter Umständen kann es mühsam sein, eine oder mehrere solcher .kvtml-Dateien zu erstellen und zu pflegen. Beispielsweise ist es mühselig, die entry id nachzuverfolgen, wenn ein Entry-Block zwischen bestehende Blöcke eingeschoben werden soll.

Daher hab ich mir ein kleines naives Python-Script geschrieben, welches mir die Arbeit etwas erleichtert.

Das Script nimmt eine Textdatei entgegen, und erzeugt daraus die passende .kvtml-Datei.

Für das Statistikquiz sieht die Datei so aus:

nano statistik.txt

Boxplot       graphische Darstellung einer metrischen Werteverteilung
Histogram       graphische Darstellung klassierter Häufigkeiten
Kausalität         ursächlicher Zusammenhang
Konfidenzintervall         Sicherheitsbereich
Korrelation        Zusammenhang (aber nicht kausal)
Regressionsgerade        Wird beschrieben mit y=a+bx
Signifikanz        liegt vor wenn p kleiner alpha ist
Standardabweichung       Wurzel aus der Varianz
Varianz        Quadrat der Standardabweichung

Jede Zeile repräsentiert einen Worteintrag. Zuerst kommt das gesuchte Wort, dann mindestens 2 Leerzeichen, und anschließend der Hinweistext.

Hier nun das Python-Script, welches diese Datei ausliest

nano create-wordlist.py

#!/usr/bin/env python3
import sys
import re
import xml.etree.ElementTree as ET
from xml.dom import minidom
import string

def prettify(elem):
    """Return a pretty-printed XML string for the Element."""
    rough_string = ET.tostring(elem, 'utf-8')
    parsed = minidom.parseString(rough_string)
    return parsed.toprettyxml(indent="  ")

def sanitize_filename(name):
    """Sanitize the title to create a safe filename."""
    # Entfernt alle Zeichen außer Buchstaben, Zahlen, Bindestrich und Unterstrich
    valid_chars = f"-_.() {string.ascii_letters}{string.digits}"
    sanitized = ''.join(c if c in valid_chars else '_' for c in name)
    return sanitized.replace(' ', '_') + ".kvtml"

def main():
    if len(sys.argv) < 4:
        print("Usage: python3 generate_kvtml.py input.txt title comment")
        sys.exit(1)

    input_file = sys.argv[1]
    title = sys.argv[2]
    comment = sys.argv[3]
    output_file = sanitize_filename(title)

    with open(input_file, "r", encoding="utf-8") as f:
        lines = [line.strip() for line in f if line.strip()]

    kvtml = ET.Element("kvtml", version="2.0")

    info = ET.SubElement(kvtml, "information")
    ET.SubElement(info, "generator").text = "converter"
    ET.SubElement(info, "title").text = title
    ET.SubElement(info, "comment").text = comment

    identifiers = ET.SubElement(kvtml, "identifiers")
    identifier = ET.SubElement(identifiers, "identifier", id="0")
    ET.SubElement(identifier, "locale").text = "de"

    entries = ET.SubElement(kvtml, "entries")

    for idx, line in enumerate(lines):
        parts = re.split(r'\t+| {2,}', line)
        if len(parts) != 2:
            print(f"Warning: Skipping invalid line {idx + 1}: {line}")
            continue
        text, comment_text = parts
        entry = ET.SubElement(entries, "entry", id=str(idx))
        ET.SubElement(entry, "inactive").text = "false"
        ET.SubElement(entry, "inquery").text = "false"
        trans = ET.SubElement(entry, "translation", id="0")
        ET.SubElement(trans, "text").text = text
        ET.SubElement(trans, "comment").text = comment_text

    pretty_xml = prettify(kvtml)

    with open(output_file, "w", encoding="utf-8") as f:
        f.write('<?xml version="1.0" encoding="UTF-8"?>\n')
        f.write('<!DOCTYPE kvtml PUBLIC "kvtml2.dtd" "http://edu.kde.org/kvtml/kvtml2.dtd">\n')
        f.write('\n'.join(pretty_xml.split('\n')[1:]))

    print(f"✅ KVTML-Datei wurde geschrieben: {output_file}")

if __name__ == "__main__":
    main()

Das Script wird ausführbar gemacht mittels

chmod +x create-wordlist.py

…und aufgerufen per:

./create-wordlist.py TEXTDATEI LISTENNAME BESCHREIBUNG

Im Falle des Statistikquiz lautet der Aufruf

./create-wordlist.py statistik.txt Statistik Grundbegriffe

Das Script erzeugt die Datei LISTENNAME.kvtml, also in unserem Falle Statistik.kvtml, welche alle Entry-Blöcke der Wörterliste enthält. Diese kann nun ins kvtml-Verzeichnis kopiert werden.

cp Statistik.kvtml /usr/share/apps/kvtml/de/

Viel Spass beim Ausprobieren!

Weblinks


Diskussion per Matrix unter https://matrix.to/#/#produnis-blog:tchncs.de

 

1. Juli 2025

In den USA hat Mozilla ein neues Experiment gestartet, welche Nutzern von Windows 10 das Mozilla VPN für sechs Monate schenkt, wenn sich diese für die Synchronisation in Firefox anmelden.

Mit dem Mozilla VPN bietet Mozilla in Zusammenarbeit mit Mullvad sein eigenes Virtual Private Network an und verspricht neben einer sehr einfachen Bedienung eine durch das moderne und schlanke WireGuard-Protokoll schnelle Performance, Sicherheit sowie Privatsphäre: Weder werden Nutzungsdaten geloggt noch mit einer externen Analysefirma zusammengearbeitet, um Nutzungsprofile zu erstellen.

Jetzt Mozilla VPN nutzen

USA: Mozilla VPN sechs Monate kostenlos nutzen

In den USA hat Mozilla ein neues Experiment gestartet: Demnach soll einem Teil der Firefox-Nutzer auf Windows 10, die sich einen Mozilla Account zulegen, das Mozilla VPN für sechs Monate geschenkt werden.

Kostenloses Mozilla VPN für Nutzer von Windows 10

Hintergrund der Aktion: Im Oktober 2025 endet die offizelle Unterstützung von Windows 10 durch Microsoft. Mozillas Hypothese ist, dass sich aufgrund der mit Windows 11 gestiegenen Hardware-Voraussetzungen einige Nutzer dann ein neues Gerät kaufen werden, was auch zu einer teilweisen Abwanderung von Firefox-Nutzern führen wird. Die Synchronisation von Browser-Daten wie Lesezeichen und Zugangsdaten soll die Migration auf ein neues Gerät vereinfachen, um diesem potenziellen Effekt entgegenzuwirken. Die sechs kostenlosen Monate für das Mozilla VPN sollen für Nutzer, welche die Synchronisation noch nicht nutzen, einen Anreiz darstellen, sich einen kostenlosen Mozilla Account zu erstellen.

Über das Experiment wird Mozilla die Entwicklung dieser neuen Konten und VPN-Nutzer beobachten. Mozilla schreibt, dass die Ergebnisse dieses Experiments auch als Grundlage für eine Untersuchung dienen könnten, ob in der Zukunft allen Firefox-Benutzern ein kostenloses VPN angeboten werden soll.

Der Beitrag USA: Mozilla VPN 6 Monate kostenlos für Nutzer von Windows 10 erschien zuerst auf soeren-hentzschel.at.