在这篇文章中。我们将介绍Ubuntu OS的Runtime Environment。在文章“App confinement: Security policy for click packages”中,我们看见它里面有介绍一个应用的runtime环境。这里,我们通过一个样例来显示一个应用的runtime环境究竟是如何的。

在这里我们能够參阅我曾经的文章“在Ubuntu上的C++及QML混合编程”,我们下载文章中的例程:

bzr branch lp:~liu-xiao-guo/debiantrial/readenv

在一个Terminal中打入上述的句子,就能够下载例程中的软件。

同一时候,我们对我们的主程序文件“ReadEnv.qml”做例如以下的改动:

import QtQuick 2.0
import Ubuntu.Components 0.1
import Ubuntu.Components.ListItems 0.1 as ListItem
import ReadEnv 1.0
import "ui" /*!
\brief MainView with Tabs element.
First Tab has a single Label and
second Tab has a single ToolbarAction.
*/ MainView {
id: root // objectName for functional testing purposes (autopilot-qt5)
objectName: "mainView" // Note! applicationName needs to match the "name" field of the click manifest
applicationName: "com.ubuntu.developer.liu-xiao-guo.ReadEnv" anchorToKeyboard: true /*
This property enables the application to change orientation
when the device is rotated. The default is false.
*/
//automaticOrientation: true width: units.gu(50)
height: units.gu(75) property string app_pkgname ReadEnv {
id: readEnv
} Flickable {
id: scrollWidget
anchors.fill: parent
contentHeight: contentItem.childrenRect.height
boundsBehavior: (contentHeight > root.height) ? Flickable.DragAndOvershootBounds : Flickable.StopAtBounds
/* Set the direction to workaround https://bugreports.qt-project.org/browse/QTBUG-31905
otherwise the UI might end up in a situation where scrolling doesn't work */
flickableDirection: Flickable.VerticalFlick Column {
anchors.left: parent.left
anchors.right: parent.right ListItem.Base {
height: ubuntuLabel.height + runtime.height + units.gu(6) Column {
anchors.left: parent.left
anchors.right: parent.right
anchors.centerIn: parent
spacing: units.gu(2)
Label {
id: ubuntuLabel
anchors.horizontalCenter: parent.horizontalCenter
text: ""
fontSize: "x-large"
}
Label {
id: runtime
anchors.horizontalCenter: parent.horizontalCenter
text: "Runtime Environment"
}
}
} ListItem.Subtitled {
text: i18n.tr("UBUNTU_APPLICATION_ISOLATION")
subText: readEnv.getenv("UBUNTU_APPLICATION_ISOLATION")
} ListItem.Subtitled {
text: i18n.tr("APP_ID")
subText: readEnv.getenv("APP_ID")
} ListItem.Subtitled {
text: i18n.tr("XDG_CACHE_HOME")
subText: readEnv.getenv("XDG_CACHE_HOME")
} ListItem.Subtitled {
text: i18n.tr("XDG_CONFIG_HOME")
subText: readEnv.getenv("XDG_CONFIG_HOME")
} ListItem.Subtitled {
text: i18n.tr("XDG_DATA_HOME")
subText: readEnv.getenv("XDG_DATA_HOME")
} ListItem.Subtitled {
text: i18n.tr("XDG_RUNTIME_DIR")
subText: readEnv.getenv("XDG_RUNTIME_DIR")
} ListItem.Subtitled {
text: i18n.tr("TMPDIR")
subText: readEnv.getenv("TMPDIR")
} ListItem.Subtitled {
text: i18n.tr("PWD")
subText: readEnv.getenv("PWD")
} ListItem.Subtitled {
text: i18n.tr("APP_PKGNAME")
subText: app_pkgname
} ListItem.Subtitled {
text: i18n.tr("PATH")
subText: readEnv.getenv("PATH")
} ListItem.Subtitled {
text: i18n.tr("LD_LIBRARY_PATH")
subText: readEnv.getenv("LD_LIBRARY_PATH")
} ListItem.Subtitled {
text: i18n.tr("QML2_IMPORT_PATH")
subText: readEnv.getenv("QML2_IMPORT_PATH")
}
}
} Component.onCompleted: {
var APP_ID = readEnv.getenv("APP_ID"); console.log("APP_ID: " + APP_ID );
app_pkgname = APP_ID.split('_')[0]
console.log("APP_PKGNAME: " + app_pkgname);
}
}

我们能够通过我们设计的ReadEnv库来读取该应用的环境变量。

执行我们的程序。显演示样例如以下:

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvVWJ1bnR1VG91Y2g=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" width="200" height="300" alt=""> 

在文章中,它提到例如以下的文件夹,该应具有读和写的权限:

  • XDG_CACHE_HOME/<APP_PKGNAME>
  • XDG_CONFIG_HOME/<APP_PKGNAME>
  • XDG_DATA_HOME/<APP_PKGNAME>
  • XDG_RUNTIME_DIR/<APP_PKGNAME>
  • XDG_RUNTIME_DIR/confined/<APP_PKGNAME> (for TMPDIR)

