Nieuws:

Welkom, Gast. Alsjeblieft inloggen of registreren.
Heb je de activerings-mail niet ontvangen?

Auteur Topic: [Opgelost] Script als root uitvoeren 3 minuten na opstart  (gelezen 2038 keer)

Offline Johan van Dijk

  • Administrator
    • johanvandijk
[Opgelost] Script als root uitvoeren 3 minuten na opstart
« Gepost op: 2011/12/20, 16:21:02 »
Weet iemand wat de handigste manier is om automatisch een script uit te voeren, 3 minuten nadat de computer is opgestart?
Ik wil een aantal stroombesparende instellingen instellen, maar pas nadat de desktop volledig geladen is zodat het opstarten niet vertraagd wordt. De commando's moeten als root uitgevoerd worden, dus een commando opnemen in de "startup applications" van Gnome gaat niet werken.

Is het handig om de commando's op te nemen in /etc/rc.local?
Ik zat dan te denken aan iets als dit:
sleep 180; echo powersave > /sys/module/pcie_aspm/parameters/policy &

Een andere optie is om een cronjob voor root te maken.
@reboot sleep 180; echo powersave > /sys/module/pcie_aspm/parameters/policy

Wat is de netste manier om dit te doen?
« Laatst bewerkt op: 2011/12/20, 22:19:47 door Johan van Dijk »

Re: Script als root uitvoeren 3 minuten na opstart
« Reactie #1 Gepost op: 2011/12/20, 17:23:09 »
Een mogelijkheid is om een setuid-script te gebruiken.

#!/bin/bash
echo powersave > /sys/module/pcie_aspm/parameters/policy
Zet deze code in pakweg /usr/sbin/powersave.sh; chown root:root, chmod 4755, en zet 'm in de startup applications.

Meer informatie over setuid: http://en.wikipedia.org/wiki/Setuid
I use a Unix-based system, that means I'll get laid as often as I have to reboot.
LibSylph
SeySayux.net

Offline Johan van Dijk

  • Administrator
    • johanvandijk
Re: Script als root uitvoeren 3 minuten na opstart
« Reactie #2 Gepost op: 2011/12/20, 17:48:03 »
line 2: /sys/module/pcie_aspm/parameters/policy: Permission denied

Ik dacht al dat het onmogelijk was om het setuid bitje op scripts toe te passen, en blijkbaar kan dat in Ubuntu dus ook niet.
Nu kan ik wel een klein programmaatje in C schrijven die dan weer het script aanroept, en dan het setuid bit voor dat C programma instellen, maar of dat dan een betere en veiligere optie is betwijfel ik.

Als C programma zou dit voldoen?
#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <unistd.h>

int main()
{
   setuid( 0 );
   system( "/path/to/script.sh" );

   return 0;
}

Re: Script als root uitvoeren 3 minuten na opstart
« Reactie #3 Gepost op: 2011/12/20, 19:14:37 »
Je kan ook gewoon rechtstreeks vanuit C naar het gewenste bestand schrijven.

#include <stdio.h>

int main(void) {
    FILE* out = fopen("/sys/module/pcie_aspm/parameters/policy", "w");
    if(!out) {
        perror("powersave");
        return EXIT_FAILURE;
    }
    fputs("powersave\n", out);
    fflush(out);
    fclose(out);

    return EXIT_SUCCESS;
}

Toch lichtelijk veiliger naar mijn dunken.
« Laatst bewerkt op: 2011/12/20, 19:16:08 door SeySayux »
I use a Unix-based system, that means I'll get laid as often as I have to reboot.
LibSylph
SeySayux.net

Offline vanadium

  • Lid
Re: Script als root uitvoeren 3 minuten na opstart
« Reactie #4 Gepost op: 2011/12/20, 19:26:42 »
Is het handig om de commando's op te nemen in /etc/rc.local?
Dat lijkt mij de meest logische en correcte aanpak. Misschien moet het met een constructie als:
sh -c "sleep 180; echo powersave > /sys/module/pcie_aspm/parameters/policy" &
Je opstartscript wordt niet opgehouden door het sleep commando, omdat dat mee in de achtergrond opgestart wordt. En het maakt niet veel uit waar het commando in rc.local staat, begin, einde of halfweg.

