Linux Tipps & Tricks
Systemd Timer erstellen für User¶
Um täglich, 12-stündlich, wöchentlich etc. ein .sh Skript aufzurufen kann man sich Systemd zu Nutze machen.
Hierzu braucht man eine Timer-Datei .timer und eine Service-Datei .service.
Beispiel für eine .service Datei¶
[Unit]
Description=Startet mein Shell-Skript
[Service]
Type=oneshot
ExecStart=/pfad/zu/deinem/skript.sh
ACHTUNG! Möchte man das Benutzer Heim-Verzeichnis nutzen schreibt man
%h, $HOME bzw ~ funktionieren nicht!
Beispiel für eine .timer Datei¶
[Unit]
Description=Timer fuer mein Shell-Skript
[Timer]
# Waehle eines der Beispiele unten fuer OnCalendar:
OnCalendar=Mon *-*-* 14:30:00
# Verpasste Ausfuehrungen (z. B. wenn der PC aus war) nach dem Start nachholen
Persistent=true
[Install]
WantedBy=timers.target
Beispiele für OnCalendar=¶
-
Alle 12 Stunden (um 00:00 und 12:00 Uhr):
OnCalendar=00/12:00:00 -
Alle 3 Tage (z. B. jeweils um 03:00 Uhr morgens):
OnCalendar=*-*-1/3 03:00:00(läuft am 1., 4., 7., ... Tag des Monats) -
1x die Woche an einem bestimmten Tag/Uhrzeit (z. B. jeden Montag um 14:30 Uhr):
OnCalendar=Mon *-*-* 14:30:00 -
Täglich um 9 und 18 Uhr:
OnCalendar=*-*-* 09,18:00:00
oder lesbarer:
OnCalendar=09:00:00
OnCalendar=18:00:00
Hat man diese beiden Dateien (Service- und Timer-Datei) in ~/.config/systemd/user erstellt, wird die Konfiguration neu geladen:
systemctl --user daemon-reload
Dann den Timer aktivieren und sofort starten:
systemctl --user enable --now mein-skript.timer
Weitere Befehle¶
Aktive Timer und nächste Ausführungszeiten anzeigen:
systemctl --user list-timers
Status des Timers prüfen:
systemctl --user status mein-skript.timer
Skript manuell ausführen bzw. Timer manuell triggern:
systemctl --user start mein-skript.service
Zeit-Syntax vorab prüfen (wann der nächste Lauf wäre):
systemd-analyze calendar "Mon *-*-* 14:30:00"
Tipp: Damit der User-Timer auch nach dem Abmelden weiterläuft (z. B. auf einem Server), muss für deinen Benutzer einmalig das Linger-Feature aktiviert werden: loginctl enable-linger $USER. War/ist bei mir schon aktiviert.
Einen Befehl mit Parametern für alle *.EXT ausführen¶
for f in *.ext; do <Befehl> --option -o "$f"; done
Könnte man so lesen: "Für alle Dateien mit Erweiterung *.ext jeweils in Variable f pro Durchgang (f hat jeweils einen Dateiname im Speicher) mache folgendes: blabla mit "$f", nächste Datei bis alle durch sind. Fertig.
Ein Skript in Dolphin integrieren¶
Für .mds und .iso Dateien habe ich ein Konvertierungsskript in .bin/.cue geschrieben. Diese Skript möchte ich nun für besagte Dateien in Dolphin integrieren.
Falls noch nicht vorhanden das Verzeichnis dazu erstellen:
mkdir -p ~/.local/share/kio/servicemenus
Desktop-Datei für Dolphin anlegen¶
~/.local/share/kio/servicemenus/convert_mdsiso_to_bincue.desktop:
[Desktop Entry]
Type=Service
ServiceTypes=KonqPopupMenu/Plugin
MimeType=application/x-cd-image;application/x-iso9001-image;application/x-mds;application/octet-stream;
Actions=convertToBinCue;
X-KDE-Submenu=Konvertieren
[Desktop Action convertToBinCue]
Name=MDS/ISO in .bin / .cue umwandeln (PicoGUS)
Icon=media-optical
Exec=konsole -e bash -c '"$HOME/bin/conv_mdsiso_to_bincue.sh" "$1"' _ "%f"
Hier noch ein verfeinertes Beispiel bald™ einfügen :p
Avidemux mit Hardware-Encoder bauen¶
Intel QuickSync und nvidia NVENC sollen nutzbar werden.
Aus dem AUR: https://aur.archlinux.org/packages/avidemux-core-git?all_deps=1#pkgdeps
Ich nutze da die QT5 GUI zusätzlich.
Für NVIDIA: Arch-Paket extra/ffnvcodec-headers ist erforderlich
Für Intel: Arch-Paket onevpl-intel-gpu erforderlich
Danach avidemux-core-git natürlich neu bauen:
yay -S --rebuild --answerclean All avidemux-core-git
Wenn Intel Encoder dann immer noch nicht lädt, gibts hier noch einen Dirty Fix:
fake_va_intel.c:
#include <fcntl.h>
#include <va/va.h>
#include <va/va_drm.h>
VADisplay vaGetDisplay(void *dpy) {
int fd = open("/dev/dri/renderD129", O_RDWR);
if (fd < 0) return NULL;
return vaGetDisplayDRM(fd);
}
Kompilieren:
gcc -shared -fPIC -o libva_intel_override.so fake_va_intel.c -lva -lva-drm
Avidemux aufrufen mit:
LD_PRELOAD=./libva_intel_override.so LIBVA_DRIVER_NAME=iHD avidemux3_qt5
Die libva_intel_override.so nach ~/.local/lib kopieren/verschieben.
Wrapper Skript avidemux-intel.sh:
#!/bin/bash
export LIBVA_DRIVER_NAME=iHD
export LD_PRELOAD="$HOME/.local/lib/libva_intel_override.so"
exec avidemux3_qt5 "$@"
Im Startmenü Avidemux zu Avidemux NVIDIA umbenennen, eine Kopie erstellen und Avidemux Intel nennen, sowie als Startprogramm das o.g. Script eintragen: avidemux-intel.sh.
Docker¶
Versionsabfrage¶
Z.B. für PiHole:
sudo docker exec -it pihole pihole -v
Auszug:
$ sudo docker exec -it pihole pihole -v
Core version is v6.4.1 (Latest: v6.4.3)
Web version is v6.5 (Latest: v6.6)
FTL version is v6.6 (Latest: v6.7)
Update¶
Am Beispiel PiHole:
sudo docker compose pull && sudo docker compose up -d && sudo docker image prune -f
Bedeutung:
* compose pull: Lädt das aktuellste Image pihole/pihole:latest herunter
* compose up -d: Ersetzt den laufenden Container durch die neue Version, sämtliche etc-Dateien bleiben erhalten
* image prune -f: Entfernt das alte Image
Auszug:
$ sudo docker exec -it pihole pihole -v
Core version is v6.4.3 (Latest: v6.4.3)
Web version is v6.6 (Latest: v6.6)
FTL version is v6.7 (Latest: v6.7)
Numlock standardmäßig einschalten¶
SDDM KDE Plasma Wayland¶
Funktioniert derzeit (seit 2023, wie ich sehe!) NICHT im Anmeldebildschirm wegen Wayland. Siehe: Arch Linux Wiki und Github Issue
Desktop KDE¶
Festplatten Image .img mounten¶
Mit Loop-Device und automatischem Paritionsscan:
sudo losetup -fP /pfad/zur/datei.img
Dann mit KDE-Dialog mounten oder mit zum Beispiel:
sudo mount /dev/loop0p1 /mnt/img
Abmelden:
sudo umount /mnt/img
Loop-Device entfernen:
sudo losetup -d /dev/loop0
Bilder skalieren und von 16:9 auf 4:3 bringen¶
Schleife erstellen, für zum Beispiel alle .png:
for file in *.png; do magick "$file" -scale 200% -resize 75x100%! "200p/${file%.*}_200p43.png"; done
Parameter:
-scale 200%- 200% Vergrößerung nearest neighbor-resize 75x100%!- Breite auf 75% gestaucht, während Höhe 100% bleibt. Das!zwingt ImageMagick das Seitenverhältnis zu ignorieren
