Linux Mint

Linux Mint ist eine Linux-Distribution für PC in zwei parallel verfügbaren Ausgaben. Die Hauptausgabe, einfach Linux Mint genannt, basiert auf der Linux-Distribution Ubuntu und ist in drei Editionen verfügbar, nämlich mit der jeweiligen Desktop-Umgebung als Cinnamon-, MATE- und Xfce-Edition.

Hardware Installation

Hardware Installation

Asus Vivobook S Wifi installation

Beschreibung

bei einer frischen installation, ist Wifi nicht vorhanden. Die Wifi Karte wird nicht als USB/PCI Karte erkannt.
Daher muss ein weiteres Kernelmodul installiert werden.
Damit wir das können, vorrübergehend mit einer USB Netzwerkkarte arbeiten oder ein Smartphone per USB mit Thetering anschließen.

Installation

sudo apt update && sudo apt install rtl8821ce-dkms

 

Hardware Installation

Mittlere Maustaste deaktivieren um ungewollten schließen von Tabs/Fenstern zu verhindern

Beschreibung:

Bei einigen Notebooks ist es echt ätzend das die mittlere Maustaste nicht sichtbar szwichen der linken und rechten taste liegt.
Will man eigentlich nur einen Linksklick machen, und kommt zu weit rechts, wird der Tab geschlossen anstatt das er wieder aktiviert / angezeigt wird.
Gott sei Dank kann man mit xinput oder  xmodmap die Taste auch deaktivieren. Ist ein bisschen mühselig aber lohnt sich.

Edit: die xmodmap variante funktioniert besser und ist auchn och einfacher zu implementieren.
ich schlage vor erstmal Lösung xmodmap zu nehmen

XINPUT-Methode

Installation xinput

sudo apt-get install xinput

IDs herausfinden

Nun die ID unseres Gerätes (Touchpad) herausbekommen

xinput list


Ausgabe:
xinput list
⎡ Virtual core pointer                    	id=2	[master pointer  (3)]
⎜   ↳ Virtual core XTEST pointer              	id=4	[slave  pointer  (2)]
⎜   ↳ Wacom HID 52CD Pen stylus               	id=10	[slave  pointer  (2)]
⎜   ↳ Wacom HID 52CD Finger touch             	id=11	[slave  pointer  (2)]
⎜   ↳ MSFT0001:00 06CB:CE78 Mouse             	id=12	[slave  pointer  (2)]
⎜   ↳ MSFT0001:00 06CB:CE78 Touchpad          	id=13	[slave  pointer  (2)]
⎜   ↳ Wacom HID 52CD Pen eraser               	id=15	[slave  pointer  (2)]
⎣ Virtual core keyboard                   	id=3	[master keyboard (2)]
    ↳ Virtual core XTEST keyboard             	id=5	[slave  keyboard (3)]
    ↳ Video Bus                               	id=6	[slave  keyboard (3)]
    ↳ Power Button                            	id=7	[slave  keyboard (3)]
    ↳ Integrated Camera: Integrated C         	id=8	[slave  keyboard (3)]
    ↳ Ideapad extra buttons                   	id=9	[slave  keyboard (3)]
    ↳ AT Translated Set 2 keyboard            	id=14	[slave  keyboard (3)]

id=12und 13 kommt unsererm Tochpad am nähesten.
Wie wir sehen ist Tocuhpad und Mouse mit der gleichen ID vorhanden.
Warum auch immer.
Wir führen diese Prozedur für beide IDs durch.

Wir holen  uns die Tasten von Gerät mit der ID 12 bei euch kann es ne ander ID sein.
Wie wir sehen ist warum auch immer .

Die Buttons für 12 und 13 sind identisch

xinput get-button-map [id]

Ausgabe für 12

xinput get-button-map 12
1 2 3 4 5 6 7 

Ausgabe für 13

xinput get-button-map 13
1 2 3 4 5 6 7 

Taste deaktivieren

In dierser Liste von Zahlen entpricht in der Regel die zweite Zahl die mittlere Maustaste.
Wir deaktivieren diese in dem wir sie auf 0 setzen.
Wichtig ist das wir alle folgenden Zahlen auch mit eintragen.

