Automatisches Starten von Scripte / Programme ( Autostart )

    • Official Post

    In dieser Anleitung möchte ich euch zeigen wie Ihr automatisch Scripte, Programme oder einzelne Befehle startet.
    Der Grund für diese Anleitung ist einfach. Im Forum und auch im IRC wurde relativ oft gefragt wie Scripte automatisch nach dem Bootvorgang ausgeführt werden.



    Als erstes solltet Ihr euch fragen: Wann soll / muss mein Script ausgeführt werden?


    Generell kann man Scripte jederzeit ausführen lassen. Ob es wirklich sinn macht ist eine andere Geschichte...
    (Zbs. macht es keinen Sinn einen Timeserver abfragen zu wollen wenn kein Netzwerk Interface geladen wurde)


    Zur Auswahl stehen 3 Optionen:
    - Init-Script
    - rc.local Script
    - Wenn sich ein Nutzer angemeldet hat



    Init-Script:

    "Achtung ein wenig komplizierter!"
    Unter Linux (egal welche Distribution) gibt es unter /etc/ mehrere Verzeichnis die sich rc<N>.d nennen. N steht jeweils für den jeweiligen Runlevel.
    Welche Bedeutungen die Runlevels haben kann bei Wikipedia nachgelesen werden.


    Nun fragt ihr euch sicherlich mit welchen Runlevel euer System momentan läuft - der Befehl runlevel liefert die passende Antwort auf eure Frage.


    In meinem Fall läuft der Pi mit dem Runlevel 2 daher wird beim Booten jedes Script im /etc/rc2.d/ ausgeführt.
    Ein Blick in das Verzeichnis zeigt das dort eigentlich gar keine Scripte sind sondern, nur Symbolische Links auf Scripte die sich in /etc/init.d/ befinden.


    Die Namen dieser Links sind relativ leicht zu erklären:
    <K|S> Kill Script - Script wird beim beenden eines Runlevels ausgeführt; Starting Script werden beim starten eines Runlevels gestartet ;)
    <0-99> Priorität - welches Script zuerst aufgerufen wird.
    <Name>


    Wenn wir nun ein eigenes Init-Script erstellen möchten muss es gewisse Regeln befolgen:
    - Es muss einen Init Info Kommentarblock geben
    - diverse Aktionen müssen ausführbar sein (start, stop, restart...)
    - Script muss ausführbar sein (Rechte)


    Hier ist ein Beispiel Script:
    testScript.txt


    Wenn das Script nun im /etc/init.d/ Verzeichnis liegt und auch die richtigen Rechte besitzt ist das schonmal die halbe Miete. Als letztes müssen wir dem System noch mitteilen das da ein neues Script existiert.
    Dazu gibt es das update-rc.d Script:


    Code
    pi@raspberrypi /etc/init.d/ $ sudo update-rc.d <scriptfile> defaults


    Nach einem Restart wird nun euer Script ausgeführt.


    Wer es ein wenig einfacher haben mag kann natürlich auch eine GUI für das einbinden benutzen zbs. rcconf (auch ohne XServer möglich)


    rc.local Script


    Wenn Ihr Runlevel unabhängige Scripte ausführen wollt lohnt sich ein blick in die /etc/rc.local
    Datei. Dort könnt ihr an das Ende (Vor dem exit(0)) eure Scripte / Befehle einfügen.
    Dieses Script wird von jedem Runlevel aufgerufen.



    Bei beide Methoden (Init-Script und rc.local) werden eure Scripte unter root ausgeführt.
    Wenn das ein Script unter einem bestimmten Benutzer ausgeführt werden soll dann muss es zbs. so ausgeführt werden:

    Code
    su pi -c "/path/script.sh &"



    [hr]
    ACHTUNG!
    Wenn Ihr ein fehlerhaftes Script einbindet (egal ob es ein Init-Script ist oder in der rc.local) kann es euer System lahm legen!!
    Deshalb sollte das Script erst per Hand getestet werden!
    [hr]



    Wenn sich ein Nutzer angemeldet hat:


    Wenn Ihr euer Script ausführen wollt nachdem sich ein Benutzer erfolgreich angemeldet hat so finden sich die passenden Scripte im Homeordner des jeweiligen Benutzers.
    .bashrc
    Wenn sich ein Benutzer einloggt (über Console oder ssh) dann wird die .bashrc ausgeführt (einmalig).


    .profile
    Wenn ein Benutzer einfach eine neue Shell startet dann wird die .profile ausgeführt (öfter).



    [hr]


    Egal für welche Option Ihr euch entscheidet - es hängt von eurem Script / Programm ab Wo und Wann es gestartet werden soll.



    Ein letzter Hinweis noch:
    Wenn euer Script dauerhaft läuft und nicht einfach so beendet wird dann solltet ihr es so aufrufen
    /path/script.sh&
    Das & an dieser Stelle bedeute dass das Script im Hintergrund ausgeführt wird.
    Wenn eurer Script dauerhaft läuft und die nicht zum ende kommt kann es vorkommen das andere (nachfolgende) Scripte nicht ausgeführt werden und damit das System blockieren!



    Hinweise von meigrafd:
    Die erste Umleitung " >/dev/null " schickt die Standard-Ausgabe (stdout) nach /dev/null, also dem klassischen Mülleimer von Linux
    Das dahinter " 2>&1 " leitet Fehlermeldungen (stderr) auf den Kanal der Standard-Ausgabe (strout) um und landet somit ebenfalls im Mülleimer


    Dadurch vermeidet man möglicherweise zu viele Logeintröge in /var/log/syslog
    Trotzdem werden schwerwiegende Fehler trotzdem noch ins /var/log/syslog geschrieben und sollte auch der erste Ort sein wo ihr nachzugucken solltet wieso/weshalb/warum ein Befehl/Script über crontab nicht funktionieren will


    Ausserdem solltet ihr in euren Scripts immer mit Exit-Codes arbeiten damit das System bzw crontab auch weiss ob das Script erfolgreich oder fehlerhaft ausgeführt wurde.
    Wenn alles in Ordnung ist nutzt man "exit 0", das sollte immer am Ende des Scripts stehen.
    Wenn es Fehler gibt zB falsche Anforderungen die fürs Durchlaufen des Scripts erfüllt sein müssten oder weil en Befehl im Script einen Fehler verursacht hat, nutzt man alles über 0 also "exit 1" oder "exit 2" usw. Mehr zu den Exit-Codes könnt ihr hier:


    Ich hoffe ich konnte euch den "Autostart" ein wenig näher bringen ;)



    liebe Grüße Turael

    Ich bin ein gefallener Engel namens Turael.

    Einst vor langer Zeit rebelierte ich im Himmel bis Gott mich auf die Erde verbannte.

    Doch meine taten werden kein ende finden....

    Edited once, last by Turael ().

  • Eine gute Einführung . Danke.



    Weißt Du zufällig, wann der Eintrag im crontab ausgeführt wird ?



    http://team.macnn.com/drafts/crontab_defs.html


    @reboot cd "/usr/local/mysql"; ./bin/safe_mysqld &
    This will launch on each reboot. It cd's to the proper mysql root folder, then launches mysql with the safe startup script in nohup mode.

    while (!sleep()) {sheep++};

    • Official Post

    Habe unter RaspBMC ein Pythonskript laufen, welches meine Funksteckdosen steuert.
    Wie kann ich das einbinden??
    /root/RPi.GPIO-0.1.0/netio_server.py
    Sonst gehe ich mit "cd RPi.GPIO-0.1.0" in den Ordner und starte dann mit "sudo python netto_server.py &".


    Wie kann ich das in rc.local einfügen??
    ps. Es sollte erst Starten, wenn Netzwerk und alles andere Wichtige geladen ist... da kommt es nicht auf ein paar Sekunden an :P

    <woltlab-metacode data-name="align" data-attributes="WyJjZW50ZXIiXQ=="><p><span style="font-size: 10pt">Ein "Gefällt mir" oder die Bewertung im Profil ist eine nette Geste für die Hilfe die wir hoffentlich waren oder sind.</span></p></woltlab-metacode>

    • Official Post

    mario:

    Quote


    Wie kann ich das in rc.local einfügen??


    fast genauso wie du es per Hand machst nur das sudo kannst du weglassen den Grund dafür habe ich in der Anleitung noch nachgetragen :)

    Ich bin ein gefallener Engel namens Turael.

    Einst vor langer Zeit rebelierte ich im Himmel bis Gott mich auf die Erde verbannte.

    Doch meine taten werden kein ende finden....

    Edited once, last by Turael ().

  • Hallo erstmal, :D
    ich hab da mal noch ne Frage. Wenn ich mein Programm in den Autostart einbinde, gibt es dann eine Möglichkeit ein Terminal aufgehen zu lassen um den print Befehl darstellen zu können? :)

    • Official Post

    Soll das Terminal + Print nach dem einloggen erscheinen? Wenn ja dann dann könntest den Befehl in der ~/.bashrc oder ~/.profile hinterlegen und sobald sich ein User anmeldet wird der Befehl ausgeführt ;)
    Um dazu noch ein neues Terminal zu öffnen reicht es wenn du um deinem Befehl hängst du das dran xterm -e 'print ......; bash' &


    xterm öffnet eine neues Terminal und führt dann 2 Befehle aus. Deinen Print befehl und bash (damit das Terminal offen bleibt)

    Ich bin ein gefallener Engel namens Turael.

    Einst vor langer Zeit rebelierte ich im Himmel bis Gott mich auf die Erde verbannte.

    Doch meine taten werden kein ende finden....

  • Klasse Tutorial, gut geschrieben und nachvollziehbar erklärt :thumbs1::danke_ATDE:


    nach allem was ich dazu im Netz gelesen hatte funktionierte es auf Anhieb :bravo2:

    lasst die PIs & ESPs am Leben !
    Energiesparen:
    Das Gehirn kann in Standby gehen. Abschalten spart aber noch mehr Energie, was immer mehr nutzen. Dieter Nuhr
    (ich kann leider nicht schneller fahren, vor mir fährt ein GTi)

  • Zu dem ersten Post hätte ich noch einige Ergänzungen, zumal ich glaube das es nicht unbedingt derart Kompliziert sein muss wenn man nur etwas "automatisch starten" lassen möchte (init-script)



    Folgende Möglichkeiten gibt es, der Reihenfolge nach die man bevorzugen sollte:

    • Benutzer-Crontab -> Kann über den Konsolen Befehl crontab -e bearbeitet werden


    • System-Crontab -> /etc/crontab
      Achtung: hat eine Spalte mehr als die Benutzer-Crontab, nämlich mit dem Benutzer der den Befehl oder Script ausführen soll
      Achtung-2: Wird von oben nach unten abgearbeitet, ist aber eine Zeile fehlerhaft wird alles dadrunter nicht mehr ausgeführt also am besten eure eigenen Einträge ans Ende paken


    • /etc/rc.local wurde im ersten Post leider leicht fehlerhaft beschrieben (bezüglich ans Ende einfügen).
      Im /etc/rc.local muss eure Zeile vor das "exit 0" eingefügt werden und wichtig ist auch das ihr ein " & " am Ende eurer Zeile verwendet da sonst das System solange pausiert bis der Befehl oder das Script beendet wird!


    • init- oder auch Runlevel- Script wie im ersten Post bereits ausführlich beschrieben, allerdings ist " K " zum beenden des Scripts also beim herunterfahren (hat nichts mit deamon zu tun)


    • ~/.bashrc sowie ~/.profile wie im ersten Post beschrieben. " ~/ " ist das Heimatverzeichnis des jeweiligen Benutzers (wird auch in der globalen Variable $HOME hinterlegt (echo $HOME)) - Funktioniert aber nur im Bezug auf die Überschrift wenn sich jemand automatisch anmeldet


    Anmerkung zu den ersten beiden:


    Standardmässig wird die Crontab mit vi geöffnet. Wer stattdessen lieber nano nutzen möchte gibt ein mal folgenden Befehl ein: export EDITOR=nano


    Ein Crontab-File besteht aus 6 "Spalten" pro Zeile:
    1 - Minute (0-59)
    2 - Stunde (0-23)
    3 - Tag des Monats (1-31)
    4 - Monat des Jahres (1-12)
    5 - Tag der Woche (0-6, 0 ist Sonntag)
    6 - Absoluter Pfad zum Befehl/Script


    Eine Ausnahme bildet allerdings wie bereits erwähnt die /etc/crontab Datei! Da gibt es eine Spalte mehr um anzugeben wer den Befehl oder das Script ausführen soll:
    1 - Minute (0-59)
    2 - Stunde (0-23)
    3 - Tag des Monats (1-31)
    4 - Monat des Jahres (1-12)
    5 - Tag der Woche (0-6, 0 ist Sonntag)
    6 - Auszuführender Benutzer
    7 - Absoluter Pfad zum Befehl/Script



    Wenn ein Script oder Befehl eine Ausgabe erzeugt (zB durch echo's) wäre es zudem ratsam die Ausgabe in den Mülleimer umzuleiten. Das erreicht man indem man hinter den Befehl/Script folgendes anhängt:

    Code
    >/dev/null 2>&1


    Erklärung:
    Die erste Umleitung " >/dev/null " schickt die Standard-Ausgabe (stdout) nach /dev/null, also dem klassischen Mülleimer von Linux
    Das dahinter " 2>&1 " leitet Fehlermeldungen (stderr) auf den Kanal der Standard-Ausgabe (strout) um und landet somit ebenfalls im Mülleimer


    Dadurch vermeidet man möglicherweise zu viele Logeintröge in /var/log/syslog
    Trotzdem werden schwerwiegende Fehler trotzdem noch ins /var/log/syslog geschrieben und sollte auch der erste Ort sein wo ihr nachzugucken solltet wieso/weshalb/warum ein Befehl/Script über crontab nicht funktionieren will


    Ausserdem solltet ihr in euren Scripts immer mit Exit-Codes arbeiten damit das System bzw crontab auch weiss ob das Script erfolgreich oder fehlerhaft ausgeführt wurde.
    Wenn alles in Ordnung ist nutzt man "exit 0", das sollte immer am Ende des Scripts stehen.
    Wenn es Fehler gibt zB falsche Anforderungen die fürs Durchlaufen des Scripts erfüllt sein müssten oder weil en Befehl im Script einen Fehler verursacht hat, nutzt man alles über 0 also "exit 1" oder "exit 2" usw. Mehr zu den Exit-Codes könnt ihr hier nachlesen:


    [hr]


    Benutzer-Crontab Beispiele: (crontab -e)



    System-Crontab Beispiele: (/etc/crontab)



    Es gibt auch noch weitere Crontab-untypische Einstellungsmöglichkeiten wie @reboot
    Genaueres dazu kann man dort nachlesen: http://wiki.ubuntuusers.de/Cron#Cronjobs-manuell-einrichten
    (etwas runter scrollen bis zur Tabelle "String, Bedeutung, cron-Schreibweise")


    [hr]


    /etc/rc.local Beispiel:





    //EDIT: Seperater Thread bezüglich Crontab : http://www.forum-raspberrypi.d…utorial-crontab-cron-jobs


    //EDIT2: Bezüglich Autostart Möglichkeiten für die Grafische Oberfläche (X, LXDE usw) siehe > Beitrag#14 <

    • Official Post

    Super, vielen Dank für die Ergänzungen :)
    Hab nochmal nach geschlagen für was S / K bei den Init-Scripten steht. Und die genaue Definition vom Ubuntu-Wiki:





    Quote


    /etc/rc.local wurde im ersten Post leider leicht fehlerhaft beschrieben (bezüglich ans Ende einfügen).


    Manchmal geht man einfach mal von Grundkenntnissen aus... Aber recht hast du ;)




    Aber in einem Punkt bin ich mir nicht so ganz sicher...
    Und zwar glaube ich nicht das Crontab etwas mit dem Thema zu tun hat... - Gut Crontab führt Befehle / Scripte aus aber nicht unbedingt beim booten / einloggen sondern einfach nach einer Uhrzeit...

    Ich bin ein gefallener Engel namens Turael.

    Einst vor langer Zeit rebelierte ich im Himmel bis Gott mich auf die Erde verbannte.

    Doch meine taten werden kein ende finden....


  • Aber in einem Punkt bin ich mir nicht so ganz sicher...
    Und zwar glaube ich nicht das Crontab etwas mit dem Thema zu tun hat... - Gut Crontab führt Befehle / Scripte aus aber nicht unbedingt beim booten / einloggen sondern einfach nach einer Uhrzeit...


    Crontab kann ebenfals dazu genutzt werden etwas automatisch beim booten zu starten, dafür gibt es eine extra Einstellung die am Anfang meiner Beispiele steht -> @reboot


    Das ist zudem der einfachste und auch bessere Weg - verändert man /etc/rc.local , /etc/init.d/ oder .bashrc bzw .profile aber macht dabei Fehler (ob in dem File oder im Script) kann es das System negativ beeinflussen, bis hin zu "nicht mehr mit dem System arbeiten können"..


    Mit Crontab kann man alles erreichen was man benötigt; ohne das System negativ zu beeinflussen



    Es gibt auch noch weitere Crontab-untypische Einstellungsmöglichkeiten wie @reboot
    Genaueres dazu kann man dort nachlesen: http://wiki.ubuntuusers.de/Cron#Cronjobs-manuell-einrichten
    (etwas runter scrollen bis zur Tabelle "String, Bedeutung, cron-Schreibweise")

  • Da das hier auch immer wieder gefragt wird, schreib ich das hier auch noch mal in diesen Thread



    Die in diesem Thread bisher erwähnten Wege gelten nur für Programme/Scripte die über die Konsole laufen können! Wer aber X11 (LXDE) Programme automatisch starten möchte, wird etwas anderes anwenden müssen:



    Setzt das Programm X11 bzw eine Grafische / Desktop Oberfläche (GUI) voraus, kann es erst "automatisch gestartet" werden wenn X11 bereits läuft und somit würden Wege über crontab , /etc/rc.local oder bashrc usw nicht funktionieren, denn die werden viel früher ausgeführt als die Desktop Oberfläche! Setzt euer Programm LXDE o.ä. voraus, muss es auch erst dann starten wenn LXDE bereits gestartet wurde.



    Aber selbst dafür gibts natürlich ebenfalls mehrere Lösungen:

    • Über /etc/lightdm/lightdm.conf ist bereits ein Eintrag (am Ende) für VNC vorbereitet
    • Über die globale LXDE Autostart funktion ( /etc/xdg/autostart/ )
    • Über das LXDE-Profil des jeweiligen Benutzers ( ~/.config/autostart/ ), funktioniert aber nur wenn sich der Benutzer automatisch Anmeldet und LXDE bei Systemstart automatisch gestartet wird..
    • Ein spezieller Eintrag der globalen Session: /etc/xdg/lxsession/LXDE/autostart


    Zu Punkt 1.) zum Beispiel:

    Code
    [VNCServer]
    enabled=true
    port=5900
    width=1024
    height=768
    depth=8



    Zu Punkt 2) und 3):


    Eine Datei erstellen: x11vnc.desktop
    Achtung: Die Dateiendung muss .desktop lauten!
    mit folgendem Inhalt:

    Code
    [Desktop Entry]
    Name=X11 VNC
    Comment=
    Exec=x11vnc -forever -rfbport 5900 -rfbauth ~/.vnc/x11vnc.pass -o ~/.vnc/x11vnc.log -display :0
    Terminal=false
    Type=Application


    Anschliesend ist es ebenfalls wichtig die x11vnc.desktop Datei ausführbar zu machen!

    Code
    chmod +x x11vnc.desktop


    Ihr könnt bei " Exec= " natürlich auch ein Script oder andere Programme einfügen usw. Eine genauere Beschreibung der .desktop Dateien findet ihr hier: http://wiki.ubuntuusers.de/Men%C3%BC



    Zu Punkt 4):


    Euren Befehl ergänzend eintragen (dort stehen schon ein paar Sachen drin). Wichtig ist das ihr auch ein @ an den Anfang der Zeile einfügt.
    Zum Beispiel:

    Code
    @/usr/bin/python /home/pi/Script.py


    Wenn ihr wollt das sich automatisch ein Terminal öffnet und ein Script ausführt welches auf eine Benutzereingabe wartet, dann würde der Eintrag wie folgt aussehen:

    Code
    @lxterminal -e "python /home/pi/Script.py"



    Wichtig in jedem Fall ist das ihr den absoluten / vollständigen Pfad zum Script angebt.

    • Official Post

    Warum sollte man bei VNC einen anderen Weg gehen als ich den Beschrieben habe?
    Ok ich hab noch kein VNC Server aufgesetzt aber was ich so bei Google gelesen habe reicht auch ein Init-Script bzw rc.local.
    Warum auch nicht? Wenn das Init-Script an der richtigen stelle gestartet wird (nachdem der X-Server gestartet wurde) dann sollte es auch keine Probleme geben in VNC.


    Und wenn es doch ein paar Probleme geben sollte dann könnte das Init-Script so erweitert werden das es im Hintergrund auf den X-Server wartet bis dieser komplett gestartet wurde und dann erst VNC startet.....



    Oder ist an meiner Theorie etwas falsch? Wenn ja was?

    Ich bin ein gefallener Engel namens Turael.

    Einst vor langer Zeit rebelierte ich im Himmel bis Gott mich auf die Erde verbannte.

    Doch meine taten werden kein ende finden....



  • Hier werden mehrere Möglichkeiten beschrieben oder nicht?
    Und das es nicht eine gibt, darin sollten wir uns einig sein, oder?


    Für welche man sich entscheidet ist jedem selbst überlassen


    VNC ist für X11, also macht es schon Sinn das es erst dann gestartet wird wenn LXDE startet

    • Official Post

    Das mehrere Wege nach Rom führen steht auch nicht zur debatte ;)
    Aber ich glaube du hast meinen Beitrag nicht ganz gelesen.
    Ich wollte wissen warum man deinen Weg gehen sollte und nicht über den Linux einheitlichen "Autostart".
    Das VNC auch einen X-Server benötigt ist mir klar ;)
    Der X-Server wird auch an irgendeiner stelle beim booten geladen und steht ab dann zur verfügung - ergo ich könnte danach dann zbs VNC starten.

    Ich bin ein gefallener Engel namens Turael.

    Einst vor langer Zeit rebelierte ich im Himmel bis Gott mich auf die Erde verbannte.

    Doch meine taten werden kein ende finden....

  • Ich hab den beitrag gelesen - du denn auch meinen?


    In diesem Thread geht es um allgemeines Autostarten von Scripte / Programme - bedeutet also: Wer ein Script oder Programm hat das X11 bzw LXDE benötigt kann den von mir zuletzt beschriebenen Weg nutzen


    Ob Du das so für Dich machen würdest oder nicht ist dein Ding - Ich würde deinen Weg jedenfals nicht nehmen da das viel zu kompliziert ist von wegen passenden Runlevel finden um sicher zu gehen das X11 auch wirklich gestartet ist bevor man dann VNC startet - oder das Scriprt solange im Kreis drehen lassen bis es X11 findet und erst dann starten lassen oder bla...
    Wenn du meinst das wäre aus deiner Sicht sinnvoller, dann beschreib es doch? irgendwie umschreiben kann das jeder, aber dieser Thread ist doch für Anfänger die das nicht wissen - oder etwa nicht??


    Und BTW war das mit VNC nur ein Beispiel - häng dich daran also bitte nicht auf, sonst kann ich dir auch gerne noch nen Strick dazu knüpfen (...ehrlich, ohne sinn... :no_sad: )



    PS: Das mit @reboot über die Crontab hast du aber ja auch (immernoch?) nicht verstanden und auch immer noch nicht in Post#1 ergängzt...

  • Hallo
    ich bin echt neu hier und durch gooooogln auf Deinem Beitrag gestoßen. Und hab eigentlich keine ahnug von Pragrammirung.
    Aber was Du hier beschrieben hast ( auch verstaendlich fuer Dummmis wie mich ) funktionirt und ich hab gerafft wie es geht.
    NUN das was ich nicht gefunden habe ist:
    wie kann ich die Reinfolge beeinflussen das mein Skript so ziemlich als letztes ausgeführt wird?
    Weil wenn es ausgeführt wird, ist meine externe HD noch nicht gemountet und gphoto2 auch noch nicht bereit.
    Jedenfalls erkennt mein skript nichts beim starten, aber wenn ich es dann manual aufrufe geht alles.
    Das Skript ist ziemlich einfach, es ruft gphoto2 auf und wartet das meine angeschlosene Kamera ein Bild macht, dann wird dieses auf die HD runtergeladen.
    Mein Skript wurde als S2script eingestuft im /etc/rc2.d/ wahrscheinlich ist S#script zu klein.
    Es wird irgendwie zu früh gestartet., bevor das gestartet wird was ich brauche.


    Habe hier was gefunden http://www.calculate-linux.org/main/en/initscripts
    wenn ich


    depend) {
    after *
    }
    oder


    depend) {
    after mount
    use gphoto2
    }


    einfüge , geht das so einfach?


    Danke
    Dirk