当前位置: 首页 > news >正文

Ubuntu OS应用Runtime Enviroment

在这篇文章中。我们将介绍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库来读取该应用的环境变量。

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


 


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


  • 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两种方法来得到环境变量的值。



相关文章:

  • [转]如何判断js中的数据类型
  • 武汉Uber优步司机奖励政策(12月21日-12.27日)
  • Java基础学习总结(5)——多态
  • 【CURL】PHP的CURL开发项目最佳实践
  • WordPress 全方位优化指南(上)
  • 光播的一些属性设置
  • iOS Swizzle
  • 我的Python 学习之旅 从0开始的小白
  • excel文件怎么使用php进行处理
  • MongoDB常用命令
  • [MFC] VS2013版本MFC工程移植到VC6.0上
  • 关于APP,原生和H5开发技术的争论
  • CentOS7+Tomcat 生产系统部署
  • 只有明确目标和方向才能直冲云霄
  • 如何解决MathType特殊字符在InDesign中的这些问题
  • [PHP内核探索]PHP中的哈希表
  • [iOS]Core Data浅析一 -- 启用Core Data
  • AngularJS指令开发(1)——参数详解
  • Essential Studio for ASP.NET Web Forms 2017 v2,新增自定义树形网格工具栏
  • JavaScript 奇技淫巧
  • jQuery(一)
  • JS函数式编程 数组部分风格 ES6版
  • Median of Two Sorted Arrays
  • nodejs:开发并发布一个nodejs包
  • React as a UI Runtime(五、列表)
  • Spring思维导图,让Spring不再难懂(mvc篇)
  • UMLCHINA 首席专家潘加宇鼎力推荐
  • 工作中总结前端开发流程--vue项目
  • 以太坊客户端Geth命令参数详解
  • AI算硅基生命吗,为什么?
  • hi-nginx-1.3.4编译安装
  • ​iOS安全加固方法及实现
  • #【QT 5 调试软件后,发布相关:软件生成exe文件 + 文件打包】
  • $redis-setphp_redis Set命令,php操作Redis Set函数介绍
  • (BFS)hdoj2377-Bus Pass
  • (C)一些题4
  • (非本人原创)史记·柴静列传(r4笔记第65天)
  • (附源码)spring boot基于Java的电影院售票与管理系统毕业设计 011449
  • (规划)24届春招和25届暑假实习路线准备规划
  • (介绍与使用)物联网NodeMCUESP8266(ESP-12F)连接新版onenet mqtt协议实现上传数据(温湿度)和下发指令(控制LED灯)
  • (转)LINQ之路
  • (转)visual stdio 书签功能介绍
  • .a文件和.so文件
  • .htaccess 强制https 单独排除某个目录
  • .net wcf memory gates checking failed
  • .net 中viewstate的原理和使用
  • [ SNOI 2013 ] Quare
  • [ 云计算 | AWS 实践 ] Java 如何重命名 Amazon S3 中的文件和文件夹
  • [2016.7.test1] T2 偷天换日 [codevs 1163 访问艺术馆(类似)]
  • [20170705]lsnrctl status LISTENER_SCAN1
  • [20171106]配置客户端连接注意.txt
  • [2018-01-08] Python强化周的第一天
  • [51nod1610]路径计数
  • [Android]创建TabBar
  • [C]整形提升(转载)