|
| 1 | +#!/bin/bash |
| 2 | + |
| 3 | +# _ _ _ ___ ____ _____ |
| 4 | +# | | | | __ _ ___| | _____ _ __ / _ \/ ___| |_ _|__ __ _ _ __ ___ |
| 5 | +# | |_| |/ _` |/ __| |/ / _ \ '__| | | \___ \ | |/ _ \/ _` | '_ ` _ \ |
| 6 | +# | _ | (_| | (__| < __/ | | |_| |___) | | | __/ (_| | | | | | | |
| 7 | +# |_| |_|\__,_|\___|_|\_\___|_| \___/|____/ |_|\___|\__,_|_| |_| |_| |
| 8 | + |
| 9 | +set -euo pipefail |
| 10 | + |
| 11 | +TARGET_CMD="/usr/bin/cage /usr/share/HackerOS/Scripts/HackerOS-Apps/Hacker-Mode" |
| 12 | +TTY="tty3" |
| 13 | +SWITCH=false |
| 14 | + |
| 15 | +# Sprawdź opcję --switch |
| 16 | +if [[ "${1:-}" == "--switch" ]]; then |
| 17 | + SWITCH=true |
| 18 | +fi |
| 19 | + |
| 20 | +# sprawdź, czy skrypt uruchomiono jako root |
| 21 | +if [[ $EUID -ne 0 ]]; then |
| 22 | + echo "Ten skrypt musi być uruchomiony jako root (sudo)." >&2 |
| 23 | + exit 1 |
| 24 | +fi |
| 25 | + |
| 26 | +# Wykrywanie aktualnego użytkownika |
| 27 | +USERNAME=$(whoami) |
| 28 | + |
| 29 | +# sprawdź, czy TTY istnieje |
| 30 | +if [[ ! -e "/dev/${TTY}" ]]; then |
| 31 | + echo "/dev/${TTY} nie istnieje. Sprawdź poprawność numeru TTY." >&2 |
| 32 | + exit 2 |
| 33 | +fi |
| 34 | + |
| 35 | +# sprawdź, czy polecenie istnieje |
| 36 | +if [[ ! -x "${TARGET_CMD%% *}" ]]; then |
| 37 | + echo "Nie znaleziono wykonywalnego: ${TARGET_CMD%% *}" >&2 |
| 38 | + exit 3 |
| 39 | +fi |
| 40 | + |
| 41 | +echo "Uruchamiam polecenie na /dev/${TTY} jako użytkownik ${USERNAME}..." |
| 42 | +echo "Polecenie: $TARGET_CMD" |
| 43 | + |
| 44 | +# Komenda do uruchomienia: przekierowujemy stdout/stderr do tty3, setsid -> nowa sesja |
| 45 | +# używamy openvt aby przypisać proces do VT numer 3 (nie wymuszamy przełączenia) |
| 46 | +# su -l uruchamia polecenie w kontekście użytkownika. |
| 47 | +openvt -c 3 -- su -l "$USERNAME" -c "exec >/dev/${TTY} 2>&1; exec setsid ${TARGET_CMD}" & |
| 48 | + |
| 49 | +pid=$! |
| 50 | +echo "Proces uruchomiony (PID $pid)." |
| 51 | + |
| 52 | +if $SWITCH; then |
| 53 | + echo "Przełączam aktywne VT na /dev/${TTY}..." |
| 54 | + # chvt może zwrócić błąd w kontenerach lub gdy brak uprawnień, trzymamy -e off |
| 55 | + if ! chvt 3; then |
| 56 | + echo "Uwaga: chvt nie powiodło się. Możliwe, że jesteś w środowisku, gdzie chvt nie jest dostępne." |
| 57 | + fi |
| 58 | +fi |
| 59 | + |
| 60 | +echo "Gotowe." |
| 61 | +exit 0 |
0 commit comments