# VPN Pink CLI — experimental Ubuntu branch

Branch: feature/ubuntu-cli. This is a source-only local Git snapshot of the archive,
not an upstream GitLab branch. The graphical checkout/AppImage are unchanged.

## Commands

```
./vpn-pink-cli login
./vpn-pink-cli servers
./vpn-pink-cli connect
./vpn-pink-cli connect --server 1 --protocol wireguard
./vpn-pink-cli status
./vpn-pink-cli disconnect
./vpn-pink-cli logout
./vpn-pink-cli doctor
```

Login requires an interactive terminal. Password input is hidden; passwords and
tokens are never accepted as arguments or saved in files. CLI uses a separate
Secret Service namespace, com.vpnpink.linux.cli, so it does not overwrite the GUI's
login. Existing API contract completed/user.accessToken and Bearer requests apply.
Google/Apple/Amazon CLI sign-in is not part of this initial version.

Connect offers a server ID and IKEv2/WireGuard/auto choice. Auto uses IKEv2. The
process stays in the foreground: keep the terminal open; Ctrl+C disconnects.
A second terminal may request status/disconnect over a private mode0600 Unix
socket in an owned mode0700 runtime directory. Only that foreground process's
session may be controlled. No arbitrary UUIDs or shell commands are accepted.
Logout first asks the foreground CLI to disconnect; an unconfirmed disconnect
prevents logout. The existing native guarded runner and independent recovery
remain mandatory. Force-killing the process relies on that recovery; it is not an
instant disconnect. Interrupting during an in-progress native connection can take
until the native attempt returns (bounded by its existing timeout).

## Requirements and current limits

This first console binary is for the current Ubuntu desktop environment, with
NetworkManager, strongSwan support for IKEv2, Python GI/libnm/cryptography, curl,
a systemd user manager and an unlocked Secret Service keyring. No GUI window is
opened, but the reused native crate still links desktop libraries. This is NOT
yet a dependency-free executable or a fully headless server distribution. No
plaintext keyring fallback. No permanent custom daemon is installed.

Do not enable a tunnel until a separately authorized controlled live test.
Offline checks cannot prove that a customer login or tunnel works through CLI.
The previous GUI tests do not constitute a CLI live test.

## Build

```
cargo build --manifest-path app/src-tauri/Cargo.toml --release --features cli --bin vpn-pink-cli
```

Build the GUI without the cli feature; the feature selects the CLI keyring.
