问题:如何指定在电源菜单上选择挂起选项时运行的脚本?
语境:
我有一台配备 AMD Radeon 显卡的 Sony VAIO 笔记本电脑。我希望能够禁用/启用独立显卡。我这样做没有问题,但它会在挂起和从挂起状态恢复时导致问题。
当会话从挂起状态恢复时(禁用独立 DPU),风扇将不受控制地旋转,我想要做的是编辑挂起脚本或将新脚本分配给电源菜单上的挂起选项。这样我就可以在挂起之前重新启用 GPU。
编辑:
经过一番研究,我认为这与中的文件有关/etc/pm/sleep.d/
?
如果我在其中放入自定义脚本,它会在暂停和从暂停状态恢复时运行吗?
如何在脚本中区分暂停/恢复?
答案1
你说得对。你必须编写一个脚本并将其保存到/lib/systemd/system-sleep/
(自 2015 年以来,systemd 负责处理该任务,之前是/etc/pm/sleep.d/
)。暂停和恢复之间的区别作为脚本的参数给出:
#!/bin/bash
case "$1" in
suspend)
# executed on suspend
;;
resume)
# executed on resume
;;
*)
;;
esac
如果您还想对 Hibernate 执行此操作,则参数将是hibernate
和thaw
。
答案2
在当前使用 的 Ubuntu 版本上systemd
,您可以将脚本(或脚本链接)放入/lib/systemd/system-sleep/
。
尝试将其放入/usr/local/bin/test-sleep.sh
:
#!/bin/sh
## This file (or a link to it) must be in /lib/systemd/system-sleep/
me=$(basename "$0")
case "$1" in
pre)
logger -t "$me" "Suspending: \$1=$1, \$2=$2" ;;
post)
logger -t "$me" "Resuming: \$1=$1, \$2=$2" ;;
esac
然后使其可执行并为 systemd 提供链接:
sudo chmod +x /usr/local/bin/test-sleep.sh
sudo ln -si /usr/local/bin/test-sleep.sh /lib/systemd/system-sleep/
该脚本只是写入syslog
,因此您可以看到它做了什么
grep 'test-sleep' /var/log/syslog