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
- Asus Vivobook S Wifi installation
- Mittlere Maustaste deaktivieren um ungewollten schließen von Tabs/Fenstern zu verhindern
- Swap Datei vergrößern
- Partiton aufs maximum vergrößern wenn die Festplatte vergößert wurde
- Upgrade Fehler
- Kontextmenü
- Software installation
- Netzwerk
- Fehler
- Power Managment
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
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
klicken auf das Plus
und wählen benutzerdefinierter Befehl aus
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
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
-
Mauszeiger-Mapping:
- Bei der Mauszeiger-Konfiguration repräsentiert jede Zahl eine bestimmte Maustaste. Normalerweise ist
1die linke Maustaste,2die mittlere Maustaste und3die rechte Maustaste.
- Bei der Mauszeiger-Konfiguration repräsentiert jede Zahl eine bestimmte Maustaste. Normalerweise ist
-
Bedeutung der Zahlen in
xmodmap:- Der Befehl
xmodmap -e "pointer = 1 0 3"gibt an, wie die Maustasten neu zugeordnet werden sollen. 1behält die Funktion der linken Maustaste bei.0ist ein spezieller Platzhalter, der "keine Zuordnung" oder "deaktiviert" bedeutet. Wenn Sie also0als Wert für eine Maustaste einstellen, wird diese Taste deaktiviert.3behält die Funktion der rechten Maustaste bei.
- Der Befehl
xmodmap -e "pointer = 1 0 3"
Nun das ganze als Autostart einbetten.
Nun öffnen wir Startprogramme
klicken auf das Plus
und wählen benutzerdefinierter Befehl aus
Nun Namen vergeben : mittlere Maustaste deaktivieren
Den Befehl reinpacken : xmodmap -e "pointer = 1 0 3"
Fertig.
Nun kein generve mehr mit schließen von mittlerer Maustate auf dem Tocuhpad.
Swap Datei vergrößern
Um die Größe einer Swap-Datei unter Linux zu vergrößern, folgen Sie diesen Schritten:
-
Swap-Datei deaktivieren: Deaktivieren Sie zunächst die aktuelle Swap-Datei. In diesem Beispiel nehmen wir an, dass die Swap-Datei
/swapfileheißt.sh -
sudo swapoff /swapfile -
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).
-
sudo dd if=/dev/zero of=/swapfile bs=1M count=4096Ersetzen Sie
4096durch die gewünschte Größe in Megabytes. -
Swap-Datei formatieren: Setzen Sie die richtigen Berechtigungen und formatieren Sie die Datei als Swap.
sh -
sudo chmod 600 /swapfile sudo mkswap /swapfile -
Swap-Datei aktivieren: Aktivieren Sie die Swap-Datei erneut.
sh -
sudo swapon /swapfile -
Überprüfen: Überprüfen Sie, ob die Swap-Datei korrekt aktiviert wurde und die neue Größe hat.
sh -
sudo swapon --show -
Eintrag in
/etc/fstabüberprüfen: Stellen Sie sicher, dass die Swap-Datei in der/etc/fstabeingetragen ist, damit sie beim Booten automatisch aktiviert wird. Der Eintrag sollte in etwa so aussehen:sh
-
/swapfile none swap sw 0 0
Durch diese Schritte sollten Sie die Größe Ihrer Swap-Datei erfolgreich vergrößert haben.
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:
-
Parameterverarbeitung:
-
-d <Partition>: Gibt die Partition an, die vergrößert werden soll (z.B./dev/sda1).
-
-
Überprüfung der Partition:
-
Das Skript überprüft, ob die angegebene Partition existiert.
-
-
Vergrößern der Partition:
-
Das Skript verwendet
growpart, um die Partition zu vergrößern.
-
-
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 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
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 ;-)
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
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:
Nun die erstellte Verknüpfung
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
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
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
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.
Verbundener Desktop
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
Hibernate / Ruhezustand hinzufügen
Beschreibung:
Bei Linux Mint kann es vorkommen das beim Herunterfahren der Button Ruhezustand / Hibernate fehlt.
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.
- Man erstellt sich eine Verknüpfung mit dem Befehl
- 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: