Skip to main content

Thin Client to Proxmox

Einrichtung eines Thin Clients für Proxmox VMs

Ziel

Diese Anleitung beschreibt, wie Sie einen Thin Client so konfigurieren, dass er beim Start automatisch eine Proxmox VM startet und eine Verbindung zu dieser herstellt. Bei Beendigung der VM wird der Thin Client heruntergefahren.

Voraussetzungen

  • Ein installiertes Debian 12-System mit GNOME
  • Installierte Pakete curl und virt-viewer
  • Administratorrechte auf dem Thin Client
  • Anmeldedaten für Proxmox (Benutzername & Passwort)

Schritte

  1. SPICE-Client installieren:

    sudo apt-get install virt-viewer
    
    
  2. Skript zur VM-Steuerung erstellen:

    Erstellen Sie ein Skript namens control_vm.sh:

    nano control_vm.sh
    
    

    Fügen Sie folgenden Inhalt hinzu (ersetzen Sie die Platzhalter durch Ihre tatsächlichen Daten):

    #!/bin/bash
    set -e
    
    # Set auth options
    PASSWORD='remote1234'
    USERNAME='remote@pve'
    
    # Set VM ID
    VMID="601"
    
    # Set Node
    # This must either be a DNS address or name of the node in the cluster
    NODE="liz"
    
    # Proxy equals node if node is a DNS address
    # Otherwise, you need to set the IP address of the node here
    PROXY="10.11.12.10"
    
    #The rest of the script from Proxmox
    NODE="${NODE%%\.*}"
    
    DATA="$(curl -f -s -S -k --data-urlencode "username=$USERNAME" --data-urlencode "password=$PASSWORD" "https://$PROXY:8006/api2/json/access/ticket")"
    
    echo "AUTH OK"
    
    TICKET="${DATA//\"/}"
    TICKET="${TICKET##*ticket:}"
    TICKET="${TICKET%%,*}"
    TICKET="${TICKET%%\}*}"
    
    CSRF="${DATA//\"/}"
    CSRF="${CSRF##*CSRFPreventionToken:}"
    CSRF="${CSRF%%,*}"
    CSRF="${CSRF%%\}*}"
    
    curl -f -s -S -k -b "PVEAuthCookie=$TICKET" -H "CSRFPreventionToken: $CSRF" "https://$PROXY:8006/api2/spiceconfig/nodes/$NODE/qemu/$VMID/spiceproxy" -d "proxy=$PROXY" > spiceproxy
    
    #Launch remote-viewer with spiceproxy file, in kiosk mode, quit on disconnect
    #The run loop will get a new ticket and launch us again if we disconnect
    exec remote-viewer -k --kiosk-quit on-disconnect spiceproxy
    
    if [ $? -eq 0 ]; then
        echo "Die VM wurde beendet. Fahre den Thin Client herunter..."
        sudo shutdown -h now
    else
        echo "Ein Fehler ist aufgetreten."
    fi
    
    
  3. Skript ausführbar machen:

    chmod +x control_vm.sh
    
    
  4. Sudo-Berechtigungen für das Herunterfahren setzen:

    sudo visudo
    
    

    Fügen Sie am Ende der sudoers-Datei folgende Zeile hinzu (ersetzen Sie Ihr_Benutzername durch den entsprechenden Benutzernamen):

    Ihr_Benutzername ALL=NOPASSWD: /sbin/shutdown
    
    
  5. Automatischer Start des Skripts beim Booten:

    a. Erstellen Sie eine systemd-Service-Datei:

    sudo nano /etc/systemd/system/startvm.service
    
    

    b. Fügen Sie folgenden Inhalt hinzu:

    [Unit]
    Description=Start Proxmox VM beim Booten
    
    [Service]
    Type=oneshot
    ExecStart=/pfad/zu/control_vm.sh
    
    [Install]
    WantedBy=multi-user.target
    
    

    c. Aktualisieren Sie systemd und aktivieren Sie den Dienst:

    sudo systemctl daemon-reload
    sudo systemctl enable startvm.service
    
    

Abschluss

Nach einem Neustart des Thin Clients wird das control_vm.sh-Skript ausgeführt: Es startet die Proxmox VM, stellt eine Verbindung her und fährt den Thin Client herunter, sobald die VM beendet wird.


VM automatisch beim Systemstart des Thin Clients starten

Um sicherzustellen, dass Ihre VM automatisch gestartet wird, wenn der Thin Client hochfährt, integrieren Sie die folgenden Schritte in Ihr vorhandenes Skript und den Setup-Prozess:

  1. Skript zum Starten der VM aktualisieren:

    In Ihrem bestehenden control_vm.sh-Skript haben Sie bereits einen Abschnitt, der die VM steuert. Diesen Abschnitt erweitern Sie wie folgt, um die VM beim Start zu starten:

    # VM starten
    DATA="$(curl -f -s -S -k --data-urlencode "username=$USERNAME" --data-urlencode "password=$PASSWORD" "https://$PROXY:8006/api2/json/access/ticket")"
    TICKET="${DATA//\"/}"
    TICKET="${TICKET##*ticket:}"
    TICKET="${TICKET%%,*}"
    TICKET="${TICKET%%\}*}"
    CSRF="${DATA//\"/}"
    CSRF="${CSRF##*CSRFPreventionToken:}"
    CSRF="${CSRF%%,*}"
    CSRF="${CSRF%%\}*}"
    
    curl -f -s -S -k -b "PVEAuthCookie=$TICKET" -H "CSRFPreventionToken: $CSRF" -X POST "https://$PROXY:8006/api2/json/nodes/$NODE/qemu/$VMID/status/start"
    

    Dieser Codeabschnitt authentifiziert sich bei der Proxmox-API, holt ein Ticket und ein CSRF-Token und sendet dann einen Befehl zum Starten der VM.

  2. Automatisches Starten des Skripts beim Booten sicherstellen:

    Falls noch nicht geschehen, stellen Sie sicher, dass Ihr control_vm.sh-Skript beim Booten des Thin Clients automatisch gestartet wird. Dies können Sie mit systemd erreichen, wie bereits im vorherigen Abschnitt beschrieben.

  3. Testen:

    Starten Sie den Thin Client neu, um sicherzustellen, dass alles wie erwartet funktioniert. Die VM sollte automatisch starten, sobald der Thin Client hochfährt.