Category Archives: Linux

macOS: dd-Status überprüfen

Das vielseitig nutzbare Tool „dd“ (DiskDump) gibt während des Programmlaufs normalerweise keinerlei Statusmeldungen aus. Um zu überprüfen, wieviele Bytes bereits verarbeitet wurden, kann unter Linux der folgende Befehl genutzt werden: kill -USR1 prozessnummer. Unter macOS führte dieser Befehl (zumindest bei mir) zum Abbruch des gesamten Vorganges, was gerade beim Schreiben eines Images auf einen Datenträger fatal ist.

Nach ein wenig Recherche fand ich folgende Möglichkeit: killall -INFO dd oder alternativ die Tastenkombination [Strg] + [T]. Hierbei handelt es sich um ein BSD-Feature, welches ein SIGINFO an den Prozess sendet und zur gewünschten Ausgabe führt.

ssh als SOCKS-Proxy unter OS X nutzen

TUX-Avatar-350In dieser Anleitung möchte ich vorstellen, wie sich ssh als SOCKS-Proxy unter OS X nutzen lässt. Kurz vorweg, diese Anleitung lässt sich selbstverständlich auch auf andere Systeme wie z.B. BSD oder Linux übertragen, auf welchen eine Installation des ssh-Clients vorliegt.

Voraussetzung hierzu ist das Vorhandensein eines Root- oder V-Servers mit Zugriff auf einen installierten und konfigurierten SSH-Server, zu dem man eine Verbindung aufbauen kann.

Ziel ist, mittels SSH einen Tunnel einzurichten, der sich wie ein SOCKS-Proxy verhält, welcher zwischen dem anfragendem Webbrowser und dem Webserver steht. Anfragen werden nun über den verbundenen Root- bzw. V-Server geleitet. Der angefragte Webserver „sieht“ hier nur die IP-Adresse des Root- bzw. V-Servers, nicht die tatsächliche IP-Adresse des Clienten. Die tatsächliche IP-Adresse bleibt somit dem Kommunikationspartner verborgen.

Warum nutze ich diese Möglichkeit?

Kurz vorweg: Nicht aus Anonymisierungsgründen 😉 – da der verwendete Root-Server ohnehin von mir betrieben wird. Mir ging es um einen anderen Fall: Die gängige Praxis der Bandbreitenbeschränkung über ganze IP-Adressbereiche, vorzugsweise für private IP-Adressen. utilities-system-monitorIch habe Verständnis für Load-Balancing in einem vernünftigen (!) Rahmen, aber keinerlei Verständnis dafür, das Software-Updates in Größenordnungen von mehreren hundert Megabyte mit z.B. 60 KB/s durch die Leitung tröpfeln und ein Download somit mehrere Stunden dauern soll. Ein Login auf dem Root mit anschließendem manuellem Download via curl oder wget ergab dann oft Gewissheit: In diesem IP-Adressbereich sind Datenraten mit voller Bandbreite kein Thema.

Anfänglich fiel mir das nur bei wenigen Diensten auf, doch scheint es mittlerweile in Mode gekommen zu sein – und es nervt, ich bezeichne das als technischen Rückschritt und Gängelei der Endbenutzer. Ich erwarte nicht, das Serverbetreiber für tausende Nutzer zugleich pro Download-Slot 100 MB/s anbieten – aber Datenraten in Bereichen von ISDN und weniger sind ein definitives NoGo und eine Zumutung in der heutigen Zeit.

quasselWie schon beschrieben, umgehe ich diese Beschränkungen mittles manuellen Downloads via Server-Konsole, dies ist allerdings recht unkomfortabel. Die Alternative ist die Einrichtung eines „richtigen“ Proxy-Servers wie z.B. Squid. Diese ist allerdings nicht ganz trivial und entsprechend gegen missbräuchliche Nutzung abzusichern – was man als Serverbetreiber durchaus ernst nehmen sollte.

Mir ging es allerdings nicht um eine dauerhafte Proxy-Nutzung, weshalb ich mich für die Realisierung mittels eines ssh-Tunnels entschlossen habe.