xinput set-button-map [ID] 1 0 3 [restliche Zahlen]

Beispiel:

xinput set-button-map [ID] 1 0 3 4 5 6 7
Nun für beide ids
xinput set-button-map 12 1 0 3 4 5 6 7
xinput set-button-map 13 1 0 0 4 5 6 7

Beim Systemstart ausführen lassen

Nun öffnen wir Startprogramme

Menü_007.png

klicken auf das Plus

Auswahl_1056.png

und wählen benutzerdefinierter Befehl aus

Menü_008.png

Nun Namen vergeben mit ID 12
Den Befehl reinpacken : xinput set-button-map 12 1 0 3 4 5 6 7


Das ganze wiederholen wir dann auch für die ID 13

Auswahl_1057.png

Fertig.
Nun kein generve mehr mit schließen von mittlerer Maustate auf dem Tocuhpad.
Bei allen anderen Mäusen die ventuell noch angeschlossen sind funktioniert die mittlere Maustatse immer noch.
Wenn man die auch deaktivieren möchte, dann von der Maus die id raussuchen und das gleiche Spiel nochmals ;-)

Mit xmodmap Methode

 

xmodmap -e "pointer = 1 0 3"

Nun das ganze als Autostart einbetten.
Nun öffnen wir Startprogramme

Menü_007.png

klicken auf das Plus

Auswahl_1056.png

und wählen benutzerdefinierter Befehl aus

Menü_008.png

Nun Namen vergeben : mittlere Maustaste deaktivieren
Den Befehl reinpacken : xmodmap -e "pointer = 1 0 3"

Auswahl_266.png

Fertig.
Nun kein generve mehr mit schließen von mittlerer Maustate auf dem Tocuhpad.

Hardware Installation

Swap Datei vergrößern

Um die Größe einer Swap-Datei unter Linux zu vergrößern, folgen Sie diesen Schritten:

  1. Swap-Datei deaktivieren: Deaktivieren Sie zunächst die aktuelle Swap-Datei. In diesem Beispiel nehmen wir an, dass die Swap-Datei /swapfile heißt.

    sh

  2. sudo swapoff /swapfile
  3. Swap-Datei vergrößern: Verwenden Sie das dd-Kommando, um die Swap-Datei zu vergrößern. Angenommen, Sie möchten die Swap-Datei auf 4GB vergrößern (und die aktuelle Swap-Datei hat eine Größe von 2GB).



  4. sudo dd if=/dev/zero of=/swapfile bs=1M count=4096

    Ersetzen Sie 4096 durch die gewünschte Größe in Megabytes.

  5. Swap-Datei formatieren: Setzen Sie die richtigen Berechtigungen und formatieren Sie die Datei als Swap.

    sh

  6. sudo chmod 600 /swapfile sudo mkswap /swapfile
  7. Swap-Datei aktivieren: Aktivieren Sie die Swap-Datei erneut.

    sh

  8. sudo swapon /swapfile
  9. Überprüfen: Überprüfen Sie, ob die Swap-Datei korrekt aktiviert wurde und die neue Größe hat.

    sh

  10. sudo swapon --show
  11. Eintrag in /etc/fstab überprüfen: Stellen Sie sicher, dass die Swap-Datei in der /etc/fstab eingetragen ist, damit sie beim Booten automatisch aktiviert wird. Der Eintrag sollte in etwa so aussehen:

    sh

  1. /swapfile none swap sw 0 0

Durch diese Schritte sollten Sie die Größe Ihrer Swap-Datei erfolgreich vergrößert haben.

Hardware Installation

Partiton aufs maximum vergrößern wenn die Festplatte vergößert wurde

Beschreibung:

Es kann mal vor kommen, das eine Festplatte z.b in einer VM vergrößert wird.
Leider wird das Dateisystem nicht mit angepasst.

Hier ein Script das die macht.
Dies Script hat allerdings Pakete Voraussetzungen die noch installiert werden müssen.

Voraussetzungen:

apt-get install bc e2fsprogs parted util-linux cloud-utils

