news 2026/2/14 18:56:33

从0开始学树莓派开机自启,测试脚本镜像超简单上手

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
从0开始学树莓派开机自启,测试脚本镜像超简单上手

从0开始学树莓派开机自启,测试脚本镜像超简单上手

你刚拿到一块树莓派,装好系统,写好了第一个Python脚本——比如控制LED闪烁、读取温湿度传感器,或者启动一个Web服务。但每次重启后,还得手动打开终端、cd到目录、再敲python3 xxx.py?太麻烦了。真正实用的嵌入式项目,必须做到“插电即用”,也就是开机自动运行。

这篇教程不讲复杂原理,不堆配置文件,不碰systemd底层(至少开头不用),就用最直观、最稳妥、最小白友好的方式,带你把脚本稳稳当当放进开机流程里。我们用的是预置好的「测试开机启动脚本」镜像,开箱即用,三步完成:烧录→插入→通电→看到效果。全程不需要联网、不依赖外部工具,连键盘鼠标都可以省掉(如果你用SSH调试的话)。

下面我们就从零开始,一步步走通这条最短路径。

1. 镜像准备与基础验证

1.1 烧录镜像并首次启动

首先确认你已下载「测试开机启动脚本」镜像(通常为.img.zip压缩包)。使用BalenaEtcher、Raspberry Pi Imager等工具将其烧录到一张16GB以上的MicroSD卡中。

烧录完成后,将SD卡插入树莓派,接通电源。如果使用带桌面的系统(如Raspberry Pi OS Desktop),你会看到图形界面正常加载;如果使用Lite版,则可通过SSH连接(默认用户名pi,密码raspberry)。

小提示:首次启动时,系统会自动扩展根分区并完成基础配置,可能需要1–2分钟,请耐心等待。

1.2 快速确认镜像功能是否就绪

登录系统后(图形界面可打开终端,SSH直接进入命令行),执行以下命令检查关键组件是否已预置:

ls -l /home/pi/test/

你应该能看到类似输出:

-rwxr-xr-x 1 pi pi 56 Jan 15 10:22 test.sh -rw-r--r-- 1 pi pi 89 Jan 15 10:22 test.py -rw-r--r-- 1 pi pi 124 Jan 15 10:22 README.md

其中:

  • test.sh是已赋予执行权限的Shell脚本(-rwxr-xr-x中的x表示可执行)
  • test.py是一个极简Python示例(仅打印当前时间并写入日志)
  • README.md包含本镜像的简要说明

再运行一次脚本,验证它本身能正常工作:

/home/pi/test/test.sh

终端应立即输出:

run test! Current time: 2024-01-15 10:23:45

同时,日志文件/home/pi/test/run.log也会被更新。这说明脚本逻辑和环境完全就绪——接下来,就是让它在每次开机时自动跑起来。

2. 图形界面下开机自启(推荐新手首选)

2.1 原理很简单:像Windows“启动文件夹”一样工作

树莓派桌面环境(LXDE/LXQt)沿用了类Unix桌面标准:用户级自动启动程序,统一放在~/.config/autostart/目录下,以.desktop文件形式存在。它不依赖root权限,不修改系统服务,安全、隔离、易调试,非常适合初学者起步。

这个方案的特点是:桌面加载完成后再执行。适合有GUI交互需求的脚本(比如弹窗提醒、打开浏览器、启动图形化监控面板),也适合纯后台任务——只要你不介意它比系统内核晚启动几秒。

2.2 手动创建一个.desktop启动项

我们来亲手建一个,过程清晰可见,便于理解:

mkdir -p ~/.config/autostart nano ~/.config/autostart/test-startup.desktop

在编辑器中输入以下内容(注意大小写和空格):

[Desktop Entry] Name=Test Startup Script Comment=Run test.sh on boot Exec=/home/pi/test/test.sh Terminal=true Type=Application Hidden=false X-GNOME-Autostart-enabled=true

保存退出(Ctrl+O → Enter → Ctrl+X)。