Re: Script als root uitvoeren 3 minuten na opstart
« Reactie #5 Gepost op: 2011/12/20, 19:38:32 »
Is het handig om de commando's op te nemen in /etc/rc.local?
Dat lijkt mij de meest logische en correcte aanpak. Misschien moet het met een constructie als:
sh -c "sleep 180; echo powersave > /sys/module/pcie_aspm/parameters/policy" &
Je opstartscript wordt niet opgehouden door het sleep commando, omdat dat mee in de achtergrond opgestart wordt. En het maakt niet veel uit waar het commando in rc.local staat, begin, einde of halfweg.
Die aanpak gaat er van uit dat er binnen de 180 seconden na het bereiken van het grafische runlevel (en dus het uitvoeren van /etc/rc.local, wat gebeurt als laatste). Dit kan niet altijd gewenst zijn. De setuid-aanpak is hierin accurater.
I use a Unix-based system, that means I'll get laid as often as I have to reboot.
LibSylph
SeySayux.net

Re: Script als root uitvoeren 3 minuten na opstart
« Reactie #6 Gepost op: 2011/12/20, 22:04:57 »
Je zou het script in /etc/gdm/PostLogin/ kunnen zetten, dan wordt het uitgevoerd nadat je ingelogd bent. (er van uitgaande dat je gdm gebruikt, andere varianten hebben vast iets soortgelijks)
URD - http://www.urdland.com - Usenet Resource Downloader

Offline Johan van Dijk

  • Administrator
    • johanvandijk
Re: Script als root uitvoeren 3 minuten na opstart
« Reactie #7 Gepost op: 2011/12/20, 22:14:44 »
Dan is een script toch handiger dan een C programma denk ik.
Makkelijker (voor mij in ieder geval) om aan te passen en bij te houden aangezien ik meer wil dan alleen wat schrijven naar bestandjes in /sys.
De timing boeit niet zoveel, de desktop en programma's die ik automatisch start zijn binnen anderhalve minuut wel gestart.

Nu moet ik alleen nog even bedenken welke commando's alleen uitgevoerd worden als de desktop start (via GDM dus), of dat ik het ook wil als ik niet inlog in de desktop (via rc.local).

Allen hartelijk bedankt, ik ga er verder mee aan de slag :)

Offline koen_92

  • Lid
Re: [Opgelost] Script als root uitvoeren 3 minuten na opstart
« Reactie #8 Gepost op: 2011/12/21, 22:48:34 »
En als je dat eerste script ipv via setuid via sudo uitvoert?

Edit je sudoers file met:
$ sudo visudo

En zet er dit in:
gebruikersnaam ALL = NOPASSWD: /usr/sbin/powersave.sh
Nu kun je dit commando met sudo aanroepen, zonder dat je je password hoeft op te geven. En dit kun je dan weer doen nadat de Gnome-sessie is geladen.

Re: [Opgelost] Script als root uitvoeren 3 minuten na opstart
« Reactie #9 Gepost op: 2011/12/22, 11:09:07 »
En als je dat eerste script ipv via setuid via sudo uitvoert?

Edit je sudoers file met:
$ sudo visudo

En zet er dit in:
gebruikersnaam ALL = NOPASSWD: /usr/sbin/powersave.sh
Nu kun je dit commando met sudo aanroepen, zonder dat je je password hoeft op te geven. En dit kun je dan weer doen nadat de Gnome-sessie is geladen.

Euhm, hoe denk je dat sudo werkt?

macbook:~ frank$ ls -l $(which sudo)
-r-s--x--x  1 root  wheel  327920 13 okt 21:48 /usr/bin/sudo

Yup, setuid.
I use a Unix-based system, that means I'll get laid as often as I have to reboot.
LibSylph
SeySayux.net