Das Script:

nano /root/extend_to_max.sh

Inhalt

#!/bin/bash
#
# extend_to_max.sh – Erweitert eine Partition (und das Dateisystem)
#                     auf den maximal verfügbaren freien Speicher.
#
# Benutzung:
#    ./extend_to_max.sh -d <Partition>
#
# Beispiel:
#    ./extend_to_max.sh -d /dev/sda2
#
# ACHTUNG: Vor Änderungen unbedingt ein vollständiges Backup anfertigen!
#

print_help() {
    echo "Usage: $0 -d <Partition>"
    echo "  -d   Zielpartition (z.B. /dev/sda2)"
}

# Parameter prüfen
if [ "$#" -eq 0 ]; then
    print_help
    exit 1
fi

while getopts "d:h" opt; do
    case $opt in
        d)
            DEVICE="$OPTARG"
            ;;
        h)
            print_help
            exit 0
            ;;
        ?)
            print_help
            exit 1
            ;;
    esac
done

if [ -z "$DEVICE" ]; then
    echo "Fehler: Kein Gerät angegeben!"
    print_help
    exit 1
fi

# Root-Prüfung
if [ "$(id -u)" -ne 0 ]; then
    echo "Dieses Script muss als root ausgeführt werden."
    exit 1
fi

echo "Erweitere Partition $DEVICE auf maximal verfügbaren Speicher..."

# Bestimme den übergeordneten Datenträger und die Partitionsnummer.
PARENT=$(lsblk -no pkname "$DEVICE" 2>/dev/null)
if [ -n "$PARENT" ]; then
    DISK="/dev/$PARENT"
else
    DISK=$(echo "$DEVICE" | sed 's/[0-9]*$//')
fi

PART_NUM=$(echo "$DEVICE" | sed 's/.*\([0-9]\+\)$/\1/')
echo "Verwende Datenträger: $DISK, Partition: $PART_NUM"

# Starte die Erweiterung mit growpart.
# (growpart erweitert standardmäßig bis zum maximal verfügbaren freien Platz)
echo "Starte growpart..."
growpart "$DISK" "$PART_NUM"
if [ $? -ne 0 ]; then
    echo "Fehler: growpart konnte die Partition nicht erweitern."
    exit 1
fi

# Erweitere anschließend das Dateisystem (hier wird ext2/3/4 vorausgesetzt).
echo "Passe das Dateisystem an ($DEVICE) an..."
resize2fs "$DEVICE"
if [ $? -ne 0 ]; then
    echo "Fehler: resize2fs konnte das Dateisystem nicht erweitern."
    exit 1
fi

echo "Partition und Dateisystem wurden erfolgreich auf den maximal verfügbaren Speicher erweitert."
exit 0

Script Ausführbar machen

chmod +x /root/extend_to_max.sh

Erklärung:

  1. Parameterverarbeitung:

    • -d <Partition>: Gibt die Partition an, die vergrößert werden soll (z.B. /dev/sda1).

  2. Überprüfung der Partition:

    • Das Skript überprüft, ob die angegebene Partition existiert.

  3. Vergrößern der Partition:

    • Das Skript verwendet growpart, um die Partition zu vergrößern.

  4. Vergrößern des Dateisystems:

    • Das Skript verwendet resize2fs, um das Dateisystem auf der Partition zu vergrößern.

Hilfe anzeigen:

./extend_to_max.sh

Vergrößerung:

./extend_to_max.sh -d /dev/sda1


Upgrade Fehler

Upgrade Fehler

Upgrade Fehler mit Nodejs

Beschreibung:

Beim ganz normalen apt full-upgrade bleibt apt beim folgendem paket hängen:
/nodejs_14.21.3-deb-1nodesource1_amd64.deb 

Ausgabe:

Entpacken von nodejs (14.21.3-deb-1nodesource1) über (12.22.9~dfsg-1ubuntu3) ...
dpkg: Fehler beim Bearbeiten des Archivs /var/cache/apt/archives/nodejs_14.21.3-
deb-1nodesource1_amd64.deb (--unpack):
 Versuch, »/usr/include/node/common.gypi« zu überschreiben, welches auch in Pake
