Push-Nachrichten von MacTechNews.de
Würden Sie gerne aktuelle Nachrichten aus der Apple-Welt direkt über Push-Nachrichten erhalten?
Forum>Entwickler>AppleScript, ShellScript, Passwort »fest verdrahten«?

AppleScript, ShellScript, Passwort »fest verdrahten«?

fronk
fronk28.03.1112:35
Hallo Leute,

ich habe mir ein AppleScript geschrieben, welches die Sleep-Zeiten des Rechners je nach Zustand von iTunes verändern soll. Also wenn iTunes abspielt, dann soll die Sleepzeit hochgesetzt werden (gibt es einen Wert für unendlich?) damit der Rechner nicht während des Abspielens einer Playlist einschläft. Spielt iTunes nichts ab, soll der Rechner innerhalb von 10 Minuten schlafen gehen. So habe ich 10 Minuten Zeit eine neue Playlist zu starten oder muss mir keine weitern Gedanken machen, dass der Rechner unnötig läuft. Wenn iTunes gar nicht gestartet ist, soll der Rechner eine Schlafzeit von 20 Minuten haben. Der Zustand von iTunes wird alle 60 Sekunden abgefragt.

Das Script funktioniert eigentlich problemlos. Nun ist es aber so, dass ich die Schlafzeiten über ein ShellScript einstellen lasse. Da ich nicht immer das Passwort eingeben möchte, habe ich dieses fest verdrahtet. Leider ist es aber so, dass ich nach einer längeren Ruhephase des Rechners trotzdem nach dem Passwort gefragt werde? Wie kann man das umgehen, irgendwelche Ideen? Ich habe gedacht, dies wäre eventuell nur eine zeitkritische Sache, daher habe ich zu Beginn des Scriptes einfach eine kleine Pause eingebaut. Die Passwort-Abfrage kommt aber sofort nach dem Aufwachen und nicht erst nach den eingestellten 60 Sekunden. Da wo jetzt "Passwort" steht, ist selbstverständlich das richtige Passwort drinnen.

Hier erst einmal das Script:


delay 60

repeat
if application "iTunes" is running then
tell application "iTunes"
try
if player state is playing then
do shell script ("sudo pmset -a sleep 180") password "Passwort" with administrator privileges
end if
end try
end tell

tell application "iTunes"
try
if player state is not playing then
do shell script ("sudo pmset -a sleep 10") password "Passwort" with administrator privileges
end if
end try
end tell
end if

if application "iTunes" is not running then
do shell script ("sudo pmset -a sleep 20") password "Passwort" with administrator privileges
end if
delay 60
end repeat

Vielen Dank schon jetzt für die hoffentlich zahlreichen Antworten …
„Haters, go away and hate yourself!“
0

Kommentare

_mäuschen
_mäuschen28.03.1114:31

Anstelle

sudo pmset -a sleep x

benutze
pmset force sleep x




unendlich Use a minutes argument of 0 to set the idle time to never.





0
fronk
fronk28.03.1115:16
_mäuschen

Habe Dein Tipp versucht, klappt leider nicht. Die Zeiten werden nicht verändert. Ich habe mal den Befehl »pmset force sleep 10« ins Terminal eingegeben. Passiert leider auch nix. Mit »sudo pmset -a sleep 10« und Passworteingabe geht es dann wieder …

Habe auch in die Man-Pages geschaut. Da steht folgendes: »pmset must be run as root in order to modify any settings.« da werde ich wohl leider nicht um sudo und Passwort herum kommen …
„Haters, go away and hate yourself!“
0
_mäuschen
_mäuschen28.03.1115:43

Kontrolliere doch bitte mal mit

pmset -g

die force Eingaben ohne sudo

Weil bei mir klappt das wunderbar.

0
Navier-Stokes
Navier-Stokes28.03.1115:45
Kannst Du nicht das passwort in eine Datei schreiben und die nach stdin umleiten? Also etwa:

sudo pmset -a sleep x < datei
„Computer Science is no more about computers than astronomy is about telescopes. (Edsger W. Dijkstra)“
0
fronk
fronk28.03.1115:59
_mäuschen

es scheint tatsächlich zu funktionieren. Bei der Terminalabfrage stimmen die Werte. Nur die GUI der Systemeinstellungen wird so leider gar nicht aktualisiert. Selbst nach einem erneuten Aufruf der Systemeinstellungen ist der Wert nicht der aktuelle Wert. Das klappte mit dem sudo Befehl ganz wunderbar. So wusste man immer gleich, welche Einstellung gerade aktuell ist … Wenn man das jetzt noch hinbekommen könnte, dass die Anzeige aktuell die tatsächlichen Werte anzeigt und auch aktualisiert, das wäre Klasse.
„Haters, go away and hate yourself!“
0
_mäuschen
_mäuschen28.03.1116:05

Ja, das ist so.

force - tells PM to immediately activate these settings. Does not write them to disk, and the settings


Deshalb zeigt Systemeinstellungen die Werte ab der Disk


Irgendwo hab ich noch einen Skript der das Passwort nach dem ersten Start abfrägt
und dann in sich selbst abspeichert. Somit nicht lesbar.

0
fronk
fronk28.03.1116:21
Navier-Stokes
sudo pmset -a sleep x < datei

… und »datei« soll dann eine einfache Text-Datei sein?
„Haters, go away and hate yourself!“
0
_mäuschen
_mäuschen28.03.1116:44

Als Programm speichern

set check_password to ""
property my_password : ""
set my_login to do shell script ("whoami")

if check_password is my_password then
    set check_password to display dialog ¬
        "Enter the password of user: " & my_login ¬
        buttons {"Cancel", "OK"} default button {"OK"} ¬
        default answer "" with icon 2 ¬
        giving up after 33 with hidden answer
    if gave up of check_password is true then
        set my_button to "Cancel"
        quit
    end if
    set my_password to the text returned of check_password
end if

(* und dann deine *)

do shell script ("sudo pmset -a sleep 0") password my_password with administrator privileges

0
fronk
fronk28.03.1117:08
_mäuschen

Vielen, vielen Dank bis hierherl. Das muss ich jetzt erst einmal ausgiebig testen. Ab wann muss ich das Passwort dann wieder eingeben? Nach jedem Neustart? Naja, werde ich ja sehen …

Nochmals vielen Dank!

Eine Sache ist mir noch aufgefallen, war aber auch schon vorher bei mir so, das Programm kann immer nur über ein »Force quit« beendet werden?
„Haters, go away and hate yourself!“
0
_mäuschen
_mäuschen28.03.1117:26
Ab wann muss ich das Passwort dann wieder eingeben?
Nachdem das Programm leicht verändert neu abgespeichert wurde.
Ein CR&BS genügt.

kann immer nur über ein »Force quit«

Wenn Q oder .
auch nicht funktioniert, dann zeige bitte den ganzen script.

0
fronk
fronk28.03.1117:52
Die Sache mit dem Beenden hat sich wahrscheinlich geklärt. Ich hatte die Zeile »exit repeat« auskommentiert, weil ich das Skript eigentlich immer im Hintergrund laufen lassen wollte. Ich dachte wenn ich es als ausführbaren Programm starte, dann sollte es sich auch wie ein ausführbares Programm beenden lassen. Scheint nicht so zu sein …
„Haters, go away and hate yourself!“
0

Kommentieren

Diese Diskussion ist bereits mehr als 3 Monate alt und kann daher nicht mehr kommentiert werden.