Comando de pantalla de bloqueo One-Liner

51

Estoy intentando averiguar si existe algún tipo de línea de comando equivalente de una línea que replique la funcionalidad idéntica exacta de la opción de menú 'Bloquear pantalla' disponible a través de la aplicación Keychain en OS X 10.6

Estoy al tanto de todas las soluciones "habituales" (las preferencias de suspensión / salvapantallas que requieren una contraseña para la reactivación) pero estas no son adecuadas para mí.

También soy consciente de esta opción:

/System/Library/CoreServices/Menu\ Extras/user.menu/Contents/Resources/CGSession -suspend

que tampoco es adecuado para mí.

La funcionalidad perfecta es la opción 'Bloquear pantalla', sin embargo, todavía no he encontrado una forma elegante de llamarlo.

En este momento, estoy llamando a través de Automator, ¡lo cual no es elegante!

He leído mucho sobre este tema y tengo entendido que nadie ha encontrado el 'santo grial' pero me preguntaba si eso podría haber cambiado.

    
pregunta user40433 26.01.2013 - 14:21

18 respuestas

39

En OS X 10.9 y posteriores:

pmset displaysleepnow

Fuente: ¿Cómo bloquear la pantalla del MacBook Air?

    
respondido por el jordanbtucker 04.12.2014 - 21:06
39

Nota: esta solución es única porque utiliza la funcionalidad de estado de la barra de menús de Keychain Access, pero no requiere que habilite la opción Show keychain status in menu bar como Los métodos de AppleScript hacen.

También estaba buscando una solución para esto. Hoy simplemente tuve algo de tiempo para jugar y encontré una manera de llamar a la funcionalidad mediante programación desde el complemento del menú de llavero. Esta solución funciona perfectamente siempre que Apple no cambie las partes relevantes en el complemento de menú de llavero. Puede crear un pequeño binario para bloquear su pantalla pegando esto en su terminal ...

# Do our work in the temporary directory that gets cleaned on boot
cd /tmp

# Create the source file
cat > main.m <<END_OF_FILE

#import <objc/runtime.h>
#import <Foundation/Foundation.h>

int main () {
    NSBundle *bundle = [NSBundle bundleWithPath:@"/Applications/Utilities/Keychain Access.app/Contents/Resources/Keychain.menu"];

    Class principalClass = [bundle principalClass];

    id instance = [[principalClass alloc] init];

    [instance performSelector:@selector(_lockScreenMenuHit:) withObject:nil];

    return 0;
}

END_OF_FILE

# Compile the source file
clang -framework Foundation main.m -o lockscreen

Ejecuta el programa escribiendo:

./lockscreen
    
respondido por el mrArkwright 09.03.2014 - 23:11
14

Uso Alfred →

La tecla de acceso rápido universal me permite activarlo mediante un teclado.

    
respondido por el Vaibhav Bajpai 07.02.2013 - 21:22
11

La respuesta de @Bart Arondson utiliza algunos códigos de teclas para navegar por el menú de la pantalla de bloqueo de llavero.

Todos los códigos clave se pueden omitir usando GUI Scripting para golpear los elementos del menú directamente.

El uso de códigos de tecla para navegar por los menús puede ser impredecible. Y por mucho que no me gusten las secuencias de comandos de GUI, ya que también se puede golpear y extrañar, pero en este caso es menos impreciso.

Este código de AppleScript: (actualizado el 18/05/2016, procedente de Uso de AppleScript para pantalla de bloqueo , confirmado trabajando en El Capitán)

tell application "System Events" to tell process "SystemUIServer"
    tell (menu bar item 1 of menu bar 1 where description is "Keychain menu extra")
        click
        click menu item "Lock Screen" of menu 1
    end tell
end tell

Se puede utilizar en una acción de Automator 'Run Applescript' en un flujo de trabajo del servicio de Automator.

Luegoledasalserviciounatajodeteclado.Delaformahabitualenlosatajosdeteclado.

El Servicio:

    
respondido por el markhunte 14.06.2013 - 21:28
7

Establezca las preferencias para bloquear la pantalla cuando el protector de pantalla esté activo.

Luego puede usar este comando de terminal para iniciar el protector de pantalla.

/System/Library/Frameworks/ScreenSaver.framework/Resources/ScreenSaverEngine.app/Contents/MacOS/ScreenSaverEngine

Por lo que puedo decir, esto es exactamente lo que hace el elemento del menú Llavero.

    
respondido por el Ɱark Ƭ 26.01.2013 - 15:08
3