t libnode-dev 12.22.9~dfsg-1ubuntu3 ist
dpkg-deb: Fehler: »einfügen«-Unterprozess wurde durch Signal (Datenübergabe unte
rbrochen (broken pipe)) getötet
Fehler traten auf beim Bearbeiten von:
 /var/cache/apt/archives/nodejs_14.21.3-deb-1nodesource1_amd64.deb
E: Sub-process /usr/bin/dpkg returned an error code (1)

Abhilfe:

Dann liegt die Wahrscheinlichkeit nahe, das es eine eigene source.list für nodejs gibt.
/etc/apt/sources.list.d/nodesource.list

Diese Datei löschen und apt update, dann nochmals apt full-upgrade

sudo rm /etc/apt/sources.list.d/nodesource.list
sudo apt update
sudo apt full-upgrade
reboot

Nodejs installieren

Da wir ja keine source.list für nodejs mehr ahben, laden wir in Zukunft immer das aktuelle paket runter.
Somit vermeiden wir, dieses Problem nochmals zu bekommen.

Unter https://deb.nodesource.com den aktuellen Befehl kopieren, zur Erstelleung des Artikels war es nodejs 20

https://deb.nodesource.com
curl -fsSL https://deb.nodesource.com/setup_20.x | sudo -E bash - &&\
sudo apt-get install -y nodejs

Ausgabe:

Holen:1 https://deb.nodesource.com/node_20.x jammy/main amd64 nodejs amd64 20.2.0-deb-1nodesource1 [30,3 MB]
Es wurden 30,3 MB in 5 s geholt (5.801 kB/s).
(Lese Datenbank ... 705326 Dateien und Verzeichnisse sind derzeit installiert.)
Vorbereitung zum Entpacken von .../nodejs_20.2.0-deb-1nodesource1_amd64.deb ...
Entpacken von nodejs (20.2.0-deb-1nodesource1) über (12.22.9~dfsg-1ubuntu3) ...
nodejs (20.2.0-deb-1nodesource1) wird eingerichtet ...
Trigger für man-db (2.10.2-1) werden verarbeitet ...

Fertig

Upgrade Fehler

grub-efi-amd64-signed grub-efi-arm64-signed unmet dependencies:

Beschreibung:

The following packages have unmet dependencies:  
shim-signed : Depends: grub-efi-amd64-signed (>= 1.191~) but 1.187.6+2.06-2ubuntu14.4 is to be installed or                         
grub-efi-arm64-signed (>= 1.191~) but it is not installable or                         
base-files (< 12.3)


Lösung:

Zweites Terminal aufmachen.

sudo apt --only-upgrade install grub-efi-amd64-signed

Danach das mintupgrade  Setup abbrechen mit strg+c im ersten Terminal und dann mintupgrade neu starten, dazu wieder mintupgrade eingeben bzw Pfeiltaste nach oben

sudo mintupgrade

Alles nochmals durchlaufen lassen, dann hat man so ein Ergebnis ;-)

image-1737020268339.png

 

 

Kontextmenü

Kontextmenü

pendant zu Senden an Desktop hinzufügen

Beschreibung:

Es gibt Situationen, da möchte man gern eine Verknüpfung von einer Datei auf dem Schreibtisch haben.

Lösung:

Abhängigkeiten installieren.
Gedit ein Texteditor mit Zeilennummern vorran.

apt install gedit

Nun die Datei für die Action erstellen. Actions das sind die Kotextmenüeinträge, diese werden mittels Action Dateien
im Verzeichnis ~/.local/share/nemo/actions/ erstellt. Das ist das Verzeichnis für User Actions.
Damit sie als Action Dateien erkannt werden, haben sie die Endung  .nemo_action

Hinweis: Wenn man globale Actions möchte, was wir hier nicht wollen, denn jeder hat ja ein anderes User Verzeichnis dann känmen die Actions in dieses Verzeichnis : /usr/share/nemo/actions/ und die Skripte in /usr/share/nemo/scripts/
gedit ~/.local/share/nemo/actions/create-desktop-link.nemo_action

