Display in Präsentationsmodus versetzen (MacBook)

Für was die Leute von Apple in Cupertino glauben wozu man ein MacBook braucht ist mir schleierhaft, ich brauche es uA dazu um jemanden bei einem Termin etwas zu zeigen. Da nervt es gewaltig, wenn das Display nach ein paar Minuten Inaktivität in den Sleep Modus geht und man es erst mit der Maus wieder wachrütteln muss. Windows hat dafür in den Energieoptionen diverse Modi, die man einstellen kann, darunter uA einen Präsentationsmodus. Mac OS hat (zumindest bis Snow Leopard) so was nicht, was ärgerlich ist aber das ist das charmante an Mac OS, man kann sich so was relativ leicht selber bauen.

Auch Mac OS bietet die Möglichkeit in den Systemeinstellungen → Energie sparen andere Werte zB für die Inaktivitätsgrenze zu setzen:

Die Abbildung oben zeigt die Mac OS Default Einstellungen. Man kann jetzt hier seine gewünschten Einstellungen vornehmen, ich zB setzte die beiden Schieberegler auf »Nie«, wenn ich das MacBook zum Präsentieren benötige. Mac OS speichert diese Einstellungen in der /Library/Preferences/SystemConfiguration/com.apple.PowerManagement.plist ab und hat ein Kommandozeilen Tool an Bord, mit welchem diese Preferences Datei editiert werden kann → pmset1)

Mac OS kann nun neben dem bekannten Default Status via »pmset« auch einen zuvor in der og PrefPane »Energie sparen« eingestellten benutzerdefinierten Wert wiederherstellen. Mittels »sudo pmset -a -g« kann man sich nun die derzeit aktuellen Werte der com.apple.PowerManagement.plist anzeigen lassen:

$ sudo pmset -a -g
Active Profiles:
Battery Power		1
AC Power		2*
Currently in use:
 lidwake	1
 halfdim	1
 sms		1
 hibernatefile	/var/vm/sleepimage
 gpuswitch	2
 disksleep	10
 sleep		10
 hibernatemode	3
 displaysleep	10
 ttyskeepawake	1
 acwake		0
 womp		1

Die derzeit aktuell eingestellten Werte werden in unterschiedlichen Profilen abgespeichert. Das aktuelle Profil wird mit einem Asterix (*) gekennzeichnet. Das Default Profil ist bei »AC Power« mit einer »2« gekennzeichnet. Verstelle ich nun die Einstellungen im PrefPane »Energie sparen« auf meine gewünschten Werte für den Präsentationsmodus, ändert sich neben den Werten der veränderten Parameter auch der Wert für das derzeit aktive Profil in »-1«:

$ sudo pmset -a -g
Active Profiles:
Battery Power		-1
AC Power		-1*
Currently in use:
 womp		1
 halfdim	1
 sms		1
 hibernatefile	/var/vm/sleepimage
 gpuswitch	2
 disksleep	10
 sleep		0 ← Neuer Wert »Nie« für den Ruhezustand des Computers
 hibernatemode	3
 ttyskeepawake	1
 displaysleep	0 ← Neuer Wert »Nie« für den Ruhezustand des Displays
 acwake		0
 lidwake	1

pmset ist nun in der Lage auf der Kommandozeile zwischen diesen beiden Profilen zu wechseln. Um das Default Profil zu aktivieren wird das Kommando »sudo pmset -c 2 -b 1 -u 1« verwendet und um das benutzerdefinierte Profil »Custom« zu aktivieren, der Befehl »sudo pmset -a -1«. Aber praktischer wie der Weg über die Systemsteuerung ist das nun auch nicht aber was man auf der Kommandozeile erledigen kann, kann man Skripten und ab hier wird es interessant.

Folgendes AppleScript als Programm (Presentation_Mode) abgespeichert, führt zur Laufzeit eine Abfrage der aktuellen Einstellungen bzgl. der PowerManagement Settings durch und wechselt das Profil von Default auf Custom oder umgekehrt:

Das Programm Presentation_Mode führt im ersten Schritt das Kommando (pmset -a -g) aus und ermittelt das aktuelle Profil. Ist das aktuelle Profil gleich »2« (2 ⇔ Default Settings) wird der Präsentations Modus aktiviert, indem die Settings auf die zuvor im PrefPane »Energie sparen« eingestellten Werte gesetzt werden (pmset -a -1) und der Bildschirmschoner wird deaktiviert (defaults -currentHost write com.apple.screensaver idleTime 0). Des Weiteren wird beim Aktivieren des Präsentations Modus das Programm pmcheck gestartet, welches ein aktives Programm Icon als visuellen Hinweis auf den aktiven Präsentations Modus im Dock platziert. Das Programm pmcheck wurde mit der Option sich nicht automatisch zu beenden abgespeichert und bleibt solange aktiv, bis das Programm Presentation_Mode erneut aufgerufen wird, um den Präsentations Modus wieder zu verlassen. Dadurch wird im Dock ein aktives Icon platziert, welches dem Benutzer einen visuellen Hinweis auf den aktiven Präsentationsmodus bietet.

Code

set currentStatus to do shell script "pmset -a -g"
set toStar to offset of "*" in currentStatus
set currentProfile to character (toStar - 1) in currentStatus as string
if currentProfile is equal to "2" then
	do shell script "pmset -a -1"
	do shell script "defaults -currentHost write com.apple.screensaver idleTime 0"
	try
		tell application ":Library:Application Support:Prontosystems:pmcheck.app" to run
	end try
else
	do shell script "pmset -c 2 -b 1 -u 1"
	do shell script "defaults -currentHost write com.apple.screensaver idleTime 600"
	try
		tell application ":Library:Application Support:Prontosystems:pmcheck.app" to quit
	end try
end if

Damit sich das System nach einem eventuellen Absturz wieder auf die Default Einstellungen zurückstellt, habe ich ein launchd-Startskript org.prontosystems.pmcheck.plist in /Library/LaunchDaemons angelegt, welches beim Starten des Systems das Skript /usr/local/scripts/pm2default.sh ausführt, welches wiederum die PowerManagement Settings auf Default stellt.

/Library/LaunchDaemons/org.prontosystems.pmcheck

<?xml version="1.0" encoding="UTF-8"?>                       
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST
1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
        <key>Label</key>
            <string>Set_Default_PMSettings</string>
        <key>ProgramArguments</key>
            <array>
                <string>/usr/local/scripts/pm2default.sh</string>
            </array>
        <key>RunAtLoad</key>
            <true/>
        <key>UserName</key>
            <string>root</string>
        <key>GroupName</key>
            <string>wheel</string>
</dict>
</plist>

/usr/local/scripts/pm2default.sh

#!/bin/bash
 
/usr/bin/pmset -c 2 -b 1 -u 1

-- pronto 2010/07/25 22:26

Resources: