基于香橙派的程序自启动功能实现

本文最后更新于:2023年10月24日 晚上

使目标程序在Ubuntu开机时自动运行。

方案一:启动配置文件

启动配置文件

打开终端,切换到root账户,然后在/usr/share/applications目录下创建一个名为test.desktop的启动配置文件。

  • cd /usr/share/applications
  • sudo vim test.desktop
    内容如下:
    1
    2
    3
    4
    5
    6
    7
    [Desktop Entry]
    Version=1.0
    Name=test
    Exec=/home/zoe04/.vs/UV/out/build/linux-release/UV ###可执行文件的路径
    StartupNotify=false
    Type=Application
    Categories=System;Utility;Archiving;
    PS.如果你的ubuntu禁用了root账户,只是登录用户,那么你需要手动更改该启动配置文件的权限:
  • 查看文件权限:ls -l /etc/xdg/autostart/test.desktop
    • 如果显示:-rw-r–r–,那么表示只有读取权限。
      (毕竟只有root用户具有写入权限,而其他用户只有读取权限。)
  • 更改权限:sudo chown <你的用户名> /etc/xdg/autostart/test.desktop
  • 确保文件具有可执行文件:sudo chmod +x /etc/xdg/autostart/test.desktop

移动文件到指定目录下

将test.desktop文件拷贝到/etc/xdg/autostart目录下:

  • sudo cp /usr/share/applications/test.desktop /etc/xdg/autostart/test.desktop

重启你的Ubuntu即可

注意:通常情况下,sudo reboot 会在不要求重新登录的情况下重启计算机。因此,不要用这个指令重启。
这个.desktop文件是使程序在用户登录后自动启动

方案二:写一个脚本

编写.sh脚本

  • nano my_cpp_startup_script.sh
    1
    2
    #!/bin/bash 
    /path/to/your_executable
  • 授予脚本可执行权限:
    chmod +x my_cpp_startup_script.sh
  • 将脚本移动到/etc/init.d/目录
    sudo mv my_cpp_startup_script.sh /etc/init.d/
  • 使用适用于你的Linux发行版的方法启用开机自启动。
    对于Systemd-based系统,可以使用systemctl:
    sudo systemctl enable my_cpp_startup_script.sh

可能遇到的问题:

  • sudo systemctl enable test.sh
    终端输出:
    1
    2
    3
    test.sh.service is not a native service, redirecting to systemd-sysv-install.
    Executing: /lib/systemd/systemd-sysv-install enable test.sh
    update-rc.d: error: test.sh Default-Start contains no runlevels, aborting.
    原因:test.sh没有定义适当的Default-Start和Default-Stop runlevels。
    解决方案:创建一个systemd服务单元文件,并在其中定义test.sh的启动和停止行为
  • 创建一个systemd服务单元文件,比如test.service:
    sudo nano /etc/systemd/system/test.service
  • 编辑文件内容(确保替换/path/to/your/test.sh为test.sh脚本的绝对路径)
    1
    2
    3
    4
    5
    6
    7
    8
    9
    [Unit]
    Description=Your Test Script

    [Service]
    Type=simple
    ExecStart=/bin/bash /path/to/your/test.sh

    [Install]
    WantedBy=multi-user.target
  • 保存并关闭文件。
    • ctrl^O:保存文件
    • 按下Enter键确认保存
    • ctrl^X:退出
  • 启用并启动这个新的systemd服务:
    • sudo systemctl enable test.service
    • sudo systemctl start test.service

现在,test.sh脚本应该被设置为在系统启动时自动执行。

  • 检查服务状态:
    sudo systemctl status test.service
  • 问题解决,成功运行~
    运行成功截图

基于香橙派的程序自启动功能实现
http://zoechen04616.github.io/2023/10/24/香橙派自启动脚本/
作者
Yunru Chen
发布于
2023年10月24日
许可协议