Creo que la respuesta a tu pregunta es "No, no hay una forma de línea de comandos para hacer esto".

Debido a que este es un elemento de la barra de menú, no es algo a lo que se pueda acceder fácilmente usando Keyboard Maestro u otra herramienta similar.

Sin embargo, si no es reacio a una solución que utiliza una aplicación de terceros, QuickLock te permitirá hacer esto.

Es una aplicación gratuita (se aceptan donaciones) que te permitirá asignar un atajo de teclado para bloquear la pantalla. También hay un elemento de la barra de menú en el que puede hacer clic para bloquear la pantalla.

La aplicación te permitirá establecer una contraseña (aparte de la contraseña de tu cuenta).

No requiere el uso de una contraseña con el protector de pantalla, todo está completamente separado.

Puede ver un video de él en acción en enlace

p.s. cuando la pantalla esté bloqueada, escriba su contraseña para desbloquearla. Estaba confundido porque esperaba ver un campo de contraseña. No hay ninguno. Sólo tienes que escribir la contraseña.

p.p.s. Solo lo he usado durante unos minutos, por lo que puede que no tenga conocimiento de otros problemas, pero parece que se ajustan a los requisitos.

    
respondido por el TJ Luoma 29.01.2013 - 20:53
3

El Mac no está diseñado para proporcionarle esa opción. Sin embargo, este artículo explica una solución alternativa utilizando QuickSilver. Si bien no puedo entender por qué no le gusta la solución que Apple ofrece de forma nativa, le deseo suerte para encontrar una solución.

    
respondido por el bispymusic 02.03.2013 - 19:09
2

Utilicé el código publicado anteriormente por jnk. Luego usé appify para convertirlo en una aplicación OS X, mathiasbynens.be/notes/shell-script-mac-apps . Luego usé Quicksilver para asignar mi propio método abreviado de teclado (elegí cmd + L). La terminal no se abre / permanece abierta (como a algunos les preocupaba) con la configuración, porque en su lugar estoy lanzando una aplicación OS X.

  1. Sigue la respuesta anterior por jnk, Comando de la pantalla de bloqueo One-Liner
  2. Use appify para convertirla en una aplicación OS X siguiendo el enlace de arriba en mi resumen.
  3. Instalar Quicksilver.
  4. Use Quicksilver para asignar un método abreviado de teclado para iniciar la nueva aplicación. Está bajo 'Desencadenadores'. Disfruto de Quicksilver porque me encanta tener atajos de teclado / teclas de acceso rápido para lanzar aplicaciones y sitios web en OS X.
respondido por el jbrock 06.02.2015 - 00:24
2

Una forma rápida de suspender su máquina a través de la línea de comandos con la ayuda de AppleScript es

osascript -e 'tell application "Finder" to sleep'

Eso no bloquea tu pantalla a menos que tengas configurada para requerir una contraseña inmediatamente que no me gusta hacer. Solo lo estoy notando para la posteridad.

    
respondido por el Bruno Bronosky 01.03.2017 - 20:49
1

También me encontré con este problema. /System/Library/CoreServices/Menu\ Extras/user.menu/Contents/Resources/CGSession -suspend hace que el sistema suspenda todas las tareas, en lugar de bloquear la pantalla.

JordanBtucker estaba en el camino correcto, aquí está la función completa que uso:

lockscr() {
  if [ "$(defaults read com.apple.screensaver askForPasswordDelay 2>/dev/null)" ]; then
    local Olddelay="$(defaults read com.apple.screensaver askForPasswordDelay)"
    defaults write com.apple.screensaver askForPasswordDelay -int 0 && \
        pmset displaysleepnow
    defaults write com.apple.screensaver askForPasswordDelay -int "${Olddelay}"
  else
    defaults write com.apple.screensaver askForPasswordDelay -int 0 && \
        pmset displaysleepnow
    defaults delete com.apple.screensaver askForPasswordDelay
  fi;
}

Esto conserva al usuario su propia configuración pero bloquea la pantalla de forma segura :)

    
respondido por el jorvi 27.06.2017 - 15:32
1

Alias fácil. Agregue esto a su bashrc

alias afk="osascript -e 'tell application \"System Events\" to keystroke \"q\" using {command down,control down}'"

escribe afk en tu terminal para ejecutar.

    
respondido por el Aritro Paul 24.11.2018 - 16:57
0

