URL: https://www.overclockers.at/linux/ubuntu_autostart_sobald_online_211583/page_1 - zur Vollversion wechseln!
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
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
Nach /etc/NetworkManager/dispatcher.d kannst du Skripts verschieben die ausgeführt werden wenn ein Interface up/down geht, falls dir das was hilft.
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.
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
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}"
Zitat von COLOSSUSDas Script wird garantiert nicht als dein angemeldeter User ausgefuehrt, insofern hat es auch keinen Zugriff auf dein X-Display.
Code:su username -c env DISPLAY=:0 skype
Probier es anders (richtig ):
Code:su -l -c 'DISPLAY=":0" /path/to/skype' username
Also das funktioniert prima:
Code:touch /tmp/networkisup
Code:su -l -c 'DISPLAY=":0" /usr/bin/skype' username
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