U1dbとapparmorに問題があります。アプリケーションは正常に動作しますが、パッケージ化されている場合、apparmorはアプリがデータを$ HOME/.local/share/..に保存できないため、異なる実行間で設定を実際に保存することはできません。これは私が私のログに読み取ることができるものです...
kern.log:Jan 5 23:45:38 swordfish-XPS12 kernel: [10599.303619] type=1400 audit(1388961938.954:112): apparmor="DENIED" operation="mknod" parent=8115 profile="com.ubuntu.developer.flscogna.ubuntu-netwalk_ubuntu-netwalk_0.9" name="/home/swordfish/.local/share/ubuntu-netwalk/ubuntu-netwalk-settings.db" pid=13381 comm="ubuntu-netwalk" requested_mask="c" denied_mask="c" fsuid=1000 ouid=1000
Apparmorのjsonファイルは次のとおりです。
{
"policy_groups": ["networking"],
"policy_version": 1
}
Manifest.json:
{
"description": "Ubuntu NetWalk app",
"framework": "ubuntu-sdk-13.10",
"hooks": {
"ubuntu-netwalk": {
"apparmor": "ubuntu-netwalk.json",
"desktop": "ubuntu-netwalk.desktop"
}
},
"maintainer": "Filippo Scognamiglio <[email protected]>",
"name": "com.ubuntu.developer.flscogna.ubuntu-netwalk",
"title": "Ubuntu Netwalk",
"version": "0.9"
}
そして、アプリケーション内のU1DB:
U1db.Database {
id: settingsDatabase
path: "ubuntu-netwalk-settings.db"
}
U1db.Document {
database: settingsDatabase
docId: "settings"
create: true
defaults:{"glowing": "true",
"difficulty" : "INSANE",
"roration" : "false"}
Component.onCompleted: {
var tempContents = {};
tempContents = contents;
glowing = Boolean(tempContents["glowing"]);
difficulty = tempContents["difficulty"];
rotation = Boolean(tempContents["rotation"]);
console.log(JSON.stringify(tempContents));
}
Component.onDestruction: {
var tempContents = {};
tempContents["glowing"] = String(glowing);
tempContents["difficulty"] = String(difficulty);
tempContents["rotation"] = String(rotation);
contents = tempContents;
console.log(JSON.stringify(tempContents));
}
}
なぜこれが機能しないのか誰かが何か考えを持っているなら、それは本当にありがたいです...事前にありがとう:D
マニフェストファイルにあるように、アプリケーション名がプログラムで「com.ubuntu.developer.flscogna.ubuntu-netwalk」に設定されていることを確認してください。 QMLアプリで、applicationName
のMainView
属性をこの値に設定します。 C++アプリケーションでは、
QCoreApplication::setOrganizationName("");
QCoreApplication::setApplicationName("com.ubuntu.developer.flscogna.ubuntu-netwalk");
実行中、プログラムはこの値を使用して書き込み可能なディレクトリを特定しますが、apparmorはマニフェストファイルの値を使用して、ファイルシステムへのアクセスを許可する場所を決定します。これらが同じでない場合は、問題が発生します。 (プログラムがマニフェストファイルから直接アプリケーション名を取得できないのはなぜですか、わかりません。)