我使用的命令nmcli c up id networkname
更改脚本网络。当我从终端运行,但是当我由cron脚本,我得到一个错误的脚本正常工作:
Error: Connection activation failed: Not authorized to control networking.
网上搜索,我发现了一个bug报告从2011年这个问题:https://bugs.launchpad.net/ubuntu/+source/network-manager/+bug/681708,但没有解决。
为什么脚本工作时,从终端上运行,而不是从cron?我想避免把这个根的cron如果可能的话。
决定是否给予访问你的脚本程序被称为polkitd。
要获得什么错误,你可以发出一些信息
nmcli general permissions
它会列出来nmcli
相关的一些权限。你会注意到,从cron运行,而在登录时得到不同的结果。
针对台式机使用当前dists中(如Ubuntu和更多),使用许可主动了很多,这意味着它将授予访问权限的用户登录到本地的和积极的X11会议。
您还可以在像这样的终端上运行polkitd
killall polkitd # first kill running polkitd
G_MESSAGES_DEBUG=all /usr/lib/policykit-1/polkitd
这将让你看到什么polkitd在做什么,它使什么样的决定。
添加.pkla文件/var/lib/polkit-1/localauthority/10-vendor.d/
,例如叫它x.pkla
。 Imortant:它需要其他如后进行排序辞书org.freedesktop.NetworkManager.pkla
或该文件将覆盖你的可爱的文件。
放在这样的事情,将权限授予在adm
group用户。您也可以授予特定用户等。
[Let adm group modify system settings for network]
Identity=unix-group:adm
Action=org.freedesktop.NetworkManager.settings.modify.system
ResultAny=yes
您可能需要多个部分,如果你需要更多的权限,如启用/禁用无线网络添加到该文件。
通过@vidstige descripted解决办法帮我解决这个问题。作为@partofthething评论的问题是,如果/var/lib/polkit-1/localauthority/10-vendor.d/
是存储.pkla的最佳场所。
阅读man pklocalauthority
后,我不这么认为。
在/ etc / polkit-1 / localauthority层次是inteded本地配置上和/ var / lib中/ polkit-1 / localauthority适用于第三方软件包。
难道我们建立了一个第三方的包?我想不是。
10 vendor.d旨在用于由OS销售商的使用。
难道我们是一个OS供应商?我想不是。
我认为/etc/polkit-1/localauthority/50-local.d/
is更好的地方.pkla。
使用这种方式也解决了排序问题:
50-local.d
后10-vendor.d
评价/etc/polkit-1/localauthority/
后/var/lib/polkit-1/localauthority
评价(我会写这个评论,但50声誉...)