ubuntu 应用程序设置 开机自启动

1. 通过.desktop方式

autostart   中.desktop 配置文件

1.1 用户级自启动

登录后才可以启动服务。

  • 可视化配置:在ubuntu自带的可视化程序来配置,就是StartupApplications,它在启动台中可以找到。

  • 在ubuntu下目录是 ~/.config/autostart 添加配置文件

1.2配置文件解析

重要参数:

  1. Type:定义条目的类型。对于应用程序,通常设置为 Application
  2. Exec:定义启动应用程序时要执行的命令或脚本。
  3. Name:应用程序的名称。
  4. Comment:关于应用程序的简短描述或注释。
  5. Icon:应用程序的图标路径。
  6. Terminal:如果设置为 true,则应用程序将在终端窗口中运行。
  7. Categories:定义应用程序所属的类别,用于在应用程序菜单中组织应用程序。
  8. Hidden:如果设置为 true,则应用程序不会在应用程序菜单中显示。
  9. NoDisplay:如果设置为 true,则条目不会在桌面环境的应用程序菜单中显示,但可以通过其他方式(如命令行)启动。
  10. X-GNOME-Autostart-enabled:这是一个非标准的键,但在许多GNOME桌面环境中使用,用于指示应用程序是否应在登录时自动启动。设置为 true 以启用自动启动。

其他参数:

  1. Version:指定 .desktop 文件遵循的 Desktop Entry 文件标准版本。

  2. GenericName:应用程序的通用名称,用于在应用程序菜单中提供更广泛的描述。

  3. MimeType:定义与该应用程序相关联的MIME类型。这通常用于文件关联,即当用户双击某种类型的文件时,自动启动这个应用程序。

  4. Keywords:用于搜索和识别应用程序的关键词列表。

  5. StartupNotify:如果设置为 true,则系统会显示启动通知,告知用户应用程序正在启动。

  6. StartupWMClass:指定窗口管理器如何识别和分组应用程序的实例。这对于确保应用程序窗口在任务栏或窗口列表中正确显示和分组很有用。

  7. TryExec:指定一个命令或脚本,用于检查应用程序是否可以运行。如果此命令或脚本不存在或无法执行,则 .desktop 文件可能被视为无效,并且应用程序可能不会在菜单中显示。

  8. OnlyShowIn 和 NotShowIn:这些参数用于定义在哪些桌面环境或菜单中显示应用程序。OnlyShowIn 列出应该显示此条目的桌面环境,而 NotShowIn 列出不应显示此条目的桌面环境。

  9. Actions:定义应用程序可以执行的一组动作或命令。每个动作通常有自己的 [Desktop Action 名称] 部分,其中包含 ExecName 和其他相关参数。

[Desktop Entry]  
Type=Application  
Name=My Custom App  
Comment=This is my custom application  
Exec=/path/to/your/app  
Icon=/path/to/icon.png  
Terminal=false  
Categories=Utility;Application;  
StartupNotify=true  
StartupWMClass=my-custom-app  
Keywords=custom;utility;tool  
MimeType=application/x-my-custom-app-file;  
TryExec=/path/to/your/app  
OnlyShowIn=GNOME;XFCE;  
Actions=OpenNewWindow;  
  
[Desktop Action OpenNewWindow]  
Name=Open New Window  
Exec=/path/to/your/app --new-window

在这个示例中,除了之前提到的参数外,还添加了 StartupNotifyStartupWMClassKeywordsMimeTypeTryExec 和 Actions 等参数。每个 [Desktop Action] 部分定义了一个新动作,这里定义了一个名为 "OpenNewWindow" 的动作,当用户在应用程序菜单中选择这个动作时,会执行指定的 Exec 命令。

[Desktop Entry]  
Type=Application  
Exec=/path/to/your/app  
Name=My Custom App  
Comment=This is my custom application that starts automatically on login  
Icon=/path/to/icon.png  
Terminal=false  
Categories=Utility;Application;  
Hidden=false  
NoDisplay=false  
X-GNOME-Autostart-enabled=true
  • Exec 参数指向了应用程序的可执行文件。
  • Name 和 Comment 参数分别定义了应用程序的名称和描述。
  • Icon 参数指向了应用程序的图标文件。
  • Terminal 设置为 false,表示应用程序不在终端窗口中运行。
  • Categories 定义了应用程序的类别,这里将其归类为“Utility”和“Application”。
  • Hidden 和 NoDisplay 均设置为 false,表示应用程序在应用程序菜单中可见。
  • X-GNOME-Autostart-enabled 设置为 true,表示该应用程序将在登录时自动启动。