Nun den Inhalt einfügen. Im
Exec bereich darauf achten das das Home Verzeichnis richtig ist, denn ~ funktioniert hier nicht

[Nemo Action]
Name=Erstelle Verknüpfung auf Desktop
Comment=Erstellt eine Verknüpfung auf dem Desktop zur gewählten Datei
Exec=/home/duffy/.local/share/nemo/scripts/create_desktop_link.sh %F
Icon-Name=emblem-symbolic-link
Selection=s
Extensions=any;

Nun das Script was von unserem Kontextmenü aufgerufen wird erstellen

gedit ~/.local/share/nemo/scripts/create_desktop_link.sh

Das Zielverzeichnis im Script anpassen. Bei mir ist es Schreibtisch weil ich Linux Mint in Deutsch installiert habe, könnte aber auch Desktop heißen. Oder Ihr wollt ein ganz anderes Verzeichnis. Dieses dann anpassen.

Inhalt

#!/bin/bash

for file in "$@"
do
    ln -s "$file" ~/Schreibtisch/
done


Das Script ausführbar machen

chmod +x ~/.local/share/nemo/scripts/create_desktop_link.sh


Danach nemo im terminal neustartenwird zwar der Eintrag angezeigt, aber nicht ausgeführt

nemo -q

Nun sieht das ganze so aus:

Menü_006.png

Nun die erstellte Verknüpfung

Auswahl_1023.png





Kontextmenü

senden per Email Eintrag

Beschreibung:

In den neueren Versionen von Linux MInt, fehlt der Eintrag senden per Email.
Wir können uns diesen Eintrag aber einfach selbst wieder bauen.
Warum der allerdings weg ist, weiß ich nicht.

Installation:

eine neue Datei mit dem Namen  

send-email.nemo_action

im Benutzerverzeichnis unter

/home/DEIN_BENUTZERNAME/.local/share/nemo/actions/

Sollte das Verzeichnis actions nicht existieren erstellen wir diesen.
proforma einfach das Verzeichnis erstellen lassen,wenn es das schon gibt, gibts halt ein Fehler ;-)

mkdir /home/DEIN_BENUTZERNAME/.local/share/nemo/actions/

dann

nano /home/DEIN_BENUTZERNAME/.local/share/nemo/actions/send-email.nemo_action

Inhalt

[Nemo Action]
Name=Senden per E-Mail
Comment=Datei mit Evolution senden
Exec=Exec=/home/DEIN_BENUTZERNAME/.local/bin/send_email.sh %F
Icon-Name=mail-send
Selection=Any
Extensions=nodirs;

Script ausführbar machen

chmod +x /home/DEIN_BENUTZERNAME/.local/share/nemo/actions/send-email.nemo_action

Was macht der Eintrag:

Diese Konfiguration erstellt einen Eintrag „Senden per E-Mail“, der unser Script send Mail (wird gleich erstellt) öffnet und die ausgewählte Datei als Anhang hinzufügt.

Selection=Any erlaubt die Auswahl von einer oder mehreren Dateien,
aber keine Verzeichnisse (nodirs).

Das Sendmail Script

nano /home/DEIN_BENUTZERNAME/.local/bin/send_email.sh

Inhalt

#!/bin/bash

# Starten der mailto-URI mit den angehängten Dateien
uri="mailto:?body=Siehe Anhang&subject=Dateianhang"

# Hinzufügen jeder Datei als Anhang
for file in "$@"
do
    uri="${uri}&attach=$(realpath "$file")"
done

# Starte Evolution mit der zusammengesetzten URI
evolution "$uri"

Wenn man es Ohne Subject unjhd Emailtext haben möchte:

#!/bin/bash

# Starten der mailto-URI mit den angehängten Dateien
uri="mailto:?subject="

# Hinzufügen jeder Datei als Anhang
for file in "$@"
do
    uri="${uri}&attach=$(realpath "$file")"
done

# Starte Evolution mit der zusammengesetzten URI
evolution "$uri"

Dann ausführbar machen

chmod +x /home/DEIN_BENUTZERNAME/.local/bin/send_email.sh

