我知道这实际上并没有回答这个问题,因为这里的操作系统风格不同。
这是在带有 LXDE 桌面的 Debian 上完成的。我为我的软件编写了一个自动安装脚本,从这里复制了一些 sn-p。
请注意确定您是否有相同的场景。
步骤 1 禁用 LXDE 桌面:
我已经从默认自动启动和用户自动启动中注释掉了 lxpanel 和 xscreensaver
#DISABLE THE DESKTOP
sudo sed -i 's/^@lxpanel/#@lxpanel/g' /etc/xdg/lxsession/LXDE/autostart
sudo sed -i 's/^@xscreensaver/#@xscreensaver/g' /etc/xdg/lxsession/LXDE/autostart
#DISABLE THE DESKTOP FOR THE USER
sudo sed -i 's/^@lxpanel/#@lxpanel/g' /etc/xdg/lxsession/LXDE-${user_name}/autostart
sudo sed -i 's/^@xscreensaver/#@xscreensaver/g' /etc/xdg/lxsession/LXDE-${user_name}/autostart
第 2 步设置应用程序:
注意:我使用的是python3.7
#SETUP PYTHON VENV
python3 -m venv ${application_root_dir}/venv
cd ${application_root_dir}/venv
source ${application_root_dir}/venv/bin/activate
# Install external dependencies, if any
pip3 install <dependecny_name>
# Install your software
pip3 install <software>
deactivate
步骤 3 准备 Atuostart(可选):
创建要在自动启动中执行的脚本。注意这是可选的,您可以直接在自动启动中使用您的命令(第 4 步)。
tee -a ${application_root_dir}/start_my_app.sh > /dev/null << EOT
#!/bin/bash
cd ${application_root_dir}
source venv/bin/activate
python3 -m package.MyApp
deactivate
EOT
# Set execute permissions
sudo chmod 744 ${root_dir}/start_my_app.sh
步骤 4 启动自动启动:
注意:你可以通过在[service]中设置ExecStart来执行任何命令
4.1 创建新服务
# CREATE A SERVICE FILE
sudo tee -a /etc/systemd/system/my_app.service > /dev/null << EOT
[Unit]
Description=Start MY_APPLICATION
After=default.target
Wants=default.target
[Service]
User=${user_name}
Group=$user_group
Environment=DISPLAY=:0.0
Environment=XAUTORITY=/home/${user_name}/.Xauthority
ExecStart=/bin/bash -c "${root_dir}/start_my_app.sh"
[Install]
WantedBy=default.target
EOT
4.2 注册并启用服务
sudo /usr/bin/systemctl daemon-reload
sudo /usr/bin/systemctl enable my_app.service
4.3 重启
sudo reboot
注意:启用桌面以进行故障排除(如果需要的话 - 我从来不需要,因为在我的情况下启用了 ssh,所以我使用的是终端)。取消注释 lxde desktop 的注释部分并重新启动。