Как заставить дисплей спать и просыпаться - PullRequest
1 голос
/ 30 апреля 2019

Проблема с подсветкой моего Mac.Иногда при включении подсветка не включается.Однако, если я вручную заставляю экран спать и просыпаться пару раз, он загорается.Поэтому я хочу написать appleScript для автоматизации этого процесса.Я посмотрел на ... Как мне выйти из режима сна в OSX 10.7.4? Но это не написано в Applescript (или, если это так, я не могу понять, как его запустить.

Я попробовал следующее

do shell script "pmset displaysleepnow"
tell application "Google Chrome"
activate
end tell
do shell script "pmset displaysleepnow"
tell application "Google Chrome"
quit
end tell

Но экран пропадает и никогда не перезапускается. Я также пытался использовать кофеин согласно некоторым вопросам по этому поводу. Я пытался использовать код для перемещения мыши и / илищелкнуть мышью программно.

Если я просто запускаю displayleepnow с последующим «активировать chrome», который работает, но если displayleepnow выполняется снова, ничего не появляется для его повторной активации.

Я использую macOS10.14.4

1 Ответ

1 голос
/ 07 мая 2019

Конспект

Один из способов подойти к этому:

  1. Получить текущую дату / время плюс x количество секунд в будущем.
  2. Запрограммируйте систему / дисплей на «пробуждение» в будущем, используя дату / время, полученные в точке 1.
  3. Затем установите дисплей в спящий режим.

Решение

Рассмотрите возможность использования следующего AppleScript для удовлетворения ваших требований:

set wakeAfterSeconds to "15"
set myPassword to "xxxxxxxxxx"

set now to do shell script "date -r $(date +%s) '+%m/%d/%y %H:%M:%S'"

set wakeTime to do shell script "date -jv +" & wakeAfterSeconds & "S -f " & ¬
  quoted form of "%m/%d/%y %H:%M:%S" & " " & quoted form of now & " " & ¬
  quoted form of "+%m/%d/%y %H:%M:%S"

do shell script "pmset schedule wake " & quoted form of wakeTime & ¬
  " && pmset displaysleepnow" password myPassword with administrator privileges

Код Объяснение

  1. Строка, которая читает;

    set now to do shell script "date -r $(date +%s) '+%m/%d/%y %H:%M:%S'"
    

    по существу выполняет следующую команду bash date, используя команду Applescript do shell script, чтобы получить текущую дату / время:

    $ date -r $(date +%s) '+%m/%d/%y %H:%M:%S'
    

    Присваивает текущую дату / время в формате MM/DD/YY HH:MM:SS переменной с именем now.

  2. Чтение строк;

    set wakeTime to do shell script "date -jv +" & wakeAfterSeconds & "S -f " & ¬
      quoted form of "%m/%d/%y %H:%M:%S" & " " & quoted form of now & " " & ¬
      quoted form of "+%m/%d/%y %H:%M:%S"
    

    получить будущую дату / время, добавив x no.секунд до текущей даты / времени (т.е. добавляет 15 секунд).Эта будущая дата / время (которая снова вычисляется с использованием утилиты shells date) присваивается переменной с именем wakeTime.

  3. Строки, которые читаются:

    do shell script "pmset schedule wake " & quoted form of wakeTime & ¬
      " && pmset displaysleepnow" password myPassword with administrator privileges
    

    используйте утилиту pmset для выполнения следующих двух задач:

    • Планирует отображение на «пробуждение» в будущемдата / время, то есть через 15 секунд.
    • Устанавливает для системы "сон" сейчас.

Дополнительные примечания:

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

    По сути, количество секунд, на которое вы устанавливаете значение wakeAfterSeconds, должно быть больше, чем количество секунд, которое требуется дляваш дисплей для перехода в спящий режим - он должен быть спящим, прежде чем его можно будет разбудить!

  2. Настройка расписания для пробуждения компьютера с помощью утилиты pmset должна быть запущена какroot, поэтому требует вашего пароля.Таким образом, вам нужно будет установить значение переменной myPassword.

  3. Вы упомянули;

    ... если я вручную принудительноэкран для сна и пробуждения пару раз он действительно загорается.

    В этом случае вы можете рассмотреть возможность включения вышеупомянутого кода в repeat*Оператор 1105 *.

    Например, следующий процесс повторяет процесс дважды:

    set wakeAfterSeconds to "15"
    set myPassword to "xxxxxxxxxx"
    
    repeat 2 times
      set now to do shell script "date -r $(date +%s) '+%m/%d/%y %H:%M:%S'"
    
      set wakeTime to do shell script "date -jv +" & wakeAfterSeconds & "S -f " & ¬
        quoted form of "%m/%d/%y %H:%M:%S" & " " & quoted form of now & " " & ¬
        quoted form of "+%m/%d/%y %H:%M:%S"
    
      do shell script "pmset schedule wake " & quoted form of wakeTime & ¬
        " && pmset displaysleepnow" password myPassword with administrator privileges
    
      delay wakeAfterSeconds
    end repeat
    

    Использование "Элементы входа" для автоматического запуска приложения:

    Кроме того, вы можете рассмотреть возможность добавления вышеупомянутого приложения AppleScript к своим элементам входа .Это автоматически запустит приложение при запуске компьютера.Для этого:

    1. Сначала убедитесь, что сценарии «Формат файла» сохранены как «Приложение» через ваш редактор AppleScript.
    2. Запустите «Системные настройки» и выберите «Пользователи и группы» .
    3. Выберите свою учетную запись на панели слева и нажмите «Элементы входа»
    4. Щелкните значок плюса + и выберите приложение AppleScript.
    5. Перезапустите компьютер.

    enter image description here

Старый Mac OSX:

В старых версиях macOS (а именно OSX) утилита pmset не включала команду displaysleepnow.Он просто имел команду pmset sleepnow.Так что для тех, кто хочет запустить это на более старой OSX, вам нужно изменить последнюю команду do shell script на:

do shell script "pmset schedule wake " & quoted form of wakeTime & ¬
  " && pmset sleepnow" password myPassword with administrator privileges
       ^^^^^^^^^^^^^^
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...