Schlagwort-Archive: LinuxWelt

Windows-Software unter Linux: Wine und PlayOnLinux

Wine ist bekanntlich ein Nachbau der Windows-API unter Linux, der eine Vielzahl von Windows-Programmen unter Linux lauffähig macht. Wo immer dies möglich ist, ist dies der direktere Weg gegenüber einer Virtualisierungslösung.

Über Wine und sein komfortables Frontend PlayOnLinux allgemeingültige, praxisnahe technische Anleitungen zu liefern, ist nicht ganz einfach: Streng genommen kann man immer nur das erfolgreiche Einrichten genau eines Windows-Programms erklären. Bei der nächsten Software kann sich der Vorgang schon wieder deutlich unterscheiden, und einen dritten Kandidaten überreden auch trickreiche Nachbesserungen nicht zur Zusammenarbeit. Dieser Artikel kann daher nur die Grundregeln beschreiben.

playonllinux und wine
Winecfg und PlayOnLinux: Hinter dem Frontend bleibt Winecfg (rechts) das maßgebliche Konfigurationstool, das unter anderem festlegt, welche Laufwerke die Windows-Software „sieht“.

Zum Verhältnis Wine und PlayOnLinux

Wine („Wine Is Not an Emulator“) stellt die eigentliche Laufzeitumgebung und Windows-API (Application Programming Interface) bereit und basiert auf mühevoller Rekonstruktion des nicht offenen Windows-Quellcodes durch Experimentieren und Reverse-Engineering. Aufgrund dieser Arbeitsweise ist die von Wine angebotene Windows-API auch nach über 20 Jahren der Entwicklung immer noch lückenhaft, aber inzwischen ausreichend für viele und zum Teil auch komplexe Windows-Programme und –Spiele wie Photoshop oder Halflife. Welche Windows-Software unter Wine zuverlässig läuft, zeigt die Datenbank http://appdb.winehq.org. Linux-Nutzer mit wenig Erfahrung sollten sich an die Kategorien „Platin“ und „Gold“ halten, alle anderen Einstufungen erfordern manuelles Nachbessern.

PlayOnLinux ist im Prinzip nur ein zusätzliches Konfigurationswerkzeug für Wine. Aber es vereinfacht Installationen von Software und bietet vor allem eine komfortable Verwaltung für mehrere Wine-Versionen auf einem Rechner. Es ist nämlich leider keineswegs so, dass die aktuellste Wine-Version auch die beste für jede Windows-Software darstellt. Vielmehr gibt es vor allem für ältere Software ältere Wine-Versionen, welche die optimalen Bedingungen garantieren.

Mit PlayOnLinux nimmt zwar die Wine-Komplexität weiter zu, dennoch gehen wir nachfolgend davon aus, dass Sie Wine in Kombination mit diesem grafischen Frontend nutzen. Ursprüngliches Ziel des Frontends war es, populäre Windows-Spiele besonders komfortabel lauffähig zu machen – daher der Name des Tools. Heute hat Playonlinux aber auch Windows-Programme wie Microsoft Office oder Dreamweaver im Repertoire.

Der Installationsdialog von PlayOnLinux
Der Installationsdialog von PlayOnLinux

Installation über PlayOnLinux

Obwohl es unter den Distributionen auch einige Ausnahmen gibt: In den meisten Fällen sind die Pakete Wine und PlayOnLinux nicht vorinstalliert, weil sie relativ viel Platz beanspruchen und die installierbaren Live-Systeme um circa 200 MB anwachsen ließen. Unter Debian, Ubuntu, Mint und Varianten installiert der Befehl

sudo apt-get install playonlinux curl p7zip-full

alle notwendigen Komponenten. Beachten Sie, dass PlayOnLinux ein aktuelles Wine automatisch mitbringt. Beim Verfassen dieses Beitrags handelte es sich unter Ubuntu um Wine 1.7.12. PlayOnLinux ist aktuell bei Version 4.2.5, bei der Installation über die Ubuntu-Repositories erhalten Sie derzeit Version 4.2.2.

Bei der Installation gibt es unter einigen Distributionen eine irritierende Bremse: Es erscheint ein Textfenster „Konfiguriere ttf-mscorefonts-installer“. Es handelt sich um die EULA (End User License Agreement) für einige Windows-Truetype-Standardschriften, die Sie bestätigen sollen. Allerdings lässt sich das „OK“ in diesem Textfenster nicht direkt mit Eingabetaste erreichen. Vielmehr müssen Sie erst mit der Tab-Taste das „OK“ aktivieren, um den Vorgang mit Eingabetaste fortsetzen zu können.

