Mi piacerebbe essere in grado di spegnere lo schermo dalla riga di comando.
So che c'è la scorciatoia da tastiera ctrl + ⇧ + ⏏ ma voglio farlo da uno script di shell o da remoto.
C'è un modo?
In OS X 10.9, puoi semplicemente fare pmset displaysleepnow
. Questo spegnerà immediatamente il display senza modificare nessuna delle impostazioni o mettendo l'intero host in modalità di sospensione.
I privilegi escalation non sembrano essere richiesti (almeno con le versioni recenti di OS X), ma se ricevi un messaggio sui privilegi inadeguati, potresti fare sudo pmset displaysleepnow
.
In base al feedback dei commentatori, questo non è disponibile in OS X 10.8 o versioni precedenti.
Sebbene non sia stato possibile trovare un comando che interrompa la visualizzazione in modo nativo, esiste un app scarichi che lo farà. Ci sono due opzioni da qui.
Installa l'app nella cartella Applicazioni e da Terminal o SSH esegui open /Applications/Sleep\ Display.app
Fare clic con il pulsante destro del mouse sull'app dalla cartella Download e fare clic su "Mostra contenuto pacchetto". Passare a Contents/MacOS
e copiare il file sleepdisplay.
Vai a /usr/bin
(puoi usare il ⇧ + ⌘ + G scorciatoia e digitare la directory in) e incollare il binario file. Ora sarai in grado di digitare il comando sleepdisplay
in Terminale o tramite SSH e il display andrà immediatamente in stop.
Spero che questo aiuti!
Ecco un semplice script di shell che lo farà.
#!/usr/bin/env bash
open /System/Library/Frameworks/ScreenSaver.framework/Versions/A/Resources/ScreenSaverEngine.app
Questo eseguirà / avvierà le impostazioni che hai abilitato per Screen Saver su quel computer.
Il seguente script farà il lavoro (in Leopard e versioni successive), ma deve essere eseguito con sudo:
La premessa è che pmset può impostare un tempo prima che il display si interrompa, ma il problema è che un valore pari a 0 disattiva la funzione invece di impostare il ritardo su zero e il valore 1 è un ritardo di un minuto intero. La magia qui è che un valore di 2 ^ 31 sembra essere memorizzato come zero negativo, che magicamente funziona come "spegni immediatamente il display". In Tiger e in precedenza, era necessario un numero magico diverso, perché una variabile di dimensioni bit diverse veniva usata internamente per memorizzare il ritardo, in minuti, finché il display non si spegne.
Questo imita il comportamento di control-shift-eject e può essere utilizzato su MacBook Air senza un tasto di espulsione.
#!/bin/bash
original_setting='/usr/bin/pmset -g | /usr/bin/grep displaysleep | /usr/bin/awk '{print $2}''
magic_number=2147483648
/usr/bin/pmset -a displaysleep $magic_number; sleep 1; /usr/bin/pmset -a displaysleep $original_setting
Esegui il seguente comando per eseguire un breve AppleScript che interrompe la visualizzazione:
osascript -e 'tell application "System Events" to sleep'
Il nome del comando suggerisce che potrebbe mettere l'intero sistema a dormire in alcune circostanze, ma non potevo farlo accadere in test limitati: l'ho provato con uno script di shell che ho iniziato poco prima dell'esecuzione questo comando, e che era in esecuzione per alcuni minuti fino a quando non ho "risvegliato" il sistema. Aveva continuato a stampare l'output per tutto il tempo.
su macOS Sierra
pmset displaysleepnow
caffeinate -u -t 1
pmset -g powerstate IODisplayWrangler | tail -1 | cut -c29
< 4 sono display di sospensione un server HTTP di piccolo nodo per impostare in remoto lo stato del tuo Mac: link
Spero davvero che questa risposta non sia troppo battuta. Il mio modo preferito di dormire, riavviare, spegnere e, soprattutto, bloccare: un Mac utilizza Alfred (l'avvio delle app).
Non richiede alcuno script, conoscenza degli script o uso del terminale, che è geniale.
Tuttavia, se si desidera utilizzare specificamente il terminale, questa probabilmente non è la soluzione adatta a te.
Potresti usare il comando pmset
per cambiare il valore per displaysleep, qualcosa come
pmset -a displaysleep 1
(richiede root)
Dai un'occhiata al progetto github open source maclock
Per impostazione predefinita, avvia semplicemente lo screensaver, ma puoi mettere lo schermo in modalità di sospensione con:
maclock --display
Sotto le copertine, si tratta di uno script bash che essenzialmente sta solo chiamando:
pmset displaysleepnow
Bene, questo è vecchio, ma sembra che non ci siano risposte veramente valide per questa domanda ovunque.
Ho ottenuto un AppleScript per funzionare, anche se richiede un'app-Suite extra di terze parti, non più salvate e non registrabili. Può essere scaricato nel sito web dello sviluppatore .
# Gets the current state of the upper left hot corner, then sets it to sleep display.
tell application "System Events"
tell expose preferences
set givenActivty to get the activity of the top left screen
set the properties of the top left screen corner to {activity:sleep display}
end tell
end tell
# Uses Mouse to Activate upper left hot corner. [Moving directly to {0, 0} does not work
tell application "Extra Suites"
ES move mouse {1, 1}
ES move mouse {0, 0}
end tell
# Restores state of upper left hot corner.
tell application "System Events"
tell expose preferences
delay 1
set the activity of the top left screen corner to givenActivty
end tell
end tell
# Gets rid of Extra Suites nag window.
tell application "Extra Suites"
quit
end tell
L'ho anche incorporato in un Alfred Workflow .
L'ho fatto con sudo shutdown -s now
.
Tieni presente che per farlo dovrai comunque disporre del privilegio di amministratore.
L'utilizzo di Alfred (gratuito su AppStore) è un ottimo modo per addormentare lo schermo semplicemente scrivendo: "sleep". Non diventa più semplice di così.
Naturalmente Alfred fa molto di più, puoi anche riavviare, disconnettersi, svuotare il cestino, bloccare, spegnere e molte altre cose.
Non è necessaria un'app extra, usa solo tell application "Finder" to sleep
L'app Launchbar funziona egualmente bene come Alfred. Nel mio caso, la barra spaziatrice CMD quindi S [Sleep] - semplice e veloce
Leggi altre domande sui tag sleep-wake terminal screen