如何使显示器入睡和唤醒

时间:2019-04-30 03:08:58

标签: applescript

我的Mac的背光灯有问题。有时当我打开它时,背光灯不亮。但是,如果我手动强制屏幕进入休眠状态并醒来几次,则它确实会亮起。所以我想写一个applescript来自动化这个过程。 我看过... How do I wake from display sleep in 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

但是屏幕黑屏且永不亮起。我也尝试过根据一些问题使用咖啡因。我尝试使用代码来移动鼠标和/或以编程方式单击鼠标。

如果我只运行displaysleepnow,然后再运行“ activate chrome”,但是如果再次执行displaysleepnow,则似乎没有任何东西可以重新激活它。

我正在使用macOS 10.14.4

1 个答案:

答案 0 :(得分:1)

简介

一种解决方法是:

  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'"
    

    基本上使用Applescript date命令执行以下bash 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 编号

    获得将来的日期/时间。当前日期/时间的秒数(即,增加15秒)。将来的日期/时间(再次使用shell 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语句中。

    例如,以下代码重复该过程两次:

    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
       ^^^^^^^^^^^^^^