嵌入式爱好者

6254QT应用开机自启-关闭weston版

2023-8-18 09:20| 发布者: Q_Y_X| 查看: 334| 评论: 0

类目: AM6254系列产品  >  linux     文档编号: 1088

关闭weston和matrix

root@ok6254:~# systemctl disable matrix-gui-2.0
root@ok6254:~# systemctl disable weston 
root@ok6254:~# sync

设置开机自动登陆root用户

root@ok6254:~# vi /lib/systemd/system/serial-getty@.service
添加内容:ExecStart=-/sbin/agetty -a root %I 115200 $TERM
root@ok6254:~# sync

修改内容如下

注意:修改后要检查,如果参数设置有问题会导致系统启动失败,需要重新烧写系统

关闭weston后,应用需要走eglfs,需要在修改环境变量。

root@ok6254:~# vi /etc/profile.d/qt_env.sh
添加内容:export QT_QPA_PLATFORM="eglfs"

在配置文件中指定Qt需要运行的显示设备,DPI-1是lcd屏

root@ok6254:~# vi /etc/qt5/eglfs_kms_cfg.json
根据自己的所用的设备添加内容:
{
  "device": "/dev/dri/card1",
  "hwcursor": false,
  "pbuffers": true,
  "outputs": [
    {
      "name": "DPI-1",
      "mode": "1280x800"
      "size": "1280x800"
      "format": "rgb888"
    },
    {
      "name": "LVDS-1",
      "mode": "1280x800"
    }
  ]
}
root@ok6254:~# sync

由于autorun.sh脚本启动较早,导致登陆用户前,应用起不来,所以我们不使用该脚本进行应用自启。/etc/profile文件在用户登录时启动。当用户登录时,系统会读取/etc/profile文件,并执行其中的命令和设置。这个文件中的内容会对所有用户生效,包括系统管理员和普通用户。所以可以把需要自启的应用加在该脚本中。

root@ok6254:~# vi /etc/profile
在文件末尾添加:
source /etc/profile.d/qt_env.sh
sleep 1                        
/usr/bin/fltest_qt_watchdog    
root@ok6254:~# sync

此时qt应用可以自启动,但是启动后字体有些大,因为之前应用字体是weston处理的,所以现在关闭weston后会变大。可以通过在应用源码中指定字体大小来解决此问题。

#include "mainwindow.h"
#include <QApplication>
#include <QDebug>
#include <QFont>
#include <QLabel>
int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    MainWindow w;
    w.showMaximized();
   qputenv("QT_IM_MODULE", QByteArray("qtvirtualkeyboard"));
    // 获取当前使用的字体
    QFont font = a.font();
   font.setPointSize(5);
   a.setFont(font);
    // 打印字体信息
  qDebug() << "Current Font:" << a.font();
    qDebug()  << "Family: " << font.family();
    qDebug() << "PointSize: " << font.pointSize();
    qDebug() << "Weight: " << font.weight();
    qDebug() << "Italic: " << font.italic();
    return a.exec();
}

profile文件在每次有用户登陆时都会执行一次,为了防止客户使用ssh登陆开发板导致应用反复运行,添加如下代码

FILE=/var/volatile/appstart
if [ ! -f "$FILE" ]; then
echo "app started!" > /var/volatile/appstart
/path/myapp
fi

这段脚本的作用是检查是否存在/var/volatile/appstart文件。如果文件不存在,则输出"app started!"到/var/volatile/appstart文件,并启动两个后台进程/opt/app/getdata1/opt/app/getdata2

这段脚本的逻辑如下:

  1. 定义变量FILE/var/volatile/appstart
  2. 使用条件语句if [ ! -f "$FILE" ]; then检查文件$FILE是否存在。
  3. 如果文件不存在,则执行以下操作:
  • 使用echo命令将"app started!"输出到/var/volatile/appstart文件。
  • 使用&符号将/opt/app/getdata1/opt/app/getdata2两个命令放入后台运行,并使用> /dev/null将输出重定向到空设备,即不显示输出结果。
  1. 结束条件语句。

这段脚本的目的可能是在系统启动时检查是否已经启动了应用程序,并在首次启动时执行一些初始化操作。


已解决

未解决

只是看看

QQ|小黑屋| 飞凌嵌入式 ( 冀ICP备12004394号-1 )

GMT+8, 2024-12-23 18:52

Powered by Discuz! X3.4

© 2001-2013 Comsenz Inc.

返回顶部