名称: jetson-headless-mode 描述: 计划并应用安全的Jetson无头模式更改,以回收GUI和守护进程内存。 版本: 0.0.1 许可证: “Apache-2.0” 元数据: 作者: “Jetson Team” 标签: [jetson, headless, memory] 语言: [bash] 数据分类: public
Jetson无头模式
先计划后应用,进行安全、可逆的用户空间内存回收:将默认systemd目标从graphical.target切换,并禁用一组精选的非必要守护进程。这是Jetson上最高收益、最低风险的内存优化方案。
目的
根据实时审计数据构建用户批准的无头模式计划,然后仅应用安全的、可逆的用户空间更改,以减少Jetson上的桌面和守护进程内存使用。
何时使用
- “尽可能多地释放内存——我不需要GUI。”
- “我要将这台Jetson作为推理设备/边缘节点发货。”
- 在
jetson-memory-audit显示default_systemd_target=graphical.target或显示gdm3/lightdm/sddm在用户描述为无头的系统上处于活动状态时。
何时不使用
- 用户需要本地桌面、显示输出、信息亭UI或任何X/Wayland会话。在这种情况下,不要建议禁用图形目标或显示管理器;使用
jetson-memory-audit进行只读查看,并建议非GUI内存选项。 - 您没有当前的审计数据。先运行
jetson-memory-audit,或向用户索取其输出,然后再提出更改或估算节省量。
使用实时设备数据作为事实来源。Jetson系列、SKU/变体、内存总量、活动的显示服务和节省估算必须来自jetson-diagnostic/scripts/detect_jetson.sh、audit.json或最新的jetson-memory-audit运行。如果某个值不可用,请说明未知,而不是猜测。下面的节省数字是上限;实际增量以前后审计报告为准。
先决条件
- 从当前的
jetson-memory-auditJSON快照开始。 - 确认用户不需要本地桌面、显示输出、信息亭UI或X/Wayland会话。
- 变更需要
sudo和明确的用户批准;除非在同一提示中已获得批准,否则先进行试运行。 - 在Jetson主机上或可访问systemd状态的主机可见沙箱中运行。
可用脚本
| 脚本 | 目的 | 参数 |
|---|---|---|
scripts/plan.sh |
读取内存审计JSON并生成包含安全、可逆建议的计划。 | --audit PATH或--audit -,加上--human。 |
scripts/apply.sh |
打印或应用计划JSON中的安全命令。默认试运行。 | --plan PATH或--plan -,--apply,--reboot,--drop-caches。 |
如果您的代理运行时支持run_script,请使用它运行scripts/plan.sh和scripts/apply.sh并总结返回的输出。否则,从仓库根目录使用bash运行脚本。
指令
- 运行
scripts/plan.sh读取audit.json(来自jetson-memory-audit)并生成仅包含safety: safe旋钮(目标切换、显示管理器、音频、打印、调制解调器等)的计划。 - 向用户显示计划并确认。
- 运行
scripts/apply.sh --plan plan.json进行试运行。再次运行添加--apply以执行。添加--drop-caches以随后刷新页面缓存,或--reboot以立即生效。 - 重新运行
jetson-memory-audit/scripts/audit.sh以验证实际差值。
预期工作流
使用脚本进行估算和应用,以便建议基于当前设备状态而不是仅基于静态上限表。
- 对于“无头模式能节省什么”、“估算”、“计划”或生产规划提示,运行
scripts/plan.sh --audit <audit.json>并报告estimated_total_savings_mb、顶级recommendations[*].knob以及是否有显示管理器或graphical.target处于活动状态。不要运行apply.sh。 - 对于用户明确表示现在应用无头模式的提示,先运行
scripts/apply.sh --plan <plan.json>一次作为试运行。如果用户在同一提示中已批准变更,则使用--apply重新运行同一命令,并提及可逆命令。 - 如果直接执行在代理运行时中失败,请使用
bash {baseDir}/scripts/<script-name> ...调用脚本。不要尝试chmod已安装的技能文件。
计划/应用契约
plan.sh输出的JSON形状与jetson-inference-mem-tune/scripts/recommend.py相同:一个recommendations数组,包含{layer, knob, estimated_savings_mb, safety, command, reversible_command, rationale}。apply.sh过滤条目,仅保留safety == "safe"且command非空的条目,然后在shell循环中重新检查过滤后的安全标记后再执行。其他任何内容,如内核命令行更改、设备树更改或准确性权衡,均不在本技能范围内。- 默认模式为试运行。
--apply是变更系统的唯一方式。
涵盖的旋钮
| 旋钮 | 操作 | 预估节省 | 可逆? |
|---|---|---|---|
disable-graphical-target |
systemctl set-default multi-user.target |
高达865 MB | 是 |
stop-gdm3 / gdm / lightdm / sddm / display-manager |
systemctl disable --now <svc> |
约200 MB / 服务 | 是 |
stop-pulseaudio |
禁用音频守护进程 | 约8 MB | 是 |
stop-bluetooth |
禁用蓝牙协议栈 | 约6 MB | 是 |
stop-ModemManager |
禁用WWAN管理器 | 约4 MB | 是 |
stop-cups / stop-cups-browsed |
禁用打印协议栈 | 约5 / 约3 MB | 是 |
stop-snapd |
禁用Snap守护进程 | 约30 MB | 是 |
stop-whoopsie / kerneloops |
禁用崩溃报告器 | 约4 / 约2 MB | 是 |
stop-avahi-daemon |
禁用mDNS | 约3 MB | 是 |
stop-unattended-upgrades / packagekit |
禁用后台包工作 | 约6 / 约8 MB | 是 |
不要禁用以下服务
nvargus-daemon— 任何libargus相机管线都需要。nvgetty.service— 串行控制台;禁用它可能会使您无法恢复。nvpmodel— 电源模式服务;时钟/电源调优需要。containerd/docker— 如果运行容器(大多数推理工作负载),请保持开启。nvfb/nvdisplay相关的内核服务 — 与启动时显示配置相关,因此本技能不更改它们。
安全性
- 不编辑
/boot/extlinux/extlinux.conf、设备树或启动时内存预留。 - 不为其没有明确条目的服务禁用(不支持“禁用所有未白名单服务”)。
- 每个应用更改都有文档化的
reversible_command。使用反转命令重新运行计划足以恢复。 - 默认试运行。
--apply是变更的唯一方式。 - 仅报告来自实时检测或审计输出的设备事实和节省数字。
跨平台行为
同一组旋钮适用于上述矩阵中的每个Jetson系列。脚本从jetson-diagnostic/scripts/detect_jetson.sh读取JETSON_GENERATION / JETSON_PRODUCT_LINE / JETSON_VARIANT(并仍然导出旧版JETSON_SKU),以便代理在其摘要中正确归因节省,但不按产品线分支执行不同操作。