Fragen zu UNIX programmierung ( in c )

  • 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 ;)


  • 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?

  • 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