Uso BetterTouchTool para ese propósito y asigné un método abreviado de teclado a "Cambiar a pantalla de inicio de sesión" (que es la pantalla de bloqueo ): no cumple con el requisito de la línea de comandos pero puede ser útil para usted de todos modos.

    
respondido por el iolsmit 31.01.2013 - 18:34
0

No estoy seguro de entender tu problema aquí. Si necesita una contraseña en el protector de pantalla, no impedirá que los procesos se ejecuten o le impedirá acceder a su Mac de forma remota. Tengo esta opción configurada (utilizando ControlPlane para activarlo en el trabajo y desactivarlo en casa) y una vez el sistema no ha respondido a una conexión de Escritorio remoto, VNC o SSH. En todos los casos donde se requiere acceso a GUI, solo necesito ingresar la contraseña; SSH usa un par de claves por lo que no se solicita ninguna contraseña. Si no desea que las aplicaciones se duerman, asegúrese de que la configuración de energía del sistema sea tal que no entrará en suspensión del sistema antes de que regrese. Sólo establece el tiempo de espera de suspensión en un largo retraso. Si simplemente no quiere que se moleste en ingresar una contraseña cuando está sentado frente a la computadora y trabajando, aumente el tiempo de espera del protector de pantalla antes de que se active, o agregue un retraso de 1 minuto entre el protector de pantalla y el indicador de contraseña para que tengas la oportunidad de atraparlo antes de que te bloquee.

Uso ctrl-shift-eject para bloquear la pantalla. Es rápido, simple y funciona. Esta es la forma integrada de bloquear la pantalla. Es probable que nadie ofrezca una alternativa simplemente porque replicar las funciones que ya están integradas en el sistema operativo es demasiado redundante para que cualquiera pueda dedicar mucho tiempo en la búsqueda.

De todos modos, por lo que puedo decir, no hay una opción de "pantalla de bloqueo" en Keychain en 10.8, por lo que su solución preferida no existirá si alguna vez realiza una actualización. Edit: Not not not esto en las preferencias de llavero; Sí, todavía está allí en 10.8.

Si está utilizando Automator para esto, ¿no puede simplemente empaquetar el script como una aplicación y asignar un combo de teclas de acceso rápido o dejarlo en el Dock para un acceso rápido?

    
respondido por el dr.nixon 02.03.2013 - 19:01
0

Al igual que el interrogador, estaba buscando una forma de usar la pantalla de bloqueo de llaveros de forma rápida.

Combinando el conocimiento de una antigua sugerencia de Mac OS X y algunos ejemplos, se me ocurrió lo siguiente :

Primero, siga los pasos de la sugerencia de Mac OS X vinculada para agregar un atajo de teclado para el bloqueo de llaveros Funcionalidad de pantalla.

Para mí (en 10.8.4) esto no resolvió el problema ya que tuve que presionar ctrl + F8 para cambiar el enfoque a la barra de estado, presione < Haga clic en kbd> abajo para abrir la barra de menús de Llavero y luego presione ctrl + F9 para bloquear la pantalla. He automatizado este proceso con el siguiente Applescript:

# Press ^F8
tell application "System Events"
    key code 100 using control down
end tell

# Press "down"
tell application "System Events"
    key code 125
end tell

# Press ^F9
tell application "System Events"
    key code 101 using control down
end tell

Abra Automator, cree un nuevo Servicio, agregue un módulo Run Applescript , copie y pegue el código anterior y guarde el Servicio de Automator con el nombre que desee. Ahora vaya a Métodos abreviados de teclado en las Preferencias del sistema y agregue un método abreviado de teclado para el Servicio Automator recién creado. Puse el mío en ctrl + cmd + L .

Ahora presiona el atajo de teclado en cualquier aplicación y tu pantalla se bloqueará instantáneamente.

Para aquellos que se preguntan por qué no seguir con otros métodos, he aquí mi opinión sobre ellos:

  • Cambio rápido de usuario / bloqueo de pantalla
    Con este método me desconecto de mi red corporativa WPA2. Esto no es bueno, ya que la reconexión a veces lleva mucho tiempo.

  • Salvapantallas + contraseña
    Replica la funcionalidad pero esto significa que si mi computadora portátil está inactiva durante algún tiempo mientras leo un papel al lado, la pantalla se bloqueará cuando quiera volver a usarla. Esto es indeseable. Acoplar este método con un hot-corner tiene el efecto secundario de que usuarios inexpertos de Mac pueden activar el hot-corner por accidente y provocar un bloqueo de pantalla. A veces también me topo con un hot-corner por accidente, lo que detendría considerablemente mi flujo de trabajo.

  • Aplicaciones de terceros
    Todos están bien, pero ¿por qué ejecutar una aplicación de la tercera parte si está disponible de forma nativa en el sistema operativo?

