feat(boot): CRT-style banners with colors and emoji indicators

Boot Banner Improvements:
- /etc/issue: Gold ASCII art pre-login banner with credentials
- /etc/motd: Colorful LIVE USB banner with access info
- secubox-status: New command showing system overview with CRT colors
- secubox-help: Quick reference for all secubox commands
- secubox-logs: Live security log viewer shortcut
- profile.d: Login status display with mode/service/IP indicators

Mode Switching:
- cmdline-handler: Fixed TUI mode to start (not just enable) service
- secubox-mode: Updated with CRT colors and emoji status indicators

GRUB Menu:
- Kiosk GUI is now default when --kiosk flag used
- All entries have emoji indicators (🖼️📟🌉🛡️💾🚀🔧🚨🐛)
- CRT-style menu colors (cyan on black, yellow highlights)

CI Workflows:
- build-live-usb.yml: Updated boot options and credentials in release notes
- release.yml: Updated to 93 packages, new boot options, correct credentials

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
CyberMind-FR 2026-04-04 12:16:40 +02:00
parent e0569f4082
commit a2fd0e0cd6
6 changed files with 483 additions and 76 deletions

View File

@ -1,9 +1,72 @@
# WIP — Work In Progress
*Mis à jour : 2026-04-04 (Session 38)*
*Mis à jour : 2026-04-04 (Session 39)*
---
## ✅ Terminé cette session (Session 38)
## ✅ Terminé cette session (Session 39)
### Boot Banner Improvements — CRT Style with Colors & Emojis ✅
- **`/etc/issue`** — Pre-login banner with ANSI colors (gold/cyan)
- ASCII art SecuBox logo
- Default credentials display
- Web UI and SSH info
- **`/etc/motd`** — Post-login MOTD with colored ASCII art
- LIVE USB badge in green
- Access info with color highlights
- **`/usr/bin/secubox-status`** — System status command with CRT colors
- System info (hostname, uptime, memory, disk)
- Network interfaces with IP addresses
- Core services status (nginx, haproxy, crowdsec, etc.)
- Display mode indicator (kiosk/TUI/console)
- Quick access links
- **`/usr/sbin/secubox-boot-banner`** — Boot-time banner script
- Boot progress indicators with checkmarks
- Network/Nginx/API status at boot
### Profile.d Login Status ✅
- **`/etc/profile.d/secubox-login.sh`** — Login status display
- Quick status line showing mode, service count, IP
- Only displays on TTY login (not SSH/tmux)
- **`/usr/bin/secubox-help`** — Quick help command
- Lists common secubox-* commands by category
- System, Network, Security, Modes sections
- **`/usr/bin/secubox-logs`** — Live security logs shortcut
### secubox-cmdline-handler Improvements ✅
- **TUI mode fix** — Now properly starts TUI service, not just enables it
- **Console mode** — Enables standard getty on tty1
- **Default mode detection** — Checks for build-time kiosk marker
- **Better logging** — Mode transitions logged to journal
### secubox-mode CRT Styling ✅
- Updated with CRT-style colors (gold, cyan, green, red)
- Emoji status indicators (✓, ✗, ⚠, ●)
- Improved status display with mode details and help text
- Better visual formatting for mode selection
### GRUB Menu Improvements ✅
- **Dynamic default** — Kiosk GUI (entry 1) is default when `--kiosk` flag used
- **Emoji indicators** — All menu entries have relevant emojis:
- ⚡ SecuBox Live (standard)
- 🖼️ Kiosk GUI [DEFAULT]
- 📟 Console TUI
- 🌉 Bridge Mode
- 🛡️ Safe Mode
- 💾 Install to Disk
- 🚀 To RAM
- 🔧 HW Check
- 🚨 Emergency Shell
- 🐛 Debug modes
- **CRT menu colors** — Cyan on black with yellow highlights
### Files Modified
- `image/build-live-usb.sh` — Banner, profile.d, GRUB config updates
- `image/sbin/secubox-cmdline-handler` — Mode switching improvements
- `image/sbin/secubox-mode` — CRT style colors and emoji status
---
## ✅ Terminé session précédente (Session 38)
### Wiki Documentation — VirtualBox Quick Start ✅
- **wiki/Home.md** — Updated with VirtualBox (2 Minutes) quick start section

View File

