n-link/nlink-cli/README.md
Your Name 4626858fa5 feat(desktop): replace Tauri 1 / Vue CLI tree with Tauri 2 + Vue 3 + Vite scaffold
Tauri 1.0.0-beta.8 links webkit2gtk-4.0, unavailable on Ubuntu 26.04.
Verified: builds and links libwebkit2gtk-4.1.so.0, libsoup-3.0.so.0,
libjavascriptcoregtk-4.1.so.0 with no webkit-4.0 or libssl.1.1 refs.

Workspace moved from yarn to npm; yarn.lock invalidated by this port.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-19 09:36:36 -04:00

2.2 KiB

nlink-cli — standalone TI-Nspire CX II link CLI (Linux)

A GUI-free command-line build extracted from n-link, for transferring files to/from a TI-Nspire CX II (CAS) over USB on Linux.

Built because:

  • TiLP2 (distro libticables 1.3.6) does not support the CX II (USB PID e022) — its probe reports "no devices found".
  • The prebuilt n-link 0.1.6 .deb won't run on Ubuntu 26.04 (needs the retired libssl.so.1.1 + WebKit2GTK 4.0). n-link is a Tauri/WebKit app.

This CLI reuses only n-link's self-contained cli.rs (upload/download/ls/mkdir/rmdir/ copy/move/upload-os), dropping Tauri/WebKit entirely.

Build

# one-time system deps
sudo apt-get install -y libusb-1.0-0-dev pkg-config
# Rust toolchain via rustup, then:
cargo build --release
# binary: target/release/n-link-cli

Cargo.toml uses a local [patch.crates-io] override of libnspire-sys (../vendor/libnspire-sys) whose CX II NNSE handshake retry limit is raised from 10.

Run

./target/release/n-link-cli ls /
./target/release/n-link-cli download "/MyFile.tns" ./
./target/release/n-link-cli upload ./MyFile.tns "/"
./target/release/n-link-cli --help

System setup required (Linux)

  1. udev access for the CX II (/etc/udev/rules.d/70-ti-nspire.rules):
    SUBSYSTEM=="usb", ATTRS{idVendor}=="0451", ENV{ID_MM_DEVICE_IGNORE}="1"
    
    (plus group/uaccess for PID e022) — then udevadm control --reload-rules && udevadm trigger.
  2. ModemManager grabs the interface on plug; the ID_MM_DEVICE_IGNORE rule above tells it to leave TI devices alone. Restart it after adding the rule: sudo systemctl start ModemManager.

Known limitation

libnspire's CX II ("NavNet SE") protocol support has been frozen upstream since 2020 (lights0123/libnspire, last commit 2020-09-30; crates.io libnspire-sys 0.3.4 is the newest). Against current (2026) CX II firmware the USB link and handshake work — real filenames are transferred — but multi-packet stream transfers are unreliable and long operations (e.g. listing a folder with many entries) can fail mid-transfer with Busy. Short transfers are more likely to complete. This is a library/firmware-era mismatch, not a local configuration problem.