Ubuntu:设置程序开机自启动

环境:ubuntu20.04

此种方法适用于有界面的程序。

一、Desktop Entry文件介绍

Desktop Entry 文件以 ".desktop" 为后缀名。.desktop文件实际上是一种文本格式的配置文件,其中记录了应用程序的各种信息。这些信息涵盖了应用的名称、简要描述、启动指令以及图标等。也可以把.desktop文件理解为windows中的快捷方式。

以下是一个最简单的.desktop的描述

bash 复制代码
[Desktop Entry]
Type=Application
Name[zh_CN]=我的应用
Exec=/home/qing222/code/test_delete/build-HelloWorld-unknown-Debug/HelloWorld

.desktop 文件字段详解

字段名 必需 描述 示例
基本字段
Type ✅ 条目类型 Application, Link, Directory
Name ✅ 显示名称 Name=Firefox
Exec ✅ 执行命令 Exec=firefox %u
显示字段
Icon ❌ 图标 Icon=firefox 或绝对路径
Comment ❌ 描述/提示 Comment=网页浏览器
GenericName ❌ 通用名称 GenericName=Web Browser
分类字段
Categories ❌ 应用程序分类 Categories=Network;WebBrowser;
Keywords ❌ 搜索关键词 Keywords=web;browser;
行为控制
Terminal ❌ 是否在终端运行 Terminal=false
NoDisplay ❌ 菜单中隐藏 NoDisplay=false
Hidden ❌ 完全禁用 Hidden=false
高级字段
MimeType ❌ 关联文件类型 MimeType=text/html;
StartupNotify ❌ 启动通知 StartupNotify=true
StartupWMClass ❌ 窗口类关联 StartupWMClass=firefox
OnlyShowIn ❌ 仅显示环境 OnlyShowIn=GNOME;
NotShowIn ❌ 不显示环境 NotShowIn=KDE;
国际化
Name[locale] ❌ 本地化名称 Name[zh_CN]=火狐
Comment[locale] ❌ 本地化描述 Comment[zh_CN]=网页浏览器

.desktop文件的存放位置决定了其作用范围:

系统级:/usr/share/applications/,所有用户可见,通常由软件包管理器安装。

用户级:~/.local/share/applications/,仅当前用户可见,用于自定义或覆盖系统应用。

桌面图标:直接放在用户主目录的桌面文件夹(如~/Desktop/),但需确保文件名以.desktop结尾。

二、操作步骤

1、创建.desktop文件

创建文件后直接编辑

bash 复制代码
touch HelloWorld.desktop

2、提供权限

bash 复制代码
chmod +x HelloWorld.desktop

3、将.desktop文件移到~/.config/autostart/路径下

用户级别:放在~/.config/autostart/路径下

系统级别:放在/etc/xdg/autostart路径下

如果autostart文件夹不存在则手动创建。

4、重启系统

重启系统后程序就会自动运行。取消自启动直接删除.desktop文件即可。

三、遇到的问题

1、将GateWay.desktop文件移到~/.config/autostart/后没有开机自启动

解决方法:修改GateWay.desktop文件,增加打印输出/home/Desktop/GateWay_start.log文件

bash 复制代码
[Desktop Entry]
Type=Application
Exec=bash -c "/opt/workspace/runningspace/GateWay > /home/Desktop/GateWay_start.log 2>&1"
Hidden=false
NoDisplay=false
X-GNOME-Autostart-enabled=true
Name[zh_CN]=光纤机网关自启动
Name=光纤机网关自启动
Comment[zh_CN]=
Comment=

查看打印日志,发现是找不到qt相关的库导致程序没跑起来

bash 复制代码
/home/embedsky/Desktop/GateWay: error while loading shared libraries: libQt5Charts.so.5: cannot open shared object file: No such file or directory

这说明是环境变量没设置好。关键是无论是为root用户还是普通用户设置了qt的环境变量,还是提示找不到这个qt库。说明开机自启动所使用的环境变量和root用户或者普通用户不一样

继续修改GateWay.desktop文件,在运行程序前在当前环境导入qt的库

bash 复制代码
[Desktop Entry]
Type=Application
Exec=bash -c "export LD_LIBRARY_PATH=\"/usr/local/Qt-5.15.4/lib\" && /opt/workspace/runningspace/GateWay"
Hidden=false
NoDisplay=false
X-GNOME-Autostart-enabled=true
Name[zh_CN]=光纤机网关自启动
Name=光纤机网关自启动
Comment[zh_CN]=
Comment=

问题解决。

相关推荐
say_fall1 小时前
【Linux网络编程】UDP套接字编程:系统编程组件、基础回显服务、InetAddr与地址转换、翻译服务与线程池聊天室
linux·服务器·网络·udp·vr
ö Constancy2 小时前
一台电脑的硬件组成与作用:按功能分类详解(Windows 与 Linux 视角)
linux·windows·电脑
江湖有缘2 小时前
基于Ubuntu部署SoduWork:企业级 AI 原生协同平台实战全流程
linux·人工智能·ubuntu·ai·soduwork
无奈笑天下11 小时前
银河麒麟上nproc命令教程详解
linux·运维·服务器
Rabitebla14 小时前
【Linux】进程控制(十二) 自定义 Shell(二):内建命令与进程工作目录管理
linux·c++·笔记·学习·bash
威嵌神州15 小时前
嵌入式排故实录:高并发下串口数据“超时丢包”的根因剖析与架构优化
运维·服务器·嵌入式硬件·缓存
Decay__15 小时前
SQLServer 索引与 SQL 优化 —— 聚集索引、非聚集索引、覆盖索引、碎片维护与执行计划
运维·数据库·sql·mysql·架构
java_logo16 小时前
Docker 部署 DeepSeek Harness(moelin):轻松搭建带登录的本地 AI Agent 平台
运维·docker·容器·ai agent·deepseek·harness·轩辕镜像
坤坤子吖18 小时前
Linux网络编程:TCP 粘包与半包问题,如何正确处理 TCP 流式数据?
linux·服务器·网络·笔记·网络协议·学习
AI_Gump18 小时前
Harness篇|DeepSeek Harness 上手机:五条安卓移植路线与 App 内 Linux 拆解
android·linux·人工智能·智能手机·deepseek