请注意,.desktop 文件的参数可能因桌面环境的不同而有所差异。上述示例适用于基于GNOME的桌面环境,如Ubuntu的默认桌面环境。如果你使用的是其他桌面环境,可能需要查阅该环境的文档以获取准确的参数列表和含义。

重点:

Exec=下可以配置环境变量,例如定义日志输出位置,之前发现启动程序后日志为输出到相对目录下。

Exec=env LOG_PATH=/path/to/your/log/directory /path/to/your/app在你的应用程序代码中,你可以读取这个环境变量来确定日志文件的路径。

在 .desktop 文件的 Exec 字段中,你可以使用各种环境参数来配置应用程序的启动环境。虽然环境参数本身并不是由 .desktop 文件规范定义的,而是由 Unix 和 Linux 的 shell 环境提供的,但以下是一些常见的环境参数示例,你可以在 Exec 字段中使用它们:

系统和环境变量

  • $HOME:当前用户的主目录。
  • $USER:当前用户的用户名。
  • $DISPLAY:当前使用的 X 显示器的名称。
  • $PATH:包含可执行文件搜索路径的环境变量。
  • LANG∗∗和∗∗LANGUAGE:定义当前的语言环境。

自定义环境变量

你可以在 Exec 字段中直接设置自定义的环境变量,例如:

Exec=env MY_CUSTOM_VAR=value /path/to/your/app

在这个例子中,MY_CUSTOM_VAR 是一个自定义的环境变量,其值为 value。应用程序可以通过适当的方式(如使用 getenv 函数)来读取这个环境变量的值。

使用现有的环境变量

你也可以在 Exec 字段中引用已经存在的环境变量,例如:

Exec=/path/to/your/app --config=$HOME/.config/myapp/config.ini

在这个例子中,$HOME 环境变量被用来构建配置文件的完整路径。

组合多个环境变量

你还可以组合多个环境变量来构建命令或参数,例如:

Exec=env MY_DIR=$HOME/myapp /path/to/your/app --data-dir=$MY_DIR/data

在这个例子中,我们首先设置了一个名为 MY_DIR 的环境变量,然后在同一个 Exec 字段中引用了它。

注意事项

  • 安全性:在使用环境变量时,要注意安全性问题。确保不要将敏感信息(如密码或私钥)作为环境变量传递,除非你确定这样做是安全的。
  • 引号处理:如果环境变量的值包含空格或特殊字符,你可能需要使用引号来确保它们被正确解析。例如:MY_VAR="value with spaces"
  • 传递多个参数:如果需要传递多个环境变量,可以使用 env 命令来设置它们,如上面示例所示。也可以直接在 Exec 字段中使用多个赋值表达式,用分号分隔。

系统级三个目录的区别


/etc/xdg/autostart:
这个目录用于添加图形界面下的系统级自启动程序。通常,在这里放置的是以.desktop为后缀的文件,
这些文件指定了要启动的程序和相关设置。当图形界面启动时,会自动运行这些程序。

/etc/init.d:
这个目录包含了系统启动时需要的脚本。这些脚本通常以shell脚本的形式存在,用于启动或停止系统服务。
不过,要注意的是,自Ubuntu 15.04版本开始,/etc/init.d目录已不再被推荐使用,而是被systemd服务替代。

/etc/rc.local:
这个文件是一个在系统启动时执行的shell脚本。可以将需要在系统启动时运行的命令或程序添加到这个文件中。
不过,同样需要注意的是,在某些新版本的Ubuntu中,/etc/rc.local文件可能默认不存在,需要手动创建并确保其可执行。

值得注意的是: 修改这些目录和文件需要 root 权限,普通用户无法操作