关键字段说明

  • Exec=指定要运行的完整路径,必须绝对路径
  • Terminal=true表示启动时弹出终端窗口,方便你实时看到输出(调试必备)
  • Type=Application告诉桌面环境这是一个应用,而非文档或链接
  • Hidden=false确保它不会被隐藏,你甚至能在桌面右键菜单里找到它

2.3 验证与调试技巧

现在重启树莓派:

sudo reboot

重启后,稍等约10–15秒(等桌面完全就绪),你应该会看到一个终端窗口自动弹出,里面正滚动着test.sh的输出:

run test! Current time: 2024-01-15 10:35:22

如果没出现?

  • 检查文件路径是否拼写正确(尤其注意~/.config/autostart/中的点号)
  • 运行ls -l ~/.config/autostart/确认.desktop文件存在且权限正常(应为-rw-r--r--
  • 查看错误日志:journalctl --user-unit=autostart-test-startup --no-pager(若未生效,此命令可能无输出,说明根本没被加载)

这个方法最大的好处是:你随时可以双击桌面上的.desktop图标来手动触发,就像运行一个普通程序——它既是启动项,也是快捷方式。

3. 无桌面环境下的开机自启(Headless模式)

3.1 为什么需要另一种方案?

很多树莓派项目根本不需要图形界面:比如作为家庭网关、数据采集节点、NAS服务器或IoT边缘设备。你刷的是Raspberry Pi OS Lite,全程通过SSH管理。此时,.config/autostart完全无效——因为根本没有桌面进程去读它。

这时候,我们需要一个更底层、更通用的机制:让脚本在系统服务就绪后、用户登录前就启动。主流做法有两种:rc.local(传统简单)和systemd(现代推荐)。本镜像默认采用后者,但我们也提供rc.local的兼容方案供快速验证。

3.2 方案一:systemd用户服务(镜像默认启用)

systemd是现代Linux的标准初始化系统,强大且稳定。本镜像已为你预置了一个用户级service文件:

cat /etc/systemd/system/test-startup.service

内容如下:

[Unit] Description=Test Startup Script (User Service) After=multi-user.target [Service] Type=simple User=pi WorkingDirectory=/home/pi/test ExecStart=/home/pi/test/test.sh Restart=on-failure RestartSec=10 [Install] WantedBy=default.target

为什么是用户服务(User Service)?
它运行在pi用户上下文中,无需root权限,不会影响系统安全策略,且随用户会话自动管理——即使你SSH登出,脚本仍在后台运行。

启用该服务只需一条命令:

sudo systemctl daemon-reload sudo systemctl enable test-startup.service sudo systemctl start test-startup.service

验证是否运行:

systemctl --user status test-startup.service

你会看到类似输出:

● test-startup.service - Test Startup Script (User Service) Loaded: loaded (/etc/systemd/system/test-startup.service; enabled; vendor preset: enabled) Active: active (running) since Mon 2024-01-15 10:42:18 CST; 2s ago Main PID: 1234 (test.sh) Tasks: 2 (limit: 4915) Memory: 1.2M CGroup: /user.slice/user-1000.slice/user@1000.service/test-startup.service ├─1234 /bin/bash /home/pi/test/test.sh └─1235 python /home/pi/test/test.py

现在重启,脚本将在系统启动早期、网络就绪后自动运行,且全程无终端窗口干扰——这才是真正的“嵌入式静默启动”。

3.3 方案二:rc.local(兼容老系统,一键回退)

如果你用的是旧版系统,或想快速验证而不碰systemdrc.local仍是可靠选择。本镜像保留了该入口,并已配置为可用:

sudo nano /etc/rc.local

确保在exit 0这一行之前,添加:

su - pi -c 'bash /home/pi/test/test.sh > /home/pi/test/rclocal.log 2>&1' &

保存后赋予执行权限:

sudo chmod +x /etc/rc.local

重启即可生效。注意:&符号确保它在后台运行,避免阻塞启动流程;重定向>将输出存入日志,方便排查。

重要提醒rc.local在较新版本Raspberry Pi OS中默认被禁用,需额外启用:
sudo systemctl enable rc-local.service

4. 脚本编写与权限管理实战

4.1 为什么test.sh不能直接写python命令?

你可能会问:“既然最终要跑Python,为什么还要套一层Shell脚本?”答案很实在:可靠性与可控性

  • .desktop文件的Exec=字段不支持多条命令或复杂逻辑(比如先cd再python)
  • systemd服务的ExecStart=虽支持,但路径解析、环境变量继承不如Shell脚本稳定
  • Shell脚本能做更多事:检查依赖、设置环境变量、记录日志、失败重试、清理临时文件

所以,test.sh不是多余步骤,而是工程实践的合理封装。

4.2 看懂并修改你的test.sh

打开它:

nano /home/pi/test/test.sh

当前内容:

#!/bin/bash echo "run test!" python3 /home/pi/test/test.py >> /home/pi/test/run.log 2>&1

逐行解释:

  • #!/bin/bash:声明这是Bash脚本(必须首行,且无空格)
  • echo "run test!":向终端输出提示(仅当Terminal=true时可见)
  • python3 ...:调用Python解释器执行脚本
  • >> /home/pi/test/run.log 2>&1:将标准输出(stdout)和错误输出(stderr)都追加写入日志文件

动手改一改:比如你想让脚本每5秒打印一次时间,可以改成:

#!/bin/bash echo "Starting periodic logger..." while true; do echo "$(date): heartbeat" >> /home/pi/test/heartbeat.log sleep 5 done

别忘了重新赋予执行权限(虽然镜像已设好,但自己改完务必执行):

chmod +x /home/pi/test/test.sh

4.3 Python脚本注意事项

test.py示例中,我们刻意避免使用input()plt.show()这类阻塞式操作——它们会让脚本卡住,导致systemd认为启动失败。后台服务脚本应遵循“非交互、无GUI、快速返回”原则。

如果你确实需要图形界面(比如用matplotlib画图),请改用matplotlib.use('Agg')后端,或确保在.desktop方案中启用Terminal=true

5. 故障排查与常见问题

5.1 “重启后什么都没发生”怎么办?

按优先级顺序检查:

  1. 确认脚本本身可执行

    /home/pi/test/test.sh # 直接运行,看是否有报错
  2. 检查权限是否丢失

    ls -l /home/pi/test/test.sh # 必须含 `x`,如 `-rwxr-xr-x` # 若没有,补上:chmod +x /home/pi/test/test.sh
  3. 查看日志定位源头

    • .desktop方案:检查~/.xsession-errors
    • systemd方案:systemctl --user status test-startup.service+journalctl --user -u test-startup.service -n 20
    • rc.local方案:sudo tail -20 /var/log/syslog | grep rc.local
  4. 路径问题最常见
    所有Exec=中必须用绝对路径~/test/./test.sh在开机时均无效,因为当前工作目录不确定。

5.2 终端一闪而过?如何留住输出?

这是.desktop方案的典型现象:脚本执行完,终端自动关闭。解决方法有两个:

  • 方法一(推荐):在test.sh末尾加read -p "Press enter to continue...",让终端等待按键
  • 方法二:修改.desktop文件,将Terminal=true改为Terminal=false,然后把输出重定向到文件(如前面>> run.log所示),再用tail -f run.log实时查看

5.3 如何停止或禁用自启?

  • 临时停止(本次重启前不运行):

    systemctl --user stop test-startup.service # 或图形界面下:rm ~/.config/autostart/test-startup.desktop
  • 永久禁用(下次重启也不运行):

    systemctl --user disable test-startup.service # 或删除对应.desktop文件
  • 彻底卸载(清理所有痕迹):

    sudo rm /etc/systemd/system/test-startup.service sudo systemctl daemon-reload rm ~/.config/autostart/test-startup.desktop

6. 总结:选对方案,少走弯路

回顾一下,我们覆盖了树莓派开机自启的三大主流场景:

  • 有桌面、要调试→ 用~/.config/autostart/+.desktop,简单直观,所见即所得
  • 无桌面、求稳定→ 用systemd用户服务,现代、健壮、自带重启策略,本镜像默认方案
  • 老系统、求兼容→ 用/etc/rc.local,传统可靠,适合快速验证

你不需要记住所有命令,只需要明白一个核心原则:让脚本在正确的时机、以正确的身份、在正确的环境下运行。而这一切,都已为你打包进「测试开机启动脚本」镜像中——你只需烧录、启动、验证,剩下的,就是把你的创意代码填进去。

现在,你可以把test.py替换成自己的传感器采集脚本、MQTT消息发布器、Flask Web API,或者一个简单的定时备份工具。插上电,它就开始工作。这才是树莓派作为嵌入式平台的真正魅力:不靠人点,不靠人管,默默运行,持续创造价值。


获取更多AI镜像

想探索更多AI镜像和应用场景?访问 CSDN星图镜像广场,提供丰富的预置镜像,覆盖大模型推理、图像生成、视频生成、模型微调等多个领域,支持一键部署。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/2/11 12:14:09

Cute_Animal_For_Kids_Qwen_Image多实例部署:满足班级级并发需求

Cute_Animal_For_Kids_Qwen_Image多实例部署:满足班级级并发需求 你有没有遇到过这样的场景:老师在课堂上想用AI生成几只可爱的小熊猫、小狐狸或小海豚,让孩子们认识动物;结果刚点下“生成”,系统就卡住,等…

作者头像 李华
网站建设 2026/2/7 14:17:45

Qwen3-Embedding-0.6B省钱部署:小团队也能用的轻量方案

Qwen3-Embedding-0.6B省钱部署:小团队也能用的轻量方案 你是不是也遇到过这样的问题:想给自己的搜索系统加个语义检索能力,或者给知识库配个高质量向量召回模块,但一查主流嵌入模型——动辄要 24G 显存、得上 A10 或 A100&#x…

作者头像 李华
网站建设 2026/2/7 15:48:01

SpringBoot+Vue spring boot纺织品企业财务管理系统管理平台源码【适合毕设/课设/学习】Java+MySQL

摘要 随着信息技术的快速发展,传统纺织品企业的财务管理模式逐渐暴露出效率低下、数据冗余和安全性不足等问题。纺织品行业作为劳动密集型产业,其财务数据涉及原材料采购、生产加工、销售订单及员工薪资等多维度信息,传统手工或半自动化管理…

作者头像 李华
网站建设 2026/2/9 6:44:25

Kibana平台es查询语法性能调优实用技巧

以下是对您提供的博文内容进行 深度润色与专业重构后的版本 。本次优化严格遵循您的全部要求: ✅ 彻底去除AI痕迹,语言自然如资深工程师口吻; ✅ 摒弃“引言/概述/总结”等模板化结构,全文以技术逻辑为脉络有机展开; ✅ 所有标题重写为精准、有力、带信息密度的短句式…

作者头像 李华
网站建设 2026/2/2 14:01:30

开源TTS模型哪家强?Sambert与VITS中文合成效果对比评测

开源TTS模型哪家强?Sambert与VITS中文合成效果对比评测 1. 开箱即用的多情感中文语音合成体验 你有没有试过,输入一段文字,几秒钟后就听到一个带着情绪、语气自然的中文声音?不是那种机械念稿的“机器人腔”,而是像真…

作者头像 李华
网站建设 2026/2/7 4:08:50

上班族必备:用AI节省每天手机操作时间

上班族必备:用AI节省每天手机操作时间 摘要:本文聚焦上班族高频手机操作场景,手把手教你用 Open-AutoGLM 框架实现“一句话完成复杂任务”。不讲抽象原理,只说你能省下的真实时间——从每天手动点开12个App、输入8次文字、切换5次…

作者头像 李华