在 Jetson(Ubuntu 22.04)上設置開機自啓腳本有兩種主流方式:

  • 🟢 現代推薦:Systemd Service(最穩定、受控、可查看日誌)
  • 🔵 舊方式:rc.local(簡單直接,但不推薦長期用)

下面我給你兩種方式都講清楚。


🟢 方法一:使用 systemd(推薦)

假設你要在開機時執行:

sudo ifconfig enP8p1s0 192.168.1.100 up

① 新建腳本

  1. 創建目錄(建議放在 /usr/local/bin):
  2. sudo mkdir -p /usr/local/bin
  3. 新建腳本:
  4. sudo nano /usr/local/bin/netstart.sh
  5. 寫入內容:
  6. #!/bin/bash /sbin/ifconfig enP8p1s0 192.168.1.100 up
  7. 保存退出(Ctrl+O → 回車 → Ctrl+X
  8. 賦予執行權限:
  9. sudo chmod +x /usr/local/bin/netstart.sh

② 創建 systemd service

  1. 創建 service 文件:
  2. sudo nano /etc/systemd/system/netstart.service
  3. 填入內容(注意路徑一致):
[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
  1. 保存退出。

③ 啓用並測試

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(簡易方式)

  1. 創建文件sudo nano /etc/rc.local
  2. 寫入:#!/bin/bash /sbin/ifconfig enP8p1s0 192.168.1.100 up exit 0
  3. 賦予執行權限:sudo chmod +x /etc/rc.local
  4. 創建 service 支持 rc.local(因為 Ubuntu 22.04 默認沒啓用):                                                 sudo nano /etc/systemd/system/rc-local.service
  5. 填入:
[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
  1. 啓用:
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 配置來實現。下面是安全、正確的做法 👇


🧭 目標

讓特定用户(比如 bingzylox)在執行某些命令(如 ifconfig)時無需輸入密碼。


✅ 方法一:僅免密碼執行 ifconfig

  1. 打開 sudoers 編輯器(推薦使用 visudo,它會自動檢查語法)sudo visudo
  2. 在文件底部添加一行(請將 your_username 替換為你的實際用户名,例如 zyloxbing):
your_username ALL=(ALL) NOPASSWD: /sbin/ifconfig

Jetson 系統中 ifconfig 一般位於 /sbin/ifconfig,可以用以下命令確認路徑:


which ifconfig

  1. 保存退出(Ctrl+OEnterCtrl+X)。
  2. 驗證:sudo ifconfig ✅ 不會再提示輸入密碼。

✅ 方法二:免密碼執行所有 sudo 命令(不推薦)

如果是開發板實驗環境、完全信任的單用户設備,也可以讓所有 sudo 命令都免密:

  1. 編輯:
sudo visudo
  1. 找到這一行(通常在文件中間):
%sudo ALL=(ALL:ALL) ALL

改為:

%sudo ALL=(ALL:ALL) NOPASSWD: ALL
  1. 或者針對單個用户寫法:
your_username ALL=(ALL) NOPASSWD: ALL

✅ 方法三:開機自動執行 ifconfig(比如設置靜態 IP)

如果你只是想在開機時自動執行 ifconfig(例如設置網絡),而不是手動敲命令,可以把腳本放在:

/etc/rc.local

/etc/systemd/system/

中作為 service 自動運行,這樣連 sudo 都不需要手動輸入。