Vor dem Start von PlayOnLinux sollten Sie erst winecfg aufrufen, am einfachsten via Terminal. Beim Start dieses Konfigurationstools werden oft noch fehlende Komponenten angemahnt und die automatische Nachinstallation angeboten. Außerdem können Sie vorab festlegen, welche Laufwerke die Windows-Software nutzen darf. Erst danach starten Sie PlayOnLinux über das Startmenü oder das Dash. Nach diesen Aktionen sind bereits wichtige Ordnerstrukturen und virtuelle Laufwerke angelegt. Sie finden im home-Verzeichnis den versteckten Ordner ~/.PlayOnLinux/wineprefix, der die virtuellen Laufwerke für alle späteren Installationen aufnimmt.

Exkurs: Neueste Versionen

Wenn es die allerneueste Wine-Version sein soll, gibt es für Ubuntu und Mint ein alternatives PPA mit jüngsten Entwicklerversionen. Dafür nehmen Sie in der Kommandozeile das PPA auf und installieren dann die aktuellste Version:

sudo add-apt-repository ppa:ubuntu-wine/ppa
sudo apt-get update
sudo apt-get install wine1.7

die neueste verfügbare Wine-Version.

Auch PlayOnLinux bieten die meisten Repositories nicht in der aktuellsten Version. Diese lautet bei Redaktionsschluss 4.2.5, während etwa Ubuntu die Version 4.2.2 installiert. Die jeweils aktuellste Version erhalten Sie mit diesen vier Befehlen:

wget -q "http://deb.playonlinux.com/public.gpg" -O- | sudo apt-key add -
sudo wget http://deb.playonlinux.com/playonlinux_trusty.list -O /etc/apt/sources.list.d/playonlinux.list

sudo apt-get update

sudo apt-get install playonlinux

Anleitungen zur Installation unter anderen Distributionen bietet die Webseite https://www.playonlinux.com/en/download.html.

Beachten Sie jedoch, dass die Entwicklung bei Wine zwar stetig, aber langsam voranschreitet. Die Notwendigkeit ganz aktueller Versionen ergibt sich nur dann, wenn Sie genau wissen, dass die gewünschte Windows-Software die neueste Wine-Version unbedingt voraussetzt.

Setup mit dem normalen Installationsmedium: Der PlayOnLinux-Assistent fragt nach dem Setup-Medium oder der gemounteten ISO-Datei.
Setup mit dem normalen Installationsmedium: Der PlayOnLinux-Assistent fragt nach dem Setup-Medium oder der gemounteten ISO-Datei.

Varianten der Software-Installation

Nach dem Aufruf vom Playonlinux klicken Sie zunächst auf „Datei -> Installieren“. Das damit geöffnete Installationsmenü zeigt zahlreiche Windows-Programme und Spiele, für die es bewährte Installations-Scripts gibt. Mit der Auswahl und dem Klick auf „Installieren“ einer dieser Software-Vorgaben sind Sie auf einer relativ sicheren Seite. „Relativ sicher“ deswegen, weil sich beispielsweise eine genau analysierte Software wie ein Microsoft Office standardmäßig problemlos installieren lässt, das Setup jedoch scheitert, wenn man versucht, eine benutzerdefinierte Auswahl der Komponenten zu treffen.

In den meisten Fällen benötigen Sie ein reguläres Installationsmedium, also CD/DVD oder auch eine ISO-Datei, die Sie am besten schon vorher über „Öffnen mit -> Einhängen von Laufwerksabbildern“ gemountet haben. Bei frei verfügbarer Open-Source-Software fragt PlayOnLinux nach keinem Installationsmedium, sondern lädt die Dateien aus dem Internet und installiert automatisch. Das bei der Installation neu entstehende Wine-Prefix und auch das zugehörige Verzeichnis unter ~/.PlayOnLinux/wineprefix erhält jeweils den Namen der Software.

Die manuelle Setup-Variante: Ist die gewünschte Software in den Vorgaben unter „Datei -> Installieren“ nicht enthalten, können Sie folgenden Weg versuchen: Im Installationsdialog klicken Sie auf ganz unten auf „Installiere ein Programm, das nicht aufgelistet ist“. Damit startet die manuelle Installation, bei der Sie die Option „Installiere ein Programm in einem neuen virtuellen Laufwerk“ anklicken und für die neue Umgebung einen Namen vergeben. Den nächsten Dialog überspringen Sie mit „Weiter“, sofern Sie mit den dortigen Optionen nichts anfangen können. Wenn die Aufforderung „Bitte wähle die Installationsdatei…“ erscheint, navigieren Sie mit „Durchsuchen“ zur gewünschten Setup-Datei. Ob die Installation funktioniert und anschließend auch die Software, muss der Versuch zeigen.

