jetson开机之前自启脚本sudo ifconfig 如何不需要输入密码
在 Jetson(Ubuntu 22.04)上设置开机自启脚本有两种主流方式:
🟢 现代推荐:Systemd Service(最稳定、受控、可查看日志)
🔵 旧方式:rc.local(简单直接,但不推荐长期用)
下面我给你两种方式都讲清楚。
🟢 方法一:使用 systemd(推荐)
假设你要在开机时执行:
sudo ifconfig enP8p1s0 192.168.1.100 up
① 新建脚本
创建目录(建议放在
/usr/local/bin):sudo mkdir -p /usr/local/bin新建脚本:
sudo nano /usr/local/bin/netstart.sh写入内容:
#!/bin/bash /sbin/ifconfig enP8p1s0 192.168.1.100 up保存退出(
Ctrl+O→ 回车 →Ctrl+X)赋予执行权限:
sudo chmod +x /usr/local/bin/netstart.sh
② 创建 systemd service
创建 service 文件:
sudo nano /etc/systemd/system/netstart.service填入内容(注意路径一致):
[Unit] Description=Set static IP for enP8p1s0 After=network.target [Service] Type=oneshot ExecStart=/usr/local/bin/netstart.sh RemainAfterExit=yes [Install] WantedBy=multi-user.target保存退出。
③ 启用并测试
sudo systemctl daemon-reload sudo systemctl enable netstart.service sudo systemctl start netstart.service 验证:
ifconfig enP8p1s0
你应该能看到 IP 已被设置为 192.168.1.100。
查看日志:
sudo journalctl -u netstart.service
🔵 方法二:用 /etc/rc.local(简易方式)
创建文件
sudo nano /etc/rc.local写入:
#!/bin/bash /sbin/ifconfig enP8p1s0 192.168.1.100 up exit 0赋予执行权限:
sudo chmod +x /etc/rc.local创建 service 支持 rc.local(因为 Ubuntu 22.04 默认没启用):
sudo nano /etc/systemd/system/rc-local.service填入:
[Unit] Description=/etc/rc.local Compatibility ConditionFileIsExecutable=/etc/rc.local After=network.target [Service] Type=forking ExecStart=/etc/rc.local start TimeoutSec=0 StandardOutput=tty RemainAfterExit=yes SysVStartPriority=99 [Install] WantedBy=multi-user.target启用:
sudo systemctl daemon-reload sudo systemctl enable rc-local sudo systemctl start rc-local
✅ 推荐总结
| 方式 | 优点 | 推荐程度 |
|---|---|---|
| systemd service | 稳定、可控、能看日志 | 🟢 强烈推荐 |
| rc.local | 简单、老式、兼容性差 | 🟡 临时用 |
要不要我帮你写一个具体适合你 Jetson(网口 enP8p1s0)的开机自动配置脚本?
例如设置静态 IP、启动 SSH、检测网络后再执行。
还有Jetson / Ubuntu 系统自带的图形化方式
叫做:
“Startup Applications”
(中文界面中叫「启动应用程序」或「启动项」)
它确实可以让你在开机登录图形界面后自动运行脚本或命令。
不过——要注意它和 systemd 的区别 👇
⚙️Startup Applications 是什么
它属于 桌面环境(GNOME)的一部分;
仅在 用户登录图形界面之后 执行;
执行的程序 以当前用户权限 运行(不是 root);
常用于启动 GUI 应用或简单命令。
几个注意点
这种方式需要图形登录(比如你要进入桌面),不会在纯命令行启动阶段运行。
如果执行
sudo命令,仍然会要求输入密码。
👉 可以配合sudoers免密配置:zylox ALL=(ALL) NOPASSWD: /sbin/ifconfig如果你要在无人值守(headless)模式下启动服务(比如设备通电自动执行),还是建议用 systemd。
✅ 四、总结推荐
| 场景 | 推荐方式 |
|---|---|
| 开机自动运行后台服务 / 设置网络 | 🟢 systemd service |
| 用户登录桌面后启动程序 | 🟡 Startup Applications |
| 临时实验、自定义命令 | 🟣 rc.local(简单但老旧) |
第二步:
如果你希望 Jetson 开机后执行 sudo ifconfig 时不需要输入密码,可以通过修改 sudoers 配置来实现。下面是安全、正确的做法 👇
🧭 目标
让特定用户(比如 bing 或 zylox)在执行某些命令(如 ifconfig)时无需输入密码。
✅ 方法一:仅免密码执行 ifconfig
打开
sudoers编辑器(推荐使用visudo,它会自动检查语法)sudo visudo在文件底部添加一行(请将
your_username替换为你的实际用户名,例如zylox或bing):your_username ALL=(ALL) NOPASSWD: /sbin/ifconfigJetson 系统中
ifconfig一般位于/sbin/ifconfig,可以用以下命令确认路径:which ifconfig保存退出(
Ctrl+O→Enter→Ctrl+X)。验证:
sudo ifconfig✅ 不会再提示输入密码。
✅ 方法二:免密码执行所有 sudo 命令(不推荐)
如果是开发板实验环境、完全信任的单用户设备,也可以让所有 sudo 命令都免密:
编辑:
sudo visudo找到这一行(通常在文件中间):
%sudo ALL=(ALL:ALL) ALL改为:
%sudo ALL=(ALL:ALL) NOPASSWD: ALL或者针对单个用户写法:
your_username ALL=(ALL) NOPASSWD: ALL
✅ 方法三:开机自动执行 ifconfig(比如设置静态 IP)
如果你只是想在开机时自动执行 ifconfig(例如设置网络),而不是手动敲命令,可以把脚本放在:
/etc/rc.local 或
/etc/systemd/system/ 中作为 service 自动运行,这样连 sudo 都不需要手动输入。
