Skip to main content

📦 Tweaks für EOS

tweaksEOS.sh – Terminal-Menüversion

V26.11.001

ZIP-Archiv mit tweaksEOS.sh und tweaksEOS.desktop:

tweaksEOS_V2026-11-001.zip


⚠️ WICHTIG

Nutzung auf eigene Verantwortung – bitte vorher Backups anlegen!

 __        __   _                            _       
 \ \      / /__| | ___ ___  _ __ ___   ___  | |_ ___ 
  \ \ /\ / / _ \ |/ __/ _ \| '_ ` _ \ / _ \ | __/ _ \
   \ V  V /  __/ | (_| (_) | | | | | |  __/ | || (_) |
    \_/\_/ \___|_|\___\___/|_| |_| |_|\___|  \__\___/ 

 Linux EndeavourOS (EOS) – Systempflege
 tweaksEOS.sh V2026-11-001
 Distro: EndeavourOS
 Bash: 5.3.20(1)-release

====== Wartungsmenü ======
1) Kernel zeigen und eos-update + Flatpak
2) System über AUR aktualisieren (yay)
3) Verwaiste Pakete entfernen
4) Paket-Caches vollständig löschen
5) Spiegelserver aktualisieren (reflector-simple)
6) Zugriffsrechte im Home-Verzeichnis korrigieren
7) Systeminformationen anzeigen
8) Fehler seit letztem Boot (journalctl)
9) Temperatur-Sensorwerte anzeigen
10) SATA-S.M.A.R.T.-Informationen (smartctl)
11) NVMe S.M.A.R.T.-Status anzeigen (nvme-cli)
12) USB S.M.A.R.T.-Status anzeigen
13) Pacman-Datenbanksperre entfernen
14) fstrim auf SSDs ausführen
15) Speicherplatz anzeigen (Zurück mit Q)
16) Systemmonitor htop starten (Zurück mit F10)
0) Beenden

Auswahl [0-16]: 

▶️ Aufruf und Startoptionen

bash tweaksEOS.sh

Alternativ:

chmod +x tweaksEOS.sh
./tweaksEOS.sh

Oder über einen Desktop-Starter ausführen
(z.B. tweaksEOS.desktop für KDE)

💡 Hinweis

Das Skript verwendet bei Bedarf sudo – es darf nicht direkt als root gestartet werden!


Script tweaksEOS.sh

#!/usr/bin/env bash
# tweaksEOS.sh – kleine Systempflege für EndeavourOS
# Aufruf: bash tweaksEOS.sh
# Nicht als root starten!

set -uo pipefail

version="V2026-11-001"

# Farben (optional)
if command -v tput >/dev/null 2>&1 && [[ -t 1 ]] && tput setaf 1 >/dev/null 2>&1; then
    blau=$(tput setaf 4)
    gruen=$(tput setaf 2)
    rot=$(tput setaf 1)
    gelb=$(tput setaf 3)
    reset=$(tput sgr0)
else
    blau="" gruen="" rot="" gelb="" reset=""
fi

pause() {
    read -r -p "Drücke Enter zum Fortfahren..." _
}

abbruch() {
    echo
    echo "${rot}Abbruch durch Benutzer.${reset}"
    exit 130
}
trap abbruch INT

# Nicht als root starten
if [[ "$EUID" -eq 0 ]]; then
    echo "${rot}Bitte nicht als root oder mit sudo starten.${reset}"
    exit 1
fi

# EndeavourOS prüfen
if [[ ! -r /etc/os-release ]]; then
    echo "Betriebssysteminformationen nicht gefunden."
    exit 1
fi

. /etc/os-release

if [[ "$ID" != "endeavouros" ]]; then
    echo "Dieses Skript ist ausschließlich für EndeavourOS vorgesehen."
    exit 1
fi

distro=$(. /etc/os-release && printf '%s' "${PRETTY_NAME:-EndeavourOS}")

