Ubuntu 16.04:挂起/恢复后恢复屏幕刷新率

Ubuntu 16.04:挂起/恢复后恢复屏幕刷新率

即使在谷歌搜索之后,我也找不到这个可能很简单的问题的答案。我的一台电脑通过 DP/HDMI 电缆连接到家用主电视。一切正常。即使刷新率设置为 50Hz(50 Hz 隔行扫描),屏幕分辨率也能正确检测到,即 1920x1080。我可以运行xrandr -r 60,然后显示一个漂亮的 1920x1080@60Hz 桌面。(60 Hz 逐行扫描)。

但是,当我暂时停止使用计算机时,它就会自动进入睡眠状态,而当我唤醒它时,分辨率会设置为糟糕的 50 Hz 隔行刷新率。

我在 /etc/pm/sleep.d 中添加了一个 15_screen-resume 脚本,如下所示:

#!/bin/sh

case "$1" in
    resume)
        xrandr -r 60
        date > /tmp/resume.txt
    ;;
esac

我可以用命令检查此脚本是否运行date > /tmp/resume.txt。我知道如果我从 shell 运行pm-suspend,等待计算机进入睡眠状态然后将其唤醒,此脚本就会起作用。但如果计算机在一段时间不活动后自行进入睡眠模式,则不会调用此脚本。

问题是:运行 Ubuntu 16.04 的计算机在一段时间不活动后进入睡眠模式,如何在唤醒时调用自定义脚本?

感谢你的帮助。

答案1

由于可以使用 acpi、gnome 的 gsettings、pm-utils、电源管理(或类似的东西)和 systemd 等多种方式让计算机进入睡眠状态,这可能会造成混淆。

对于您来说,您需要创建一个/lib/systemd/system-sleep如下所示的脚本:

#!/bin/sh

case $1/$2 in
  pre/*)
    echo "Going to $2..."
    # Place your pre suspend commands here, or `exit 0` if no pre suspend action required
    exit 0
    ;;
  post/*)
    echo "Waking up from $2..."
    # Place your post suspend (resume) commands here, or `exit 0` if no post suspend action required
    sleep 2
    xrandr -r 60
    date > /tmp/resume.txt
    ;;
esac

为了确保脚本使用正确的权限创建,请复制现有脚本然后编辑它:

cd /lib/systemd/system-sleep
sudo cp wpasupplicant tv_refresh
gksu gedit tv_refresh

暂停sleep 2对您来说可能是不必要的,但对于我的设置来说,将笔记本电脑的声音恢复到 HDMI 电视是必要的。

这些echo行是可选的,但很方便,因为它们会显示在 中/var/log/syslog

相关内容