如何使用 QML 更改系统日期和时间(嵌入式 Linux)?
Posted
技术标签:
【中文标题】如何使用 QML 更改系统日期和时间(嵌入式 Linux)?【英文标题】:How to change system date and time(embedded Linux) using QML? 【发布时间】:2018-01-05 06:11:30 【问题描述】:如何在 QML 中更改系统时间和日期?我认为这可能从一个例子中起作用,尽管我怀疑对象被发送到哪里。它没有用。有人可以告诉我怎么做吗?以下是我的代码:
var time = new Date()
time.setHours(hour)
time.setMinutes(minute)
time.setSeconds(secs)
【问题讨论】:
闻起来很像XY problem。请编辑您的问题以改进它并给出真正的动机和背景。你有什么样的应用程序?如果您开发一些嵌入式系统,请说出并解释它是什么系统...... 【参考方案1】:没有root权限一般是不能更改系统时间的,设置系统时间是系统管理员的全系统操作。请参阅 settimeofday(2) 和 adjtimex(2)。另见credentials(7) & capabilities(7)。
(所以这不是使用Qt或其他东西的问题;任何使用settimeofday
或adjtimex
的库都需要root权限)
另请阅读time(7)。
而且你一般不应该改变系统时间,而是让一些守护进程使用NTP不断调整它。
你的代码只是改变了一些持有一段时间的变量的值。它不会改变系统时间。
系统管理员可以更改时间,例如date(1) 与 -s
一起使用,这需要 root 权限并在内部使用 settimeofday
。另见hwclock(8)。
请注意,GUI 应用程序通常不应以 root 身份运行(Qt 或 GTK 也不希望以 root 身份运行)。
如果您开发一些嵌入式系统并且希望用户设置时间,您可以考虑编写一些 small 专用的 setuid 可执行文件,它使用 settimeofday(2) 并让您的 GUI 应用程序运行它(例如QProcess)。在编写 setuid 程序时要非常小心(所以请阅读 ALP 或一些关于 Linux 系统编程的好书),因为您很容易得到 vulnerabilities。请注意,setuid 是获取获取或更改权限。它使用起来很棘手,所以请花时间去理解它。
也许您的init
或systemd
可能被配置为简化这样的任务......
(您需要更多地描述您的整个系统以获得更多帮助)
【讨论】:
那用户怎么改呢?我正在 IMX6 平台上工作。 用户不应更改它。你应该有一些使用 NTP 的守护进程。并且系统管理员可以更改它(例如,通过运行,作为 root,date -s
)。
这是一个用户特定的应用程序,我不能在这里完全解释它(对此感到抱歉)。但是每部手机和 PC 都可以选择更改日期和时间,就像我可以让用户选择更改日期和时间一样,如果他/她想更改的话。如何在 QML/javascript 中做到这一点?
按照我的建议,编写您的专用 setuid 程序,然后从您的 Qt 应用程序中运行它。如果你不能解释你的申请,你不应该在 SO 上提问。
顺便说一句,这主要是整个系统和系统管理员的问题。您的系统是否正在运行 systemd
?或者什么样的init
程序?以上是关于如何使用 QML 更改系统日期和时间(嵌入式 Linux)?的主要内容,如果未能解决你的问题,请参考以下文章
是否可以通过远程更改 qml 文件来更新 Qml Android 应用程序