在 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/ifconfig
Jetson 系統中
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 都不需要手動輸入。