runv-server

server tooling for runv.club
Log | Files | Refs | README

commit 515b244e357f76df3adcc5bac44186f926fcc38d
parent e90c55a82bafe6d3ec8a5e5afd8b71c911732ed7
Author: Pablo Murad <pablo@pablomurad.com>
Date:   Sat, 21 Mar 2026 20:37:02 -0300

fixed a lot of stuff

Diffstat:
Mtools/docs/USER_EXPERIENCE.md | 2+-
Mtools/motd/60-runv | 18+++++++++++++-----
2 files changed, 14 insertions(+), 6 deletions(-)

diff --git a/tools/docs/USER_EXPERIENCE.md b/tools/docs/USER_EXPERIENCE.md @@ -8,7 +8,7 @@ Visão para **quem entra no servidor** pela primeira vez (e para quem documenta - logótipo **RUNV** (mesmo desenho UTF-8 da landing) **só nesse bloco** em verde; - tagline `.club — um computador para compartilhar` (sem estatísticas no MOTD; o comando **`runv-status`** existe mas **não** é listado aqui e só o utilizador **`pmurad-admin`** pode executá-lo); - **Comandos úteis** em lista, com nome a verde e descrição a cinza (ANSI), alinhada ao texto do `runv-help`; - - grelha **3×3** com os **primeiros campos** das **9** sessões mais recentes de **`last`** (wtmp; ignora linhas `reboot` / `wtmp`). Em **Debian 13+**, o binário **`last`** vem do pacote **`wtmpdb`** (o `tools.py` instala-o). O fragmento tenta **`/usr/bin/last`** se o PATH de `update-motd.d` não incluir `last`. Se aparecer *sem registos recentes em wtmp*, o ficheiro de logins ainda não tem entradas (ex.: sem logins SSH registados). + - secção **Últimos usuários online**: grelha **3×3** com até **9 nomes únicos** (fonte: **`last`** / wtmp; ordem = atividade recente; cada utilizador só aparece **uma** vez; ignora linhas `reboot` / `wtmp`). Em **Debian 13+**, o binário **`last`** vem do pacote **`wtmpdb`** (o `tools.py` instala-o). O fragmento tenta **`/usr/bin/last`** se o PATH de `update-motd.d` não incluir `last`. Se aparecer *sem registos recentes em wtmp*, o ficheiro de logins ainda não tem entradas (ex.: sem logins SSH registados). - linha final: **digite `runv-help` para começar**. 2. **Prompt da shell** — Depende do shell padrão (geralmente Bash no Debian). O que o usuário **herda** da home vem do **`/etc/skel`** no momento em que a conta foi criada. diff --git a/tools/motd/60-runv b/tools/motd/60-runv @@ -27,7 +27,8 @@ print_runv_art() { RUNV_ART } -# Últimas 9 sessões em last(1) → grelha 3×3 (primeiro campo = utilizador) +# MOTD: "Últimos usuários online" — até 9 nomes únicos (last(1)) → grelha 3×3 +# Cada nome aparece só uma vez: ordem = mais recente primeiro (primeira ocorrência em last). # update-motd.d costuma ter PATH mínimo: tentar /usr/bin/last e /bin/last. print_last_sessions_3x3() { LAST_CMD=$(command -v last 2>/dev/null) || LAST_CMD= @@ -39,11 +40,18 @@ print_last_sessions_3x3() { fi tf=$(mktemp -t runvmotd.XXXXXX 2>/dev/null) || tf=/tmp/runvmotd.$$ trap 'rm -f "$tf"' EXIT HUP INT - # Ignora reboot, wtmp e linhas vazias; até 9 utilizadores (sessões recentes) - "$LAST_CMD" -n 200 2>/dev/null | awk ' + # Ignora reboot, wtmp e linhas vazias; até 9 nomes distintos (mais recentes primeiro) + "$LAST_CMD" -n 500 2>/dev/null | awk ' /^reboot/ || /^wtmp/ || /^$/ { next } NF < 1 { next } - { print $1; if (++n >= 9) exit } + { + u = $1 + if (!(u in seen)) { + seen[u] = 1 + print u + if (++n >= 9) exit + } + } ' > "$tf" || true if ! [ -s "$tf" ]; then @@ -53,7 +61,7 @@ print_last_sessions_3x3() { return fi - printf '\n%bÚltimas sessões%b %b(9 entradas recentes de last)%b\n' "${B}" "${R}" "${D}" "${R}" + printf '\n%bÚltimos usuários online%b %b(até 9 nomes únicos, por atividade recente)%b\n' "${B}" "${R}" "${D}" "${R}" row=1 while [ "$row" -le 3 ]; do read -r c1 || c1=''