在 Fedora 25 上,我的笔记本电脑的硬盘驱动器的 APM 级别(电源管理)非常低,因此我使用来自的 udev 规则这个答案来调整它hdparm
。但是,从挂起恢复后,APM 级别会重置。从终端手动触发 udev 规则是可行的,因此为了自动化它,我尝试使用以下 systemd 服务改编自这里和这里:-
[Unit]
Description=Re-run udev power_supply rules after resuming from suspend
After=supend.target
[Service]
Type=oneshot
User=root
Group=root
ExecStart=+/bin/sh -c '/usr/sbin/udevadm trigger --subsystem-match="power_supply"'
[Install]
WantedBy=suspend.target
我还尝试了multi-user.target
、和的组合,default.target
以及.这些都不起作用,所以我尝试将脚本放入,改编自sleep.target
WantedBy=
Type=simple
/etc/pm/sleep.d/
这。但这也不起作用(将其放入也不起作用/usr/lib64/pm-utils/sleep.d/
)。
最后,手册页systemd-suspend.service
说,
...放入的脚本或二进制文件
/usr/lib/systemd/system-sleep/
旨在供本地使用...并且应被视为黑客。如果应用程序想要收到系统挂起/休眠和恢复的通知,可以使用更好的界面。
然而,放置一个脚本/usr/lib/systemd/system-sleep/
实际上是可行的;但无论如何,这些“更好的接口”是什么以及如何使用它们来运行 udev 触发器(首选)或hdparm
从挂起恢复后?更好的是,有没有办法通过一些静态配置而不是 udev 规则来设置电池供电和插入状态的硬盘驱动器 APM 级别?
更新 - 已修复
systemd 服务现在正在运行。我想我udevadm
在尝试各种组合时错误地从错误的目录中使用了。我已经发帖了一个答案澄清这一点。对于造成的任何混乱,我深表歉意。然而,仍然存在一个问题:是否有办法静态地执行此操作(无需 udev 规则)。
答案1
看来我最初是udevadm
从错误的目录(/bin/udevadm
)中使用的,然后在尝试时出现了一个或其他组合错误。该程序必须从(或)udevadm
运行。/sbin
/usr/sbin
现在以下 systemd 服务就足够了:-
[Unit]
Description=Re-run udev power_supply rules after resuming from suspend
After=supend.target
[Service]
Type=oneshot
ExecStart=/sbin/udevadm trigger --subsystem-match=power_supply
[Install]
WantedBy=suspend.target
对于造成的任何混乱,我深表歉意。
答案2
与After=挂起.目标单位和安装中的 WantedBy=multi-user.target sleep.target 。
在你的情况下,第二部分是WantedBy=sleep.target
.
显然After=sleep.target
对一个人有用,但另一个人必须使用After=suspend.target
。我不知道为什么。使用它来运行单元的接口恢复似乎没有记录,所以我不会真正声称它更好。