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

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

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

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

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

Ответы (17)

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

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

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

Хотя мне не удалось найти команду, которая переводит дисплей в спящий режим, есть приложение , которое вы можете загрузить, которое сделает это. Отсюда два варианта.

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

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

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

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

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

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

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

Это имитирует поведение control-- и может использоваться на MacBook Air без ключа shift.ejecteject

#!/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

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

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

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

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

на 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 «экран включен?»).

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

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

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

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

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

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

Будить:caffeinate -u -t 2

Спать:pmset displaysleepnow

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

pmset -a displaysleep 1

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

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

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

maclock --display

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

pmset displaysleepnow

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

Я заставил 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

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

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

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

Чтобы заснуть дисплей:

pmset displaysleepnow

Чтобы проверить статус:

pmset -g powerstate IODisplayWrangler|tail -1|grep -q USEABLE # exit 0 (success) if screen is on

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

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

Это не устраняет его необходимость делать это удаленно или через ssh.

Ну вот -

sudo su
pmset displaysleepnow
Или простоsudo pmset displaysleepnow

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

Разве это не спит весь компьютер?

Приложение Launchbar работает так же хорошо, как и Alfred. В моем случае CMD пробел, затем S [Сон] - просто и быстро

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