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

@ohos.systemParameterEnhance系统参数接口调用:控制设备硬件(执行shell命令方式)

本文介绍如何使用应用@ohos.systemParameterEnhance (系统参数)(系统接口)来控制设备硬件,可以通过它在系统中执行一段shell命令,从而实现控制设备的效果。接下来以一个实际的样例来演示如何通过它来控制设备以太网接口

开源地址:https://gitee.com/from-north-to-north/ohos.systemParameterEnhance

开发环境

  • DAYU200 rk3568开发板
  • OpenHarmony 4.1r
  • API 10 (full sdk)
  • DevEco Studio 4.1 Release

1.应用开发部分

1.首先安装full sdk

  • 安装full sdk教程:https://ost.51cto.com/posts/26752

2.修改full_sdk/toolchains/lib/UnsgnedDebugProfileTemplate.json文件

  • apl的值从normal改为system_basic
  • app-feature值的由hos_normal_app改为hos_system_app

3.新建一个OpenHarmony应用工程,调用如下方法,然后正常自动签名安装。

import systemparameter from '@ohos.systemParameterEnhance';Text("关闭eth0以太网接口").fontSize(50).fontWeight(FontWeight.Bold).onClick(()=>{try {systemparameter.setSync("sys.ifconfig.eth0", "down");}catch(e){console.log("set unexpected error: " + e);}})Text("开启eth0以太网接口").fontSize(50).fontWeight(FontWeight.Bold).onClick(()=>{try {systemparameter.setSync("sys.ifconfig.eth0", "up");}catch(e){console.log("set unexpected error: " + e);}})

4.然后获取该hap的证书指纹,进行应用特权配置。

hdc shell "bm dump -n 应用的bundle_name | grep finger"

image.png

image.png

5.配置应用特权。提取当前开发板中的特权配置文件install_list_capability.json,文件位于/etc/app/中。

hdc file recv /etc/app/install_list_capability.json D:\

在install_list_capability.json中添加 应用的配置信息

image.png


将特权配置文件install_list_capability.json推送回系统中,覆盖系统配置。然后 重启系统使得系统配置生效。

hdc shell "mount -o remount,rw /"
hdc file send d:\install_list_capability.json /etc/app/install_list_capability.json
hdc shell reboot

系统开发部分

1.新建init services如下,放到开发板/system/etc/init下

{"jobs" : [{"name" : "param:sys.ifconfig.eth0=up","condition" : "sys.ifconfig.eth0=up","cmds" : ["start if_eth0_up"]}, {"name" : "param:sys.ifconfig.eth0=down","condition" : "sys.ifconfig.eth0=down","cmds" : ["start if_eth0_down"]}], "services" : [{"name" : "if_eth0_up","start-mode" : "condition","path" : ["/system/bin/ifconfig", "eth0", "up"],"disabled" : 1,"sandbox" : 0,"uid" : "root","gid" : ["shell"],"once" : 1,"secon" : "u:object_r:sh_exec:s0"},{"name" : "if_eth0_down","start-mode" : "condition","path" : ["/system/bin/ifconfig", "eth0", "down"],"disabled" : 1,"sandbox" : 0,"uid" : "root","gid" : ["shell"],"once" : 1,"secon" : "u:object_r:sh_exec:s0"}]
}
hdc shell "mount -o remount,rw /"
hdc file send a.cfg /system/etc/init
hdc shell reboot

image.png

2.关闭selinux

  • 默认DAC规则只允许三方应用对参数具有get, watch 的权限,因此三方应用若需要set权限需要重新设置DAC规则。 此外, 三方应用的selinux权限默认是未设置的,因此需要参照mac访问控制权限设置进行设置。如果需要设置请参考:https://docs.openharmony.cn/pages/v4.1/zh-cn/device-dev/subsystems/subsys-boot-init-sysparam.md#dac%E8%AE%BF%E9%97%AE%E6%8E%A7%E5%88%B6%E6%9D%83%E9%99%90%E8%AE%BE%E7%BD%AE
  • 此处我们选择关闭selinux来规避这个问题
临时关闭可进入shell使用如下命令:
hdc shell setenforce 0永久性生效,执行以下命令:
hdc shell mount -o rw,remount /
hdc shell "sed -i 's/enforcing/permissive/g' /system/etc/selinux/config"
hdc shell "cat /system/etc/selinux/config |grep SELINUX="
hdc shell reboot# 或者修改源码
1、base/security/selinux_adapter/selinux.gni里面把selinux_enforce改为false
2、vendor/hihope/rk3568/config.json里面把build_selinux改为false

