[Seek Help] QT appimage 开机自启动和提权怎么操作
Tofloor
poster avatar
绍贝格尔
deepin
2023-06-29 21:49
Author

QT appimage 开机自启动和提权怎么操作

我做了个软件,他需要权限,我想让它开机自启动,这个应该怎么编写

image.png

Reply Favorite View the author
All Replies
Ziggy
deepin
2023-06-29 22:18
#1

启动器里找到应用右键就可以设置程序自启动

或者使用cron等自动任务service

Reply View the author
owen_337
deepin testing team
2023-06-29 22:32
#2

在 Qt 中,如果你想要让你的 AppImage 在开机时自启动并提权,你需要做以下几步:

  1. 创建一个 .desktop 文件,该文件将在系统启动时运行你的 AppImage。这个文件应该放在 ~/.config/autostart/ 目录下。文件内容参考如下:

[Desktop Entry]
Type=Application
Exec=/path/to/your/appimage
Hidden=false
NoDisplay=false
X-GNOME-Autostart-enabled=true
Name[en_US]=My AppImage
Name=My AppImage
Comment[en_US]=
Comment=

请将 /path/to/your/appimage 替换为你的 AppImage 文件的实际路径。

  1. 为了让你的 AppImage 在启动时获得提权,你可以在 .desktop 文件的 Exec 行中添加 sudo,如下所示:

Exec=sudo /path/to/your/appimage

但是这样做会在每次启动时都要求输入密码。你可以编辑 /etc/sudoers 文件,为你的 AppImage 添加一个无需密码的规则。你可以使用sudo vim 命令来编辑这个文件,然后添加以下行:

yourusername ALL=(ALL) NOPASSWD: /path/to/your/appimage

请将 yourusername 替换为你的用户名,将 /path/to/your/appimage 替换为你的 AppImage 文件的实际路径。

或者:

image.png

image.png

Reply View the author
绍贝格尔
deepin
2023-06-29 23:28
#3
owen_337

在 Qt 中,如果你想要让你的 AppImage 在开机时自启动并提权,你需要做以下几步:

  1. 创建一个 .desktop 文件,该文件将在系统启动时运行你的 AppImage。这个文件应该放在 ~/.config/autostart/ 目录下。文件内容参考如下:

[Desktop Entry]
Type=Application
Exec=/path/to/your/appimage
Hidden=false
NoDisplay=false
X-GNOME-Autostart-enabled=true
Name[en_US]=My AppImage
Name=My AppImage
Comment[en_US]=
Comment=

请将 /path/to/your/appimage 替换为你的 AppImage 文件的实际路径。

  1. 为了让你的 AppImage 在启动时获得提权,你可以在 .desktop 文件的 Exec 行中添加 sudo,如下所示:

Exec=sudo /path/to/your/appimage

但是这样做会在每次启动时都要求输入密码。你可以编辑 /etc/sudoers 文件,为你的 AppImage 添加一个无需密码的规则。你可以使用sudo vim 命令来编辑这个文件,然后添加以下行:

yourusername ALL=(ALL) NOPASSWD: /path/to/your/appimage

请将 yourusername 替换为你的用户名,将 /path/to/your/appimage 替换为你的 AppImage 文件的实际路径。

或者:

image.png

image.png

感谢大佬

例外咨询个问题,appiamge的desktop,这个文件怎么放到/usr/share/application 下;我我按照网上的使用Linuxdeploy和appimage,它不会在/usr/share/application 下创建app.desktop ;我应该做什么它才会创建

Reply View the author
owen_337
deepin testing team
2023-06-29 23:34
#4
绍贝格尔

感谢大佬

例外咨询个问题,appiamge的desktop,这个文件怎么放到/usr/share/application 下;我我按照网上的使用Linuxdeploy和appimage,它不会在/usr/share/application 下创建app.desktop ;我应该做什么它才会创建

首先,我们需要明确一点,AppImage是一种为Linux创建便携式应用程序的格式,它不会在/usr/share/applications下创建.desktop文件。这是因为AppImage的设计理念是“一次打包,到处运行”,不需要安装,也不会在系统中留下任何痕迹。

然而,如果你希望AppImage应用程序在应用程序菜单中显示,你可以手动创建一个.desktop文件并将其放在/usr/share/applications目录下。以下是一个基本的.desktop文件示例:

[Desktop Entry]

Type=Application

Encoding=UTF-8

Name=<应用程序名称>

