我正在尝试在 Ubuntu 20.04 中禁用 USB 上的 ACPI 唤醒,因此我在 /etc/profile.d 中创建了一个脚本
-rwxr-xr-x 1 root root 110 5月 18 00:23 disable-usb-wake.sh
#!/bin/sh -e
if cat /proc/acpi/wakeup | egrep 'XHC.*enabled'; then
echo "XHC" > /proc/acpi/wakeup
fi
当我启动机器时,系统提示权限被拒绝。为什么?
答案1
正如评论中提到的,/etc/profile.d
它以登录用户的身份运行,因此没有足够的权限来修改系统配置。您可以sudo
在那里添加一个命令,但这只意味着您在登录时需要再次输入密码 - 这会很烦人,而且如果登录用户不是系统管理员,它也不会起作用。此外,如果启动后没有人登录,它也不会完成其工作。
有几个选项,包括添加/etc/rc.local
/etc/rc*
,这是在 SystemD 使整个事情变得无关紧要之前执行此类自定义“启动时”作业的常用方法之一。
但是 - 如果你已经拥有/etc/rc.local
设置了脚本,则可以通过以下方式在 SystemD 中启用它:
- 确保
/etc/rc.local
可执行。例如通过运行chmod a+x /etc/rc.local
。否则 SystemD 兼容模式将不起作用。 - 通过创建文件来启用 SystemD 兼容模式
/etc/systemd/system/rc-local.service.d/enable.conf
通过创建包含以下内容的 - 通过运行启用 SystemD 兼容性
sudo systemctl enable rc-local
/etc/systemd/system/rc-local.service.d/enable.conf
:
[Install]
WantedBy=multi-user.target
下次系统启动时,SystemD 将运行您的自定义/etc/rc.local
。
SystemD 替代方案
- 利用SystemD tmpfiles 管理系统,让它在启动期间写入你需要的内容。这是我推荐的解决方案。
- 看到这个AskUbuntu 问题对于一些人来说,制作 SystemD 服务来做同样的事情。
- 我相信你可以编写一个 udev 规则来禁用“
power/wakeup
当它看到 XHC 时禁用“ ”(我认为它是板载 XHCI USB 集线器?),如下所述:https://www.kernel.org/doc/html/v4.13/driver-api/usb/power-management.html