echo "➤ Für einzelne Wartungsaufgaben werden sudo-Rechte benötigt."
if ! sudo -v; then
    echo "${rot}sudo-Authentifizierung fehlgeschlagen.${reset}"
    exit 1
fi

run_step() {
    local title="$1"
    shift
    echo
    echo "${gelb}➤ ${title}${reset}"
    "$@"
    local ec=$?
    if [[ $ec -ne 0 ]]; then
        echo "${rot}Befehl mit Fehlercode ${ec} beendet.${reset}"
    fi
    return 0
}

update_system() {
    if ! command -v eos-update >/dev/null 2>&1; then
        echo "${rot}eos-update wurde nicht gefunden.${reset}"
        return 1
    fi

    local ec=0
    eos-update || ec=$?

    if command -v flatpak >/dev/null 2>&1; then
        echo
        echo "${gelb}➤ Flatpak-Updates${reset}"
        flatpak update || ec=$?

        echo
        echo "${gelb}➤ Ungenutzte Flatpak-Runtimes entfernen${reset}"
        flatpak uninstall --unused || ec=$?
    fi

    return "$ec"
}

update_aur() {
    if ! command -v yay >/dev/null 2>&1; then
        echo "${rot}yay ist nicht installiert.${reset}"
        return 1
    fi
    yay -Syu
}