系统级自启动配置
可以发现在 /etc/xdg/autostart 下的文件都是以 .desktop 为后缀名的文件,在我之前的文章中有个创建桌面图标的教程,那个要配置的文件也是 .desktop 。没错,他俩一样。
那么他们最明显的一个区别就是 在用户自启动的 .desktop 中都含有 X-GNOME-Autostart-enabled 这个键,
而且它的值都是 true, 他表示为是否自动启动该脚本。
以下是 .desktop 文件的格式
开头还是 [Desktop Entry] ,这是 .desktop 的统一格式
然后是一些常见的 键

                        
原文链接:https://blog.csdn.net/m0_73865314/article/details/135880221

3. 使用符号链接

如果日志文件已经被写到了 home 目录下,并且你不想修改代码或环境,你还可以考虑在 home 目录下的日志文件夹和程序的期望相对路径之间创建一个符号链接。这样,虽然日志文件实际上在 home 目录下,但程序会以为它们在期望的相对路径下。

在Linux中,你可以使用 ln -s 命令来创建符号链接,例如:

ln -s ~/logs /path/to/your/app/relative/path/to/logs

这条命令会在 /path/to/your/app/relative/path/to/logs 创建一个指向 ~/logs 的符号链接。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/535928.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

《前端面试题》- JS基础 - 伪数组

第一次听说伪数组这个概念,听到的时候还以为是说CSS的伪类呢,网上一查,这东西原来还是个很常见的家伙。 何为伪数组 伪数组有两个特点: 具有length属性,其他属性(索引)为非负整数但是却不具备…

solidworks electrical 2D和3D有什么区别

SolidWorks Electrical 是一款专为电气设计开发的软件工具,它提供了两种主要的工作环境:2D电气设计和3D电气集成设计。两者在功能和应用场景上存在显著的区别: SolidWorks Electrical 2D 设计 特点与用途: SolidWorks Electrica…

小程序中配置scss

找到:project.config.json 文件 setting 模块下添加: "useCompilerPlugins": ["sass","其他的样式类型"] 配置完成后,重启开发工具,并新建文件 结果:

MapReduce过程解析

一、Map过程解析 Read阶段:MapTask通过用户编写的RecordReader,从输入的InputSplit中解析出一个个key/value。Map阶段:将解析出的key/value交给用户编写的Map()函数处理,并产生一系列的key/value。Collect阶段:在用户编…

Day36|贪心算法part05:435. 无重叠区间、763.划分字母区间、56. 合并区间

