Я записал программу Python для переключения соединений WiFi через Администратора сети dbus интерфейс, которому (я верю), в основном эквивалентно nmcli инструменту командной строки. Сценарий (и nmcli) работает правильно, когда выполнено непривилегированным пользователем на моей настольной Ubuntu. Я пытаюсь выяснить, как полномочия признать, что были настроены.
Я спрашиваю, потому что те же команды не работают над Raspbian, таким образом, я хотел бы разыскать, где полномочия отличаются. На Raspbian, когда я запускаю свой скрипт как непривилегированный пользователь, я получаю эту ошибку, когда я пытаюсь считать данные NetworkManager через dbus:
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.
"Сеанс не найден для uid 1000" решается путем переустановки пакета dbus.
apt install dbus
затем важно перезагрузиться, так как конфигурации dbus обновляются только после этого.