Manuelle Kopie portabler Software: Portable Windows-Programme benötigen bekanntlich keine Installation. Mit solcher Software lässt es sich besonders einfach experimentieren: Kopieren Sie in eine bereits existierende Laufzeitumgebung unter ~/.PlayOnLinux/wineprefix/[Name]/drive_c/Program Files beliebige portable Programme einfach mit dem Dateimanager. Danach gehen Sie im Hauptdialog von Playonlinux auf „Konfigurieren“ und markieren den Namen der betreffenden Laufzeitumgebung. Nun erscheint die Schaltfläche „Lege eine neue Verknüpfung dieses virtuellen Laufwerks an“, die eine Suche nach ausführbaren Windows-Executables (*.exe) startet. Hier klicken Sie auf die gewünschte Programmdatei und auf „Weiter“. Dadurch entsteht ein neuer Programmeintrag im Hauptdialog von PlayOnLinux, zusätzlich auch noch eine Desktop-Verknüpfung.

Ob das portable Programm dann tatsächlich läuft, erweist sich nach Klick auf „Ausführen“ im Hauptdialog. Der Erfolg ist ungewiss, aber Sie können in einem einzigen Wine-Prefix durch schlichtes Kopieren in den virtuellen Programme-Ordner Dutzende von Programmen ausprobieren. Bei kleineren Tools und einfachen Spielen stehen die Chancen generell gut.

Oft unproblematische portable Software: Viele Windows-Programme sind nach schlichtem Kopieren in den virtuellen Programme-Ordner sofort startklar.
Oft unproblematische portable Software: Viele Windows-Programme sind nach schlichtem Kopieren in den virtuellen Programme-Ordner sofort startklar.

Ergebnis aller Installationsvarianten: Für jede Software ist immer eine bestimmte Wine-Version zuständig. Bei den Programmen, die der Installationsdialog anbietet, holt PlayOnLinux automatisch die passende Wine-Version mit an Bord. Bei manuellen Installationen arbeitet normalerweise die Default-Version des Betriebssystems. Einmal installierte Programme erscheinen im Hauptdialog von PlayOnLinux und lassen sich dort „Ausführen“, „Debuggen“, „Deinstallieren“ und genauer „Konfigurieren“. Eine komplette Prefix-Umgebung können Sie unter „Konfigurieren -> Entfernen“ wieder löschen. Falls dies nicht klappt, löschen Sie einfach den betreffenden Ordner unter ~/.PlayOnLinux/wineprefix.

Hauptdialog von PlayOnLinux nach erfolgten Installationen: Die rechte Spalte bietet die Links für alle Aktionen wie das Starten, Debuggen oder detaillierteres Konfigurieren.
Hauptdialog von PlayOnLinux nach erfolgten Installationen: Die rechte Spalte bietet die Links für alle Aktionen wie das Starten, Debuggen oder detaillierteres Konfigurieren.

Debugging und Experimente

Wine bietet eine erstaunlich zuverlässige Basis der Windows-API, kann aber natürlich nicht die zahllosen Spezialitäten berücksichtigen, wie sie Tausende von Windows-Programmen voraussetzen. Das beginnt bei harmlosen Registry-Einträgen und geht bis zu speziellen DLL-Versionen, .Net- oder DirectX-Versionen. Bei besonders prominenter Software ist der Ehrgeiz der Community groß, diesen Spezialitäten mit genau recherchierten Installations-Scripts Rechnung zu tragen. Bei weniger prominenter Software ist Wine die solide Basis, die aber oft erst durch eigenes Experimentieren zum Erfolg führt: Wenn ein Windows-Programm nach der Installation nicht läuft, bedeutet das nicht, dass es prinzipiell nicht funktioniert. Wer einerseits die Struktur von PlayOnLinux verstanden hat, andererseits einige Windows-Kenntnisse mitbringt, hat gute Chancen, eine störrische Software durch Experimentierten zur Arbeit zu bewegen:

Jedes installierte Programm lässt sich im PlayOnLinux-Hauptdialog markieren, danach auf der rechten Seite mit dem Link „Ausführen“ starten. Wenn dies nicht funktioniert, starten Sie das Programm an gleicher Stelle mit dem Link „Debug“, um das Debug-Logfile anzuzeigen. Das Logfile nennt die Probleme deutlich beim Namen– etwa „Library XYZ.DLL not found…“. Allgemeine Windows-Komponenten wie DirectX und .Net lassen sich über den Link „Konfigurieren“ unter der Registerkarte „Installiere Komponenten“ genau für dieses Programm nachrüsten. Wenn aber – wie im obigen Beispiel – ganz spezielle, fehlende DLL-Dateien genannt werden, hilft nur eines: Kopieren Sie die fehlenden Dateien von einer parallelen Windows-Installation manuell nach Linux. Zielordner ist dann entweder ~/.PlayOnLinux/wineprefix/[Prefix-Name]/drive_c/windows/system32 oder direkt das Programmverzeichnis ~/.PlayOnLinux/wineprefix/[Prefix-Name]/drive_c/Program Files/[Programm].