Fertig







Software installation

Software installation

snapd aktivieren, ist standardmäßig deaktiviert. Installation wird von den Entwicklern unterbunden.

Beschreibung:

Die entwickler vpn Linux mint haben sich dazu entschlossen, snapd nicht zu unterstützen.
Sie verbieten sogar die Installations
Wenn mit apt install snapd installiert wird bekommt man diesen Fehler zurück:

sudo apt install snapd
Paketlisten werden gelesen… Fertig
Abhängigkeitsbaum wird aufgebaut… Fertig
Statusinformationen werden eingelesen… Fertig
Paket snapd ist nicht verfügbar, wird aber von einem anderen Paket
referenziert. Das kann heißen, dass das Paket fehlt, dass es abgelöst
wurde oder nur aus einer anderen Quelle verfügbar ist.

E: Für Paket »snapd« existiert kein Installationskandidat.

Abhilfe:

Dies Datei löschen, die die Repo verbietet

sudo rm /etc/apt/preferences.d/nosnap.pref

Nun kann snapd und wer will optional den UI Store gleich mit installieren.

sudo apt update
sudo apt install snapd

#Optional den Store
sudo snap install snap-store

Damit die Programme im Startmenü von Linux Mint auftauchen, war bei mir teilweise ein Neustart des Rechners notwendig. Erst dann hat sich das Menü aktualisiert.

Fertig.

Bedienung:

sudo snap install <Dateiname>.nsap
Sollte die Datei nicht aus dem store kommen, bekommt Ihr diese Fehlermeldung:

Fehler: cannot find signatures with metadata for snap "<dateiname>.snap"

Dann liber in den Store schauen ob es das Paket vielleicht gibt.

snap find <progammname>

Wenn Ihr dem Projekt vertraut wo Ihr das heruntergeladen habt, dann mit den flag --dangerous

 sudo snap install --dangerous <dateiname>snap 



Netzwerk

Netzwerk

DNS Cache leeren

Beschreibung:

Manchmal bleiben noch zu viele alte DNS Einträge gespeichert, die sich schon lange geändert haben.

sudo systemd-resolve --flush-caches

Mit dem oben angeben Befehl läasst sich unter linux mit Systemd der Cache löschen

 

Netzwerk

RDP-Server für Cinnomon Session installieren

Beschreibung:

Einfacher RDP Zugriff, (als eigene Session, Das heißt der Reale Login bleibt bestehen und ein Virtual Desktop wird per RDP anleget)

Installation

apt install xorgxrdp xrdp

Nun den Cinnamon Desktop als Standard Window Manager eintragen für den Benutzer eintragen.
Muss für jeden Benutzer der die RDP Sitzung erhalten soll durchgeführt werden.
Also mit dem Benutzer anmelden und dann

nano ~/.xsession

Inhalt

env -u SESSION_MANAGER -u DBUS_SESSION_BUS_ADDRESS cinnamon-session

Fertig.

Nun kann per RDP-Verbunden werden.

rdp_windows_connect.png

Verbundener Desktop

desktop_rdp.png


Fehler

Fehler

Passwort Popup bei Rechte anfordnern funktioniert nicht

Beschreibung:

Programme wie gdebi usw. Fragen beim System nach sudo rechten mit einem Popup.
Leider kommt dieser Popup nicht und Programme hängen sich auf.
Es sieht so aus als wenn das Polickit defekt ist oder aber wenn xRDP installiert wurde muss noch eine Datei entfernt werden.
Siehe weiter unten

Startet man ein Programm was sudo rechte anfordert im Terminal bekommt man diesen Fehler,
in userem Beispiel wollen wir den Wireguird-Client starten, eine Gui für Wireguardverbinden:

Error checking for authorization org.freedesktop.policykit.pkexec.wireguird: 
GDBus.Error:org.freedesktop.DBus.Error.NoReply: Message recipient disconnected from message bus without replying

Abhilfe:

Neuinstalltion Polickit 

sudo apt-get install --reinstall policykit-1
sudo apt-get install --reinstall dbus

RDP-Datei in .bak verschieben