remove_orphans() {
    local orphans
    mapfile -t orphans < <(pacman -Qdtq 2>/dev/null || true)

    if [[ ${#orphans[@]} -eq 0 ]]; then
        echo "${gruen}Keine verwaisten Pakete gefunden.${reset}"
        return 0
    fi

    echo "Gefundene verwaiste Pakete:"
    printf '  %s\n' "${orphans[@]}"
    echo
    read -r -p "Diese Pakete entfernen? [j/N]: " answer

    if [[ "$answer" =~ ^[Jj]$ ]]; then
        sudo pacman -Rns -- "${orphans[@]}"
    else
        echo "Keine Pakete entfernt."
    fi
}

clear_caches() {
    echo "Achtung: Cache-Dateien werden vollständig gelöscht."
    read -r -p "Fortfahren? [j/N]: " answer
    [[ "$answer" =~ ^[Jj]$ ]] || {
        echo "Abgebrochen."
        return 0
    }

    sudo pacman -Scc
    if command -v yay >/dev/null 2>&1; then
        yay -Scc
    fi
}

update_mirrors() {
    if command -v reflector-simple >/dev/null 2>&1; then
        reflector-simple
    else
        echo "${rot}reflector-simple ist nicht installiert.${reset}"
        echo "Installierbar beispielsweise mit: yay -S reflector-simple"
        return 1
    fi
}

fix_home_ownership() {
    echo "Es werden nur Einträge im Home-Verzeichnis gesucht,"
    echo "die nicht dem aktuellen Benutzer gehören."
    echo "Es werden keine pauschalen chmod-Änderungen vorgenommen."
    echo
    read -r -p "Besitzerrechte korrigieren? [j/N]: " answer
    [[ "$answer" =~ ^[Jj]$ ]] || {
        echo "Keine Änderungen vorgenommen."
        return 0
    }

    sudo find "$HOME" -xdev ! -user "$USER" \
        -exec chown --no-dereference "$USER":"$(id -gn)" {} +
}

show_system_info() {
    echo
    if command -v inxi >/dev/null 2>&1; then
        inxi -Fz
    else
        echo "inxi ist nicht installiert."
        echo
        uname -a
        echo
        cat /etc/os-release
    fi
}

show_journal_errors() {
    journalctl -b -p 3 --no-pager
}

show_sensors() {
    if command -v sensors >/dev/null 2>&1; then
        sensors
    else
        echo "sensors ist nicht installiert (Paket: lm_sensors)."
    fi
}

show_nvme_smart() {
    if ! command -v nvme >/dev/null 2>&1; then
        echo "nvme-cli ist nicht installiert."
        return 1
    fi

    local devices
    devices=$(sudo nvme list 2>/dev/null | awk '/^\/dev\/nvme[0-9]+n[0-9]+/ {print $1}')

    if [[ -z "$devices" ]]; then
        echo "Keine NVMe-Geräte gefunden."
        return 0
    fi

    while IFS= read -r dev; do
        [[ -n "$dev" ]] || continue
        echo
        echo "${blau}S.M.A.R.T.-Status: ${dev}${reset}"
        sudo nvme smart-log "$dev"
    done <<< "$devices"
}

show_usb_smart() {
    if ! command -v smartctl >/dev/null 2>&1; then
        echo "smartmontools ist nicht installiert."
        return 1
    fi

    local devices
    devices=$(lsblk -dn -o NAME,TRAN | awk '$2 == "usb" {print "/dev/" $1}')

    if [[ -z "$devices" ]]; then
        echo "Keine USB-Laufwerke gefunden."
        return 0
    fi

    while IFS= read -r dev; do
        [[ -n "$dev" ]] || continue
        echo
        echo "${blau}S.M.A.R.T.-Status: ${dev}${reset}"
        sudo smartctl -a "$dev" || \
        sudo smartctl -a -d sat "$dev" || \
        sudo smartctl -a -d scsi "$dev" || true
    done <<< "$devices"
}

show_sata_smart() {
    if ! command -v smartctl >/dev/null 2>&1; then
        echo "smartmontools ist nicht installiert."
        echo "Installiere es mit: sudo pacman -S smartmontools"
        return 1
    fi

    local devices
    devices=$(sudo smartctl --scan 2>/dev/null |
        awk '$1 ~ /^\/dev\/sd[a-z]+$/ {print $1}')

    if [[ -z "$devices" ]]; then
        echo "Keine SATA-Geräte gefunden."
        return 0
    fi

    while IFS= read -r dev; do
        [[ -n "$dev" ]] || continue

        echo
        echo "${blau}S.M.A.R.T.-Informationen: ${dev}${reset}"
        sudo smartctl -a "$dev"
    done <<< "$devices"
}

remove_pacman_lock() {
    if pgrep -x pacman >/dev/null || pgrep -x yay >/dev/null; then
        echo "${rot}Pacman oder yay läuft noch. Die Sperre wird nicht entfernt.${reset}"
        return 1
    fi

    if [[ ! -e /var/lib/pacman/db.lck ]]; then
        echo "Keine Pacman-Datenbanksperre gefunden."
        return 0
    fi

    echo "${rot}Eine aktive Paketverwaltung darf nicht unterbrochen werden.${reset}"
    read -r -p "Datenbanksperre wirklich entfernen? [j/N]: " answer
    if [[ "$answer" =~ ^[Jj]$ ]]; then
        sudo rm -- /var/lib/pacman/db.lck
    else
        echo "Sperre nicht entfernt."
    fi
}

show_disk_space() {
    if command -v less >/dev/null 2>&1; then
        df -h | less
    else
        df -h
    fi
}

show_menu() {
    clear
    echo "${gruen}"
    echo " __        __   _                            _       "
    echo " \\ \\      / /__| | ___ ___  _ __ ___   ___  | |_ ___ "
    echo "  \\ \\ /\\ / / _ \\ |/ __/ _ \\| '_ \` _ \\ / _ \\ | __/ _ \\"
    echo "   \\ V  V /  __/ | (_| (_) | | | | | |  __/ | || (_) |"
    echo "    \\_/\\_/ \\___|_|\\___\\___/|_| |_| |_|\\___|  \\__\\___/ "
    echo
    echo " Linux EndeavourOS (EOS) – Systempflege"
    echo " tweaksEOS.sh ${version}"
    echo " Distro: ${distro}"
    echo " Bash: ${BASH_VERSION}"
    echo "${reset}"

    echo "${gelb}====== Wartungsmenü ======${reset}"
    echo "1) Kernel zeigen und eos-update + Flatpak"
    echo "2) System über AUR aktualisieren (yay)"
    echo "3) Verwaiste Pakete entfernen"
    echo "4) Paket-Caches vollständig löschen"
    echo "5) Spiegelserver aktualisieren (reflector-simple)"
    echo "6) Zugriffsrechte im Home-Verzeichnis korrigieren"
    echo "7) Systeminformationen anzeigen"
    echo "8) Fehler seit letztem Boot (journalctl)"
    echo "9) Temperatur-Sensorwerte anzeigen"
    echo "10) SATA-S.M.A.R.T.-Informationen (smartctl)"
    echo "11) NVMe S.M.A.R.T.-Status anzeigen (nvme-cli)"
    echo "12) USB S.M.A.R.T.-Status anzeigen"
    echo "13) Pacman-Datenbanksperre entfernen"
    echo "14) fstrim auf SSDs ausführen"
    echo "15) Speicherplatz anzeigen (Zurück mit Q)"
    echo "16) Systemmonitor htop starten (Zurück mit F10)"
    echo "0) Beenden"
    echo
}

while true; do
    show_menu
    read -r -p "Auswahl [0-16]: " answer

    case "$answer" in
        1)
            echo
            echo "${gelb}Installierte Kernel-Pakete:${reset}"
            pacman -Q linux linux-lts 2>&1
            echo "Aktuell laufender Kernel: $(uname -r)"
            run_step "System aktualisieren" update_system
            pause
            ;;
        2)
            run_step "AUR- und Systemupdates" update_aur
            pause
            ;;
        3)
            run_step "Verwaiste Pakete prüfen" remove_orphans
            pause
            ;;
        4)
            run_step "Paket-Caches leeren" clear_caches
            pause
            ;;
        5)
            run_step "Arch-Mirrors auswählen und ranken" update_mirrors
            pause
            ;;
        6)
            run_step "Besitzerrechte im Home-Verzeichnis prüfen" fix_home_ownership
            pause
            ;;
        7)
            run_step "Systeminformationen" show_system_info
            pause
            ;;
        8)
            run_step "Fehler seit dem letzten Boot" show_journal_errors
            pause
            ;;
        9)
            run_step "Temperatursensoren" show_sensors
            pause
            ;;
        10)
            run_step "SATA-S.M.A.R.T.-Informationen" show_sata_smart
            pause
            ;;
        11)
            run_step "NVMe-S.M.A.R.T.-Status" show_nvme_smart
            pause
            ;;
        12)
            run_step "USB-S.M.A.R.T.-Status" show_usb_smart
            pause
            ;;
        13)
            run_step "Pacman-Datenbanksperre prüfen" remove_pacman_lock
            pause
            ;;
        14)
            run_step "fstrim auf unterstützten Dateisystemen" sudo fstrim -av
            pause
            ;;
        15)
            show_disk_space
            ;;
        16)
            if command -v htop >/dev/null 2>&1; then
                htop
            else
                echo "htop ist nicht installiert."
                pause
            fi
            ;;
        0)
            echo "${gruen}Skript wird beendet.${reset}"
            exit 0
            ;;
        *)
            echo "${rot}Ungültige Auswahl.${reset}"
            pause
            ;;
    esac
done

Beispiel: KDE Shortcut tweaksEOS.desktop

[Desktop Entry]
Comment[de_DE]=
Comment=
Exec=konsole -e '~/bin/tweaksEOS.sh'
GenericName[de_DE]=
GenericName=
Icon=update-none-symbolic
MimeType=
Name[de_DE]=tweaksEOS
Name=tweaksEOS
Path=
StartupNotify=true
Terminal=false
TerminalOptions=
Type=Application
X-DBUS-ServiceName=
X-DBUS-StartupType=
X-KDE-SubstituteUID=false
X-KDE-Username=