linux启动qt登陆时_Linux(Ubuntu/Debian)下将自己应用程序(QT)设置开机自启动

这篇博客介绍了如何在Linux(Ubuntu/Debian)系统中,使用QT应用程序实现开机自启动。主要内容包括创建.startup文件,设置可执行权限,并将其复制到autostart目录下,以及使用QT代码实现通过复选框控制程序的开机启动和关闭。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

工作中需要编写了一个QT程序,需要设置开机启动,在网上找了很多方法,都不太行,最后找到了一个可用的方法,在这里记录一下。

环境:Linux(Ubuntu/Debian)(方德)

QT:5.6.2

一、原理及简单操作

原理:

在 /etc/xdg/autostart 目录下存放着开机自启动的启动器(.desktop)文件,我们可以为自己程序写一个.desktop文件,然后放到这里来,实现开机自启动。

2020年9月18日更新:在当前用户目录下,即$HOME下,路径为$HOME/.config/autostart下放置.desktop文件可以起到为当前用户创建一个开机启动文件

具体实现方法:

1.准备好自己的应用程序,这里我的程序路径为/home/fan/FanTest/FanTestAPP。也可以再准备一个程序图标文件,,最好是64x64的,这里我的程序图标路径为/home/fan/FanTest/FanTest.png。以下命令均在此文件夹下使用。

2.在程序所在的文件夹下创建一个FanTest.desktop的文件,名称可以自己起,后缀为.desktop,我使用的命令是:

touch FanTest.desktop

或者你可以使用其他的方式创建,比如 vim FanTest.desktop。

3.编辑这个文件,添加以下内容,注意把注释删除,末尾不要留空格:

[Desktop Entry] //必须

Version=1.0.0 //版本,可选

Name=FanTest //程序名,必须

Name[zh_CN]=帆 //中文程序名,可选

Exec=/home/fan/FanTest/FanTestAPP //可执行程序路径,必须。路径必须是绝对路径

Icon=/home/fan/FanTest/FanTest.png //程序图标,可选。路径必须是绝对路径,末尾不能有空格,否则将会导致无法加载图标

Type=Application //类型为应用程序,必选

编辑后保存,在终端中输入以下命令为其添加可执行权限,这样就可以双击打开了,也可以复制到桌面作为快捷方式:

chmod 755 FanTest.desktop

4.使用命令将FanTest.desktop复制到/etc/xdg/autostart下,需要root权限:

sudo cp FanTest.desktop /etc/xdg/autostart/

这时重启一下就可以发现程序能够自启动了。

5.如果想要取消自启动,删除/etc/xdg/autostart/下的FanTest.desktop文件即可:

sudo rm -f /etc/xdg/autostart/FanTest.desktop

二、我用QT实现勾选复选框改变是否自启动的功能

这个程序实现了通过勾选复选框改变是否自启动的功能,原理为上述原理,非常简单,有简单注释。

我的基类是widget,如果需要别的请自行更改。

//widget.cpp

#include "widget.h"

#include "ui_widget.h"

#include

#include

#include

#define APPNAME "FanTest"

Widget::Widget(QWidget *parent) :

QWidget(parent),

ui(new Ui::Widget)

{

ui->setupUi(this);

check_autostart(); //启动时检查

}

Widget::~Widget()

{

delete ui;

}

void Widget::set_autostart(){

QString app_name = APPNAME;

QString desktop_dir = "/usr/share/applications/" + app_name + ".desktop";

QString cmd = "pkexec cp " + desktop_dir + " /etc/xdg/autostart/" + app_name + ".desktop";

std::string str = cmd.toStdString();

const char *cmd_cs= str.c_str();

system(cmd_cs); //使用系统命令将.desktop从源地址复制到autostart目录下实现开机自启动,pkexec是弹窗获取root权限

}

void Widget::remove_autostart(){

QString app_name = APPNAME;

QString cmd = "pkexec rm -f /etc/xdg/autostart/"+app_name+".desktop";

std::string str = cmd.toStdString();

const char *cmd_cs= str.c_str();

system(cmd_cs);//使用系统命令删除autostart目录下.desktop文件实现取消开机自启动

}

void Widget::check_autostart()

{

//检查autostart目录下的.desktop文件是否存在实现是否设置自启动了

QString app_name = APPNAME;

QFileInfo file("/etc/xdg/autostart/"+app_name+".desktop");

if(file.exists()==true){

ui->checkBox->setChecked(true);

}

else{

ui->checkBox->setChecked(false);

}

}

void Widget::on_checkBox_clicked(bool checked)

{

if(checked == true){

set_autostart();

check_autostart();//设置完检查是防止没设置成功

}

else{

remove_autostart();

check_autostart();

}

}

//widget.h

#ifndef WIDGET_H

#define WIDGET_H

#include

namespace Ui {

class Widget;

}

class Widget : public QWidget

{

Q_OBJECT

public:

explicit Widget(QWidget *parent = 0);

~Widget();

private slots:

void on_checkBox_clicked(bool checked);

private:

Ui::Widget *ui;

void set_autostart();

void remove_autostart();

void check_autostart();

};

#endif // WIDGET_H

ui就不贴了,只有一个复选框,对象名是默认的checkBox。

参考资料:

[1]ubuntu开机自动运行用Qt写的程序

[2]Qt 判断文件是否存在

[3]linux如何实现开机加载完图形界面后自动运行自己写的一个程序

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值