scripter le Terminal

Daffy

Membre actif
26 Avril 2003
109
4
51
Bonjour,
J'aimerais pouvoir crééer un applescript qui force le reboot de la machine (sans rencontrer les habituels "fermeture de session annulée par...").
Via le Terminal, je peur lancer un reboot en login root.
Mais en applescript/Terminal, je sais lancer le "login root", le "reboot" mais pas répondre au password.
Quelqu'un aurait-ili déjà fait cela ? Ou utilise-t-il une autre alternative ?
Michael
 
A mon avis, tu n'y arriveras jamais via AppleScript, ou alors ce serait creer une belle faille de sécurité.

La solution serait plutôt de passer par crontab qui permet de déclencher des scripts régulièrement avec les droits utilisateurs que tu veux (y compris root si besoin est)

Bob
 
Voila tu peux tout faire en applescript ces methodes ont leurs
équivalents

cherche les même noms dans la doc

mais tu seras toujours sujet au cancel si une app demande la sauvegarde et heureusement

<font class="small">Code:</font><hr /><pre>

#include &lt;stdio.h&gt;

int main (int argc, const char *argv []) {

OSStatus error = noErr;

if(argv[1] != NULL){

if(strcmp(argv[1] , "reboot") ==0 ){

error = SendAppleEventToSystemProcess(kAERestart);

if(error == noErr){
DisplayMessage("Computer is going to restart\n");
}else{
DisplayMessage("Computer wouldn't restart\n");
}

}else if(strcmp(argv[1] , "shutdown") ==0 ){

error = SendAppleEventToSystemProcess(kAEShutDown);

if (error == noErr){
DisplayMessage("Computer is going to shutdown\n");
}else{
DisplayMessage("Computer wouldn't shutdown\n");
}
}else if(strcmp(argv[1] , "logout") ==0 ){

error = SendAppleEventToSystemProcess(kAEQuitApplication);
//error = SendAppleEventToSystemProcess(kAEReallyLogOut);


if (error == noErr){
DisplayMessage("Computer is going to logout\n");
}
else{
DisplayMessage("Computer wouldn't logout\n");
}
}else if(strcmp(argv[1] , "sleep") ==0 ){

error = SendAppleEventToSystemProcess(kAESleep);

if (error == noErr){
DisplayMessage("Computer is going to sleep\n");
}
else{
DisplayMessage("Computer wouldn't sleep\n");
}
}else{

DisplayMessage("invalid option\n");
}

}else{

DisplayMessage("no option ?\nsleep | reboot | logout | shutdown");
}
return 0;
}

OSStatus SendAppleEventToSystemProcess(AEEventID EventToSend)
{

AEAddressDesc targetDesc;
static const ProcessSerialNumber kPSNOfSystemProcess = { 0, kSystemProcess };
AppleEvent eventReply = {typeNull, NULL};
AppleEvent appleEventToSend = {typeNull, NULL};

OSStatus error = noErr;

error = AECreateDesc(typeProcessSerialNumber, &amp;kPSNOfSystemProcess,
sizeof(kPSNOfSystemProcess), &amp;targetDesc);

if (error != noErr)
{
return(error);
}

error = AECreateAppleEvent(kCoreEventClass, EventToSend,
&amp;targetDesc, kAutoGenerateReturnID,
kAnyTransactionID, &amp;appleEventToSend);

AEDisposeDesc(&amp;targetDesc);

if (error != noErr)
{
return(error);
}

error = AESend(&amp;appleEventToSend, &amp;eventReply, kAENoReply,
kAENormalPriority, kAEDefaultTimeout,
NULL, NULL);

AEDisposeDesc(&amp;appleEventToSend);

if (error != noErr)
{
return(error);
}

AEDisposeDesc(&amp;eventReply);

return(error);
}


</pre><hr />