respondido por el Saaru Lindestøkke 14.06.2013 - 17:54
-1

Utilizo la configuración de la contraseña del protector de pantalla con una pulsación de tecla (Ctrl + Shift + Eject) en 10.6.8, y por lo que puedo ver, hace lo mismo que el elemento de la pantalla de bloqueo del icono de la barra de tareas Acceso a Llavero.

Sé que esto es similar a algunas de las otras respuestas, pero en lugar del "hot corner", utiliza una pulsación de tecla, lo que es más conveniente para mí.

Esta solución se describe con más detalle aquí, de donde la obtuve: enlace

Llevo varios años utilizando esto sin problemas.

    
respondido por el nwinkler 30.01.2013 - 08:48
-1

Bueno, solo combina dos de las respuestas anteriores. Ejecuta este comando:

open -a /System/Library/Frameworks/ScreenSaver.framework//Versions/A/Resources/ScreenSaverEngine.app

Después de haber configurado la Seguridad & Preferencias de privacidad para solicitar una contraseña de inmediato. Cree un alias para su shell si desea que el comando sea más fácil de ejecutar.

    
respondido por el Kirk McElhearn 01.02.2013 - 14:47
-1

FWIW, entiendo su situación y he estado buscando una buena solución para esto. Me encontré con este hilo porque he estado buscando un método algo más rápido que el que finalmente se me ocurrió. Se me ocurrió algo que, aunque no es exactamente lo que esperaba, funciona y es un compromiso aceptable. Estoy usando el mismo tipo de comandos de scripts de GUI que los shows de @markhunte (estructura ligeramente diferente, pero la misma idea) pero en lugar de colocarlo todo en un flujo de trabajo del servicio de Automator, lo separé en un paquete .app construido con Platypus. Hice esto porque en mis viajes y pruebas he encontrado que los servicios de Automator se ejecutan muy lentamente bajo ciertas condiciones. Si su Mac está bajo algún tipo de estrés, es decir, está ejecutando un escaneo de disco, el software de A / V está haciendo algo, el correo electrónico desactiva el correo electrónico, etc., el sistema operativo parece impulsar los servicios al final de la línea. Esto tiene el efecto de que tarda varios segundos antes de que se ejecute el flujo de trabajo (a veces) y, en ocasiones, incluso varios segundos antes de que se ejecuten los comandos GUI en el servicio. ¡Bastante molesto si estás intentando "bloquear" rápidamente la pantalla y te lleva 10 segundos hacerlo!

Tener una "aplicación" independiente también tiene la ventaja de que puede usar literalmente docenas de aplicaciones de terceros diferentes para ejecutarla, o simplemente usar Spotlight o un servicio Automator para iniciar la aplicación. Cualquiera de ellos funciona. Lo más rápido que he encontrado es una antigua utilidad llamada Spark, que milagrosamente aún funciona incluso en 10.8.4. ¡No me preguntes cómo desde que se desarrolló por última vez el enemigo 10.4! Puede encontrar Spark aquí, Spark

Además de todo esto, combatí el problema de los comandos GUI que a veces se ejecutan lentamente al agrupar en cocoaDialog y llamarlos primero cuando se ejecuta la aplicación para mostrar una pequeña burbuja flotante en el centro de la pantalla que indica que está ocurriendo una pantalla de bloqueo. Por lo general, la cerradura ocurre justo después, pero si hay un retraso, al menos esto da una "respuesta" visual de que presionó las teclas correctas. También hice que se recuperara automáticamente: si "Habilitar acceso a dispositivos de asistencia" no está activado, le avisa con un cuadro de diálogo y le permite habilitarlo de inmediato. También se asegurará de que el Menú de Acceso a Llaveros se muestre en la barra de menús, ya que este es un requisito o fallan de forma sencilla las secuencias de comandos de la GUI.

    
respondido por el Mike M 17.07.2013 - 21:11
-2

Ctrl - Shift - ⏏ Expulsar (en Macs más antiguas),
Ctrl - Shift - ⌽ Power (en macs más recientes)

    
respondido por el Your'e welcome. 29.10.2013 - 15:53

Lea otras preguntas en las etiquetas