Einrichtung

1) Start des ssh-Clients

Im OS X – Terminal hierzu folgenden Befehl absetzen:

ssh -D 8080 -C -N user@server.tld

user@server.tld ist natürlich durch eigene Angaben zu ersetzen. Das Terminal-Fenster bitte geöffnet lassen! Die Verbindung kann mittels der Tastenkombination Strg + C beendet werden.

2) Konfiguration des SOCKS-Proxys unter OS X

Hierzu wird im Bereich Systemeinstellung/Netzwerk eine separate Umgebung eingrichtet, um bequem zwischen normalem Netzwerkprofil und SSH-Lösung umschalten zu können.

Im Apfel-Menü den Punkt „Systemeinstellungen“ öffnen und das Icon „Netzwerk“ anklicken:

Bildschirmfoto 2016-04-10 um 17.09.51

„Umgebungen bearbeiten“ selektieren. Nun das Zahnrad-Symbol wählen und „Umgebung duplizieren“ wählen:

Bildschirmfoto 2016-04-10 um 17.11.04

Bildschirmfoto 2016-04-10 um 17.11.58

Einen Namen für die neue Umgebung wählen, z.B. SSH-Proxy und mit „Fertig“ abschließen:

Bildschirmfoto 2016-04-10 um 17.14.56

Anschließend auf „Weitere Optionen“ klicken und den Reiter „Proxies“ wählen:

Bildschirmfoto 2016-04-10 um 17.17.59

Nun den Eintrag „SOCKS-Proxy“ auswählen und als Server localhost und Port 8080 eintragen:

Bildschirmfoto 2016-04-10 um 17.24.42

Mit „Ok“ abschließen und mit „Anwenden“ aktivieren.

Fertig! Ob alles funktioniert, lässt sich z.B. in Safari / Firefox / Chrome über https://www.whatismyip.com testen. Hier sollte nun die IP-Adresse des Servers aufgelistet werden.

3) Wechsel zur regulären Konfiguration

Um wieder mit den normalen Einstellungen ohne SSH-Proxy zu surfen, einfach im Bereich Systemeinstellungen / Netzwerk auf die Umgebung „Automatisch“ schalten und mit „Anwenden“ bestätigen. Der ssh-Tunnel im Terminal kann nun via Strg + C beendet werden.

Programmierprojekt: WoW-Addon-Updater

WoW-Addon-Updater-Logo

Sorry für die lange „Durststrecke“ im Blog, ich komme leider nur recht sporadisch zum Schreiben. Heute möchte ich für die Interessierten mein kleines Programmierprojekt vorstellen.

Vorweg: Wer mich kennt, sei es nun von meinem Blog oder persönlich, weiß das ich seit jeher Spaß am Programmieren habe. Meine ersten Gehversuche erfolgten bereits in den 90er-Jahren mit QBASIC unter DOS und VisualBasic unter Windows; ich hatte viel Spaß daran, die ersten eigenen kleinen Programme zu schreiben. Über die Jahre habe ich in diverse Programmiersprachen und deren Dialekte hinein geschnuppert, neben C/C++ sagt mir (Free-) Pascal am meisten zu, insbesondere in Verbindung mit der IDE Lazarus, dessen Plattformunabhängigkeit mir sehr gefällt und die ich zu schätzen gelernt habe.

Als erstes „größeres Projekt“ ist daraus mein „WoW-Addon-Updater“ entstanden, welchen ich an dieser Stelle gerne vorstellen möchte. Das Projekt ist auf GitHub zu finden, dort existiert auch eine Seite mit Screenshots und Binarys zum Download:

http://arndtb.github.io/WoW-Addon-Updater

Bevor es in die Details geht: Warum ausgerechnet „nur“ ein Addon-Updater für ein Spiel und keine Bildbearbeitung, Tabellenkalkulation oder Berechnungsprogramm für elliptische Satellitenbahnen? 😀

