profile.d 脚本权限被拒绝

profile.d 脚本权限被拒绝

我正在尝试在 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 中启用它:

  1. 确保/etc/rc.local可执行。例如通过运行chmod a+x /etc/rc.local。否则 SystemD 兼容模式将不起作用。
  2. 通过创建文件来启用 SystemD 兼容模式/etc/systemd/system/rc-local.service.d/enable.conf通过创建包含以下内容的
  3. 通过运行启用 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 替代方案

  1. 利用SystemD tmpfiles 管理系统,让它在启动期间写入你需要的内容这是我推荐的解决方案。
  2. 看到这个AskUbuntu 问题对于一些人来说,制作 SystemD 服务来做同样的事情。
  3. 我相信你可以编写一个 udev 规则来禁用“power/wakeup当它看到 XHC 时禁用“ ”(我认为它是板载 XHCI USB 集线器?),如下所述:https://www.kernel.org/doc/html/v4.13/driver-api/usb/power-management.html

相关内容