sudo rm /etc/polkit-1/localauthority.conf.d/02-allow-colord.conf

 


Power Managment

Power Managment

Hibernate / Ruhezustand hinzufügen

Beschreibung:

Bei Linux Mint kann es vorkommen das beim Herunterfahren der Button Ruhezustand / Hibernate fehlt.

image-1737064659312.png


DIese kann man nachrüsten, wenn das System hibernate unterstützt.

Ob das System hibernate unterstützt und auch aus diesem wieder aufwacht kann man mit diesem Befehl testen.
Damit versetzt man das System in den hibernate

sudo systemctl hibernate

Wenn das geklappt hat, gibts zwei möglichkeiten.

  1.  Man erstellt sich eine Verknüpfung mit dem Befehl
  2. Wir fügen den Button zum Beenden Menü hinzu

Hinzufügen zum Menü:

Mittels sh Script, was eine SWAP Datei für Hibernate angelegt, danach wird der Menüeintrag erstellt.
Dieses Script läuft ab Linux mint 22

nano setup_hibernate.sh

Inhalt:

#!/bin/bash

# Script to setup hibernation in Linux Mint 22
# Author: Random Person
# Data: 2024-08-12
# Based on: https://ubuntuhandbook.org/index.php/2021/08/enable-hibernate-ubuntu-21-10