针对我们的应用来说。也即例如以下的文件夹具有读写的权限:

  • /home/phablet/.cache/com.ubuntu.developer.liu-xiao-guo.readenv
  • /home/phablet/.config/com.ubuntu.developer.liu-xiao-guo.readenv
  • /home/phablet/.local/share/com.ubuntu.developer.liu-xiao-guo.readenv
  • /run/user/32011/confined/com.ubuntu.developer.liu-xiao-guo.readenv

整个程序的源代码在例如以下的地址能够找到:


bzr branch lp:~liu-xiao-guo/debiantrial/runtimeevn

一个更加完整的例程在:git clone https://gitcafe.com/ubuntu/runtimeenv.git

请注意,在新的例程中。我们能够同一时候使用 readEnv.getenv 或 readEnv.getenv1两种方法来得到环境变量的值。

Ubuntu OS应用Runtime Enviroment的更多相关文章

  1. Windows 7 bug: nonexistent Java Runtime Enviroment

    When I tried installing atunes and TED, I got the message “The registry refers to a nonexistent Java ...

  2. compile openjdk7 in ubuntu OS

    success: openjdk version "1.7.0-internal"OpenJDK Runtime Environment (build 1.7.0-internal ...

  3. Packages on Ubuntu OS

    openSSH https://help.ubuntu.com/lts/serverguide/openssh-server.html

  4. 多个 git ssh key 配置 Ubuntu os

    1.生成ssh key: ssh-keygen -t rsa -C “email@sss.com” 此时,在~/.ssh/文件夹下会有两个文件, id_rsa 和 id_rsa.pub.分别保存ssh ...

  5. eduroam WIFI on Ubuntu OS

  6. extract a page from a multiple pages pdf on Ubuntu OS

    extract a page from a multiple pages pdf 1 extract a page from a multiple pages pdf use pdftk packag ...

  7. Ubuntu OS 打开端口命令

    直接执行命令:ufw allow 80 再去修改对应功能配置文件的端口号

  8. 怎样在Ubuntu手机应用中得到全部的环境变量值

    我们在先前的例程中已经通过一些方法得到我们应用的一些环境变量值.这些值有的很实用.比方我们能够得到我们应用所仅仅能訪问的文件夹.在今天的例程中,我们来展示一种方法能够得到应用全部的环境变量.在我们的实 ...

  9. VMWare 虚拟化 Ubuntu 64 (16.04)-- docker 无法链接 pull 镜像 ?(solved)

    背景 根据项目的需要,虚拟化一个Ubuntu OS 来玩 docker,虚拟机选择的是WMWare (VMware-player-14.0.0-6661328); Ubuntu的镜像来自于官网(ubu ...

随机推荐

  1. c++ primer 5 表达式

    简单总结下容易忽视的地方和易错点吧 1 常用的位操作符,leecode很多算法题都是靠位运算解决的 2 箭头操作符 -> 等价于(*  ).   对指针的成员操作 3 sizeof操作符 对 c ...

  2. DB First 中对Repository 层封装的几点小记

    在数据库表创建完成的情况下,使用DB First 进行开发,封装底层会遇到一些小问题,在此记录一下,供以后参考. 主要解决的问题有: 1.EF上下文管理 2.BaseRepository的封装 3.E ...

  3. img标签src图片地址找不到显示默认图片

    可以采用onerror的属性: onerror="javascript:this.src='${base}/after/img/aifu.png'" <img id=&quo ...

  4. (13) go map

    1.定义 map 无序, key唯一 (1) (2) (3)定义+赋值 2. map的值时map, 记得要make 3.增删改查 (1)增 改 (2)删除 (3)查 4.遍历 值map 嵌套for, ...

  5. 【数学】Codeforces Round #470 (Div2) B

    题目链接:http://codeforces.com/contest/948/problem/B 题目大意:有一个大于等于3的数X0,任意选择一个小于X0的质数P0,乘以一个数k使k*P0>=X ...

  6. 51nod1515 明辨是非 并查集 + set

    一开始想的时候,好像两个并查集就可以做......然后突然懂了什么.... 相同的并查集没有问题,不同的就不能并查集了,暴力的来个set就行了..... 合并的时候启发式合并即可做到$O(n \log ...

  7. [APIO2015]巴厘岛的雕塑 --- 贪心 + 枚举

    [APIO2015]巴厘岛的雕塑  题目描述 印尼巴厘岛的公路上有许多的雕塑,我们来关注它的一条主干道. 在这条主干道上一共有\(N\)座雕塑,为方便起见,我们把这些雕塑从 1 到\(N\)连续地进行 ...

  8. HDU 1011 Starship Troopers 树形+背包dp

    http://acm.hdu.edu.cn/showproblem.php?pid=1011   题意:每个节点有两个值bug和brain,当清扫该节点的所有bug时就得到brain值,只有当父节点被 ...

  9. POJ2185 Milking Grid KMP两次(二维KMP)较难

    http://poj.org/problem?id=2185   大概算是我学KMP简单题以来最废脑子的KMP题目了 , 当然细节并不是那么多 , 还是码起来很舒服的 , 题目中描写的平铺是那种瓷砖一 ...

  10. Ajax 跨域问题(JSONP && Access-Control-Allow-Origin)

    1.使用jsonp跨域请求 2.通过设置服务端头部跨域请求 3.设置nginx/apach 使用jsonp跨域请求 什么是Jsonp JSONP(JSON with Padding)是一个非官方的协议 ...