在这篇文章中。我们将介绍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. Java的Stack类实现List接口真的是个笑话吗

        今天在网上闲逛时看到了这样一个言论,说“Java的Stack类实现List接口的设计是个笑话”.   当然作者这篇文章的重点不是这个,原本我也只是一笑置之,然而看评论里居然还有人附和,说“Ja ...

  2. apache、nginx、php、mysql 编译参数查询

    nginx编译参数查看:/usr/local/nginx/sbin/nginx -V apache编译参数查看:cat /usr/local/apache2/build/config.nice mys ...

  3. iOS客户端学习之AES加密

    数据加密在解密在软件开发过程中举足轻重的作用,可能有的公司在加密的时候有自己公司内部一套设计的算法,而在这方面不想浪费太大精力就可以去考虑使用第三方提供的加密算法,如AES加密算法,本篇内容介绍开源中 ...

  4. GO语言Windows下Liteide

    今天用到了. 就学习一下. https://www.golangtc.com/t/56e7caf5b09ecc66b90000fe 在网上看了好多此类介绍,操作太麻烦,自己琢磨出来怎么配置了. 以Li ...

  5. Oracle 入门学习笔记

    linux命令 查看linux系统版本号 uname -r 或 uname -a 查看linux发行版本号 cat /etc/redhat-release 查看linux具体版本号 cat /proc ...

  6. centos6.5挂载windows共享的文件夹

    参考:http://www.centoscn.com/CentOS/Intermediate/2014/0318/2619.html http://www.ailab.cn/article/20150 ...

  7. VuGen录制选项Recording Options

  8. openssl解析国密X509证书

    openssl解析国密X509证书,把公钥拿出来重写一下就行了        x = strToX509(pbCert, pulCertLen);dwRet = getCertPubKey(x, &a ...

  9. 外行人都能看懂的SpringCloud

    一.前言 只有光头才能变强 认识我的朋友可能都知道我这阵子去实习啦,去的公司说是用SpringCloud(但我觉得使用的力度并不大啊~~)... 所以,这篇主要来讲讲SpringCloud的一些基础的 ...

  10. 2017/11/20 Leetcode 日记

    2017/11/14 Leetcode 日记 442. Find All Duplicates in an Array Given an array of integers, 1 ≤ a[i] ≤ n ...