Fragen zu UNIX programmierung ( in c )

L I V E Stammtisch ab 20:30 Uhr im Chat
  • Hej,
    also mein Problem ist, dass ich versuche meinen Xserver neu zu starten. Im Programm habe das erstmal ganz simple verucht mit:

    Code
    system ("killall /usr/bin/lxsession");
    system("startx");


    die erste Zeile Code führt er auch aus und ich muss mich dann auf einer Gui anmelden mit Benutzernamen und passwort. Aber er startet den Xserver nicht neu (bzw erst nach dem anmelden und das möchte ich nicht).
    Liegt das daran, dass ich das im LXterminal gestartet habe und mit killall lxsession auch den kindprocess lxterminal "gekillt" habe bevor er den befehl ausgeführt hat?
    oder muss ich mich neu anmelden und irgendwie mein Passwort und benutzernamen übergeben?
    Letzendlich möchte ich den Xserver sauber schließen und neu starten. Der Lösungsweg ist egal.

    Und als zweites:
    ich würde gerne midori offen lassen so das der Xserver nicht jedes mal diesen neu starten muss... jedoch ist midori ja auch ein Kindprocess von lxsession gibt es da eine Möglichkeiten?

    PS: Betriebssystem Rasbian

    Beste Grüße aus dem Norden ;)


  • Hej,
    also mein Problem ist, dass ich versuche meinen Xserver neu zu starten.
    ...
    Letzendlich möchte ich den Xserver sauber schließen und neu starten. Der Lösungsweg ist egal.

    Und als zweites:
    ich würde gerne midori offen lassen so das der Xserver nicht jedes mal diesen neu starten muss ...

    Tach auch Mateusz224,

    ich checke zwar überhaupt nicht, was Du da vor hast, aber den X-Server kannst Du, je nach OS-Version, mit CTRL+ALT+BACKSPACE oder, bei neueren Linux-Versionen mit ALT-GR+PRNTSCRN+K restarten.

    Alternativ dazu kannst Du, je nach Desktop-Umgebung, den Server mit

    Code
    sudo service lightdm restart
    sudo service gdm restart
    sudo service kdm restart

    neu starten.

    Midori kann während des Restarts nich weiter laufen, weil die Grundlage (grafische Oberfläche resp. X) fehlt.

    cu,
    -ds-

  • Hej ne das ist leider nicht das was ich brauch mein Programm soll später in der Datei:

    /usr/share/X11/xorg.conf.d/10-evdev.conf

    die konfiguartion ändern/überschreiben und dazu muss diese Datei neu eingelesen werden.


    wenn mein Programm ausserhalb von X11 gestartet wird also nicht im LXterminal dann ist das kein Kind prozess mehr und dürfte das dann funktionieren? Oder kann das auch an was anderem liegen?


    Und noch eine grundsätzliche Frage:
    Wenn ich mein Programm mit sudo aufrufe und dann system("xxx") irgendwo stehen habe wird dieser Befehl auch als administrator Befehl ausgeführt? und wenn ja wie kann ich in meinem Programm, Programme starten mit Admin rechten und ohne admin rechte?

  • Code
    system ("killall /usr/bin/lxsession");
    system("startx");


    Warum sollte der Neustart von X klappen, wenn es gar nicht "gekillt" wurde? Du hast ja nur die lxsession beendet.

    Ansonsten kann ich nur ds zustimmen, warum soll das so stattfinden? Ist immer besser zu wissen, was überhaupt die Aufgabenstellung ist.

    Gruß, mmi

  • /usr/share/X11/xorg.conf.d/10-evdev.conf

    in dieser Datei soll mein Programm die Konfiguration so ändern, dass es bei einem neustart des X11, den Bildschirm dreht.
    Und dazu muss muss dieser neu gestartet werden...

    wie kill ich denn X?

    Einmal editiert, zuletzt von Mateusz224 (15. September 2013 um 01:01)

  • Dreamshaders Vorschlag wäre absolut vorzuziehen und sollte vermutlich (ich verwende kein Debian) funktionieren.

    Falls nicht, wäre der saubere Weg das Signal SIGTERM zunächt an lxsession und dann an X zu senden. Das macht "killall" als default. Dieses Signal sorgt dafür, daß die betroffenen Programme noch "aufräumen" können (sofern es programmiert wurde).

    Wird darauf nicht reagiert und die Prozesse (Programme) laufen immer noch, hilt nur die brutale Methode, z.B.:
    "killall -s 9 <progname>"

    Aber das brauchst Du wahrscheinlich alles gar nicht ;)

    Gruß, mmi

Jetzt mitmachen!

Du hast noch kein Benutzerkonto auf unserer Seite? Registriere dich kostenlos und nimm an unserer Community teil!