You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多
文档控制台
免费开始使用

Ubuntu 22.04 LTS桌面版配置.sh脚本开机自启动失败求助

Ubuntu 22.04 LTS桌面版配置.sh脚本开机自启动失败求助

看起来你为了让这个Chromium kiosk脚本开机自启动,试了好几种方法都碰壁了,我来帮你逐个排查问题,再给你靠谱的解决方案。

先说说你之前尝试里的几个坑:

1. Crontab方法的问题

你在crontab -e里加了@reboot root /usr/local/tiles.sh,这里有两个核心问题:

  • 普通用户的crontab里不能加root前缀,只有编辑root用户的crontab(sudo crontab -e)时才无需指定用户;
  • Crontab的运行环境非常精简,缺少桌面应用必需的X环境变量(比如DISPLAYXAUTHORITY),Chromium作为GUI程序根本没法在这种环境下启动,所以这个方法本身就不适合跑桌面程序。

2. .profile方法的问题

.profile是用户登录时才会执行的脚本,但它执行的时机太早——此时桌面环境可能还没完全初始化完成,Chromium找不到可用的X窗口,自然启动失败。另外,你写的sh /usr/local/tiles.sh其实没必要,只要脚本本身有执行权限,直接写/usr/local/tiles.sh就行,但核心问题还是时机不对。

3. Startup Application Preferences方法的问题

这个方法本身是适合桌面程序自启动的,但可能你漏了几个细节:

  • 有没有给脚本加shebang头?也就是在tiles.sh的第一行加上#!/bin/bash,否则系统可能不知道用什么解释器来运行它;
  • 有没有手动测试过脚本?先在终端里跑/usr/local/tiles.sh,确认Chromium能正常启动,排除脚本本身的问题;
  • 如果还是不行,可以试试在Command里加上环境变量,比如写成DISPLAY=:0 /usr/local/tiles.sh,强制指定X显示端口。

4. Systemd服务方法的问题

你的systemd服务配置有两个关键错误:

  • WantedBy=multi-user.target是命令行多用户环境的目标,桌面版应该用graphical-session.target,确保服务在桌面环境启动后再运行;
  • 没有指定运行服务的用户,桌面应用不能用root身份运行,需要加上X环境变量,让Chromium能找到窗口会话。

给你两个靠谱的解决方案(按简单程度排序)

方案一:修复Startup Application Preferences配置

这是最适合桌面程序的简单方法:

  1. 先完善你的tiles.sh脚本:
    • 第一行加上#!/bin/bash
    • 把Chromium的命令改成完整路径(用which chromium-browser可以查到路径,比如/usr/bin/chromium-browser),避免环境变量找不到命令;
    • 给脚本加执行权限:chmod +x /usr/local/tiles.sh
    • 手动运行脚本确认能正常启动Chromium:/usr/local/tiles.sh
  2. 打开「Startup Application Preferences」,点击「Add」:
    • Name: Tiles
    • Command: /usr/local/tiles.sh(如果还是不行,改成DISPLAY=:0 /usr/local/tiles.sh
    • Comment: 自定义备注即可
  3. 保存后重启系统测试。如果还是失败,可以在脚本开头加一行日志输出,方便排查:
    exec > /tmp/tiles_startup.log 2>&1
    
    重启后查看/tmp/tiles_startup.log里的错误信息,就能知道具体哪里出问题了。

方案二:用Systemd用户服务(更稳定可控)

如果Startup Applications还是不行,可以用systemd用户服务,它会严格在桌面会话启动后再运行:

  1. 先按方案一的步骤完善好tiles.sh脚本;
  2. 创建用户服务文件:
    mkdir -p ~/.config/systemd/user
    nano ~/.config/systemd/user/tiles.service
    
  3. 粘贴以下内容:
    [Unit]
    Description=Tiles Chromium Kiosk
    After=graphical-session.target
    
    [Service]
    Type=simple
    ExecStart=/usr/local/tiles.sh
    Restart=on-failure
    Environment=DISPLAY=:0
    Environment=XAUTHORITY=%h/.Xauthority
    
    [Install]
    WantedBy=graphical-session.target
    
  4. 执行以下命令启用并启动服务:
    systemctl --user daemon-reload
    systemctl --user enable tiles.service
    
  5. 重启系统测试,这个方法会在你登录桌面后自动启动Chromium,而且如果Chromium意外崩溃,还会自动重启。

备注:内容来源于stack exchange,提问作者rca

火山引擎 最新活动