Ubuntu: Autostart sobald online?

Seite 1 von 1 - Forum: Linux and other OS auf overclockers.at

URL: https://www.overclockers.at/linux/ubuntu_autostart_sobald_online_211583/page_1 - zur Vollversion wechseln!


Gräflicher schrieb am 02.11.2009 um 17:51

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 schrieb am 02.11.2009 um 19:24

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 schrieb am 02.11.2009 um 19:39

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 schrieb am 02.11.2009 um 19:41

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 schrieb am 02.11.2009 um 23:06

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 schrieb am 03.11.2009 um 08:34

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 schrieb am 03.11.2009 um 10:50

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 schrieb am 03.11.2009 um 10:59

Probier es anders (richtig :D):

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


Gräflicher schrieb am 03.11.2009 um 11:06

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 schrieb am 03.11.2009 um 14:40

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
:)




overclockers.at v4.thecommunity
© all rights reserved by overclockers.at 2000-2025