# 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

### 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

[![Menü_007.png](https://wiki.hacker-net.de/uploads/images/gallery/2023-10/scaled-1680-/quOW3VeTFvFObI6T-menu-007.png)](https://wiki.hacker-net.de/uploads/images/gallery/2023-10/quOW3VeTFvFObI6T-menu-007.png)

klicken auf das Plus

[![Auswahl_1056.png](https://wiki.hacker-net.de/uploads/images/gallery/2023-10/scaled-1680-/wkqBBssDfV4Gt8GB-auswahl-1056.png)](https://wiki.hacker-net.de/uploads/images/gallery/2023-10/wkqBBssDfV4Gt8GB-auswahl-1056.png)

und wählen benutzerdefinierter Befehl aus

[![Menü_008.png](https://wiki.hacker-net.de/uploads/images/gallery/2023-10/scaled-1680-/GlD8rnuhRqqcvn3r-menu-008.png)](https://wiki.hacker-net.de/uploads/images/gallery/2023-10/GlD8rnuhRqqcvn3r-menu-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](https://wiki.hacker-net.de/uploads/images/gallery/2023-10/scaled-1680-/eJkk4pUQUgM5SJjv-auswahl-1057.png)](https://wiki.hacker-net.de/uploads/images/gallery/2023-10/eJkk4pUQUgM5SJjv-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  


- **Mauszeiger-Mapping:**
    
    
    - Bei der Mauszeiger-Konfiguration repräsentiert jede Zahl eine bestimmte Maustaste. Normalerweise ist `1` die linke Maustaste, `2` die mittlere Maustaste und `3` die rechte Maustaste.
- **Bedeutung der Zahlen in `xmodmap`:**
    
    
    - Der Befehl `xmodmap -e "pointer = 1 0 3"` gibt an, wie die Maustasten neu zugeordnet werden sollen.
    - `1` behält die Funktion der linken Maustaste bei.
    - `0` ist ein spezieller Platzhalter, der "keine Zuordnung" oder "deaktiviert" bedeutet. Wenn Sie also `0` als Wert für eine Maustaste einstellen, wird diese Taste deaktiviert.
    - `3` behält die Funktion der rechten Maustaste bei.

```
xmodmap -e "pointer = 1 0 3"
```

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

[![Menü_007.png](https://wiki.hacker-net.de/uploads/images/gallery/2023-10/scaled-1680-/quOW3VeTFvFObI6T-menu-007.png)](https://wiki.hacker-net.de/uploads/images/gallery/2023-10/quOW3VeTFvFObI6T-menu-007.png)

klicken auf das Plus

[![Auswahl_1056.png](https://wiki.hacker-net.de/uploads/images/gallery/2023-10/scaled-1680-/wkqBBssDfV4Gt8GB-auswahl-1056.png)](https://wiki.hacker-net.de/uploads/images/gallery/2023-10/wkqBBssDfV4Gt8GB-auswahl-1056.png)

und wählen benutzerdefinierter Befehl aus

[![Menü_008.png](https://wiki.hacker-net.de/uploads/images/gallery/2023-10/scaled-1680-/GlD8rnuhRqqcvn3r-menu-008.png)](https://wiki.hacker-net.de/uploads/images/gallery/2023-10/GlD8rnuhRqqcvn3r-menu-008.png)

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

[![Auswahl_266.png](https://wiki.hacker-net.de/uploads/images/gallery/2023-11/scaled-1680-/57eRuOCnIE21Z2BZ-auswahl-266.png)](https://wiki.hacker-net.de/uploads/images/gallery/2023-11/57eRuOCnIE21Z2BZ-auswahl-266.png)

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:

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.
    
    <div class="dark bg-gray-950 rounded-md border-[0.5px] border-token-border-medium"><div class="flex items-center relative text-token-text-secondary bg-token-main-surface-secondary px-4 py-2 text-xs font-sans justify-between rounded-t-md">sh <div class="flex items-center">  
    </div></div></div>
2. <div class="dark bg-gray-950 rounded-md border-[0.5px] border-token-border-medium"><div class="overflow-y-auto p-4 text-left undefined" dir="ltr">`sudo swapoff /swapfile`</div></div>
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).
    
    <div class="dark bg-gray-950 rounded-md border-[0.5px] border-token-border-medium"><div class="flex items-center relative text-token-text-secondary bg-token-main-surface-secondary px-4 py-2 text-xs font-sans justify-between rounded-t-md">  
    <div class="flex items-center">  
    </div></div></div>
4. <div class="dark bg-gray-950 rounded-md border-[0.5px] border-token-border-medium"><div class="overflow-y-auto p-4 text-left undefined" dir="ltr">`sudo <span class="hljs-built_in">dd</span> <span class="hljs-keyword">if</span>=/dev/zero of=/swapfile bs=1M count=4096`</div></div>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.
    
    <div class="dark bg-gray-950 rounded-md border-[0.5px] border-token-border-medium"><div class="flex items-center relative text-token-text-secondary bg-token-main-surface-secondary px-4 py-2 text-xs font-sans justify-between rounded-t-md">sh <div class="flex items-center">  
    </div></div></div>
6. <div class="dark bg-gray-950 rounded-md border-[0.5px] border-token-border-medium"><div class="overflow-y-auto p-4 text-left undefined" dir="ltr">`sudo <span class="hljs-built_in">chmod</span> 600 /swapfilesudo mkswap /swapfile`</div></div>
7. **Swap-Datei aktivieren:** Aktivieren Sie die Swap-Datei erneut.
    
    <div class="dark bg-gray-950 rounded-md border-[0.5px] border-token-border-medium"><div class="flex items-center relative text-token-text-secondary bg-token-main-surface-secondary px-4 py-2 text-xs font-sans justify-between rounded-t-md">sh <div class="flex items-center">  
    </div></div></div>
8. <div class="dark bg-gray-950 rounded-md border-[0.5px] border-token-border-medium"><div class="overflow-y-auto p-4 text-left undefined" dir="ltr">`sudo swapon /swapfile`</div></div>
9. **Überprüfen:** Überprüfen Sie, ob die Swap-Datei korrekt aktiviert wurde und die neue Größe hat.
    
    <div class="dark bg-gray-950 rounded-md border-[0.5px] border-token-border-medium"><div class="flex items-center relative text-token-text-secondary bg-token-main-surface-secondary px-4 py-2 text-xs font-sans justify-between rounded-t-md">sh <div class="flex items-center">  
    </div></div></div>
10. <div class="dark bg-gray-950 rounded-md border-[0.5px] border-token-border-medium"><div class="overflow-y-auto p-4 text-left undefined" dir="ltr">`sudo swapon --show`</div></div>
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:
    
    <div class="dark bg-gray-950 rounded-md border-[0.5px] border-token-border-medium"><div class="flex items-center relative text-token-text-secondary bg-token-main-surface-secondary px-4 py-2 text-xs font-sans justify-between rounded-t-md">sh <div class="flex items-center">  
    </div></div></div>

1. <div class="dark bg-gray-950 rounded-md border-[0.5px] border-token-border-medium"><div class="overflow-y-auto p-4 text-left undefined" dir="ltr">`/swapfile none swap sw 0 0`</div></div>

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:

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 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](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 ;-)

[![image-1737020268339.png](https://wiki.hacker-net.de/uploads/images/gallery/2025-01/scaled-1680-/HRhKE5kTpNwYV9Q6-image-1737020268339.png)](https://wiki.hacker-net.de/uploads/images/gallery/2025-01/HRhKE5kTpNwYV9Q6-image-1737020268339.png)

# 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`

<div id="bkmrk-hinweis%3A-wenn-man-gl" style="border: 1px solid #ffc107; background-color: #fff3cd; padding: 15px; margin-bottom: 20px;">**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/</div>```
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](https://wiki.hacker-net.de/uploads/images/gallery/2023-07/scaled-1680-/CmGP5fbhOgAZtzD0-menu-006.png)](https://wiki.hacker-net.de/uploads/images/gallery/2023-07/CmGP5fbhOgAZtzD0-menu-006.png)

Nun die erstellte Verknüpfung

[![Auswahl_1023.png](https://wiki.hacker-net.de/uploads/images/gallery/2023-07/scaled-1680-/LGzAIkqwaCkn1lQW-auswahl-1023.png)](https://wiki.hacker-net.de/uploads/images/gallery/2023-07/LGzAIkqwaCkn1lQW-auswahl-1023.png)

# 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 &lt;Dateiname&gt;.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.

[![rdp_windows_connect.png](https://wiki.hacker-net.de/uploads/images/gallery/2024-02/scaled-1680-/Ltmda7gzWu5DloFu-rdp-windows-connect.png)](https://wiki.hacker-net.de/uploads/images/gallery/2024-02/Ltmda7gzWu5DloFu-rdp-windows-connect.png)

Verbundener Desktop

[![desktop_rdp.png](https://wiki.hacker-net.de/uploads/images/gallery/2024-02/scaled-1680-/zvQQ4saN69eY9b4K-desktop-rdp.png)](https://wiki.hacker-net.de/uploads/images/gallery/2024-02/zvQQ4saN69eY9b4K-desktop-rdp.png)

# 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.

[![image-1737064659312.png](https://wiki.hacker-net.de/uploads/images/gallery/2025-01/scaled-1680-/3Wp3Yh1HjU25tmuU-image-1737064659312.png)](https://wiki.hacker-net.de/uploads/images/gallery/2025-01/3Wp3Yh1HjU25tmuU-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](https://wiki.hacker-net.de/uploads/images/gallery/2025-01/scaled-1680-/ObJVeiArcVjTb7Z1-image-1737065813770.png)](https://wiki.hacker-net.de/uploads/images/gallery/2025-01/ObJVeiArcVjTb7Z1-image-1737065813770.png)