Nun, nachdem ich viele Tutorials und Übungen aus Delphi-Büchern durch hatte, musste etwas praktisches mit überschaubarer Komplexität her. Wer Über mich gelesen hat, weiß das ich zwischendurch gerne mit meiner Frau das MMORPG World of Warcraft spiele.

Die Entwickler erlauben die Anpassung des Spiele-Interfaces mittels einer LUA-API an eigene Bedürfnisse – mittlerweile gibt es kaum überschaubare Anzahl praktischer Interface-Anpassungen und Erweiterungen, hauptsächlich zu finden auf Curse.com. Die Entwickler dieser Erweiterungen sind sehr aktiv und arbeiten fleißig an Ihren Erweiterungen, was ein regelmäßiges Aktualisieren notwendig macht. Dies kann man entweder manuell über Websites oder auch via einer Software von Curse erledigen – welche leider ausschließlich für Windows zur Verfügung steht. Wer nicht unter Windows spielt, sondern wie ich unter OS X oder unter GNU/Linux hat leider Pech – hier gibt es keinen praktischen Updater. 🙁

Die Idee war also geboren – es sollte ein plattformunabhängiger Addon-Updater werden, der unter OS X, Linux und Windows läuft. Für dieses Vorhaben boten sich, wie Eingangs schon beschrieben, meine favorisierte Programmiersprache FreePascal und die Entwicklungsumgebung Lazarus an.

Nach einigen Wochen Entwicklungszeit, in welcher ich eine Menge dazugelernt habe und mich auch in Dinge wie Versionsverwaltung mittels Git ein wenig einarbeiten konnte, freue ich mich nun, Euch die Version 1.0.0 zu präsentieren. Ich stelle das Programm und dessen Sourcecode als Freie Software unter den Bedingungen der GNU General Public License (GPL) Version 3 zur Verfügung.

WAU_1.0.0_OSX-2

WoW-Addon-Updater 1.0 (Vivienna)
Copyright (C) 2016 Arndt Braier – dev@braier.net

Der WoW-Addon-Updater dient zur Installation und Aktualisierung von Interface-Erweiterungen (= Addons) des MMORPGs World of Warcraft. Dieses Programm dient als Alternative zur Applikation „Curse Client“, welche derzeit nur unter Microsoft Windows zur Verfügung steht.

Die Idee entstand als Hobby aus dem Wunsch heraus, eine plattformunabhängige grafische Lösung zur Aktualisierung eines Addon-Bestandes zu entwickeln, welche unter Microsoft Windows, GNU/Linux und Mac OS X lauffähig ist. Das Resultat wurde unter den 64 Bit-Versionen von Windows 7, Ubuntu 14.04 (LTS) „Trusty Tahr“, Kubuntu 15.10 „Wily Werewolf“, Arch Linux und Mac OS X El Capitan 10.11 erfolgreich getestet.

Das Programm unterstützt derzeit zwei Sprachen: Deutsch und Englisch.

Der Addon-Bestand wird in einer tabellarischen Übersicht verwaltet und in einer XML-basierten Textdatei neben den individuellen Einstellungen des Programms gespeichert. Von der Addon-Datenbank werden automatisch Backups erzeugt, um im Fehlerfall eine spätere Wiederherstellung zu ermöglichen.

Addon-Einträge können komfortabel hinzugefügt und entfernt werden. Bei der Überprüfung auf neue Versionen werden die neuen oder geänderten Versionen farblich hervorgehoben. Diese können im Anschluß installiert bzw. aktualisiert werden, einzelne Addons können zuvor per Selektion aus- oder abgewählt werden. Der Fortschritt einzelner Programmoperationen wird mittels einer Statuszeile angezeigt.

Ich hoffe, das Ihnen das Programm gefällt und Sie dieses nützlich finden. Für Ihre Vorschläge, Lob und Kritik sowie jeglicher Art von Feedback bin ich stets offen, bitte schreiben Sie mir einfach eine Email unter

