Как я могу спать дисплей из терминала?

49

Я хотел бы иметь возможность отключить мой экран из командной строки.

Я знаю, что есть сочетание клавиш ctrl+ +, но я хочу сделать это из сценария оболочки или удаленно.

Есть ли способ?

gregseth
источник
Это может помочь: apple.stackexchange.com/questions/34884/…
Хорхе
Вы также можете прочитать это: stackoverflow.com/questions/1239439/…
jm666

Ответы:

71

В OS X 10.9 вы можете просто сделать pmset displaysleepnow. Это немедленно отключит ваш дисплей без изменения каких-либо настроек или перевода всего хоста в спящий режим.

Повышенные привилегии, кажется, не требуются (по крайней мере, в последних версиях OS X), но если вы получите сообщение о неадекватных привилегиях, вы можете это сделать sudo pmset displaysleepnow.

На основе отзывов от комментаторов, это не доступно в OS X 10.8 или ранее.

Сара Г
источник
22

Несмотря на то, что я не смог найти команду, которая изначально будет отображать спящий режим, есть приложение, которое вы загрузите и которое сделает это. Здесь есть два варианта.

  1. Установите приложение в папку «Приложения» и запустите из терминала или SSH open /Applications/Sleep\ Display.app

  2. Щелкните правой кнопкой мыши приложение из папки «Загрузки» и нажмите «Показать содержимое пакета». Перейдите Contents/MacOSи скопируйте файл sleepdisplay.

    Перейдите к /usr/bin(вы можете использовать сочетание клавиш + + Gи ввести каталог) и вставить двоичный файл. Теперь вы сможете ввести команду sleepdisplayв Терминал или через SSH, и дисплей сразу перейдет в спящий режим.

Надеюсь это поможет!

Мэтт Лав
источник
7

Вот простой сценарий оболочки, который сделает это.

#!/usr/bin/env bash
open /System/Library/Frameworks/ScreenSaver.framework/Versions/A/Resources/ScreenSaverEngine.app

Это запустит / запустит любые настройки, которые вы включили для Заставки на этом компьютере.

afragen
источник
Мне нравится этот. Я скопировал / вставил этот код в файл / usr / local / bin / ss, на нем chmod + x и теперь могу ввести «ss» в командной строке, чтобы активировать заставку. Заставка, в свою очередь, настроена на запрос пароля через одну минуту после активации заставки (которая может быть уменьшена в дальнейшем, я думаю, при необходимости)
fwielstra
7

Следующий скрипт выполнит эту работу (в Leopard и более поздних версиях), но его необходимо запустить с помощью sudo:

Предполагается, что pmsetможно установить время до отключения дисплея, но проблема в том, что значение 0 отключает функцию, а не устанавливает задержку на ноль, а значение 1 - полная минутная задержка. Волшебство здесь заключается в том, что значение 2 ^ 31, похоже, сохраняется как отрицательный ноль, который магически функционирует как «немедленно выключить дисплей».

В Tiger и более ранних версиях требовалось другое магическое число, потому что для хранения задержки в минутах использовалась внутренняя переменная размера в битах, пока дисплей не выключился.

Это имитирует поведение control- shift- ejectи может быть использован на MacBook Соотношение эфиры без ejectключа.

#!/bin/bash
original_setting=`/usr/bin/pmset -g | /usr/bin/awk '/displaysleep/ {print $2}'`
magic_number=2147483648
/usr/bin/pmset -a displaysleep $magic_number; sleep 1; /usr/bin/pmset -a displaysleep $original_setting
Даниэль
источник
5

на macOS Сьерра

  • отображение сна: pmset displaysleepnow
  • пробуждение дисплея: caffeinate -u -t 1
  • состояние теста: pmset -g powerstate IODisplayWrangler | tail -1 | cut -c29результаты <4 - спящий дисплей

HTTP-сервер небольшого узла для удаленной установки состояния экрана вашего Mac: https://github.com/ycardon/switch-api

Ян Кардон
источник
Вы можете получить 0 или ненулевой код выхода для условной логики, выполнив "echo $[$(pmset -g powerstate IODisplayWrangler | tail -1 | cut -c29) - 4]"(используя это для true / false "is screen on?").
atwixtor
4

Выполните следующую команду, чтобы выполнить короткий AppleScript, который переводит дисплей в спящий режим:

osascript -e 'tell application "System Events" to sleep'

Название команды предполагает, что в некоторых обстоятельствах она может перевести всю систему в спящий режим, но я не смог этого сделать в ограниченном тестировании: я протестировал его с помощью сценария оболочки, который я запустил незадолго до выполнения этой команды, и он работал в течение нескольких минут, пока я "не разбудил" систему. Он продолжал печатать вывод в течение всего времени.

Даниэль Бек
источник
2

Очень надеюсь, что этот ответ не слишком удачен. Мой любимый способ спать, перезагружаться, выключаться - и, самое главное, блокировать - Mac использует Alfred (панель запуска приложений).

Это не требует каких-либо сценариев, знания сценариев или использования терминала, что замечательно.

Однако, если вы специально хотите использовать терминал, это, вероятно, не решение для вас.

Митч Розен
источник
2

Услуга: caffeinate -u -t 2

Спать: pmset displaysleepnow

Дермот
источник
1

Вы можете использовать pmsetкоманду, чтобы изменить значение для displayleep, что-то вроде

pmset -a displaysleep 1

(требуется root)

DA4
источник
1

Взгляните на проект Maclock с открытым исходным кодом.

По умолчанию он просто запускает экранную заставку, но вы можете перевести дисплей в режим сна:

maclock --display

Под прикрытием это bash-скрипт, который по сути просто вызывает:

pmset displaysleepnow
рубль
источник
1

Ну, это старый вопрос, но, похоже, нигде нет хороших ответов на этот вопрос.

Я получил AppleScript для работы, хотя для этого требуется стороннее, не поддерживаемое и не регистрируемое приложение - Extra Suites. Его можно скачать на старом сайте разработчика .

# 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

Я также включил его в рабочий процесс Альфреда .

Брюс
источник
1

Я сделал это с sudo shutdown -s now.

Обратите внимание, что для этого вам понадобятся права администратора.

Том Шен
источник
0

Ну вот -

sudo su
pmset displaysleepnow
Манас Шарма
источник
-1

Использование Alfred (бесплатно в AppStore) - отличный способ перевести дисплей в спящий режим, просто написав: «sleep». Не становится проще, чем это.

Конечно, Альфред делает гораздо больше, вы также можете перезагрузить компьютер, выйти из системы, очистить корзину, заблокировать, завершить работу и многое другое.

Алехандро Эскобелл
источник
1
Это не относится к его необходимости делать это удаленно или через ssh.
TJ Luoma
-2

Не нужно дополнительное приложение, просто используйте tell application "Finder" to sleep

user81191
источник
1
Разве это не спит весь компьютер?
холме
-2

Приложение Launchbar работает так же хорошо, как Альфред. В моём случае пробел CMD тогда S [Sleep] - просто и быстро

Норм Бизер
источник
Это не отвечает на вопрос. gregseth ищет не способ перевести компьютер в спящий режим с помощью сторонней утилиты, а способ перевести дисплей в спящий режим из командной строки .
Тимоти Мюллер-Хардер