Wrapper-Scripts

Aus DebianforumWiki
Zur Navigation springen Zur Suche springen
Wiki ‹ Scripting ‹ Wrapper-Scripts


Als Wrapper bezeichnet man in der Informationstechnik ein Stück Software, welches ein anderes Stück Software umgibt. Der Name selbst kommt aus der Softwareentwicklung. Ein Wrapper-Skript ist nun nichts weiter als ein Skript das anstatt eines (i.d.R. gleichnamigen) Programms gestartet wird, seine Aufgabe erfüllt und dann erst das eigentliche Programm startet - Es also "umgibt" und in begrenztem Maße dessen Start und Beenden anpasst.

Wrapper-Skripte erstellen

Nehmen wir als Beispiel an: Man möchte immer wenn man den VLC startet verhindern, dass bei Inaktivität, weil wir fernab von Maus und Tastatur auf der Couch liegen und gerade Fernsehkritik.tv im VLC schauen, der Bildschirm in den Energiesparmodus wechselt und sich abschaltet (Siehe: Diskussion 134359; Einen weiteren Anwendungsfall zeigt auch der Artikel X-Anwendungen mit den Rechten eines anderen Benutzers ausführen).

Eine Methode dies zu erreichen, ist ein Wrapper-Script, welches VLC "umgibt" und den Bildschirmschoner deaktiviert bevor es den VLC startet.

Dazu legt man sich ein persönliches bin-Verzeichnis $HOME/bin/ an:

mkdir $HOME/bin

Speichert das Wrapper-Skript darin ab ($HOME/bin/vlc):

#!/bin/sh

#
# Mein vlc-Wrapper-Skript
#

xset s off -dpms   # Bildschirmschoner deaktivieren
xset s noblank

/usr/bin/vlc "$@"  # VLC starten
 
xset s on +dpms    # Bildschirmschoner aktivieren
xset s 300

Wichtig ist dabei:

  • den absoluten Pfad /usr/bin/vlc anzugeben. Diesen bekommt man mit dem wheris-Befehl herraus: whereis vlc
  • die Parameter entsprechend durchzuschleifen - also $@ bzw. $*
  • das Skript ausführbar zu machen: chmod +x $HOME/bin/vlc

Nun wird statt vlc immer das $HOME/bin/vlc-Wrapper-Skript ausgeführt. Das ganze funktioniert in der Shell und auch über das Startmenü der Desktop-Umgebung.

Hinweis.png Hinweis: Hat man das persönliche bin-Verzeichnis neu angelegt, muss auch die PATH-Variable neu gesetzt werden. Dazu einfach neu anmelden, damit die $HOME/.profile erneut ausgeführt wird.

Sollte die Datei .profile fehlen, kann man diese aus /etc/skel ins HOME-Verzeichnis kopieren:

cp /etc/skel/.profile $HOME


weitere Beispiele

Der technische Hintergrund

Da das Verzeichnis $HOME/bin, falls vorhanden, an erster Position in der Umgebungsvariable PATH steht, wird zuerst dort nach Programmen gesucht und somit das vlc-Wrapper-Script vor vlc in /usr/bin/ gefunden und ausgeführt. Es ist also wichtig das der Name des Wrapper-Skript dem Programm-namen entspricht, welches man damit "umgeben" oder auch komplett ersetzen möchte.

Um zu überprüfen ob das persönliche bin-Verzeichnis in $PATH enthalten ist und an erster Position seht, kann man folgenden Befehl nutzen:

echo $PATH | grep ^$HOME/bin: --color; echo $?

Wird hier ein anderer Wert als 0 zurück-geliefert, ist $HOME/bin nicht in der PATH Variable enthalten oder nicht an erster Position und es muss entsprechen hinzugefügt werden. Das sollte unter Debian aber nicht nötig sein, da dies bereits der Fall ist:

cat $HOME/.profile
[...]
# set PATH so it includes user's private bin if it exists
if [ -d "$HOME/bin" ] ; then
        PATH="$HOME/bin:$PATH"
fi
[...]

bekannte Wrapper sind