8 votos

¿Sustitución de CGSession --suspender?

Solía hacer que mi iMac pusiera su pantalla de bloqueo desde shell scripts. Era muy sencillo:

'/System/Library/CoreServices/Menu Extras/User.menu/Contents/Resources/CGSession' -suspend

En MacOS Big Sur, /User.menu/ no está en esa ubicación, y no puedo encontrar un archivo llamado CGSession. ¿Cuál es la línea de comandos equivalente en Big Sur? Me gustaría evitar usar el privilegio de Root para esta tarea.

2voto

user3439894 Puntos 5883

Menú de usuario no es más que uno de los muchos que faltan en MacOS Big Sur , a saber Menú de la batería , Menú.Bluetooth , Reloj.menú , Menú de pantallas , Menú de expulsión , Menú IrDA , UniversalAccess.menu , Menú de usuario y Menú de volumen .

Suponiendo que no haya cambiado el sistema por defecto atajo de teclado para Pantalla de bloqueo , Q , lo siguiente comando en Terminal bloqueará la pantalla:

osascript -e 'tell app "System Events" to key code 12 using {control down, command down}'

La primera vez que ejecuté ese comando falló y me aparecieron dos cuadros de diálogo, el primero de ellos:

Terminal wants access

Después de hacer clic en OK El segundo fue:

Accessibility Access (Events)

Haciendo clic en Abrir las preferencias del sistema me llevó a Preferencias del sistema > Seguridad y privacidad > Privacidad > Accesibilidad donde hice clic en la casilla de verificación para Terminal después de desbloquear el panel.

A continuación, ejecuté el comando de nuevo en Terminal y bloqueó la pantalla.

Después de desbloquear la pantalla, he creado un shell script como lockscreen en /usr/local/bin Por ejemplo

cd /usr/local/bin
sudo nano lockscreen

Se ha añadido lo siguiente código :

#!/bin/zsh

osascript -e 'tell app "System Events" to key code 12 using {control down, command down}'

Luego presionó X seguido de Y y luego Entre en y de vuelta a la indicación:

sudo chmod +x lockscreen

A continuación, ejecuté el lockscreen comando y también funcionó, y sin tener que hacer ningún cambio de seguridad adicional. También funciona al llamarlo desde otros shell scripts .


Nota: Si prefiere utilizar un osascript shebang , en lugar de zsh utilice lo siguiente código :

#!/usr/bin/osascript

tell application "System Events" to key code 12 using {control down, command down}

3 votos

Por curiosidad: ¿Hay alguna razón específica por la que no codificas el script con #!/usr/bin/osascript y luego incluir AppleScript directamente?

0 votos

@nohillside, Aparte de que normalmente sólo uso el #!/usr/bin/osascript shebang para las más largas y o más complejas AppleScript código ejecutado en un shell script No, pero ciertamente también se puede hacer así. No es raro que haya más de una forma de hacer algo y no significa necesariamente que una forma sea mejor que la otra.

0 votos

A menos que me esté perdiendo algo, esto no es equivalente en un aspecto importante: la forma antigua solía dejar el ordenador en la pantalla de inicio de sesión normal, donde se mostraba una lista de usuarios. Si se utiliza "Bloquear pantalla", parece que sólo el usuario que ya estaba conectado puede desbloquear la pantalla. Otro usuario no puede subir y entrar en ella. Todavía no entiendo por qué Apple quitó CGSession .

1voto

Bwaxxlo Puntos 111

Por cierto, utilizo una solución que no suspende exactamente la sesión, sino que pone el portátil en reposo. En mi flujo de trabajo, estos logran lo mismo que las dos veces que llego a la pantalla de bloqueo. La ventaja de poner la máquina en reposo es que es más eficiente en cuanto a la energía, ya que prefiero que se ponga en reposo cuando me alejo de ella.

alias lock="pmset sleepnow" en mi .bashrc / .zshrc archivo. Alternativamente, pmset displaysleepnow consigue un comportamiento algo similar a lo que CGSession -suspend lo hizo.

AppleAyuda.com

AppleAyuda es una comunidad de usuarios de los productos de Apple en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X