我编写了一个 Python 程序,用于通过网络管理器 dbus 接口切换 WiFi 连接,我认为它基本上相当于 nmcli 命令行工具。当由我的桌面 Ubuntu 上的非特权用户运行时,该脚本(和 nmcli)可以正常工作。我正在尝试弄清楚如何设置允许该操作的权限。
我之所以问这个问题,是因为同样的命令在 Raspbian 上不起作用,所以我想找出权限不同的位置。在 Raspbian 上,当我以非特权用户身份运行脚本时,当我尝试通过 dbus 读取 NetworkManager 数据时,出现此错误:
dbus.exceptions.DBusException: org.freedesktop.NetworkManager.Settings.PermissionDenied: No session found for uid 1000 (unknown)
同样,当我nmcli c
以非特权用户身份在 Raspbian 上运行时,它不会显示应有的连接。两者均可正常工作sudo
。
我迄今为止的尝试
我发现一些旧的 Ubuntu 帖子表明其中涉及 PolicyKit 包,并且我应该创建一个/etc/polkit-1/localauthority/50-local.d/org.freedesktop.NetworkManager.pkla
包含以下内容的文件:
[Enable NetworkManager]
Identity=unix-group:netdev
Action=org.freedesktop.NetworkManager.*
ResultAny=yes
ResultInactive=yes
ResultActive=yes
但这并没有改变任何东西。(注意:所有其他/etc/polkit-1/localauthority
子文件夹都是空的,并且用户是 netdev 组的一部分。我不确定还要检查什么。)
我对 dbus 和 NetworkManager 还很陌生,因此如果能帮助我理解如何授予发送 dbus 信号的权限,以及如何排除缺少的 NetworkManager 权限故障,我将不胜感激。
答案1
通过重新安装 dbus 包可以解决“未找到 uid 1000 的会话”。
apt install dbus
然后重新启动很重要,因为 dbus 配置只有在重新启动后才会升级。