Wenn Sie die DLL-Dateien unter System32 ablegen, starten Sie dann in PlayOnLinux über „Konfigurieren -> Wine -> Wine konfigurieren“ das Tool winecfg, um dort unter „Bibliotheken -> Neue Überschreibung für“ die gewünschte Bibliothek auszuwählen. Mit „Festlegen“ erstellen Sie eine neue Regel, die Sie mit „Bearbeiten“ ändern. Mit der Einstellung „Native“ nutzt Wine dann die manuell kopierte, originale Windows-DLL im virtuellen System32-Ordner statt der eingebauten Wine-Bibliothek (Builtin).

native dlls
Windows-Bibliotheken manuell ersetzen: Wenn Programme laut Debug-Meldung originale Windows-DLLs fordern, kopieren Sie diese und teilen das winecfg mit.

Was für fehlende Komponenten gilt, gilt ähnlich auch für fehlende Informationen in der Windows-Registry. Diese liegt in Form der beiden Dateien system.reg und user.reg im Basisverzeichnis des jeweiligen Wine-Prefix – also unter ~/.PlayOnLinux/wineprefix/[Prefix-Name]. Theoretisch können Sie diese Dateien manuell bearbeiten, was für eine Handvoll Zeilen sicher noch praktikabel ist. Es gibt aber einen wesentlich komfortableren Weg: Auch hier benötigen Sie wieder ein Windows-Referenz-System, auf dem die betreffende Software fehlerlos läuft. Dort nutzen Sie den Registry-Editor Regedit und suchen den Hauptschlüssel der Software auf – typischer Weise [Hkey_Current_User\Software\[Programmname]. Nach Rechtsklick und „Exportieren“ wählen Sie als Ausgabeformat „Win9x-/NT-Registrierungsdateien“ und einen sprechenden Dateinamen.

Diese Exportdatei lässt sich dann bequem in die Registry auf dem Linux-System importieren. Dazu markieren Sie im Hauptdialog von PlayOnLinux das maßgebliche Programm und klicken dann in der rechten Spalte auf den Link „Konfigurieren“, dann auf die Registerkarte „Wine“. Hier finden Sie die Schaltfläche „Registrierungseditor“. Der entspricht exakt jenem unter Windows, und mit „Registry -> Registry importieren“ holen Sie die vorher erstellte Reg-Datei in die Registry Ihres Wine-Prefixes.

Dateizuordnungen festlegen

Wie der Hauptdialog von PlayOnLinux unter „Einstellungen -> Dateizuordnungen“ verspricht, lassen sich Dateitypen anhand ihrer Extension mit einem Wine-Windows-Programm verknüpfen. Ziel ist es, mit einem Doppelklick im Linux-Dateimanager direkt die passende Windows-Software zu laden.

Legen Sie unter „Dateizuordnungen“ mit der Schaltfläche „Neu“ einen neuen Eintrag an. Ein Beispiel wäre etwa die Extension „.xlsx“, falls Sie diese mit Microsoft Excel verknüpfen wollen. Danach klappen Sie neben „Zugewiesenes Programm“ die Drop-Down-Liste der möglichen Wine-Programme auf, wählen das gewünschte Excel und klicken auf „Anwenden“. Damit haben Sie PlayOnLinux darüber informiert, dass es für die Extension „.xlsx“ eine Standardanwendung gibt, der Linux-Dateimanager weiß davon allerdings noch nichts.

Wie der Dateimanager am besten zu informieren ist, darüber finden Sie im Web einige halbrichtige Anleitungen. Nach unserer Erfahrung (mit Nautilus unter Ubuntu und Nemo unter Mint) ist der sicherste Weg folgender: Sie gehen im Terminal mit cd zu einem Verzeichnis, das eine Datei mit der gewünschten Extension enthält. Dort geben Sie nach mimeopen –d den Dateinamen an:

mimeopen –d [Dateiname.ext]

Geben Sie dann die Ziffer ein, die vor „Other“ steht. Damit weisen Sie dem Dateityp unabhängig von bisherigen Vorgaben ein neues Standardprogramm zu. Neben „use command:“ geben Sie jetzt einfach den Befehl „playonlinux“ ein. Damit gibt der Dateimanager die Verantwortung für diesen Typ an PlayOnLinux weiter und dieses weiß wiederum aufgrund der vorher getätigten Dateizuordnung, was es starten soll.

Im letzten Schritt klicken Sie jetzt im Dateimanager eine beliebige Datei dieses Typs rechts an und wählen „Eigenschaften -> Öffnen mit“. Dort sollte jetzt unter anderem auch der Eintrag „playonlinux“ auftauchen, den Sie mit Klick auf die gleichnamige Schaltfläche „Als Vorgabe festlegen“.

mimeopen
Windows-Programm als Standardanwendung: Das Einrichten fordert mehrere (drei) Schritte – hier der Zwischenschritt mit der Umleitung zu PlayOnLinux.

Scripten mit Bash

Die Bash-Shell ist unter Linux ein unverzichtbares interaktives Werkzeug. Darüber hinaus kann sie durch Shell-Scripts Aufgaben lösen und Abläufe automatisieren. Dieser kleine Beitrag kann die Möglichkeiten nur andeuten und zur Eigeninitiative motivieren.

Der folgende kleine Crash-Kurs fängt nicht bei null an, sondern setzt grundlegende Kenntnis der interaktiven Shell-Benutzung bereits voraus. Er zeigt Regeln und Kniffe bei der direkten, interaktiven Arbeit im Terminal und legt nachfolgend die Basis für komplexere Shell-Scripts.

Interne und externe Befehle

Die Shell muss bei jedem Befehl unterscheiden, ob es sich um ein externes Programm oder einen internen Befehl der Bash-Shell handelt. So ist „gedit“, also der Texteditor, ebenso ein externes Programm wie „ls“, das Programm zum Auflisten von Dateien. „cd“ hingegen, zuständig für den Verzeichniswechsel, werden Sie auf der Festplatte nicht finden, da es sich um einen internen Bash-Befehl handelt. Solange externe Programme in den Standardpfaden wie /bin und /usr/bin liegen, findet sie die Shell automatisch, sodass Sie sich um die Unterscheidung „intern – extern“ nicht groß kümmern müssen. Dennoch ist es wichtig zu wissen, dass externe Programme eventuell eine komplette Pfadangabe oder den vorherigen Wechsel in ihr Verzeichnis benötigen, um fehlerfrei zu starten.
Aufbau einer Kommandozeile
Eine Kommandozeile besteht aus einem oder mehreren Wörtern, die durch Leerzeichen getrennt sind. Das erste Wort ist immer das maßgebliche interne oder externe Programm. Im simpelsten Fall genügt dieses eine Wort – etwa „firefox“ oder „ls“. Häufig folgen aber weitere Argumente wie etwa Dateiangaben oder auch Optionen des jeweiligen Programms: So nutzt „firefox –safe-mode“ die eingebaute Browser-Option, im abgesicherten Modus ohne Erweiterungen zu starten. Jede derartige Programm-Option muss mit genauester Kenntnis der Schreibweise eingegeben werden, andernfalls wird sie vom Programm bestenfalls ignoriert oder als fehlerhaft bemängelt.
In komplexeren Beispielen kommen zusätzliche Befehlsverkettungen zum Einsatz:
free | awk '/Speicher:/ { print "Speicher frei (%): " int($4/$2*100)}'
Der Grundbefehl „free“ ermittelt die aktuelle Speichersituation – aber relativ unübersichtlich. Der dann folgende (mit den Tasten Alt Gr-| erzeugte) Längstrich ist das fundamentale Signal für Befehlsverkettungen. In diesem Fall wird die unübersichtliche Ausgabe von „free“ an ein zweites Programm „awk“ übergeben, das zunächst die Zeile mit „Speicher:“ herausfiltert und dort wiederum das zweite und vierte Textfeld ($2 und $4). „awk“ kann die gefundenen Angaben auch gleich verrechnen und mit erklärendem Text ausgeben.

0_Syntax-Highlighting
Hilfreich bis unentbehrlich: Ein guter Script-Editor mit Syntax-Highlighting (hier gedit) macht die Arbeit einfacher.

Zwischen interaktiver Nutzung und Scripting

Der Übergang zwischen interaktiver Nutzung und Scripting ist fließend. Sobald Sie beginnen, in der automatisch eingelesenen Standarddatei .bashrc (im Home-Verzeichnis) Änderungen vorzunehmen, sind Sie auf dem Weg zum Scripten. Typische erste Anpassungen in der .bashrc sind Befehlsabkürzungen in Form von Alias-Definitionen. Beachten Sie, dass Änderungen der Datei bashrc immer erst für Terminals gelten, die nach der Änderung gestartet werden. So verhilft etwa dieses Alias
alias d='cd $HOME/Desktop'
dazu, mit der Eingabe „d“ schnell zum Desktop zu wechseln. Achtung: Der Desktop-Ordner heißt bei einigen Linux-Distributionen auch „Schreibtisch“ oder „Arbeitsfläche“.
Folgendes Alias
alias 2d='cp --target-directory=$HOME/Desktop $1'
dient einer schnellen Kopie zum Desktop: Nach der Eingabe „2d“ sollte ein Dateiname folgen, den das Alias mit der Variablen „$1“ verarbeitet und die jeweilige Datei zum Desktop kopiert.
Unentbehrlich ist mittelfristig sicher ein Alias, das die bashrc-Datei in einen Editor lädt:
alias ini='gedit ~/.bashrc & disown'
„& disown“ ist nicht notwendig, sorgt aber dafür, dass der Editor unabhängig vom Terminal gestartet wird. Ein ähnliches einfaches Beispiel ist der Aufruf des grafischen Dateimanagers im aktuellen Verzeichnis:
alias x='nautilus $PWD & disown'
Ein Alias kann aber mehr als nur ein einzeiliges Kommando aufnehmen, wobei Sie die Befehle mit einem Semikolon trennen:
alias env='env | sort;echo "";echo -e ${PATH//:/\\n}'
Nach der Eingabe „env“ werden hier die Umgebungsvariablen sortiert angezeigt und nach einer Leerzeile noch einmal der Systempfad in gut lesbarer Form mit je einem Eintrag pro Zeile ausgegeben.
Ein weiteres Beispiel ermittelt mit „extip“ die externe IP-Adresse, wobei es einen beliebten Internetdienst befragt. Das ebenfalls benutzte Tool Curl ist meist Systemstandard, und ist – wo nicht – schnell nachinstalliert:
alias extip='echo -n "Externe IP = ";curl http://ifconfig.me'
Sobald Aliases mehr als drei, vier Kommandos enthalten und mit den trennenden Strichpunkten schwer lesbar werden, lohnt sich eine andere Form, nämlich die einer Funktion. Auch Funktionen, jedenfalls die allerwichtigsten, können Sie in der .bashrc unterbringen. Die Syntaxbasis einer Funktion sieht wie folgt aus:
function Name() {
[Befehle…]
}

Auch Funktionen sind im einfachsten Fall simple Befehlsstapel, nachfolgend etwa, um einige Systeminformationen abzufragen:
function ver() {
echo -n "System: "; uname -o
echo -n "Kernel: "; uname -r
echo -n "CPU : "; uname -p
echo -n "Name : "; uname -n
gnome-shell --version
}

Ein etwas komplexeres Beispiel zeigt die Timer-Funktion in der Abbildung auf dieser Seite, die eine Stoppuhr auslöst, welche mit beliebiger Taste beendet wird. Die gemessene Zeitdauer wird dann am Prompt exakt angezeigt.
Die weitere Beispielfunktion „xd“ eignet sich ebenfalls für die Datei-bashrc, weil sie den interaktiven Komfort der Kommandozeile erhöht: Sie macht bereits von einfachen Kontrollstrukturen Gebrauch, in diesem Fall von einer einfachen Fallunterscheidung mit If – Then – Else. Beim Verzeichniswechsel mit „xd“ spielt es keine Rolle, ob ein Ordnerpfad oder ein Dateipfad nachfolgt, denn im zweiten Fall zieht sich die Funktion einfach den Ordner aus dem Dateipfad. Das ist etwa praktisch, wenn Sie Dateiobjekt aus dem Dateimanager in das Terminal ziehen und dann in dessen Ordner wechseln wollen. Das der Funktion nachgestellte Alias „cd=‘xd‘“ macht das intelligentere „xd“ zum Standard.

Einfache Stoppuhr: Die Funktion „timer“ speichert die Startzeit. Nach beliebigem Tastendruck errechnet sie die exakte Differenz zur Endzeit und zeigt das Ergebnis an.
Einfache Stoppuhr: Die Funktion „timer“ speichert die Startzeit. Nach beliebigem Tastendruck errechnet sie die exakte Differenz zur Endzeit und zeigt das Ergebnis an.

Selbständige Shell-Scripts

Die bisher genannten Aliases der Datei bashrc oder auch Funktionen innerhalb dieser Datei bedeuten zwar bereits Scripting, waren aber immer noch auf den interaktiven Einsatz am Terminal-Prompt ausgerichtet. Es gibt aber gute Gründe, ein Bash-Script als unabhängige und selbständige Datei abzulegen: Nur so ist es möglich, ein Script per Mausklick aus der grafischen Oberfläche zu starten oder automatisch beim Logon sowie als periodischen Cron-Job auszuführen. Außerdem ist es nicht sinnvoll, umfangreiche, aber nur gelegentlich genutzte Scripts allesamt stets in der bashrc-Datei mitzuschleppen.
Bash-Scripts sind wie die bereits genutzte bashrc einfache Textdateien, die Sie mit einem Editor Ihrer Wahl erstellen und bearbeiten. Der Editor sollte aber Fähigkeiten wie Syntax-Highlighting mitbringen, was die Übersicht wesentlich verbessert. Der empfehlenswerte Editor gedit zeigt unter „Ansicht -> Hervorhebungsmodus -> Skripte“ die Option „sh“, die Sie für Shell-Scripts wählen sollten. Auch die Farbschemata unter „Bearbeiten -> Einstellungen -> Schrift und Farben“ sind beim Scripten wichtiger als beim Tippen von Text.
Ein Bash-Script beginnt immer mit dieser Zeile:
#!/bin/bash
Das Zeichen „#“ leitet eigentlich einen Kommentar ein, also eine Zeile, die die Shell ignorieren soll. In der Kombination „#!“ gibt sie jedoch die zu verwendende Shell an. Da nicht auf allen Systemen die Bash-Shell Standard sein muss, erfährt das System hier, welches Programm es starten soll. Das setzt natürlich voraus, dass /bin/bash tatsächlich existiert, was aber in aller Regel der Fall ist.
Für einen ersten Versuch erstellen Sie ein ganz kurzes Script test.sh mit folgendem Inhalt:
#!/bin/bash
for i in *.*
do mv $i $(echo $i | tr ':' '-')
done

Das Beispiel-Script ersetzt bei allen Dateien des aktuellen Verzeichnisses eventuelle Doppelpunkte im Namen durch Bindestriche. Das ist eine nützliche Hilfe, wenn Sie Dateien von Linux nach Windows kopieren wollen. Für eine vollständigere Ersetzung problematischer Zeichen müssen Sie nur die dritte Script-Zeile für weitere erforderliche Zeichen wiederholen.
Ein guter Ort für solche speziellere Scripts ist etwa ein Ordner /Scripts im Home-Verzeichnis. Öffnen Sie dann ein Terminal-Fenster, und geben Sie
chmod u+x ~/Scripts/test.sh
ein, um das Script für den aktuellen Benutzer „Ausführbar“ zu machen. Alternativ geht das auch im Dateimanager über „Eigenschaften -> Zugriffsrechte -> Datei als Programm ausführen“. Gehen Sie dann mit „cd“ in einen Ordner, der Dateien mit problematischen Zeichen enthält, und starten Sie mit
sh ~/Scripts/test.sh
das Script. Die Variable „$i“ nimmt innerhalb der do-Schleife nacheinander jeweils den Wert des nächsten Dateinamens im aktuellen Verzeichnis an. „echo $i“ übergibt den Namen an das Translate-Tool „tr“.
Ein weiteres einfaches Script verbessert die Benutzung des gnome-search-tools, indem es einen übergebenen Suchbegriff und das aktuelle Verzeichnis direkt an das Tool weitergibt. Wird das Script an der grafischen Oberfläche oder auch im Terminal ohne Suchbegriff gestartet (also ohne Parameter $1), dann lädt das Tool ganz normal mit dem Home-Verzeichnis als Vorgabe. Eine typische Eingabe am Prompt wäre dann:
sh ~/Scripts/search Shakespeare
Den Aufrufkomfort externer Shell-Scripts sollten Sie bei allen wichtigeren Exemplaren durch Aliases weiter und deutlich verbessern. Mit einem Alias „search=sh ~/Scripts/search‘‘ verkürzt sich die Eingabe auf
search Shakespeare
Script-Start per GUI: Wenn Sie Shell-Scripts über die grafische Oberfläche per Doppelklick starten wollen, genügt es nicht, den Scripts das Attribut „Ausführbar“ zuzuweisen. Zusätzlich müssen Sie diese Startoption im Dconf-Editor oder – meist einfacher – im Dateimanager erlauben. Bei Nautilus (Ubuntu) und Nemo (Mint) finden Sie die Option unter „Bearbeiten -> Einstellungen -> Verhalten -> Ausführbare Textdateien“.

Suchbegriff und aktuellen Pfad direkt an das grafische Gnome-Search-Tool übergeben: Wird das Script ohne Parameter aufgerufen, setzt das Script lediglich den Standardpfad /home.
Suchbegriff und aktuellen Pfad direkt an das grafische Gnome-Search-Tool übergeben: Wird das Script ohne Parameter aufgerufen, setzt das Script lediglich den Standardpfad /home.

Wichtige Tipps zur Ablaufkontrolle

Einige kleinere IF-Entscheidungen kamen bereits zu Wort. Es gibt zahlreiche Parameter und Operatoren für IF-Fallunterscheidungen. Ein wichtiger Parameter „-e“
if [ -e ~/Schreibtisch ]; then
cd ~/Schreibtisch
fi

überprüft die Existenz eines Dateiobjekts. Der Parameter „-n“ stellt fest, ob die nachfolgend genannte Variable existiert („not empty“ ist):
if [ -n “$var“ ]; then echo “Existiert“; fi
Dies ist auch von besonderer Bedeutung, wenn Sie die Übergabeparameter an ein Script („$1“, „$2“ etc.) auswerten müssen. Viele weitere Vergleich-Operatoren müssen Sie bei Bedarf im Web recherchieren. Wichtig zu wissen ist es, dass die Operatoren „-eq“ (gleich), „-ne“ (ungleich) nur bei Integer-Zahlen funktionieren, während Sie für den Textvergleich „=“ (gleich) und „!=“ (ungleich) verwenden müssen:
if [ “X“ = “Y“ ]…
Diese Zeile ist ebenso korrekt wie folgende:
if [ “21“ –eq “5“ ]…
Schleifenkonstruktionen mit While, Until (meist entbehrlich) und For haben entweder eine genau bezifferbare Anzahl der Durchläufe oder warten auf ein bestimmtes Ereignis (etwa ein Textinhalt, Dateiname), das die Schleife beendet. Eindeutig bezifferbar, ohne dass Sie das selbst absehen oder programmieren müssten, ist etwa die Anzahl der Dateien in folgender Schleife:
for dat in `find /home -name "*.png" -type f`
do echo $dat
done

Dasselbe gilt für das Einlesen und Analysieren einer Textdatei mit
while read line; …
bis zum Ende der Datei. In eher selteneren Fällen sind genau bezifferbare Schleifendurchläufe folgender Sorte die richtige Wahl:
for i in {1..255}; do ping –c1 192.168.0.$i; done
Viel häufiger ist es erforderlich, in der Schleife bei jedem Durchlauf eine Variable zu neu aktualisieren, die dann bei einem bestimmten Wert die Schleife stoppt:
while [ „$name“ != „LinuxWelt“ ]; …
Noch pragmatischer kann es sein, eine Schleife etwa mit „while :“ ohne Bedingung endlos laufen zu lassen und beim entscheidenden Ereignis direkt im Schleifencode mit dem Schlüsselwort „break“ abzuspringen.

Basis-Script für eine Textdatei-Auswertung: Die While-Schleife liest Zeile für Zeile einer übergebenen Datei ein und zeigt sie in diesem Fall lediglich mit Zeilenummer an.
Basis-Script für eine Textdatei-Auswertung: Die While-Schleife liest Zeile für Zeile einer übergebenen Datei ein und zeigt sie in diesem Fall lediglich mit Zeilenummer an.

————————————————————————–
Empfohlene Quellen für Bash und Scripting

GNU-Shell Bash (deutsch): www-user.tu-chemnitz.de/~hot/unix_linux_werkzeugkasten/bash.html

Shell-Programmierung (deutsch): http://openbook.galileocomputing.de/shell_programmierung/

Advanced Bash-Scripting Guide (englisch): http://tldp.org/LDP/abs/html/index.html

————————————————————————–

Anhang 1: Informativer und cooler Prompt

Manche fundamentale Info müssen Sie gar nicht erst explizit erfragen, sondern können sich diese standardmäßig am Terminal-Prompt anzeigen lassen. Möglich ist hier im Prinzip alles, weil die Bash-Shell mit dem „PROMPT_COMMAND“ eine interne Funktion vorsieht, die vor jeder Prompt-Darstellung aufgerufen wird. Daher können Sie in einer selbstgestrickten Funktion „promptcmd“ alles abfragen, was Sie Echtzeit-aktuell am Prompt angezeigt haben wollen. Die Abbildung zeigt den passenden Abschnitt in der Datei bashrc und darunter das Ergebnis, wie es sich im Terminal auswirkt.

Cooler-Prompt

Anhang 2: Grafische Dialoge für Bash-Scripts

In verbreiteten Distributionen wie Ubuntu und Linux Mint ist ein Programm für grafische Dialoge in der Regel vorinstalliert. Geben Sie am Terminal den Befehl dialog ein, um sich dieser Tatsache zu versichern. Sie erhalten eine Reihe von Unterfunktionen angezeigt wie „inputbox“, „msgbox“ oder „yesno“. Den ganz großen Charme versprühen diese Dialoge nicht, aber gelegentlich ist der Mausklick doch angenehmer als eine Texteingabe (mit „read“). Das im nachfolgenden Bild abgebildete Beispiel soll einige Möglichkeiten andeuten: In der Inputbox wird ein Name abgefragt, danach folgt eine Yes-No-Entscheidung, deren Ergebnis schließlich mit einer Notify-Meldung quittiert wird.

GUI

Zurück zur Linux-Übersichtsseite…