@ -176,14 +176,17 @@ jobs:
```
### Boot Options
- **SecuBox Live** - Normal boot with persistence
- **Safe Mode** - Minimal drivers for troubleshooting
- **No Persistence** - Fresh start, no saved changes
- **To RAM** - Load entire system to memory
- ⚡ **SecuBox Live** - Normal boot with persistence
- 🖼️ **Kiosk GUI** - Fullscreen browser (default)
- 📟 **Console TUI** - Text-based dashboard
- 🌉 **Bridge Mode** - Inline transparent bridge
- 🛡️ **Safe Mode** - Minimal drivers for troubleshooting
- 💾 **Install to Disk** - Install to local storage
- 🚀 **To RAM** - Load entire system to memory
### Credentials
- **Web UI:** https://<IP>:8443 (admin / admin)
- **SSH:** root / secubox | secubox / secubox
- **Web UI:** https://<IP>:9443 (admin / secubox)
- **SSH:** root / secubox
### Verification
```bash

View File

@ -73,15 +73,17 @@ jobs:
cat > release/RELEASE_NOTES.md << EOF
# SecuBox-DEB ${VERSION}
## What's Included
## ⚡ CyberMind Security Platform
### Packages (33 total)
- **Core:** hub, core, portal, system
- **Security:** crowdsec, waf, auth, nac
### What's Included
**93 Packages** across all security domains:
- **Core:** hub, core, portal, system, console
- **Security:** crowdsec, waf, auth, nac, threats, ipblock, mac-guard
- **Networking:** wireguard, haproxy, dpi, qos, netmodes, vhost, cdn
- **Applications:** mail, gitea, nextcloud, webmail, dns, users
- **Publishing:** droplet, streamlit, streamforge, metablogizer, publish
- **Monitoring:** netdata, mediaflow, c3box
- **Applications:** mail, gitea, nextcloud, ollama, jellyfin, matrix
- **SOC:** soc-agent, soc-gateway, soc-web (hierarchical security operations)
- **Intel:** device-intel, vortex-dns, vortex-firewall, ai-insights
### System Images
- MOCHAbin (Marvell Armada 7040) - arm64
@ -89,6 +91,14 @@ jobs:
- ESPRESSObin Ultra (Marvell Armada 3720) - arm64
- VM x64 (VirtualBox/QEMU) - amd64
### Boot Options
- ⚡ **SecuBox Live** - Normal boot with persistence
- 🖼️ **Kiosk GUI** - Fullscreen browser (default)
- 📟 **Console TUI** - Text-based dashboard
- 🌉 **Bridge Mode** - Inline transparent bridge
- 💾 **Install to Disk** - Permanent installation
- 🚀 **To RAM** - Load entire system to memory
## Quick Install
### From APT Repository
@ -97,16 +107,19 @@ jobs:
sudo apt install secubox-full
\`\`\`
### From Image
### From Live USB Image
\`\`\`bash
# ARM64 boards
gunzip -c secubox-mochabin-bookworm.img.gz | sudo dd of=/dev/sdX bs=4M status=progress
# Flash to USB
gunzip -c secubox-live-amd64-bookworm.img.gz | sudo dd of=/dev/sdX bs=4M status=progress
# VirtualBox
gunzip secubox-vm-x64-bookworm.img.gz
VBoxManage convertfromraw secubox-vm-x64-bookworm.img secubox.vdi --format VDI
# VirtualBox VM
bash image/create-vbox-vm.sh --name SecuBox --memory 4096
\`\`\`
### Default Credentials
- **Web UI:** https://<IP>:9443 (admin / secubox)
- **SSH:** root / secubox
## Checksums
All files are signed with GPG key \`packages@secubox.in\`.
@ -118,9 +131,9 @@ jobs:
## Documentation
- [Installation Guide](https://github.com/gkerma/secubox-deb/wiki/Installation)
- [API Documentation](https://github.com/gkerma/secubox-deb/wiki/API)
- [Security Hardening](https://github.com/gkerma/secubox-deb/wiki/Security)
- [Wiki Home](https://github.com/CyberMind-FR/secubox-deb/wiki)
- [VirtualBox Quick Start](https://github.com/CyberMind-FR/secubox-deb/wiki/VirtualBox)
- [API Reference](https://github.com/CyberMind-FR/secubox-deb/wiki/API-Reference)
EOF

View File

@ -452,6 +452,120 @@ if [ -t 0 ] && [ -z "$SECUBOX_SPLASH_SHOWN" ]; then
fi
BASHRC
# ── Profile.d script for login status display ──────────────────────────────────
mkdir -p "${ROOTFS}/etc/profile.d"
cat > "${ROOTFS}/etc/profile.d/secubox-login.sh" <<'PROFILE'
#!/bin/bash
# SecuBox Login Status Display
# Shows quick system status on interactive shell login
# Only run on interactive terminals
[[ $- != *i* ]] && return
[[ -z "$PS1" ]] && return
# Avoid double display with splash
[[ -n "$SECUBOX_STATUS_SHOWN" ]] && return
export SECUBOX_STATUS_SHOWN=1
# Colors
GOLD='\033[38;5;214m'
CYAN='\033[38;5;45m'
GREEN='\033[38;5;82m'
RED='\033[38;5;196m'
GRAY='\033[38;5;242m'
WHITE='\033[38;5;250m'
RESET='\033[0m'
# Quick status line after MOTD
show_quick_status() {
local ip=$(hostname -I 2>/dev/null | awk '{print $1}')
local services_ok=0
local services_fail=0
for svc in nginx secubox-api nftables; do
if systemctl is-active --quiet "$svc" 2>/dev/null; then
((services_ok++))
else
((services_fail++))
fi
done
# Mode indicator
local mode_icon="🖥️"
local mode_text="Console"
if [[ -f /var/lib/secubox/.kiosk-enabled ]]; then
mode_icon="🖼️"
mode_text="Kiosk"
elif [[ -f /var/lib/secubox/.tui-enabled ]]; then
mode_icon="📟"
mode_text="TUI"
fi
echo ""
echo -e "${GRAY}────────────────────────────────────────────────────────────${RESET}"
echo -e " ${mode_icon} ${CYAN}${mode_text}${RESET}${GREEN}${RESET} ${services_ok} services │ 🌐 ${CYAN}${ip:-no-ip}${RESET}"
echo -e "${GRAY}────────────────────────────────────────────────────────────${RESET}"
echo -e " ${GRAY}Type ${WHITE}secubox-status${GRAY} for details • ${WHITE}secubox-help${GRAY} for commands${RESET}"
echo ""
}
# Only show on tty login, not in SSH or within screen/tmux
if [[ -z "$SSH_TTY" ]] && [[ -z "$TMUX" ]] && [[ -z "$STY" ]]; then
show_quick_status
fi
PROFILE
chmod +x "${ROOTFS}/etc/profile.d/secubox-login.sh"
# ── SecuBox help command ─────────────────────────────────────────────────────
cat > "${ROOTFS}/usr/bin/secubox-help" <<'HELP_CMD'
#!/bin/bash
# SecuBox Quick Help
GOLD='\033[38;5;214m'
CYAN='\033[38;5;45m'
WHITE='\033[38;5;250m'
GRAY='\033[38;5;242m'
RESET='\033[0m'
echo -e "${GOLD}"
echo ' ╭─────────────────────────────────────────────────────────╮'
echo ' │ ⚡ SecuBox Quick Commands │'
echo ' ╰─────────────────────────────────────────────────────────╯'
echo -e "${RESET}"
echo -e " ${WHITE}System${RESET}"
echo -e " ${CYAN}secubox-status${GRAY} System overview with services${RESET}"
echo -e " ${CYAN}secubox-logs${GRAY} Live security logs${RESET}"
echo -e " ${CYAN}secubox-services${GRAY} Manage services${RESET}"
echo ""
echo -e " ${WHITE}Network${RESET}"
echo -e " ${CYAN}secubox-network${GRAY} Network configuration${RESET}"
echo -e " ${CYAN}secubox-firewall${GRAY} Firewall rules status${RESET}"
echo ""
echo -e " ${WHITE}Security${RESET}"
echo -e " ${CYAN}secubox-threats${GRAY} View blocked threats${RESET}"
echo -e " ${CYAN}secubox-waf-status${GRAY} WAF inspection status${RESET}"
echo ""
echo -e " ${WHITE}Modes${RESET}"
echo -e " ${CYAN}secubox-mode kiosk${GRAY} Switch to Kiosk GUI${RESET}"
echo -e " ${CYAN}secubox-mode tui${GRAY} Switch to TUI dashboard${RESET}"
echo -e " ${CYAN}secubox-mode console${GRAY} Switch to shell console${RESET}"
echo ""
echo -e " ${GRAY}Web UI: https://$(hostname -I 2>/dev/null | awk '{print $1}' || echo 'localhost'):9443${RESET}"
echo ""
HELP_CMD
chmod +x "${ROOTFS}/usr/bin/secubox-help"
# ── SecuBox logs command ─────────────────────────────────────────────────────
cat > "${ROOTFS}/usr/bin/secubox-logs" <<'LOGS_CMD'
#!/bin/bash
# SecuBox Live Security Logs
echo "📋 SecuBox Security Logs (Ctrl+C to exit)"
echo "─────────────────────────────────────────"
journalctl -f -u 'secubox-*' -u crowdsec -u suricata -u nginx --no-pager 2>/dev/null || \
journalctl -f --no-pager
LOGS_CMD
chmod +x "${ROOTFS}/usr/bin/secubox-logs"
# Systemd service for hardware check
cat > "${ROOTFS}/etc/systemd/system/secubox-hwcheck.service" <<'HWSVC'
[Unit]
@ -1615,22 +1729,177 @@ rm -rf "${ROOTFS}/var/lib/apt/lists"/*
rm -rf "${ROOTFS}/var/cache/apt"/*.bin
rm -rf "${ROOTFS}/tmp"/*
# Welcome message
cat > "${ROOTFS}/etc/motd" <<'EOF'
# ── CRT-Style Boot Banner with Colors and Emojis ──────────────────────────────
log "Creating colorful boot banners..."
# Pre-login banner (/etc/issue) - shown before login prompt
cat > "${ROOTFS}/etc/issue" <<'ISSUE'
[38;5;214m
██████ ███████ ██████ ██ ██ ██████ ██████ ██ ██
██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██
███████ █████ ██ ██ ██ ██████ ██ ██ ███
██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██
███████ ███████ ██████ ██████ ██████ ██████ ██ ██
[0m
[38;5;45m ⚡ CyberMind Security Platform[0m [38;5;242m\l @ \n[0m
[38;5;250m 🔐 Default: [38;5;214mroot[38;5;250m / [38;5;214msecubox[0m
[38;5;250m 🌐 Web UI: [38;5;45mhttps://<IP>:9443[0m
[38;5;250m 📡 SSH: [38;5;45mport 22[0m
[38;5;242m─────────────────────────────────────────────────────────────[0m
ISSUE
# Post-login MOTD with dynamic info (/etc/motd)
cat > "${ROOTFS}/etc/motd" <<'MOTD'
[38;5;214m
╔═══════════════════════════════════════════════════════════════╗
║ ███████╗███████╗ ██████╗██╗ ██╗██████╗ ██████╗ ██╗ ██╗ ║
║ ██╔════╝██╔════╝██╔════╝██║ ██║██╔══██╗██╔═══██╗╚██╗██╔╝ ║
║ ███████╗█████╗ ██║ ██║ ██║██████╔╝██║ ██║ ╚███╔╝ ║
║ ╚════██║██╔══╝ ██║ ██║ ██║██╔══██╗██║ ██║ ██╔██╗ ║
║ ███████║███████╗╚██████╗╚██████╔╝██████╔╝╚██████╔╝██╔╝ ██╗ ║
║ ╚══════╝╚══════╝ ╚═════╝ ╚═════╝ ╚═════╝ ╚═════╝ ╚═╝ ╚═╝ ║
║ LIVE USB ║
╚═══════════════════════════════════════════════════════════════╝
[38;5;45m ███████╗███████╗ ██████╗██╗ ██╗██████╗ ██████╗ ██╗ ██╗ [38;5;214m
[38;5;45m ██╔════╝██╔════╝██╔════╝██║ ██║██╔══██╗██╔═══██╗╚██╗██╔╝ [38;5;214m
[38;5;45m ███████╗█████╗ ██║ ██║ ██║██████╔╝██║ ██║ ╚███╔╝ [38;5;214m
[38;5;45m ╚════██║██╔══╝ ██║ ██║ ██║██╔══██╗██║ ██║ ██╔██╗ [38;5;214m
[38;5;45m ███████║███████╗╚██████╗╚██████╔╝██████╔╝╚██████╔╝██╔╝ ██╗ [38;5;214m
[38;5;45m ╚══════╝╚══════╝ ╚═════╝ ╚═════╝ ╚═════╝ ╚═════╝ ╚═╝ ╚═╝ [38;5;214m
[38;5;82m ⚡ LIVE USB MODE ⚡ [38;5;214m
╚═══════════════════════════════════════════════════════════════╝[0m
Web UI: https://<IP>:9443 SSH: root / secubox
[38;5;250m 🌐 Web UI: [38;5;45mhttps://<IP>:9443[0m
[38;5;250m 🔐 Credentials: [38;5;214mroot[38;5;250m / [38;5;214msecubox[0m
[38;5;250m 📖 Docs: [38;5;45mhttps://secubox.in/docs[0m
EOF
[38;5;242m Type [38;5;82msecubox-status[38;5;242m for system overview[0m
MOTD
# Dynamic status script for interactive use
cat > "${ROOTFS}/usr/bin/secubox-status" <<'STATUS_SCRIPT'
#!/bin/bash
# SecuBox Status - CRT-style system overview
# CyberMind — https://cybermind.fr
# Colors
GOLD='\033[38;5;214m'
CYAN='\033[38;5;45m'
GREEN='\033[38;5;82m'
RED='\033[38;5;196m'
GRAY='\033[38;5;242m'
WHITE='\033[38;5;250m'
RESET='\033[0m'
# Status indicators
ok="${GREEN}${RESET}"
fail="${RED}${RESET}"
warn="${GOLD}${RESET}"
# Header
echo -e "${CYAN}"
echo ' ╭──────────────────────────────────────────────────────────╮'
echo ' │ ⚡ SecuBox System Status ⚡ │'
echo ' ╰──────────────────────────────────────────────────────────╯'
echo -e "${RESET}"
# System info
echo -e "${WHITE} 📊 System Info${RESET}"
echo -e " ${GRAY}Hostname:${RESET} $(hostname)"
echo -e " ${GRAY}Uptime:${RESET} $(uptime -p 2>/dev/null || echo 'N/A')"
echo -e " ${GRAY}Memory:${RESET} $(free -h | awk '/^Mem:/{printf "%s / %s (%.1f%%)", $3, $2, $3/$2*100}')"
echo -e " ${GRAY}Disk:${RESET} $(df -h / | awk 'NR==2{printf "%s / %s (%s)", $3, $2, $5}')"
echo ""
# Network info
echo -e "${WHITE} 🌐 Network${RESET}"
for iface in $(ip -o link show | awk -F': ' '{print $2}' | grep -v '^lo$'); do
ip_addr=$(ip -4 addr show "$iface" 2>/dev/null | grep -oP '(?<=inet\s)\d+(\.\d+){3}' | head -1)
if [[ -n "$ip_addr" ]]; then
echo -e " ${GREEN}${RESET} ${GRAY}${iface}:${RESET} ${CYAN}${ip_addr}${RESET}"
fi
done
echo ""
# Core services
echo -e "${WHITE} 🔧 Core Services${RESET}"
services=(nginx haproxy secubox-api secubox-hub crowdsec suricata)
for svc in "${services[@]}"; do
if systemctl is-active --quiet "$svc" 2>/dev/null; then
echo -e " ${ok} ${GRAY}${svc}${RESET}"
elif systemctl list-unit-files "${svc}.service" 2>/dev/null | grep -q "$svc"; then
echo -e " ${fail} ${GRAY}${svc}${RESET} (stopped)"
fi
done
echo ""
# Mode detection
echo -e "${WHITE} 🎮 Display Mode${RESET}"
if [[ -f /var/lib/secubox/.kiosk-enabled ]]; then
echo -e " ${ok} ${CYAN}Kiosk GUI${RESET} (Web browser on tty7)"
elif [[ -f /var/lib/secubox/.tui-enabled ]]; then
echo -e " ${ok} ${CYAN}Console TUI${RESET} (Text dashboard on tty1)"
else
echo -e " ${warn} ${CYAN}Console Shell${RESET} (Standard login)"
fi
echo ""
# Quick links
echo -e "${GOLD} ────────────────────────────────────────────────────────────${RESET}"
echo -e "${WHITE} 🔗 Quick Access${RESET}"
IP=$(hostname -I | awk '{print $1}')
echo -e " ${GRAY}Dashboard:${RESET} ${CYAN}https://${IP:-localhost}:9443${RESET}"
echo -e " ${GRAY}Admin API:${RESET} ${CYAN}https://${IP:-localhost}:9443/api/v1/${RESET}"
echo ""
STATUS_SCRIPT
chmod +x "${ROOTFS}/usr/bin/secubox-status"
# Also add a boot-time banner display script
cat > "${ROOTFS}/usr/sbin/secubox-boot-banner" <<'BOOT_BANNER'
#!/bin/bash
# SecuBox Boot Banner - Displayed during boot
# CyberMind — https://cybermind.fr
GOLD='\033[38;5;214m'
CYAN='\033[38;5;45m'
GREEN='\033[38;5;82m'
GRAY='\033[38;5;242m'
RESET='\033[0m'
clear
echo -e "${GOLD}"
cat << 'LOGO'
██████ ███████ ██████ ██ ██ ██████ ██████ ██ ██
██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██
███████ █████ ██ ██ ██ ██████ ██ ██ ███
██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██
███████ ███████ ██████ ██████ ██████ ██████ ██ ██
LOGO
echo -e "${RESET}"
echo -e "${CYAN} ⚡ CyberMind Security Platform${RESET}"
echo -e "${GRAY} Booting...${RESET}"
echo ""
# Show boot progress
show_status() {
local name="$1"
local check="$2"
if eval "$check" 2>/dev/null; then
echo -e " ${GREEN}${RESET} ${name}"
else
echo -e " ${GRAY}${RESET} ${name} (waiting...)"
fi
}
show_status "Network" "ip route | grep -q default"
show_status "Nginx" "systemctl is-active --quiet nginx"
show_status "SecuBox API" "systemctl is-active --quiet secubox-api"
echo ""
echo -e "${GRAY} Dashboard: https://$(hostname -I | awk '{print $1}' || echo 'localhost'):9443${RESET}"
echo ""
BOOT_BANNER
chmod +x "${ROOTFS}/usr/sbin/secubox-boot-banner"
ok "Boot banners created with CRT colors and emojis"
# Unmount
umount -lf "${ROOTFS}/proc" 2>/dev/null || true
@ -1878,9 +2147,18 @@ mkdir -p "${MNT}/esp/live"
cp "${LIVE_DIR}/live/vmlinuz" "${MNT}/esp/live/"
cp "${LIVE_DIR}/live/initrd.img" "${MNT}/esp/live/"
# GRUB config
cat > "${MNT}/esp/boot/grub/grub.cfg" <<'GRUBCFG'
set default=0
# GRUB config - Dynamic based on build options
# When kiosk is enabled, default to Kiosk GUI (entry 1), otherwise standard boot (entry 0)
if [[ "${INCLUDE_KIOSK:-1}" == "1" ]]; then
GRUB_DEFAULT=1 # Kiosk GUI is second entry
log "GRUB default: Kiosk GUI mode"
else
GRUB_DEFAULT=0 # Standard boot
log "GRUB default: Standard boot"
fi
cat > "${MNT}/esp/boot/grub/grub.cfg" <<GRUBCFG
set default=${GRUB_DEFAULT}
set timeout=5
insmod part_gpt
@ -1890,30 +2168,35 @@ insmod all_video
search --no-floppy --label LIVE --set=live
# CRT-style menu colors (cyan on black, gold highlights)
set menu_color_normal=cyan/black
set menu_color_highlight=white/blue
set menu_color_highlight=yellow/blue
menuentry "SecuBox Live" {
linux ($live)/live/vmlinuz boot=live live-media-path=/live rootdelay=10 components persistence quiet splash
initrd ($live)/live/initrd.img
menuentry "SecuBox Live" {
linux (\$live)/live/vmlinuz boot=live live-media-path=/live rootdelay=10 components persistence quiet splash
initrd (\$live)/live/initrd.img
}
menuentry "SecuBox Live (Kiosk GUI)" {
linux ($live)/live/vmlinuz boot=live live-media-path=/live rootdelay=10 components persistence quiet splash secubox.kiosk=1 systemd.unit=graphical.target
initrd ($live)/live/initrd.img
menuentry "🖼️ SecuBox Live (Kiosk GUI) [DEFAULT]" {
linux (\$live)/live/vmlinuz boot=live live-media-path=/live rootdelay=10 components persistence quiet splash secubox.kiosk=1 systemd.unit=graphical.target
initrd (\$live)/live/initrd.img
}
GRUBCFG
menuentry "SecuBox Live (Console TUI)" {
# Append the rest of the menu entries with emoji indicators
cat >> "${MNT}/esp/boot/grub/grub.cfg" <<'GRUBCFG'
menuentry "📟 SecuBox Live (Console TUI)" {
linux ($live)/live/vmlinuz boot=live live-media-path=/live rootdelay=10 components persistence quiet splash secubox.mode=tui
initrd ($live)/live/initrd.img
}
menuentry "SecuBox Live (Bridge Mode)" {
menuentry "🌉 SecuBox Live (Bridge Mode)" {
linux ($live)/live/vmlinuz boot=live live-media-path=/live rootdelay=10 components persistence quiet splash secubox.netmode=bridge
initrd ($live)/live/initrd.img
}
menuentry "SecuBox Live (Safe Mode)" {
menuentry "🛡️ SecuBox Live (Safe Mode)" {
linux ($live)/live/vmlinuz boot=live live-media-path=/live rootdelay=10 components nomodeset console=tty0
initrd ($live)/live/initrd.img
}
@ -1923,32 +2206,32 @@ menuentry "💾 Install SecuBox to Disk" {
initrd ($live)/live/initrd.img
}
menuentry "SecuBox Live (To RAM)" {
menuentry "🚀 SecuBox Live (To RAM)" {
linux ($live)/live/vmlinuz boot=live live-media-path=/live rootdelay=10 components toram quiet splash
initrd ($live)/live/initrd.img
}
menuentry "SecuBox Live (Auto-Check HW)" {
menuentry "🔧 SecuBox Live (HW Check)" {
linux ($live)/live/vmlinuz boot=live live-media-path=/live rootdelay=10 components persistence quiet splash secubox.hwcheck=1
initrd ($live)/live/initrd.img
}
menuentry "SecuBox Live (Auto-Check HW - Text Mode)" {
menuentry "🔧 SecuBox Live (HW Check - Text)" {
linux ($live)/live/vmlinuz boot=live live-media-path=/live rootdelay=10 components persistence nomodeset console=tty0 secubox.hwcheck=1
initrd ($live)/live/initrd.img
}
menuentry "SecuBox Live (Emergency Shell)" {
menuentry "🚨 Emergency Shell" {
linux ($live)/live/vmlinuz boot=live live-media-path=/live rootdelay=10 components nomodeset console=tty0 systemd.unit=emergency.target
initrd ($live)/live/initrd.img
}
menuentry "SecuBox Live (Debug - Verbose Boot)" {
menuentry "🐛 Debug (Verbose Boot)" {
linux ($live)/live/vmlinuz boot=live live-media-path=/live rootdelay=10 components nomodeset console=tty0 debug=1 break=init
initrd ($live)/live/initrd.img
}
menuentry "SecuBox Live (Debug - Break at Premount)" {
menuentry "🐛 Debug (Break at Premount)" {
linux ($live)/live/vmlinuz boot=live live-media-path=/live rootdelay=10 components nomodeset console=tty0 debug=1 break=premount
initrd ($live)/live/initrd.img
}

View File

@ -67,18 +67,45 @@ apply_settings() {
log "TUI mode requested via cmdline"
rm -f "${MARKER_DIR}/.kiosk-enabled"
touch "${MARKER_DIR}/.tui-enabled"
# Disable kiosk, enable TUI
systemctl disable secubox-kiosk.service 2>/dev/null || true
systemctl stop secubox-kiosk.service 2>/dev/null || true
systemctl enable secubox-console-tui.service 2>/dev/null || true
# Set multi-user target (no graphical)
systemctl set-default multi-user.target 2>/dev/null || true
# Start TUI service (will run on tty1)
log "Starting console TUI service..."
systemctl start secubox-console-tui.service 2>/dev/null &
;;
console)
log "Console mode requested via cmdline"
log "Console mode requested via cmdline (standard shell)"
rm -f "${MARKER_DIR}/.kiosk-enabled"
rm -f "${MARKER_DIR}/.tui-enabled"
# Disable both kiosk and TUI
systemctl disable secubox-kiosk.service 2>/dev/null || true
systemctl disable secubox-console-tui.service 2>/dev/null || true
systemctl stop secubox-kiosk.service 2>/dev/null || true
systemctl stop secubox-console-tui.service 2>/dev/null || true
# Set multi-user target with standard getty
systemctl set-default multi-user.target 2>/dev/null || true
systemctl enable getty@tty1.service 2>/dev/null || true
;;
kiosk|*)
# Default: kiosk mode (handled below)
kiosk)
log "Kiosk mode explicitly requested"
# Will be handled below with secubox.kiosk=1 logic
;;
*)
# Default: check if kiosk marker exists from build time
if [[ -f "${MARKER_DIR}/.kiosk-enabled" ]]; then
log "Default mode: Kiosk (marker present from build)"
else
log "Default mode: Console shell"
fi
;;
esac

View File

@ -1,18 +1,23 @@
#!/bin/bash
# ══════════════════════════════════════════════════════════════════
# SecuBox Mode Switcher — Switch between Kiosk (GUI) and TUI modes
# CRT-style output with emoji status indicators
# ══════════════════════════════════════════════════════════════════
set -u
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[0;33m'
CYAN='\033[0;36m'
# CRT-style colors
GOLD='\033[38;5;214m'
CYAN='\033[38;5;45m'
GREEN='\033[38;5;82m'
RED='\033[38;5;196m'
GRAY='\033[38;5;242m'
WHITE='\033[38;5;250m'
NC='\033[0m'
log() { echo -e "${CYAN}[secubox]${NC} $*"; }
ok() { echo -e "${GREEN}[ OK ]${NC} $*"; }
err() { echo -e "${RED}[ERROR]${NC} $*" >&2; }
log() { echo -e "${CYAN}⚡${NC} $*"; }
ok() { echo -e "${GREEN}✓${NC} $*"; }
err() { echo -e "${RED}✗${NC} $*" >&2; }
warn() { echo -e "${GOLD}⚠${NC} $*"; }
usage() {
cat <<EOF
@ -120,27 +125,40 @@ show_status() {
local mode=$(current_mode)
echo
echo "SecuBox Display Mode"
echo "===================="
echo
echo -e "Current mode: ${CYAN}${mode}${NC}"
echo -e "${GOLD}╭─────────────────────────────────────────────────────────╮${NC}"
echo -e "${GOLD}│${NC} ${WHITE}⚡ SecuBox Display Mode${NC} ${GOLD}│${NC}"
echo -e "${GOLD}╰─────────────────────────────────────────────────────────╯${NC}"
echo
case "$mode" in
kiosk)
echo " Kiosk mode: Chromium browser in fullscreen"
echo " Press Ctrl+Alt+F2 to access console"
echo " Use 'secubox-mode tui' to switch to TUI"
echo -e " ${GREEN}●${NC} Current: ${CYAN}Kiosk GUI${NC} 🖼️"
echo
echo -e " ${GRAY}Chromium browser in fullscreen on tty7${NC}"
echo -e " ${GRAY}Press ${WHITE}Ctrl+Alt+F2${GRAY} to access console${NC}"
echo -e " ${GRAY}Use ${WHITE}secubox-mode tui${GRAY} to switch to TUI${NC}"
;;
tui)
echo " TUI mode: Console-based dashboard"
echo " Press 'q' to exit TUI, then 'secubox-mode kiosk' to switch"
echo -e " ${GREEN}●${NC} Current: ${CYAN}Console TUI${NC} 📟"
echo
echo -e " ${GRAY}Text-based dashboard on tty1${NC}"
echo -e " ${GRAY}Press ${WHITE}q${GRAY} to exit TUI${NC}"
echo -e " ${GRAY}Use ${WHITE}secubox-mode kiosk${GRAY} for GUI mode${NC}"
;;
console)
echo " Console mode: Standard login shell"
echo " Use 'secubox-mode kiosk' or 'secubox-mode tui' to switch"
echo -e " ${GREEN}●${NC} Current: ${CYAN}Console Shell${NC} 🖥️"
echo
echo -e " ${GRAY}Standard login shell${NC}"
echo -e " ${GRAY}Use ${WHITE}secubox-mode kiosk${GRAY} or ${WHITE}tui${GRAY} to switch${NC}"
;;
esac
echo
echo -e " ${GRAY}────────────────────────────────────────────────────${NC}"
echo -e " ${WHITE}Modes:${NC}"
echo -e " ${CYAN}kiosk${NC} 🖼️ Full-screen browser GUI"
echo -e " ${CYAN}tui${NC} 📟 Console text dashboard"
echo -e " ${CYAN}console${NC} 🖥️ Standard shell login"
echo
}