Agent Skill · NVIDIA NIM

jetson-headless-mode

Plan and apply safe Jetson headless-mode changes to reclaim GUI and daemon memory.

Provider: NVIDIA NIM Path in repo: skills/jetson-headless-mode/SKILL.md

Skill body

Jetson Headless Mode

Plan-then-apply for safe, reversible user-space memory reclamation: switch the default systemd target away from graphical.target and disable a curated set of non-essential daemons. This is the highest-yield, lowest-risk memory win on Jetson.

Purpose

Build a user-approved headless-mode plan from live audit data, then apply only safe, reversible user-space changes that reduce desktop and daemon memory use on Jetson.

When to use

When NOT to use

Use live device data as the source of truth. Jetson family, SKU/variant, memory totals, active display services, and savings estimates must come from jetson-diagnostic/scripts/detect_jetson.sh, audit.json, or a fresh jetson-memory-audit run. If a value is not available, say it is unknown instead of guessing. The savings numbers below are upper bounds; the real delta is whatever a before/after audit reports.

Prerequisites

Available Scripts

Script Purpose Arguments
scripts/plan.sh Reads a memory audit JSON and emits a plan containing safe, reversible recommendations. --audit PATH or --audit -, plus --human.
scripts/apply.sh Prints or applies the safe commands from a plan JSON. Dry-run by default. --plan PATH or --plan -, --apply, --reboot, --drop-caches.

If your agent runtime supports run_script, use it to run scripts/plan.sh and scripts/apply.sh and summarize the returned output. Otherwise run the scripts with bash from the repository root.

Instructions

  1. Run scripts/plan.sh to read audit.json (from jetson-memory-audit) and emit a plan with only safety: safe knobs (target switch, display managers, audio, print, modem, etc.).
  2. Show the plan to the user and confirm.
  3. Run scripts/apply.sh --plan plan.json for a dry run. Re-run with --apply to execute. Add --drop-caches to flush the page cache afterward, or --reboot to take effect immediately.
  4. Re-run jetson-memory-audit/scripts/audit.sh to verify the actual delta.

Expected workflow

Use the scripts for estimates and application so recommendations are based on the current device state rather than the static upper-bound table alone.

Plan / apply contract

Knobs covered

Knob Action Estimated savings Reversible?
disable-graphical-target systemctl set-default multi-user.target up to 865 MB yes
stop-gdm3 / gdm / lightdm / sddm / display-manager systemctl disable --now <svc> ~200 MB / svc yes
stop-pulseaudio disable audio daemon ~8 MB yes
stop-bluetooth disable Bluetooth stack ~6 MB yes
stop-ModemManager disable WWAN manager ~4 MB yes
stop-cups / stop-cups-browsed disable print stack ~5 / ~3 MB yes
stop-snapd disable Snap daemon ~30 MB yes
stop-whoopsie / kerneloops disable crash reporters ~4 / ~2 MB yes
stop-avahi-daemon disable mDNS ~3 MB yes
stop-unattended-upgrades / packagekit disable background package work ~6 / ~8 MB yes

Do NOT disable these services

Safety

Cross-platform behavior

The same set of knobs applies to every Jetson family in the matrix above. The script reads JETSON_GENERATION / JETSON_PRODUCT_LINE / JETSON_VARIANT from jetson-diagnostic/scripts/detect_jetson.sh (and still exports legacy JETSON_SKU) so the agent can attribute the savings correctly in its summary, but it does not branch on product line.

Skill frontmatter

version: 0.0.1 license: Apache-2.0 metadata: {"author" => "Jetson Team", "tags" => ["jetson", "headless", "memory"], "languages" => ["bash"], "data-classification" => "public"}