Comment=<应用程序描述>

Exec=

Icon=<图标文件的完整路径>

Terminal=false

Categories=<应用程序类别>;

你需要将上述模板中的<应用程序名称>、<应用程序描述>、、<图标文件的完整路径>和<应用程序类别>替换为实际的值。

然后,你可以使用以下命令将.desktop文件复制到/usr/share/applications目录:

sudo cp <你的.desktop文件的路径> /usr/share/applications/

实际上,你右键点击桌面上的图标,选择文本编辑器打开,就能看到一个例子了哈

Reply View the author
绍贝格尔
deepin
2023-06-29 23:47
#5
owen_337

首先,我们需要明确一点,AppImage是一种为Linux创建便携式应用程序的格式,它不会在/usr/share/applications下创建.desktop文件。这是因为AppImage的设计理念是“一次打包,到处运行”,不需要安装,也不会在系统中留下任何痕迹。

然而,如果你希望AppImage应用程序在应用程序菜单中显示,你可以手动创建一个.desktop文件并将其放在/usr/share/applications目录下。以下是一个基本的.desktop文件示例:

[Desktop Entry]

Type=Application

Encoding=UTF-8

Name=<应用程序名称>

Comment=<应用程序描述>

Exec=

Icon=<图标文件的完整路径>

Terminal=false

Categories=<应用程序类别>;

你需要将上述模板中的<应用程序名称>、<应用程序描述>、、<图标文件的完整路径>和<应用程序类别>替换为实际的值。

然后,你可以使用以下命令将.desktop文件复制到/usr/share/applications目录:

sudo cp <你的.desktop文件的路径> /usr/share/applications/

实际上,你右键点击桌面上的图标,选择文本编辑器打开,就能看到一个例子了哈

必须手动创建吗?我记得有些appimage软件他会提示你是不是创建桌面图标这个怎么做到

Reply View the author
whoam1
deepin
2023-06-30 00:09
#6
绍贝格尔

必须手动创建吗?我记得有些appimage软件他会提示你是不是创建桌面图标这个怎么做到

程序源码中自己的实现

Reply View the author
绍贝格尔
deepin
2023-06-30 00:12
#7
whoam1

程序源码中自己的实现

这怎么实现,大佬指点一下

Reply View the author
fax928
deepin
2023-06-30 03:06
#8