Dieses Programm wurde in FreePascal 2.6.4 (http://www.freepascal.org) mit Unterstützung der Entwicklungsumgebung Lazarus 1.4.4 (http://www.lazarus-ide.org/) geschrieben und verwendet das Package „Internet Tools“ (http://www.benibela.de/sources_en.html#internettools) von Benito van der Zander.

Das Programm WoW-Addon-Updater ist freie Software. Sie können es unter den Bedingungen der GNU General Public License, wie von der Free Software Foundation veröffentlicht, weitergeben und/oder modifizieren, entweder gemäß Version 3 der Lizenz oder (nach Ihrer Option) jeder späteren Version.

Die Veröffentlichung dieses Programms erfolgt in der Hoffnung, daß es Ihnen von Nutzen sein wird, aber OHNE IRGENDEINE GARANTIE, sogar ohne die implizite Garantie der MARKTREIFE oder der VERWENDBARKEIT FÜR EINEN BESTIMMTEN ZWECK. Details finden Sie in der GNU General Public License.

Sie sollten ein Exemplar der GNU General Public License zusammen mit diesem Programm erhalten haben. Falls nicht, siehe .

Curse Client und curse.com sind Warenzeichen von Curse Inc.

World of Warcraft, Warcraft und Blizzard Entertainment sind Marken oder eingetragene Marken von Blizzard Entertainment, Inc. in den USA und/oder in anderen Ländern.

Vielleicht habt Ihr Lust, Euch das Ganze mal anzuschauen – über Feedback würde ich mich freuen 🙂

Linux/OS X: Zugriffsdatum von Digitalbildern an Aufnahmedatum anpassen

apps-digikam
Ergänzend zu meinem früheren Blogeintrag zum Thema iPhone-Fotos nach dem Aufnahmedatum benennen mittels dem ExifTool gibt es heute wieder einen praktischen (Bash-) Einzeiler für Linux respektive OS X, welcher sich besonders für die Sortierung von Bilddaten eignet, wenn ein physikalisches Umbenennen nicht erwünscht ist:

for i in *.jpg; do touch -t $(exiftool -p '$DateTimeOriginal' $i | sed 's/[: ]//g' | sed 's/\(..$\)/\.\1/') $i; done

Mittels einer for-Schleife wird das jeweilige „Date/Time Original“ aus den Exif-Daten ausgelesen, mittels sed formatiert und an den touch-Befehl übergeben, welcher den Zugriffs- und Änderungs-Zeitstempel der Datei anpasst. Die Schleife wird so lange ausgeführt, bis alle Dateien im Verzeichnis bearbeitet wurden.

CDE – Common Desktop Environment

Wer wie ich in den 1990ern auf diversen Unix-Workstations (HP-UX, AIX, usw.) gearbeitet hat, kennt sicherlich noch das Common Desktop Environment (CDE), welches 1993 von der Open Group (HP, IBM und Sun Microsystems) als proprietäre Software entwickelt wurde. Bei vielen kommerziellen Unix-Workstations war CDE bis ins Jahr 2000 der Standard-Desktop schlechthin, bis es u.a. durch Gnome oder KDE abgelöst wurde.

Am 6. August 2012 wurden die Quelltexte von CDE unter der LGPL veröffentlicht und stehen nun als OpenSource auf Sourceforge zum Download zur Verfügung.

Die Einrichtung ist ein wenig tricky, das Wiki auf Sourceforge leistet hierbei eine gute Hilfestellung. Ich habe CDE auf meinem älteren Laptop unter Linux (Ubuntu 12.04) eingerichtet und ein paar Screenshots beigefügt.

Auch wenn CDE nicht mehr ganz zeitgemäß erscheint, kann eine Einrichtung zur Nutzung auf gerade älteren Systemen aus Performancegründen durchaus sinnvoll sein – ist aber durchaus Geschmackssache 😉

CDE - The Common Desktop Environment, the classic UNIX desktop

CDE - The Common Desktop Environment, the classic UNIX desktop

CDE - The Common Desktop Environment, the classic UNIX desktop

CDE - The Common Desktop Environment, the classic UNIX desktop

Von numothersocks und Server-Freezes

Wieder ein spezielles Thema (sorry), aber sicherlich auch für andere Serverbetreiber mit ähnlichen Problemstellungen interessant.

Vorweg, „numothersock“ ist kein pfälzisches Äquivalent für die Aufforderung nach dem Griff eines bestimmten Kleidungsstücks – mitnichten.

Mein V-Server quengelte heute deshalb ein wenig herum, nach ein paar spontanen Freezes stürzte mySQL ab, anschließend frohr der Server ein und war nicht mehr erreichbar – nach einer Uptime von 100 Tagen schon ein wenig seltsam. Ein Blick ins VZPP offenbarte mir einen roten Ressorcenverbrauch – hier war von numothersock die Rede – das Limit betrug 400 und wurde am heutigen Tage desöfteren überschritten.

Bei „numothersocks“ handelt es sich um eine Anzahl von Sockets, welche zur Interprozesskommunikation dienen und hierzu geöffnet werden. Programme und Dienste öffnen also einen oder mehrere dieser Sockets, um miteinander kommunizieren zu können. Auf einem V-Server steht allerdings nur eine recht limitierte Anzahl zur Verfügung – je nach Zahl der verwendeten Dienste (apache, postfix, dovecot, mysql, voice, etc.) kann es letztendlich ein wenig knapp werden.

Werden zuviele Sockets verwendet, „hängen“ einzelne Programme oder der ganze Server – in den Logfiles unter anderem durch Meldungen wie „cannot allocate memory...“ erkennbar.

Die Socket-Verwendung lässt sich auf dem Server mittels netstat -p nachprüfen bzw. netstat -p | wc -l zum Ermitteln der Anzahl. Mittels cat /proc/user_beancounters erhält man noch eine nette Statistik hierzu.

Nutzt man Postfix als MTA (Mail Transfer Agent), kann folgender Eintrag in /etc/postfix/main.cf helfen, die Zahl der verwendeten Sockets zu reduzieren:

default_process_limit = 10

Diese Zahl ist für einen privat genutzten Mailserver mehr als ausreichend. Der Default-Wert beläuft sich im übrigen auf 100 und ist damit eher für Mailserver ausgelegt, welche ein weit größeres Volumen abwickeln müssen.

Siehe hierzu auch den folgenden Auszug aus http://www.postfix.org/TUNING_README.html:

Tuning the number of Postfix processes
The default_process_limit configuration parameter gives direct control over how many daemon processes Postfix will run. As of Postfix 2.0 the default limit is 100 SMTP client processes, 100 SMTP server processes, and so on. This may overwhelm systems with little memory, as well as networks with low bandwidth.

You can change the global process limit by specifying a non-default default_process_limit in the main.cf file. For example, to run up to 10 SMTP client processes, 10 SMTP server processes, and so on:

/etc/postfix/main.cf:
default_process_limit = 10

You need to execute „postfix reload“ to make the change effective. This limit is enforced by the Postfix master(8) daemon which does not automatically read main.cf when it changes.

You can override the process limit for specific Postfix daemons by editing the master.cf file. For example, if you do not wish to receive 100 SMTP messages at the same time, but do not want to change the process limits for other Postfix daemons, you could specify:

/etc/postfix/master.cf:
# ====================================================================
# service type private unpriv chroot wakeup maxproc command + args
# (yes) (yes) (yes) (never) (100)
# ====================================================================
. . .
smtp inet n - - - 10 smtpd

Linux – Swap testen

Die Bereitstellung eines ausreichend großen Swapspace zur Erweiterung des verfügbaren Arbeitsspeichers war früher eine zwingende Notwendigkeit – RAM war stets knapp und teuer. Bei den heutigen Mengen an RAM ist das Thema Swap sicherlich nicht mehr von so großer Bedeutung wie früher (manche verzichten mittlerweile sogar ganz darauf) – doch gibt es immer noch gute Gründe dafür, einen Bereich der Festplatte hierfür vorzusehen, je nach Anwendungsfall in der Größenordnung des 1- bis 3-fachen des verbauten RAMs.

Unter Linux kommt hierzu meistens eine Swap-Partition zum Einsatz, welche über die /etc/fstab eingebunden wird. Mittels free -m lässt sich die aktuelle Belegung des Arbeitsspeichers einschließlich Swap überprüfen.

Um die ordnungsgemäße Funktion und Nutzung der Swap-Partition zu testen, sprich als Härtetest den „Ernstfall“ zu proben, kann folgendes C-Programm verwendet werden (Nutzung auf eigene Gefahr!):

#include <stdlib.h>
#include <stdio.h>
#include <string.h>

int main(int argc, char** argv) {
  int max = -1;
  int mb = 0;
  char* buffer;

  if(argc > 1)
    max = atoi(argv[1]);

   while((buffer=malloc(1024*1024)) != NULL && mb != max) {
    memset(buffer, 0, 1024*1024);
    mb++;
    printf("Allocated %d MB\n", mb);
   }

   return 0;
}

Das Script unter memeater.c speichern und mittels gcc memeater.c -o memeater kompilieren.

Achtung! Ich weise erneut darauf hin, das die Nutzung dieses Programms ausdrücklich auf eigene Gefahr erfolgt. Bevor man dieses Programm startet, sollten alle nicht gespeicherten Daten gesichert und alle geöffneten Programme geschlossen werden.

Was macht dieses Programm? Es belegt soviel Arbeitsspeicher, wie es nur kann – entweder einen per Parameter festgelegten Wert oder den gesamten verfügbaren Arbeitsspeicher (Aufruf ohne Parameter). Das Programm sollte bei Erreichen des Maximalwerts abbrechen, um einen Speicherüberlauf (Out-of-Memory) zu verhindern – denn dieser ist bekanntermaßen alles andere als spaßig.

Der Aufruf erfolgt mittels ./memeater parameter. Als Parameter kann auch ein fester Wert in MB eingegeben werden. Um beispielsweise 900 MB zu belegen, erfolgt der Aufruf mittels ./memeater 900

Nach erfolgreichem Start sollte nachfolgende Ausgabe in ähnlicher Form erscheinen:

$ ./memeater
Allocated 1 MB
Allocated 2 MB
(...)
Allocated 16381 MB
Allocated 16382 MB
Allocated 16383 MB
Killed

Lässt man parallel einen Systemmonitor mitlaufen, kann man die Belegung des Arbeitsspeichers auch grafisch mitverfolgen. Kommt das Programm an die Grenze des zur Verfügung stehenden Speichers, kann das System kurzzeitig zum Stillstand kommen, bis der Prozess beendet wurde.

Überprüft man unmittelbar im Anschluss die Speicherbelegung mittels free -m, lässt sich ersehen, ob und inwieweit der Swapspace genutzt wird.

Arch Linux – Erste Zwischenbilanz

Screenshot Arch Linux

Screenshot Arch Linux

Vor gut einer Woche habe ich mein Produktivsystem auf Arch Linux umgestellt (siehe auch Mein Wechsel zu Arch Linux). Zeit also für eine erste kurze „Zwischenbilanz“.

Ich muss zugeben, Arch Linux beeindruckt. Bis auf ein paar Kleinigkeiten habe ich keinerlei Probleme oder Inkompatibilitäten festgestellt, das System „rennt“. Zwischenzeitlich trudelten die ersten Updates ein, welche sich problemlos installieren ließen – auch wenn man hier gegenüber Systemen mit festem Release-Zyklus etwas genauer hinschauen sollte, gerade wenn eine neue Kernelversion dabei ist. In diesem Fall sollte man nach dem Update mittels mkinitcpio -p linux den Kernel neu generieren, um etwaige Probleme bereits im Vorfeld zu vermeiden.

Auch würde ich empfehlen, hin und wieder vor der Durchführung evtl. Updates einen Blick in die News unter https://www.archlinux.de oder https://www.archlinux.com zu werfen, falls gravierende Änderungen am System vorgenommen werden. Der Aufwand hält sich allerdings wirklich in Grenzen, ich habe zu diesem Zweck nur eine Mailingliste unter https://mailman.archlinux.org/mailman/listinfo/arch-announce abonniert.

Mal unabhängig von Arch Linux macht die tägliche Arbeit unter der Gnome-Shell 3.12 durchaus Spaß, viele Bedienkonzepte orientieren sich an OS X und ermöglichen eine komfortable Nutzung des Systems. Die Oberfläche wirkt sehr aufgeräumt und reagiert flott. Richtig toll finde ich auch die Erweiterbarkeit mittels der „GNOME Shell Extensions, womit sich einfach via Browser diverse Funktionalitäten wie z.B. eine Wetteranzeige oder ein Applications-Menü (Startmenü) im Panel aktivieren lassen.

Mittels des gnome-tweak-tool lassen sich umfangreiche Anpassungen vornehmen. Erscheinungsbild, Schriftenglättung, Extensions, Startprogramme und vieles mehr lässt sich hier bequem konfigurieren.

Um wieder auf Arch Linux zurückzukommen; die Integration der Gnome Shell ist meiner Meinung nach unter Arch Linux sehr gut gelungen, hier habe ich unter Ubuntu ganz andere Erfahrungen gemacht, insbesondere im Hinblick auf die Performance. Subjektiv wirkte für mich unter Ubuntu auch unter Unity alles etwas „träger“, obwohl ich fairerweise sagen muss, das die Unterschiede wirklich minimal sind und sich aus dem Zusammenspiel von Kernel, Treiber und X11 in jeweils unterschiedlichen Versionsständen und Konfigurationen über beide Distributionen ergeben. Arch ist hier gegenüber Ubuntu naturgemäß mit aktuelleren Versionsständen unterwegs, was durchaus einen Einfluss auf die Gesamtperformance des Systems hat.

In Summe kann ich Arch Linux all denjenigen empfehlen, welche schon ein wenig Erfahrung mit Linux gemacht haben und etwas mit der Shell vertraut sind.

Scannen/Kopieren per Shell-Script

Scannen stellt unter Linux kein großes Problem mehr dar – viele Scanner werden von der Sane-API unterstützt und lassen sich mittels diverser Frontends komfortabel nutzen.

Oftmals ist die Nutzung eines grafischen Frontends allerdings gar nicht erforderlich – gerade wenn um reine Archivierungszwecke oder einfache Kopien vollständiger A4-Seiten geht. Anstelle im grafischen Frontend zig Knöpfe zu drücken, um einen Scan als PDF-Datei abzulegen, lässt sich das Ganze per Shellscript und scanimage automatisieren. Dieses Script lässt sich auch als Starter mit der enthaltenen Befehlszeile gnome-terminal -x sh -c "/home/user/scripts/scan-a4-color-300dpi.sh" auf den Desktop legen und bequem starten.

Scannen und als PDF ablegen

Das nachfolgende Script erzeugt eine PDF-Datei in Farbe. Hierzu wird die A4-Vorlage mit 300 DPI in Farbe eingescannt, das resultierende Image optimiert, in das JPEG-Format umgewandelt und als PDF-Datei, benannt nach Datum und Uhrzeit, abgelegt. Anschließend wird diese im Dokumentbetrachter evince geöffnet.

#!/bin/bash
# Setzen der Variablen (Datum, Uhrzeit)
zeitstempel=$(date +%Y-%m-%d_%H-%M-%S)

# Scanvorgang, Ausgabeformat TIFF
scanimage \
--clear-calibration \
--format=tiff \
--mode Color \
--depth 8 \
--resolution 300 \
--icc-profile /usr/share/color/icc/adobergb1998.icc \
-l 1mm \
-t 1mm \
-x 208mm \
-y 295mm \
-p \
-v \
> /home/user/Scans-Neu/tmp/"$zeitstempel".tif

# Konvertieren des TIFF-Bildes in JPEG incl. Bildverbesserung
convert \
-quality 95 \
-gamma 1.0 \
-brightness-contrast 10x40 \
/home/user/Scans-Neu/tmp/"$zeitstempel".tif \
/home/user/Scans-Neu/tmp/"$zeitstempel".jpg

# Konvertierung ins PDF-Format
convert /home/user/Scans-Neu/tmp/"$zeitstempel".jpg /home/user/Scans-Neu/"$zeitstempel".pdf

# Entfernen der temporaeren Dateien
rm /home/user/Scans-Neu/tmp/"$zeitstempel".tif
rm /home/user/Scans-Neu/tmp/"$zeitstempel".jpg

# Anzeigen des fertigen PDF-Dokuments
evince /home/user/Scans-Neu/"$zeitstempel".pdf

Das Script lässt sich in vielen Punkten individualisieren, z.B. hinsichtlich der Farbtiefe. Reine Textvorlagen lassen sich z.B. im „Lineart“-Modus (1-Bit) scannen und mittels tiff2pdf mit geringem Speicherbedarf als PDF ablegen. Denkbar ist beispielsweise auch eine integrierte Texterkennung mittels OCR, um ein durchsuchbares Dokument zu erzeugen. Für meinen Anwendungsfall reichte das einfache Einbetten eines JPEG-Image in einem PDF allerdings aus.

Eine Abwandlung des obigen Scripts verwandelt den Scanner in einen Farbkopierer:

Scannen und ausdrucken (Kopieren)

Das folgende Script ist eine Abwandlung des obigen „Scan2PDF“-Scripts. Die A4-Vorlage wird mit 300 DPI eingescannt, das resultierende Image optimiert, mittels tiff2ps für den Druck aufbereitet und über eine Pipe an den Drucker gesendet:

#!/bin/bash
# Setzen der Variablen (Datum, Uhrzeit)
zeitstempel=$(date +%Y-%m-%d_%H-%M-%S)

# Scanvorgang, Ausgabeformat TIFF
scanimage \
--clear-calibration \
--format=tiff \
--mode Color \
--resolution 300 \
--icc-profile /usr/share/color/icc/adobergb1998.icc \
-l 1mm \
-t 1mm \
-x 208mm \
-y 295mm \
-p \
-v \
> /home/user/Scans-Neu/tmp/"$zeitstempel".tif

# Konvertieren des TIFF-Bildes incl. Bildverbesserung
convert \
-gamma 1.0 \
-brightness-contrast 10x40 \
/home/user/Scans-Neu/tmp/"$zeitstempel".tif \
/home/user/Scans-Neu/tmp/"$zeitstempel"p.tif

## Konvertieren des TIFF-Bildes ins PS-Format und starte Druckjob
tiff2ps -z -w 8.27 -h 11.69 /home/user/Scans-Neu/tmp/"$zeitstempel"p.tif | lp -d "Druckername" -o fit-to-page -o fitplot

# Entfernen der temporaeren Dateien
rm /home/user/Scans-Neu/tmp/"$zeitstempel".tif
rm /home/user/Scans-Neu/tmp/"$zeitstempel"p.tif

Natürlich gibt es auch hier wieder viele Möglichkeiten, das Script zu individualisieren.

Viel Spaß beim Basteln!

Linktipp: explainshell.com

Wer wie ich gerne mit der Shell arbeitet, nutzt oftmals eine Vielzahl an Befehlskombinationen. Die erste Anlaufstelle hinsichtlich Shell-Befehlen sind sicherlich die Manpages, doch die Recherche der einzelnen Befehle und Parameter kann manchmal recht langwierig werden.

Will man schnell herausfinden, was sich z.B. hinter dem Shell-Kommando

du $HOME | sort -rn | less

verbirgt, kann man http://explainshell.com verwenden. Die Eingabe wird grafisch aufbereitet ausgegeben und auf die relevanten Abschnitte der betreffenden Manpages beschränkt, absolut empfehlenswert.