"Christmas - the time to fix the computers of your loved ones" « Lord Wyrm

Ubuntu: Autostart sobald online?

Gräflicher 02.11.2009 - 17:51 1956 9
Posts

Gräflicher

Here to stay
Registered: Dec 2001
Location: Baden bei Wien
Posts: 976
Gibt es in Ubuntu die Möglichkeit sich einen Autostart einzurichten, der erst startet sobald eine Internetverbindung besteht?
Hab im Moment einige Programme im normalen Autostart - nur starten die noch bevor das WLAN verbunden ist, was dann zu Problemen führt.

Per Google hab ich leider nur Sachen zum normalen Autostart gefunden.
Vielleicht hat ja wer eine Idee.
Besten Dank

Polyfire

Addicted
Avatar
Registered: Feb 2007
Location: .
Posts: 415
ka. wo dieser "Autostart" von ubuntu ist,
aber im Prinzip kannst Du die App durch ein kleines Skript ersetzen welches wartet bis die Verbindung da ist

Code:
#!/bin/bash

WGET="/usr/bin/wget"

while true;
do
	$WGET -q --tries=10 --timeout=5 [url]http://www.google.com[/url] -O /tmp/index.google &> /dev/null
	if [ ! -s /tmp/index.google ];then
		sleep 1s
	else
		abiword&
		break
	fi
done

Das Skript mit chmod +x ausfuehrbar machen, und dann anstelle der App in den Autostart damit.

nexus_VI

Overnumerousness!
Avatar
Registered: Aug 2006
Location: südstadt
Posts: 3746
Nach /etc/NetworkManager/dispatcher.d kannst du Skripts verschieben die ausgeführt werden wenn ein Interface up/down geht, falls dir das was hilft.

COLOSSUS

Administrator
GNUltra
Avatar
Registered: Dec 2000
Location: ~
Posts: 12068
Das ist eine der wenigen Sachen, die mich auf meinem Thinkpad auch stoeren. Zumindest bei KDE aber wird dieses Problem bald der Vergangenheit angehoeren (bei vielen Anwendungen ist das sogar schon der Fall), da immer mehr Entwickler ihre Programme Network-aware machen. Mit NetworkManager, HAL/DeviceKit und DBUS gibt es naemlich seit (nicht allzulanger, aber doch) einiger Zeit eine standardisierte Moeglichkeit, auf netzwerkspezifische Ereignisse und Statusaenderungen zu reagieren.

Bis dahin wird man sich wohl noch, wie von Polyfire oben vorgeschlagen, durch Wrapper-Scripts helfen muessen.

Gräflicher

Here to stay
Registered: Dec 2001
Location: Baden bei Wien
Posts: 976
Ok, ich sitz schon Stunden dran und kriegs einfach nicht hin...

Folgende hab ich nun in /etc/NetworkManager/dispatcher.d abgelegt:

Code:
#!/bin/sh


#Parameter einlesen
INTERFACE=$1
ACTION=$2

## DEBUGGING
# Falls DBG_MODE=1 werden verschiedene Angaben nach $LOG ausgegeben
DBG_MODE=1
LOG=/tmp/dispatcher.log

log_action() {
if [ $DBG_MODE=1 ]; then
        echo $(basename $0): >> $LOG
        echo $(date) >> $LOG
        echo "ACTION: $ACTION, Device: $INTERFACE \n" >> $LOG
fi
}

#Funktionen durchführen, je nach Aktion eine andere
case "$ACTION" in
    up)
/usr/bin/skype
        log_action

        ;;
    down)
        log_action
      
        ;;
    
    *)
        echo "$0: aufgerufen mit falschem Parameter \`$ACTION'" 1>&2
        exit 1
        ;;
esac


Er schreibt brav ins Log ein, wird also erfolgreich ausgelöst. Nur Programme will er mir keine starten :(

COLOSSUS

Administrator
GNUltra
Avatar
Registered: Dec 2000
Location: ~
Posts: 12068
Das Script wird garantiert nicht als dein angemeldeter User ausgefuehrt, insofern hat es auch keinen Zugriff auf dein X-Display.

Ich wuerde dir empfehlen, dass du das Skript irgendwo einen Zustand herstellen laesst, der anderen Programmen/Scripts mitteilt, dass du gerade mit dem Internet verbunden bist (auf der Shell eignet es sich dazu am ehesten, ein Verzeichnis anzulegen, da das ein atomarer Vorgang ist). Sobald die anderen Scripts dann die Existenz dieses Verzeichnisses feststellen, starten sie das gewuenschte Programm.

Z. B. so:

Code:
#!/bin/bash
#verzoegert den Start eines Programms, welches als
#Parameter an das Script uebergeben werden soll,
#bis das Verzeichnis /tmp/networkisup existiert.
while ! test -d "/tmp/networkisup";
do
  sleep 1;
done
exec "${1}"

Gräflicher

Here to stay
Registered: Dec 2001
Location: Baden bei Wien
Posts: 976
Zitat von COLOSSUS
Das Script wird garantiert nicht als dein angemeldeter User ausgefuehrt, insofern hat es auch keinen Zugriff auf dein X-Display.

Darum hab ichs dann auch in dieser Art und Weise probiert - allerdings auch ohne Erfolg:
Code:
su username -c env DISPLAY=:0 skype

Naja probier ichs mal auf die andere Methode :)

COLOSSUS

Administrator
GNUltra
Avatar
Registered: Dec 2000
Location: ~
Posts: 12068
Probier es anders (richtig :D):

Code:
su -l -c 'DISPLAY=":0" /path/to/skype' username

Gräflicher

Here to stay
Registered: Dec 2001
Location: Baden bei Wien
Posts: 976
Also das funktioniert prima:
Code:
touch /tmp/networkisup

Das hier leider nimmer noch nicht:
Code:
su -l -c 'DISPLAY=":0" /usr/bin/skype' username


Darn :p

Gräflicher

Here to stay
Registered: Dec 2001
Location: Baden bei Wien
Posts: 976
Urgs, Stunden später.
Also es läuft mal. Ursprünglich wollte ich es ja mit der "su"-Methode lösen, aber nach Stunden voller Enttäuschungen doch bleiben lassen. Hat man es per sudo in der Konsole ausgeführt - problemlos funktioniert. Per dispatcher.d leider nie. Naja.

Hab dann Collos Lösung probiert. No-Go!
Ein
while ! test -e "/tmp/networkisup";
hat dann doch noch zum erhofften Ergebnis geführt.
Das ganze dann in den Autostart verfrachtet und es scheint zu funktionieren.

Nach dem stundenlangen Probieren würds mich doch interessieren, wie das direkt aus dem dispatcher.d mit dem su Befehl zu realisieren wäre. Wenns wer weiß - heraus mit der Sprache :) Hab dann noch mit sudo -u und irgendwelchen dbus-sessions herumprobiert ,aller alles ohne Erfolg.

Vielen Dank an alle die geholfen haben, freut mich, dass es doch noch geklappt hat
:)
Kontakt | Unser Forum | Über overclockers.at | Impressum | Datenschutz