Ubuntu: Autostart sobald online?
Gräflicher 02.11.2009 - 17:51 1958 9
Gräflicher
Here to stay
|
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
|
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 #!/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!
|
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
AdministratorGNUltra
|
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
|
Ok, ich sitz schon Stunden dran und kriegs einfach nicht hin... Folgende hab ich nun in /etc/NetworkManager/dispatcher.d abgelegt: #!/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
AdministratorGNUltra
|
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: #!/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
|
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: su username -c env DISPLAY=:0 skype
Naja probier ichs mal auf die andere Methode
|
COLOSSUS
AdministratorGNUltra
|
Probier es anders (richtig ): su -l -c 'DISPLAY=":0" /path/to/skype' username
|
Gräflicher
Here to stay
|
Also das funktioniert prima: touch /tmp/networkisup
Das hier leider nimmer noch nicht: su -l -c 'DISPLAY=":0" /usr/bin/skype' username
Darn
|
Gräflicher
Here to stay
|
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
|