我正在使用命令 nmcli c up id networkname
在脚本中更改网络。当我从终端运行脚本时,脚本运行良好,但是当我从 cron 运行脚本时,出现错误:
Error: Connection activation failed: Not authorized to control networking.
在网上搜索,我发现了一个 2011 年关于这个问题的错误报告:https://bugs.launchpad.net/ubuntu/+source/network-manager/+bug/681708 ,但没有分辨率。
为什么脚本在从终端运行时有效,而不是从 cron 运行?如果可能的话,我想避免把它放在根的 cron 中。
最佳答案
PolKit
决定是否允许访问您的脚本的守护进程称为 polkitd。
要获取有关出了什么问题的一些信息,您可以发出
nmcli general permissions
它将列出一些与 nmcli
相关的权限.您会注意到,从 cron 运行和登录时会给出不同的结果。当前针对桌面使用的 dists(例如 Ubuntu 等)使用 Active alot 权限,这意味着它将授予登录到本地和事件 X11 session 的用户访问权限。
您也可以像这样在终端中运行 polkitd
killall polkitd # first kill running polkitd
G_MESSAGES_DEBUG=all /usr/lib/policykit-1/polkitd
这将允许您查看 polkitd 正在做什么以及它正在做出什么决定。解决方案
在 `/etc/polkit-1/localauthority/50-local.d/` 中添加一个 .pkla 文件,例如调用它`x.pkla`。 **Imortant:** 它需要在其他 e.g. 之后按字典顺序排序`org.freedesktop.NetworkManager.pkla` 或者那个文件会覆盖你可爱的文件。
在
adm
中放入类似的内容以授予用户权限团体。您还可以授予特定用户等。[Let adm group modify system settings for network]
Identity=unix-group:adm
Action=org.freedesktop.NetworkManager.settings.modify.system
ResultAny=yes
如果您需要更多权限,例如启用/禁用 wifi,您可能需要向此文件添加多个部分。
关于networking - 无权从 cron 控制网络,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38855933/