观察运行效果

在终端执行ifconfig命令来观察以太网接口是否被关闭

拓展

1.如果需要执行/vendor/bin下面的bin文件,cfg文件需要放置在/vendor/etc/init下。

2.可以操作接口执行一下shell命令来控制dayu200的led灯

image.png

参考链接

1.https://laval.csdn.net/64b34a863a5d4a7c4342eade.html

2.https://forums.openharmony.cn/forum.php?mod=viewthread&tid=2109

3.https://docs.openharmony.cn/pages/v4.1/zh-cn/application-dev/reference/apis-basic-services-kit/js-apis-system-parameterEnhance-sys.md#systemparametergetsync

4.https://forums.openharmony.cn/forum.php?mod=viewthread&tid=2108

相关文章:

  • 【论文阅读】ColabFold: making protein folding accessible to all
  • 初识Vue.js:从零开始构建你的第一个Vue项目
  • JS中DOM详解【十大点】
  • 【C++】提示并输入一个字符串,统计该字符串中字母个数、数字个数、空格个数、其他字符的个数
  • 【归纳总结】常见排序算法及其实现:直接插入排序、希尔排序、选择排序、堆排序、冒泡排序、快排、归并排序
  • JavaEE-TCP协议
  • 基于x86 平台opencv的图像采集和seetaface6的性别识别功能
  • 【Docker项目实战】使用Docker部署webtop桌面版Linux环境
  • sqli-labs靶场通关攻略(36-40关)
  • 深信服上半年亏损5.92亿,营收同比降低2.3亿
  • 【软件测试】软件测试生命周期与Bug
  • 涉假率超40%!高德上找维修,你心得多大啊……
  • Vue3父组件调用子组件的方法
  • golang RSA 解密前端jsencrypt发送的数据时异常 crypto/rsa: decryption error 解决方法
  • 如何使用ssm实现社区智慧养老监护管理平台+vue
  • JavaScript 如何正确处理 Unicode 编码问题!
  • $translatePartialLoader加载失败及解决方式
  • 【译】React性能工程(下) -- 深入研究React性能调试
  • 002-读书笔记-JavaScript高级程序设计 在HTML中使用JavaScript
  • ECMAScript6(0):ES6简明参考手册
  • JavaScript函数式编程(一)
  • Js实现点击查看全文(类似今日头条、知乎日报效果)
  • k个最大的数及变种小结
  • LintCode 31. partitionArray 数组划分
  • markdown编辑器简评
  • 利用DataURL技术在网页上显示图片
  • 利用阿里云 OSS 搭建私有 Docker 仓库
  • 浅谈Kotlin实战篇之自定义View图片圆角简单应用(一)
  • 如何抓住下一波零售风口?看RPA玩转零售自动化
  • 思否第一天
  • 延迟脚本的方式
  • linux 淘宝开源监控工具tsar
  • ​草莓熊python turtle绘图代码(玫瑰花版)附源代码
  • #[Composer学习笔记]Part1:安装composer并通过composer创建一个项目
  • (01)ORB-SLAM2源码无死角解析-(66) BA优化(g2o)→闭环线程:Optimizer::GlobalBundleAdjustemnt→全局优化
  • (3)nginx 配置(nginx.conf)
  • (C++哈希表01)
  • (超详细)语音信号处理之特征提取
  • (排序详解之 堆排序)
  • (篇九)MySQL常用内置函数
  • (七)MySQL是如何将LRU链表的使用性能优化到极致的?
  • (十)c52学习之旅-定时器实验
  • (中等) HDU 4370 0 or 1,建模+Dijkstra。
  • .mat 文件的加载与创建 矩阵变图像? ∈ Matlab 使用笔记
  • .Net Core和.Net Standard直观理解
  • .net MVC中使用angularJs刷新页面数据列表
  • .net redis定时_一场由fork引发的超时,让我们重新探讨了Redis的抖动问题
  • .NET建议使用的大小写命名原则
  • .net开发时的诡异问题,button的onclick事件无效
  • .NET微信公众号开发-2.0创建自定义菜单
  • .NET中统一的存储过程调用方法(收藏)
  • 。Net下Windows服务程序开发疑惑
  • [ IO.File ] FileSystemWatcher
  • [Android Pro] AndroidX重构和映射
  • [Angular] 笔记 6:ngStyle