QFileInfo* fi = new QFileInfo(QStandardPaths::writableLocation(QStandardPaths::DocumentsLocation) + "/闹钟宝贝存储文件.txt");
if(fi->isFile())//假如文件存在
{

}
else//文件不存在
{
    //在我的文档下生成空的存储文件
    QFile file(QStandardPaths::writableLocation(QStandardPaths::DocumentsLocation) + "/闹钟宝贝存储文件.txt");
    file.open(QIODevice::WriteOnly | QIODevice::Append);
    QTextStream out(&file);
    file.close();

    //写数据到本地文件
    QMap mapData;
    mapData.insert("数量","0");
    QMapIterator ii(mapData);

    QMap mapData2;
    mapData2.insert("背景图片","无");
    QMapIterator iii(mapData2);

    QFile file2(QStandardPaths::writableLocation(QStandardPaths::DocumentsLocation) + "/闹钟宝贝存储文件.txt");
    file2.open(QIODevice::WriteOnly | QIODevice::Append);
    QTextStream out2(&file2);

    while (ii.hasNext())
    {
        ii.next();
        out2<

给你个模板参考一下,这个模板大致思路就是检查<文档>目录下有无文件,有文件不操作,无文件生成一个文件,然后写入文件内容。你可以试着把目录和内容设置成板凳楼提供的信息。多查询一下qt里的帮助,不过是英语的解释比较难理解。还有相关网站比如csdn和机器人,机器人现在挺好用的。多尝试一下呗,祝你马到成功。

Reply View the author
绍贝格尔
deepin
2023-06-30 17:23
#9
fax928

QFileInfo* fi = new QFileInfo(QStandardPaths::writableLocation(QStandardPaths::DocumentsLocation) + "/闹钟宝贝存储文件.txt");
if(fi->isFile())//假如文件存在
{

}
else//文件不存在
{
    //在我的文档下生成空的存储文件
    QFile file(QStandardPaths::writableLocation(QStandardPaths::DocumentsLocation) + "/闹钟宝贝存储文件.txt");
    file.open(QIODevice::WriteOnly | QIODevice::Append);
    QTextStream out(&file);
    file.close();

    //写数据到本地文件
    QMap mapData;
    mapData.insert("数量","0");
    QMapIterator ii(mapData);

    QMap mapData2;
    mapData2.insert("背景图片","无");
    QMapIterator iii(mapData2);

    QFile file2(QStandardPaths::writableLocation(QStandardPaths::DocumentsLocation) + "/闹钟宝贝存储文件.txt");
    file2.open(QIODevice::WriteOnly | QIODevice::Append);
    QTextStream out2(&file2);

    while (ii.hasNext())
    {
        ii.next();
        out2<

给你个模板参考一下,这个模板大致思路就是检查<文档>目录下有无文件,有文件不操作,无文件生成一个文件,然后写入文件内容。你可以试着把目录和内容设置成板凳楼提供的信息。多查询一下qt里的帮助,不过是英语的解释比较难理解。还有相关网站比如csdn和机器人,机器人现在挺好用的。多尝试一下呗,祝你马到成功。

appimage 有些软件生成的桌面图标是会有图片的,这怎么做的

Reply View the author
fax928
deepin
2023-06-30 18:51
#10
绍贝格尔

appimage 有些软件生成的桌面图标是会有图片的,这怎么做的

.desktop里加一条比如:Icon=/opt/apps/com.alarm-clock-baby.spark/entries/icons/hicolor/512x512/apps/alarm-clock-baby-512x512.png

在目录下添加一个png图标文件即可。

Reply View the author
绍贝格尔
deepin
2023-06-30 19:41
#11
fax928

.desktop里加一条比如:Icon=/opt/apps/com.alarm-clock-baby.spark/entries/icons/hicolor/512x512/apps/alarm-clock-baby-512x512.png

在目录下添加一个png图标文件即可。

我知道了

「appimge」本质上是解压到/tmp下运行的,ctrl+h查其隐式文件夹,你会看到下面的根目录中有现成的desktop文件,再退一步,/tmp/.xxx/usr/share/application下也有一份,取出来图标(这个一定有,appimage打包规范之一,否则不出包的)和desktop,程序里面CP 到桌面图标位置

Reply View the author
绍贝格尔
deepin
2023-07-03 17:54
#12
owen_337

在 Qt 中,如果你想要让你的 AppImage 在开机时自启动并提权,你需要做以下几步:

  1. 创建一个 .desktop 文件,该文件将在系统启动时运行你的 AppImage。这个文件应该放在 ~/.config/autostart/ 目录下。文件内容参考如下:

[Desktop Entry]
Type=Application
Exec=/path/to/your/appimage
Hidden=false
NoDisplay=false
X-GNOME-Autostart-enabled=true
Name[en_US]=My AppImage
Name=My AppImage
Comment[en_US]=
Comment=

请将 /path/to/your/appimage 替换为你的 AppImage 文件的实际路径。

  1. 为了让你的 AppImage 在启动时获得提权,你可以在 .desktop 文件的 Exec 行中添加 sudo,如下所示:

Exec=sudo /path/to/your/appimage

但是这样做会在每次启动时都要求输入密码。你可以编辑 /etc/sudoers 文件,为你的 AppImage 添加一个无需密码的规则。你可以使用sudo vim 命令来编辑这个文件,然后添加以下行:

yourusername ALL=(ALL) NOPASSWD: /path/to/your/appimage

请将 yourusername 替换为你的用户名,将 /path/to/your/appimage 替换为你的 AppImage 文件的实际路径。

或者:

image.png

image.png

sudo vi /etc/sudoers 打开之后不能保存退出,会提示只读文件
image.png

Reply View the author
owen_337
deepin testing team
2023-07-03 18:04
#13

image.png编辑完了,输入这个回车,不要遗漏了!号

Reply View the author
绍贝格尔
deepin
2023-07-03 21:18
#14
owen_337

image.png编辑完了,输入这个回车,不要遗漏了!号

OK,咨询个问题为什么不用systemctl写一个service,这样权限 自启动都方便

Reply View the author
绍贝格尔
deepin
2023-07-03 22:29
#15
It has been deleted!
绍贝格尔
deepin
2023-07-03 22:40
#16
owen_337

image.png编辑完了,输入这个回车,不要遗漏了!号

设置失败,我设置错了吗?

image.png

image.png

Reply View the author
绍贝格尔
deepin
2023-07-03 23:48
#17

现在又可以了

Reply View the author