You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Armbian Ubuntu22开机登录前运行网络检测脚本失败求助

开机登录前自动运行网络检测脚本失败排查(Armbian Ubuntu22 + Orange thin)

我在搭载Armbian Ubuntu22系统的Orange thin设备上,想要实现开机登录前自动运行网络检测脚本:脚本检测设备是否联网,未联网则打开armbian-config修改网络设置。脚本单独运行正常,但多种开机启动配置方式都没效果。

已尝试的配置方法

  • 创建脚本文件:
    执行命令:sudo nano /usr/share/check_network.sh
    脚本内容:

    #!/bin/bash
    ping -c 1 google.com
    if [ $? -ne 0 ]; then
    
      echo "configure your network" | bash -c "read; armbian-config"
    fi
    

    已添加执行权限:chmod +x /usr/share/check_network.sh

  • 配置lightdm.conf:
    执行命令:sudo nano /etc/lightdm/lightdm.conf
    修改内容:

    [Seat:*]
    display-setup-script=/usr/share/check_network.sh
    
  • 修改slick-greeter.desktop:
    执行命令:sudo nano /usr/share/xgreeters/slick-greeter.desktop
    修改内容:

    Exec=/bin/bash /usr/share/check_network.sh
    
  • 配置rc.local:
    执行命令:sudo nano /etc/rc.local
    添加内容:

    /usr/share/check_network.sh
    
  • 添加用户自启动项:
    执行命令:sudo nano /home/mydevice/.config/autostart/check_network.desktop
    文件内容:

    [Desktop Entry]
    Type=Application
    Exec=sudo /usr/share/check_network.sh
    StartupNotify=false 
    

问题原因分析

  1. rc.local时机不对:rc.local在系统启动早期运行,此时X服务还未启动,armbian-config作为图形界面工具无法正常运行。
  2. lightdm的display-setup-script限制:该脚本用于配置显示参数,运行时未加载桌面交互组件,read命令和armbian-config无法获取输入焦点。
  3. 修改slick-greeter的Exec会替换登录界面:直接修改greeter执行命令会导致原登录界面无法启动,脚本运行后无后续登录流程,逻辑无法触发。
  4. 用户自启动项时机太晚:.config/autostart内程序在登录后才运行,不符合「登录前」需求;且sudo需要密码,无交互环境下会执行失败。

可行解决方案

方法1:使用Lightdm的greeter-setup-script(推荐)

Lightdm的greeter-setup-script专门用于登录界面加载前运行脚本,此时图形环境已就绪:

  1. 修改lightdm配置:

    sudo nano /etc/lightdm/lightdm.conf
    

    在[Seat:*]段添加:

    greeter-setup-script=/usr/share/check_network.sh
    

    若之前设置过display-setup-script可保留,但优先级低于此配置。

  2. 修正脚本逻辑:
    原脚本的read命令在greeter环境下无法接收输入,且armbian-config需root权限,修改脚本为:

    #!/bin/bash
    # 改用国内域名避免解析问题
    ping -c 1 -W 2 baidu.com > /dev/null 2>&1
    if [ $? -ne 0 ]; then
        sudo armbian-config
    fi
    

    配置免sudo权限:

    sudo visudo
    

    添加一行:

    ALL ALL=(ALL) NOPASSWD: /usr/sbin/armbian-config
    

    保存退出后,脚本可无密码运行sudo armbian-config。

  3. 重启Lightdm生效:

    sudo systemctl restart lightdm
    

方法2:使用systemd服务(适配命令行登录场景)

若设备需命令行登录,可创建systemd服务,在图形界面启动前运行:

  1. 创建服务文件:

    sudo nano /etc/systemd/system/check-network.service
    

    内容:

    [Unit]
    Description=Pre-login Network Check
    After=network.target multi-user.target
    Before=graphical.target
    
    [Service]
    Type=oneshot
    ConditionPathExists=/usr/bin/startx
    ExecStart=/usr/share/check_network.sh
    # 允许交互,适配armbian-config的图形界面
    StandardInput=tty
    StandardOutput=tty
    StandardError=tty
    TTYPath=/dev/tty1
    
    [Install]
    WantedBy=graphical.target
    
  2. 启用服务:

    sudo systemctl daemon-reload
    sudo systemctl enable check-network.service
    
  3. 同样需要修改脚本并配置免sudo权限(同方法1)。

内容的提问来源于stack exchange,提问作者Kareem Aldarwish

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.28 16:32:38