即使在谷歌搜索之后,我也找不到这个可能很简单的问题的答案。我的一台电脑通过 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
。