Technik

Verzeichnis für Benutzerschriftarten

05. März 2021 · Betriebssysteme · andreas · Kein Kommentar

Schriftarten für Benutzer sollten nicht mehr in “~/.fonts” abgelegt werden. Hinweisegeber ist ein Eintrag in der Datei “/etc/fonts/fonts.conf”:

<!-- the following element will be removed in the future --> <dir>~/.fonts</dir>

Bevorzugter Speicherort für Schriftarten eines Benutzers ist

<dir prefix="xdg">fonts</dir>

Die Dokumentation von Fontconfig erklärt

If ‘prefix’ is set to “xdg”, the value in the XDG_DATA_HOME environment variable will be added as the path prefix.

Die Definition von XDG_DATA_HOME wiederum ergibt sich aus der XDG Base Directory Specification

There is a single base directory relative to which user-specific data files should be written. This directory is defined by the environment variable $XDG_DATA_HOME.

Sollte die Umgebungsvariable nicht gesetzt sein, so wird ein Default verwendet:

$XDG_DATA_HOME defines the base directory relative to which user specific data files should be stored. If $XDG_DATA_HOME is either not set or empty, a default equal to $HOME/.local/share should be used.

Somit sollte auf einem Standardsystem das Verzeichnis “$HOME/.local/share/fonts” für Benutzerschriftarten verwendet werden.


Congstar, VoLTE und ein Google Pixel der ersten Generation

02. März 2021 · Anwendungen · andreas · Kein Kommentar

Technik kann frustrierend sein, vor allem, wenn die mehr oder minder geplante Obsoleszenz zuschlägt. Ein gutes Beispiel dafür ist VoLTE, eine neue Technik, deren Vorteil in einem schnelleren Gesprächsaufbau sowie dem Wegfallen des Netzwechsels auf 2G / 3G beim Telefonieren liegt.

Das Google Pixel der ersten Generation ist seit Android 7.1.1 VoLTE-fähig, Congstar hat VoLTE im Laufe des Jahres 2020 freigeschaltet, trotzdem fehlt im Einstellungsdialog die benötigte Option:

Vollständigen Beitrag lesen


is_admin() ist keine Sicherheitsfunktion

16. Februar 2021 · Anwendungen · andreas · Kein Kommentar

Manche Funktionsbezeichnungen lassen Interpretationsspielraum, wo besser keiner sein sollte. Die WordPress-Funktion “is_admin()” ist so ein Fall, denn wie die WordPress Code Refernce erklärt

Does not check if the user is an administrator

“is_admin()” prüft lediglich, ob der Aufruf innerhalb der Administrations-Oberfläche erfolgte. Wer sich für die tatsächlichen Berechtigungen des angemeldeten Benutzers interessiert, sollte “current_user_can()” verwenden.


Windows-Hintergrundbild mit Perl setzen

12. Februar 2021 · Programmierung · andreas · Kein Kommentar

Das Setzen des Windows-Hintergrundbilds ist von Perl aus ganz einfach - zumindest wenn man die Win32-API verwendet:

wallpaper.pl
use strict; use warnings; use Win32::API; use constant SPI_SETDESKWALLPAPER => 0x0014; use constant SPIF_UPDATEINIFILE => 0x0001; use constant SPIF_SENDCHANGE => 0x0002; use constant ZERO => 0x0000; my $syspinf = Win32::API->new('user32', 'SystemParametersInfo', [I,I,P,I], I) or die "SystemParametersInfo not available.\n"; $syspinf->Call(SPI_SETDESKWALLPAPER, ZERO, $ARGV[0], SPIF_UPDATEINIFILE | SPIF_SENDCHANGE);

Das Skript erwartet den Namen des Bildes inklusive Pfad als Parameter.


inotifywait bricht bei Dateiänderungen ab

06. Februar 2021 · Anwendungen · andreas · Kein Kommentar

Es gibt verschiedene Strategien, wie die Änderung einer Datei gespeichert werden kann. Die beiden i.d.R. eingesetzten Verfahren sind entweder die vorhandene Datei mit dem neuen Inhalt zu überschreiben oder aber den geänderten Inhalt in eine neue Datei zu speichern und dann die Dateien auszutauschen.

Unter Sicherheitsaspekten ist der Dateiaustausch klar vorzuziehen, denn erst wenn der neue Inhalt erfolgreich in die neue Datei gespeichert wurde, wird die bisherige Datei gelöscht. Beim direkten Überschreiben kann entweder beim Zugriff durch andere Programme eine halbfertige Datei geliefert werden oder es kommt durch Hardware- / Software-Fehler zu einer Situation, in welcher der alte Inhalt bereits zerstört, der neue Inhalt aber nicht erfolgreich geschrieben werden kann.

Dies hat Auswirkungen auf die Möglichkeiten, mittels inotifywait auf Dateiänderungen zu reagieren. Während beim direkten Überschreiben inotifywait ordnungsgemäß eine Änderung der Datei registriert, bricht inotifywait beim Dateiaustausch ab - die z.B. im Beitrag “Sass ohne Ruby” geschilderte Vorgehensweise scheitert dann, da die ursprünglich überwachte Datei ja nicht mehr existiert.

$ while inotifywait -e close_write style.scss; do sassc --style compact style.scss style.css ; done

Eine Möglichkeit, dies zum umgehen, ist das Überwachen des kompletten Verzeichnisses mit Abfrage der geänderten Datei

inotifywait -e close_write,moved_to,create -m . | while read -r directory events filename; do if [ "$filename" = "style.scss" ]; then sassc --style compact style.scss .style.css fi done

was aber - je nach Anzahl der im Verzeichnis vorhandenen Dateien und deren Änderungshäufigkeit - zu einer erhöhten Systemlast führen kann.