在这篇文章中。我们将介绍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. Selenium_Page Object设计模式

    Page Object 介绍 Page Object设计模式的优点如下: 减少代码的重复 提高测试用例的可读性 提高测试用例的可维护性,特别是针对UI频繁变化的项目 当Web页面编写测试时,需要操作该 ...

  2. Error: could not open `C:\Java\jre7\lib\i386\jvm.cfg

    打开eclipse时出现Error: could not open `C:\Program Files\Java\jre7\lib\i586\jvm.cfg’) 删除 c:\windows\syste ...

  3. JavaScript 兼容性总结

     请实现鼠标点击任意标签,alert该标签的名称(注意兼容性) function elementName(evt){ evt = evt|| window.event; var selected = ...

  4. WordPress用户角色与用户能力/权限

    WordPress用户角色(user roles)是WP或者其它插件增加的,可以让网站管理员(网站管理员也是一种角色)来方便的管理用户的权限/能力(Capabilities,一般情况下,一种角色不止有 ...

  5. PHP 标准AES加密算法类

    分享一个标准PHP的AES加密算法类,其中mcrypt_get_block_size('rijndael-128', 'ecb');,如果在不明白原理的情况下比较容易搞错,可以通过mcrypt_lis ...

  6. [loj2116]「HNOI2015」开店 动态点分治

    4012: [HNOI2015]开店 Time Limit: 70 Sec  Memory Limit: 512 MBSubmit: 2452  Solved: 1089[Submit][Status ...

  7. 分子量(UVa1586)

    题目具体描述见:https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&category=830&a ...

  8. Codeforces Round #278 (Div. 1) B - Strip dp+st表+单调队列

    B - Strip 思路:简单dp,用st表+单调队列维护一下. #include<bits/stdc++.h> #define LL long long #define fi first ...

  9. HTML5实战与剖析之原生拖拽(一拖拽历史概述)

    提起拖拽,我就想起了在JavaScript培训的时候一个非常好玩的效果,那就是拖拽了.可以用鼠标任意拖拽着一个物体到任何你想去的地方. 最早拥有JavaScript拖拽功能的是IE4浏览器.当时,网页 ...

  10. 2017-2018-1 20179202《Linux内核原理与分析》第四周作业

    一.跟踪分析内核的启动过程实验 : 1.启动Menuos: qemu仿真kernel: qemu -kernel linux-3.18.6/arch/x86/boot/bzImage -initrd ...