geplante Kontosperre Mac OS X

Sie können Ihr Mac OS X-Konto so einstellen, dass der Bildschirm automatisch gesperrt wird, sodass das Kennwort nach einer bestimmten Zeit der Inaktivität erforderlich ist, aber können Sie dasselbe mit einem Zeitplan tun (z. B. jeden Tag um 17:30 Uhr)? So wie Sie den Computer zu einer bestimmten Zeit ein- / ausschalten oder in den Schlafmodus versetzen / aus dem Schlafmodus aufwachen können.

Antworten (3)

Sie können launchddazu verwenden. Fügen Sie die folgende XML-Datei in eine neue Textdatei ein ~/Library/LaunchAgents/und nennen Sie sie etwas Beschreibendes mit einem Suffix von .plist. Meine ist zum Beispiel ~/Library/LaunchAgents/logoutAt1730.plist.

<?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
    <plist version="1.0">
    <dict>
        <key>Label</key>
        <string>Logout At 5:30 PM</string>
        <key>ProgramArguments</key>
        <array>
            <string>/System/Library/CoreServices/Menu Extras/User.menu/Contents/Resources/CGSession</string>
            <string>-suspend</string>
        </array>
        <key>StartCalendarInterval</key>
        <dict>
            <key>Hour</key>
            <integer>17</integer>
            <key>Minute</key>
            <integer>30</integer>
        </dict>
    </dict>
    </plist>

Wenn Sie möchten, dass es im aktuellen Einschaltzyklus ausgeführt wird (z. B. wenn Sie nicht neu starten möchten, damit dies wirksam wird), verwenden Sie , um über das neue Element launchctl load ~/Library/LaunchAgents/logoutAt1730.plistzu informieren . launchdEs sollte automatisch geladen werden, wenn Sie sich das nächste Mal anmelden.

Verwenden launchctl listund suchen Sie nach der Bezeichnungszeichenfolge (Abmelden um 17:30 Uhr), um zu bestätigen, dass launchddas Element bekannt ist.

Ich habe überprüft, dass dies auf meiner Workstation funktioniert. Ich weiß nicht, warum cronnicht.

Ja, das hat funktioniert, danke! Benennen Sie die Datei einfach suspend statt logout. Jetzt muss ich nur noch eine Benutzerbestätigung mit einem Popup erhalten, falls das möglich ist – ich werde eine weitere Frage öffnen: apple.stackexchange.com/q/49946/8699
Hier ist eine neue Frage aufgetaucht, FYI: apple.stackexchange.com/q/51006/8699

BEARBEITEN: Obwohl ich nicht sicher bin, warum es cronfür diesen speziellen Anwendungsfall nicht funktioniert, wird diese Antwort durch die (derzeit korrektere) Antwort mit ersetzt launchd.

Verwenden Sie crontab -ein der Terminalanwendung, um Crontab/System/Library/CoreServices/Menu\ Extras/User.menu/Contents/Resources/CGSession -suspend zum richtigen Zeitpunkt hinzuzufügen, etwa so (für 17:30 Uhr):

30 17 * * * /System/Library/CoreServices/Menu\ Extras/User.menu/Contents/Resources/CGSession -suspend

Danke für den Tipp, funktioniert bei mir nicht, aber das ist eine andere Frage. (Sollte es nicht 17 statt 19 für 17 Uhr sein?)
Ah ja, ich habe es spontan gemacht. Gutes Auge. Ich habe gerade den Befehl /System/Library/CoreServices/Menu\ Extras/User.menu/Contents/Resources/CGSession -suspend selbst ausprobiert und es hat funktioniert. Welches Betriebssystem verwenden Sie?
Löwe. Der Befehl selbst hat bei mir auch von selbst funktioniert, aber ich habe versucht, eine Crontab mit einer Zeit ein paar Minuten in der Zukunft zu setzen, und es ist nichts passiert, als die angegebene Zeit kam.
Hm, ich habe das gleiche Problem. Ich probier es heute Abend aus. Vielleicht würde es als Skript funktionieren?
Kein Glück dort. Ich denke, der Benutzer, der die Cronjobs ausführt (root), kann Suspend nicht für einen anderen Benutzer aufrufen, zumindest nicht mit diesem Befehl.
Sie können dies mit root tun, indem Sie su [Benutzername] /System/Library/CoreServices/Menu\ Extras/User.menu/Contents/Resources/CGSession -suspend verwenden
Versuchte diesen Befehl in crontab, auch dort kein Glück. Ist dafür nicht die Eingabe eines Passwortes erforderlich?
Es sollte nicht als root sein.
Versuchen Sie vielleicht, dem Befehl „sudo -u Benutzername“ voranzustellen.

Ich wollte etwas Ähnliches, aber anstatt immer zu einer bestimmten Zeit zu sperren, wollte ich nur unter bestimmten Bedingungen sperren. Das Skript, mit dem ich diese Bedingungen überprüft habe, wurde von cron ausgelöst, also hatte ich das gleiche Problem.

Als ich CGSession -suspendeinen Cronjob ausprobierte und bemerkte, dass Console.app beim Auslösen einen Fehler protokollierte, der besagte, dass nur root und der aktuell angemeldete Benutzer einen schnellen Benutzerwechsel auslösen könnten. Also meine Lösung: Als root ausführen.

Also habe ich in meinem Skript Folgendes verwendet, um den Computer zu sperren:

sudo /usr/bin/osascript -e 'tell application "System Events" to do shell script "/System/Library/CoreServices/Menu\\ Extras/User.menu/Contents/Resources/CGSession -suspend"'

Verworren? Ja. Arbeiten? Positiv!

Die direkte Verwendung sudo .../CGSession -suspend(ohne Verwendung von AppleScript) hat dann auch nicht funktioniert?
Ja, das tat es nicht. Keine Ahnung warum.