# Print text inside a boxed border.
box_title() {
    local len=$((${#1}+2))

    printf "\n╔"
    printf -- "═%.0s" $(seq 1 $len)
    printf "╗\n║ $1 ║\n╚"
    printf -- "═%.0s" $(seq 1 $len)
    printf "╝\n\n"
}

# Setup swap file
setup_swap() {
    echo
    echo "Setting up the swap file."
    echo "Please wait..."
    echo

    swapoff -a
    rm -f /swapfile
    dd if=/dev/zero of=/swapfile bs=1M count=$needed
    chmod 0600 /swapfile
    mkswap /swapfile
    sed -i '/swap/{s/^/#/}' /etc/fstab
    tee -a /etc/fstab <<< "/swapfile  none  swap  sw 0  0"
    swapon -a
}

# Setup Hibernate
setup_hibernate() {
    local resume_params="resume=UUID=$(findmnt / -o UUID -n) resume_offset=$(filefrag -v /swapfile|awk 'NR==4{gsub(/\./,"");print $4;}') "
    
    echo
    echo "Setting up hibernation."
    echo "Please wait..."
    echo
    
    # Adds kernel parameter in grub boot configuration file
    if grep resume /etc/default/grub>/dev/null; then
        sed -i "s/GRUB_CMDLINE_LINUX_DEFAULT=\".*resume_offset=[0-9]* /GRUB_CMDLINE_LINUX_DEFAULT=\"$resume_params/" /etc/default/grub
    else
        sed -i "s/GRUB_CMDLINE_LINUX_DEFAULT=\"/GRUB_CMDLINE_LINUX_DEFAULT=\"$resume_params/" /etc/default/grub
    fi
    update-grub

    # Adds device major:minor numbers in resume configuration
    echo $(findmnt / -o MAJ:MIN -n) > /sys/power/resume
    echo "#    Path                   Mode UID  GID  Age Argument" > /etc/tmpfiles.d/hibernation_resume.conf
    echo "w    /sys/power/resume       -    -    -    -   $(findmnt / -o MAJ:MIN -n)" >> /etc/tmpfiles.d/hibernation_resume.conf

    # Adds hibernation option in power-off menu
    apt install -y -qq polkitd-pkla

    mkdir -p /etc/polkit-1/localauthority/50-local.d
    tee /etc/polkit-1/localauthority/50-local.d/com.ubuntu.enable-hibernate.pkla << 'EOB' >/dev/null
[Re-enable hibernate by default in upower]
Identity=unix-user:*
Action=org.freedesktop.upower.hibernate
ResultActive=yes

[Re-enable hibernate by default in logind]
Identity=unix-user:*
Action=org.freedesktop.login1.hibernate;org.freedesktop.login1.handle-hibernate-key;org.freedesktop.login1;org.freedesktop.login1.hibernate-multiple-sessions;org.freedesktop.login1.hibernate-ignore-inhibit
ResultActive=yes
EOB

    mkdir -p /etc/polkit-1/localauthority/90-mandatory.d
    tee /etc/polkit-1/localauthority/90-mandatory.d/enable-hibernate.pkla << 'EOB' >/dev/null
[Enable hibernate]
Identity=unix-user:*
Action=org.freedesktop.login1.hibernate;org.freedesktop.login1.handle-hibernate-key;org.freedesktop.login1;org.freedesktop.login1.hibernate-multiple-sessions
ResultActive=yes
EOB

    mkdir -p /etc/polkit-1/rules.d
    tee /etc/polkit-1/rules.d/10-enable-hibernate.rules << 'EOB' >/dev/null
polkit.addRule(function(action, subject) {
    if (action.id == \"org.freedesktop.login1.hibernate\" ||
        action.id == \"org.freedesktop.login1.hibernate-multiple-sessions\" ||
        action.id == \"org.freedesktop.upower.hibernate\" ||
        action.id == \"org.freedesktop.login1.handle-hibernate-key\" ||
        action.id == \"org.freedesktop.login1.hibernate-ignore-inhibit\")
    {
        return polkit.Result.YES;
    }
});
EOB

    echo
    echo "Hibernation setup completed."
    echo "Please reboot your system for all changes to take effect."
    echo
}

main() {
    local available=$(df -m / | tail -n1 | awk '{print $4}')
    local swap=$(free -m | tail -n1 | awk '{print $2}')
    local needed=$(($1 * 1024))

    box_title "Setup Hibernate"

    if [[ ! `id -u` -eq "0" ]] || [[ "$#" != "1" ]] || ! [[ $1 =~ ^[0-9]+$ ]]; then
        echo    
        echo "Use: sudo bash setup-hibernate.sh [SIZE]"
        echo "[SIZE] => Swap size in GB."
        echo
    else
        # Check required swap file size
        available=$(($available + $swap))
        if [ "$available" -gt "$needed" ]; then
            setup_swap
            setup_hibernate
        else
            echo
            echo "Hibernate setup aborted."
            echo "Available swap space: $available"
            echo "Needed swap space: $needed"
            echo    
        fi
    fi
}

main "$@"

Nun ausführbar machen und ausführen, die Größe der SWAP Partition für Hibernate

chmod +x setup_hibernate.sh 
sudo ./setup_hibernate.sh [SIZE]

Output:

...
Found initrd image: /boot/initrd.img-6.8.0-51-generic
Found linux image: /boot/vmlinuz-6.8.0-50-generic
Found initrd image: /boot/initrd.img-6.8.0-50-generic
Found linux image: /boot/vmlinuz-5.15.0-56-generic
Found initrd image: /boot/initrd.img-5.15.0-56-generic
Warning: os-prober will be executed to detect other bootable partitions.
Its output will be used to detect bootable binaries on them and create new boot entries.
Adding boot menu entry for UEFI Firmware Settings ...
done
Die folgenden NEUEN Pakete werden installiert:
  polkitd-pkla
0 aktualisiert, 1 neu installiert, 0 zu entfernen und 9 nicht aktualisiert.
Es müssen 24,2 kB an Archiven heruntergeladen werden.
Nach dieser Operation werden 121 kB Plattenplatz zusätzlich benutzt.
Vormals nicht ausgewähltes Paket polkitd-pkla wird gewählt.
(Lese Datenbank ... 763234 Dateien und Verzeichnisse sind derzeit installiert.)
Vorbereitung zum Entpacken von .../polkitd-pkla_124-2ubuntu1_amd64.deb ...
Entpacken von polkitd-pkla (124-2ubuntu1) ...
polkitd-pkla (124-2ubuntu1) wird eingerichtet ...
Trigger für man-db (2.12.0-4build2) werden verarbeitet ...

Hibernation setup completed.
Please reboot your system for all changes to take effect.

Neustarten, danach sieht das Menü so aus, der Ruhezustand ist eingefügt:

image-1737065813770.png