我正在尝试通过 Ubuntu Touch C++ 应用程序发送 DBus 消息。在为 Apparmor 文件配置默认模板(没有错误unconfined
)后,我的应用程序收到以下错误作为回复:
QDBusMessage(type=Error, service="", error name="org.freedesktop.DBus.Error.AccessDenied", error message="An AppArmor policy prevents this sender from sending this message to this recipient, 0 matched rules; type="method_call", sender=":1.278" (uid=32011 pid=28575 comm="/usr/lib/arm-linux-gnueabihf/qt5/bin/qmlscene $@ s") interface="org.bluez.Manager" member="DefaultAdapter" error name="(unset)" requested_reply="0" destination="org.bluez" (uid=0 pid=824 comm="/usr/sbin/bluetoothd ")", signature="", contents=([]) )
phablet@ubuntu-phablet:/etc/apparmor.d$ aa-easyprof --policy-vendor=ubuntu --policy-version=1.2 --list-templates
default
ubuntu-push-helper
ubuntu-scope-network
ubuntu-sdk
ubuntu-webapp
unconfined
unconfined
我的问题是:即使 Ubuntu 审核会拒绝上传包(并且可能会进行手动审核),我是否必须为 Apparmor 模板配置值?或者有没有办法为 Ubuntu Touch 点击包创建自己的模板?
答案1
谢谢你的回答。这就是我所做的。请参阅manifest.json.in
:
{
"policy_groups": [
"networking"
],
"policy_version": 1.2,
"template": "unconfined"
}
因此,我可以使用以下方法通过任何 Ubuntu Touch 应用程序将 BQ 手机静音,但只能通过将安全模板指定为不受限制。
启动脉冲音频命令:
[...] myProcess = new QProcess(this); connect (myProcess, SIGNAL(readyReadStandardOutput()), this, SLOT(printOutput())); connect (myProcess, SIGNAL(readyReadStandardError()), this, SLOT(printError())); QString cmd("/usr/bin/pactl"); QStringList arguments; arguments.append(QString("set-sink-mute")); arguments.append(QString("0")); arguments.append(QString(muted?"1":"0")); myProcess->start(QString(cmd), arguments);
发送DBus消息:
QDBusInterface handlerPropertiesInterface("org.freedesktop.Accounts", "/org/freedesktop/Accounts/User32011", "org.freedesktop.DBus.Properties", QDBusConnection::systemBus()); handlerPropertiesInterface.call("Set", "com.ubuntu.touch.AccountsService.Sound", "SilentMode", QVariant::fromValue(QDBusVariant(muted)));
在我看来,最好有一个用于发送 DBus 消息的特定模板(而不是“宽”不受限制的模板),对吗?或者是否可以定义自己的安全模板?