Puedes configurar tu cuenta de Mac OS X para que se bloquee automáticamente la pantalla de manera que se requiera la contraseña después de cierto tiempo de inactividad, pero ¿puedes hacer lo mismo usando un horario (digamos a las 5:30 PM todos los días)? Algo parecido a lo que puedes hacer para que el ordenador se encienda/apague o se ponga/despierte del sueño a una hora determinada.
Respuestas
¿Demasiados anuncios?EDIT: Aunque no estoy seguro de por qué cron
no funciona para este caso de uso específico, esta respuesta es superada por la respuesta (actualmente más correcta) que utiliza launchd
.
Utilice crontab -e
en la aplicación de terminal para añadir /System/Library/CoreServices/Menu\ Extras/User.menu/Contents/Resources/CGSession -suspend
a la Crontab a la hora apropiada, así (para las 17:30):
30 17 * * * /System/Library/CoreServices/Menu\ Extras/User.menu/Contents/Resources/CGSession -suspend
Puede utilizar launchd
para hacer esto. Coloque el siguiente xml en un nuevo archivo de texto en ~/Library/LaunchAgents/
y llamarlo algo descriptivo con un sufijo de .plist
. Por ejemplo, el mío es ~/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>
Si quieres que se ejecute en el ciclo de energía actual (por ejemplo, no quieres reiniciar para que esto tenga efecto) utiliza launchctl load ~/Library/LaunchAgents/logoutAt1730.plist
para contar launchd
sobre el nuevo artículo. Debería cargarse automáticamente la próxima vez que te conectes.
Utilice launchctl list
y buscar la cadena de etiquetas (Logout at 5:30 PM) para validar que launchd
sabe del artículo.
He comprobado que esto funciona en mi estación de trabajo. No sé por qué cron
no lo hace.
Yo quería algo parecido, pero en lugar de bloquear siempre a una hora determinada, quería bloquear sólo en determinadas condiciones. El script que utilizaba para comprobar esas condiciones era disparado por cron, así que tenía el mismo problema.
Cuando intenté CGSession -suspend
en un cronjob, y me di cuenta de que cuando se activaba, Console.app registraba un error, diciendo que sólo Root y el usuario actual registrado podían activar un Fast User Switching. Así que mi solución: ejecutarlo como Root.
Así que en mi script, he utilizado lo siguiente, para bloquear el ordenador:
sudo /usr/bin/osascript -e 'tell application "System Events" to do shell script "/System/Library/CoreServices/Menu\\ Extras/User.menu/Contents/Resources/CGSession -suspend"'
¿Convulsivo? Sí. ¿Trabajando? Sí.