AppleScript Neuling fragt nach...

Y

Ymmmot

Aktives Mitglied
Thread Starter
Dabei seit
23.01.2010
Beiträge
194
Reaktionspunkte
1
Hallo liebe Community. Ich habe vor, mich in AppleScript "reinzufuchsen". Ich kenne mich mit (X)HTML und CSS recht gut aus und finde, dass ich mich mal an eine Scriptsprache heranwagen könnte. Und da AppleScript (nachfolgend AS genannt) eine recht einfache Sprache ist, möchte ich gern mit dieser beginnen. Ich habe mir auch schon einige Tutorials und PDF's besorgt. Dennoch gibts - natürlich - Startprobleme. Hier meine erste - und sicher nicht letzte - Frage:
ich hätte gern ein Script als Prog gespeichert welches folgendes ausführt:
wenn ich das Prog anklicke, soll ein Dialogfeld erscheinen, wo ich gefragt werde, wann ich meinen Mac in den Ruhezustand versetzen will. Zudem soll im Feld ein Auswahlfeld dabei sein, wo man bspw. zwischen 15, 30 und 60 Minuten wählen kann. Wähle ich 30min aus und klicke dann "OK", soll der Mac in 30min in den Ruhezustand gehen. Klicke ich "Abbrechen", schließt sich das Dialogfeld und das Script ist beendet.
Wer hätte so viel Zeit und Lust, mir ein derartiges Script "vorzusetzen"? Damit könnte ich dann herum probieren oder erweitern oder... .

DANKE!!!
 
...

Hallo Ymmmot,

versuchs mal so:

Code:
set sleepTime to choose from list {"15", "30", "45", "60"} with prompt "Nach wieviel Minuten Ruhezustand?"
do shell script "pmset " & sleepTime user name "yourname" password "yourpassword" with administrator privileges

Gruß Andi
 
Danke. Ich versuche es...
 
Ich habe das Ganze noch mit dem Wert "1" ergänzt und bei pmset
Code:
-a hibernatemode 3
hinzugefügt. Es geschieht aber nach 1min nichts!
 
Zuletzt bearbeitet:
Kann mir jemand weiter helfen?
 
Ich habe das Ganze noch mit dem Wert "1" ergänzt
Anstelle der Variablen sleepTime ?
Die Wartezeit wird Dir in Andis Beispiel bereits in der ersten Zeile vorgegeben.
(bzgl. hibernatemode hab' ich leider keien Ahnung...)

Ciao
Farid
 
Hallo Ymmmot,

ich meine damit wird nur die Art des Ruhezustandes bestimmt.

z.B. sudo pmset -a hibernatemode 3
Wenn Du dann das Notebook (bei Batteriebetrieb) zuklappst geht es in den "DeepSleep"
Bestimmt hast Du im system.log eine Fehlermeldung.
Da fällt mir ein die bekommst Du auch bei "Abbrechen" da kein Wert übergeben wird. Deshalb solltest Du die Zeile do shell script in einen try -> end try Block stellen.

Gruß Andi
 
Hier mein Code:
Code:
set sleepTime to choose from list {"1", "15", "30", "45", "60"} with prompt "Nach wieviel Minuten Ruhezustand?"
try
	do shell script "pmset -a hibernatemode 1" & sleepTime user name "user" password "userpass" with administrator privileges
end try
Es passiert jedoch immer noch nichts. In der system.log sind keine Fehler ersichtlich.
 
Du hast statt "user" Deinen Benutzernamen und statt "userpass" Dein Passwort eingesetzt ?
(Sorry für die blöde Frage, aber man weiß ja nie ... ;) )

Ciao
Farid
 
Hallo Ymmmot,

oh - entschuldige bitte mein Fehler.

do shell script "pmset sleep " & sleepTime user name "user" password "userpass" with administrator privileges

Ich hatte das sleep vergessen. Beachte auch das Leerzeichen!
Aber ich glaube das ist nicht genau das was Du möchtest. Wenn Du nämlich arbeitest geht der Rechner nicht in den Ruhezustand.
Die Art des Ruhezustandes legst Du wie oben schon erwähnt fest. Der Befehl mit pmset setzt die Zeit unter Systemeinstellungen->Energiesparen.
Besser wäre wohl:

do shell script "shutdown -s +" & sleepTime user name "user" password "userpass" with administrator privileges

Der User muss Admin sein, weil Du den Befehl nur als root ausführen darfst (with administrator privileges).
Du solltest daher das Programm als "nur ausführbar" speichern.

Ich hoffe jetzt klappt's. ;)

Gruß Andi
 
Mit "shutdown -s +" funktionierts! Wenn ich allerdings "Abbrechen" klicke, kommt ne Fehlermeldung, dass der Zeitwert falsch ist. Ich habe mir auch ein Script zum Abbrechen des Shutdowns gebastelt:
Code:
display dialog "Shutdown wirklich abbrechen?" buttons {"Ja, mache!", "Nee!"} default button 2
if the button returned of the result is "Ja, mache!" then
	do shell script "killall shutdown" user name "user" password "userpass" with administrator privileges
else
	quit
end if
Das funktioniert so ganz gut.

@Andi: Hättest du noch eine Idee, wie ich die beiden Scripts in eins packen könnte?

Edit: Hab eine Teillösung gefunden:
Code:
display dialog "Shutdown" buttons {"Ja", "Nein", "Shutdown abbrechen"} default button 3
set the button_pressed to the button returned of the result
if the button_pressed is "Ja" then
	do shell script "shutdown -s +30" user name "user" password "userpass" with administrator privileges
else if the button_pressed is "Nein" then
	quit
else
	do shell script "killall shutdown" user name "user" password "userpass" with administrator privileges
end if
Allerdings kann ich mir da keine Zeiten (30min, 45min etc.) mehr auswählen :( . Könnte mir da jemand einen Tipp geben!? ;)
 
Zuletzt bearbeitet:
Hallo Ymmmot,

gehe ich recht in der Annahme, Du willst so etwas wie einen "Fernsehtimer"?

Code:
global sleepTime
set sleepTime to "irgendwann!"
property sleepTimeValue : ""
set checkShutdown to ""

try
	set checkShutdown to do shell script "ps -Aco command | grep shutdown"
end try

if checkShutdown = "" then
	
	set sleepTimeValue to choose from list {"6", "15", "30", "45", "60"} with title "Zeitgesteuerter Ruhezustand" with prompt "Bitte wählen Sie eine Zeit in Minuten!"
	try
		do shell script "shutdown -s +" & sleepTimeValue & "> /dev/null 2>&1 &" user name "admin" password "adminpass" with administrator privileges
		set sleepTime to (current date) + (sleepTimeValue * 60)
		
	on error
		quit
	end try
else
	try
		display dialog "Ruhezustand beginnt " & sleepTime with icon stop
		
	on error
		quit
	end try
end if

on idle
	
	set checkShutdown to ""
	
	try
		set checkShutdown to do shell script "ps -Aco command | grep shutdown"
	end try
	
	if checkShutdown = "" then
		quit
	end if
	
	try
                -- activate me -- Bei bedarf auskommentieren
		display dialog "Ruhezustand beginnt " & sleepTime with icon stop
		
	on error
		quit
		
	end try
	return (sleepTimeValue * 60 - 300)
	
end idle

on quit
	
	display alert "Zeitgesteuerter Ruhezustand wird abgebrochen!" as warning giving up after 2
	do shell script "killall shutdown > /dev/null 2>&1 &" user name "admin" password "adminpass" with administrator privileges
	continue quit
	
end quit

Wenn Du das als Programm "Nur ausführbar" (wegen Adminpasswort im Klartext)
und "Nicht automatisch beenden" (on idle) speicherst. Sollte 5 min vor Ablauf der Zeit eine Meldung kommen ob Du Abbrechen willst...
Müssten so ziemlich alle Fehler abgedeckt sein. Wenn das Script weiterläuft, Du shutdown killst und manuell einen neuen shutdown -s Befehl absetzt, zeigt er eine Falsche Zeit an - das kann ich nicht abfangen.
Gruß Andi
 
Ich höre ab & zu Hörspiele oder Musik zum Einschlafen und brauche dafür einen Timer, ja. Scheinbar gibts da nichts Gutes (iWannaSleep fährt nicht immer runter; das Boardtool aus der Systemsteuerung ist auch nicht besonders gut gemacht...)
Das scheint zu funktionieren. DANKE!!!!!!!!!!!!!!!!
 
Zuletzt bearbeitet:
Zurück
Oben Unten