435. 无重叠区间 有了上题射气球的因子,这题也就有思路了,反正无脑排序就行了: 首先将所有区间按照end的大小从小到大排序;选取最早end为起始x_end遍历所有区间,如果该区间的start比end大(可重叠&#xf…

【牛客SQL快速入门】SQL基础(三)

一、条件函数 IF 条件函数 IF函数是最常用到的条件函数,写法为 if(xn,a,b),xn代表判断条件,如果xn时,那么结果返回a,否则返回b。 -- 把非北京大学的用户统一归为其他大学 Select device_id,if(university ‘北京大…

51-基于GitHubActions的CI实战

在Go项目开发中,我们要频繁地执行静态代码检查、测试、编译、构建等操作。如果每一步我们都手动执行,效率低不说,还容易出错。所以,我们通常借助CI系统来自动化执行这些操作。 当前业界有很多优秀的CI系统可供选择,例…

✌2024/4/3—力扣—无重复字符的最长子串

代码实现&#xff1a; 解法一&#xff1a;暴力法 int lengthOfLongestSubstring(char *s) {int hash[256] {0};int num 0;for (int i 0; i < strlen(s); i) {int count 0;for (int j i; j < strlen(s); j) {if (hash[s[j]] 0) {hash[s[j]];count;num num > cou…

基于 WebRTC 实现的点对点文件传输和音视频聊天工具 | 开源日报 No.220

tl-open-source/tl-rtc-file Stars: 2.1k License: MIT tl-rtc-file 是一个基于 WebRTC 的文件传输工具&#xff0c;支持跨终端、不限平台的在线文件传输。它提供了丰富的功能和特性&#xff1a; 分片传输&#xff1a;支持大型文件的分片传输&#xff0c;确保高效稳定地完成上…

OSPF的P2P和Broadcast

OSPF为什么会有P2P和BROADCAST两种类型 OSPF&#xff08;开放最短路径优先&#xff09;协议中存在P2P&#xff08;点对点&#xff09;和BROADCAST&#xff08;广播多路访问&#xff09;两种网络类型&#xff0c;主要是为了适应不同类型的网络环境和需求。具体分析如下&#xf…

Prototype 原型

意图 用原型实例指定创建对象的种类&#xff0c;并且通过复制这些原型创建新的对象。 结构 Prototype声明一个复制自身的接口。ConcretePrototype实现一个复制自身的操作。Client让一个原型复制自身从而创建一个新的对象。 适用性 当一个系统应该独立于他的产品创建、构成和…

设备基础命令,路由基础

直连路由 静态路由 动态路由 根据路由器学习路由信息、生成并维护路由表的方法包括直连路由(Direct)、静态路由(Static)和动态路由(Dynamic)。直连路由&#xff1a;路由器接口所连接的子网的路由方式称为直连路由&#xff1b;非直连路由&#xff1a;通过路由协议从别的路由器…

docker exec 命令提示:Error: No such container: /bin/bash

虽然是低级错误&#xff0c;但是还是记录一下吧。。。。。。。。 这个容器运行起来了&#xff0c;docker ps 是可以查询到的 但是 我想进入 容器内部时就出现了&#xff1a; docker exec -it /bin/bash e51b4dcdf51a Error: No such container: /bin/bash 开始以为是容器内部…

C语言 | Leetcode C语言题解之第22题括号生成

题目&#xff1a; 题解&#xff1a; // 回溯法求解 #define MAX_SIZE 1430 // 卡特兰数: 1, 1, 2, 5, 14, 42, 132, 429, 1430 void generate(int left, int right, int n, char *str, int index, char **result, int *returnSize) {if (index 2 * n) { // 当前长度已达2nre…

多线程的入门(五)线程池的保活策略

线程池是如何保活的呢&#xff1f;通过对源码的分析得出&#xff0c;线程池通过阻塞队列&#xff0c;与关闭工作线程后新生成空闲线程实现的保活策略源代码如下&#xff1a; runkworker&#xff08;&#xff09;方法的getTask&#xff08;&#xff09;方法中有这样一段代码&…

FMix: Enhancing Mixed Sample Data Augmentation 论文阅读

1 Abstract 近年来&#xff0c;混合样本数据增强&#xff08;Mixed Sample Data Augmentation&#xff0c;MSDA&#xff09;受到了越来越多的关注&#xff0c;出现了许多成功的变体&#xff0c;例如MixUp和CutMix。通过研究VAE在原始数据和增强数据上学习到的函数之间的互信息…

避免使用第三方工具完成电脑环境检测

0. 简介 在之前配置各种深度学习环境的时候经常需要先检测一下电脑的软硬件环境&#xff0c;其实整个过程比较重复和固定&#xff0c;所以我们是否有可能一键检测Python版本、PIP版本、Conda版本、CUDA版本、电脑系统、CPU核数、CPU频率、内存、硬盘等内容这是很多Deepper苦恼…

Nginx+Keepalived Kubernetes 负载均衡

部署NginxKeepalived高可用负载均衡器 kube-apiserver高可用架构图&#xff1a; Nginx是一个主流Web服务和反向代理服务器&#xff0c;这里用四层实现对apiserver实现负载均衡。Keepalived是一个主流高可用软件&#xff0c;基于VIP绑定实现服务器双机热备&#xff0c;在上述拓…

关于部署ELK和EFLKD的相关知识

文章目录 一、ELK日志分析系统1、ELK简介1.2 ElasticSearch1.3 Logstash1.4 Kibana&#xff08;展示数据可视化界面&#xff09;1.5 Filebeat 2、使用ELK的原因3、完整日志系统的基本特征4、ELK的工作原理 二、部署ELK日志分析系统1、服务器配置2、关闭防火墙3、ELK ElasticSea…

React + three.js 3D模型骨骼绑定

系列文章目录 React 使用 three.js 加载 gltf 3D模型 | three.js 入门React three.js 3D模型骨骼绑定React three.js 3D模型面部表情控制 项目代码(github)&#xff1a;https://github.com/couchette/simple-react-three-skeleton-demo 项目代码(gitcode)&#xff1a;https:…