Hier ist ein umfassendes Shell-Skript für die Installation von DisplayLink-Treibern unter Linux: ```bash #!/bin/bash # DisplayLink Driver Installation Script for Linux # Author: Assistant # Version: 1.0 # Date: $(date +%Y-%m-%d) set -e # Farben für Output RED='\033[0;31m' GREEN='\033[0;32m' YELLOW='\033[1;33m' BLUE='\033[0;34m' NC='\033[0m' # No Color # Logging LOG_FILE="/var/log/displaylink-install.log" exec > >(tee -a "$LOG_FILE") exec 2>&1 echo -e "${BLUE}========================================${NC}" echo -e "${BLUE} DisplayLink Driver Installation Script${NC}" echo -e "${BLUE}========================================${NC}" # Funktionen log() { echo -e "${GREEN}[$(date '+%Y-%m-%d %H:%M:%S')] INFO: $1${NC}" } warn() { echo -e "${YELLOW}[$(date '+%Y-%m-%d %H:%M:%S')] WARNING: $1${NC}" } error() { echo -e "${RED}[$(date '+%Y-%m-%d %H:%M:%S')] ERROR: $1${NC}" } check_root() { if [[ $EUID -ne 0 ]]; then error "Dieses Skript muss als root ausgeführt werden!" exit 1 fi } detect_distro() { if [ -f /etc/os-release ]; then . /etc/os-release DISTRO=$ID VERSION=$VERSION_ID log "Distribution erkannt: $PRETTY_NAME" else error "Distribution konnte nicht erkannt werden" exit 1 fi } install_dependencies() { log "Installiere benötigte Abhängigkeiten..." case $DISTRO in ubuntu|debian) apt update apt install -y wget curl unzip dkms build-essential \ linux-headers-$(uname -r) git libdrm-dev \ x11-xserver-utils mesa-utils ;; fedora|centos|rhel) if command -v dnf &> /dev/null; then dnf install -y wget curl unzip dkms gcc make \ kernel-devel-$(uname -r) git libdrm-devel \ xrandr mesa-utils else yum install -y wget curl unzip dkms gcc make \ kernel-devel-$(uname -r) git libdrm-devel \ xrandr mesa-utils fi ;; opensuse*) zypper install -y wget curl unzip dkms gcc make \ kernel-default-devel git libdrm-devel \ xrandr Mesa-utils ;; arch|manjaro) pacman -Sy --noconfirm wget curl unzip dkms base-devel \ linux-headers git libdrm xorg-xrandr mesa-utils ;; *) warn "Unbekannte Distribution. Versuche generische Installation..." ;; esac } download_displaylink_driver() { log "Lade neueste DisplayLink-Treiber herunter..." # Erstelle temporäres Verzeichnis TEMP_DIR=$(mktemp -d) cd "$TEMP_DIR" # DisplayLink Download URL (Ubuntu 22.04 kompatibel) DRIVER_VERSION="5.8.0-63.33" DRIVER_URL="https://www.synaptics.com/sites/default/files/Ubuntu/pool/stable/main/all/synaptics-repository-keyring.deb" # Alternative: Verwende evdi Repository log "Installiere EVDI (Extensible Virtual Display Interface)..." git clone https://github.com/DisplayLink/evdi.git cd evdi make && make install cd .. # Offizieller DisplayLink Treiber Download OFFICIAL_URL="https://www.synaptics.com/sites/default/files/Ubuntu/pool/stable/main/all/" # Neueste verfügbare Version ermitteln log "Ermittle neueste verfügbare Treiberversion..." # Fallback: Direkte Installation über Repository case $DISTRO in ubuntu|debian) # Füge DisplayLink Repository hinzu wget -O - https://www.synaptics.com/sites/default/files/Ubuntu/displaylink-debian-ubuntu-signing-key.pub | apt-key add - echo "deb https://www.synaptics.com/sites/default/files/Ubuntu/ $(lsb_release -cs) stable" > /etc/apt/sources.list.d/displaylink.list apt update apt install -y displaylink-driver ;; *) # Manuelle Installation für andere Distributionen DRIVER_FILE="displaylink-driver-5.8.0-63.33.zip" log "Lade $DRIVER_FILE herunter..." # Beispiel-Download (URL muss aktualisiert werden) if ! wget -q --spider "https://www.displaylink.com/downloads/file?id=1768"; then warn "Automatischer Download fehlgeschlagen. Manuelle Installation erforderlich." log "Bitte laden Sie den neuesten Treiber von https://www.displaylink.com/downloads/ubuntu herunter" return 1 fi ;; esac } install_displaylink_driver() { log "Installiere DisplayLink-Treiber..." # Stoppe potentiell laufende Services systemctl stop dlm.service 2>/dev/null || true systemctl stop displaylink-driver.service 2>/dev/null || true case $DISTRO in ubuntu|debian) # Bereits über Repository installiert log "Treiber über Repository installiert" ;; *) # Manuelle Installation if [ -f "displaylink-driver-*.run" ] || [ -f "DisplayLink*.run" ]; then chmod +x DisplayLink*.run 2>/dev/null || chmod +x displaylink-driver-*.run ./DisplayLink*.run --noexec --target displaylink-driver 2>/dev/null || ./displaylink-driver-*.run --noexec --target displaylink-driver cd displaylink-driver ./displaylink-installer.sh install fi ;; esac # EVDI Modul laden modprobe evdi || warn "EVDI Modul konnte nicht geladen werden" } configure_services() { log "Konfiguriere SystemD Services..." # DisplayLink Service aktivieren systemctl enable dlm.service 2>/dev/null || systemctl enable displaylink-driver.service 2>/dev/null || true # Erstelle Custom Service falls nötig if [ ! -f "/etc/systemd/system/displaylink.service" ]; then cat > /etc/systemd/system/displaylink.service << EOF [Unit] Description=DisplayLink Manager Service After=display-manager.service [Service] Type=forking ExecStartPre=/sbin/modprobe evdi ExecStart=/opt/displaylink/DisplayLinkManager ExecStop=/opt/displaylink/DisplayLinkManager --stop Restart=always RestartSec=5 [Install] WantedBy=graphical.target EOF systemctl daemon-reload systemctl enable displaylink.service fi } fix_common_issues() { log "Behebe bekannte Probleme..." # Problem 1: EVDI Modul beim Boot laden if ! grep -q "evdi" /etc/modules; then echo "evdi" >> /etc/modules log "EVDI zu /etc/modules hinzugefügt" fi # Problem 2: Xorg Konfiguration mkdir -p /etc/X11/xorg.conf.d/ cat > /etc/X11/xorg.conf.d/20-displaylink.conf << EOF Section "OutputClass" Identifier "DisplayLink" MatchDriver "evdi" Driver "modesetting" Option "AccelMethod" "none" EndSection EOF # Problem 3: Udev Regeln cat > /etc/udev/rules.d/99-displaylink.rules << EOF # DisplayLink USB devices ACTION=="add", SUBSYSTEM=="usb", ATTR{idVendor}=="17e9", TAG+="systemd", ENV{SYSTEMD_WANTS}="displaylink.service" ACTION=="add", SUBSYSTEM=="usb", ATTR{idVendor}=="17e9", ATTR{idProduct}=="*", RUN+="/bin/systemctl start displaylink.service" EOF udevadm control --reload-rules # Problem 4: Permissions usermod -a -G plugdev $SUDO_USER 2>/dev/null || true # Problem 5: Wayland Kompatibilität (für GNOME) if [ "$XDG_SESSION_TYPE" = "wayland" ]; then warn "Wayland erkannt. DisplayLink funktioniert besser mit X11." log "Erstelle GDM Custom Config für X11..." mkdir -p /etc/gdm3 cat > /etc/gdm3/custom.conf << EOF [daemon] WaylandEnable=false DefaultSession=gnome-xorg EOF fi } check_installation() { log "Überprüfe Installation..." # Service Status if systemctl is-active --quiet dlm.service || systemctl is-active --quiet displaylink-driver.service || systemctl is-active --quiet displaylink.service; then log "DisplayLink Service läuft erfolgreich" else warn "DisplayLink Service läuft nicht. Starte Service..." systemctl start displaylink.service 2>/dev/null || systemctl start dlm.service 2>/dev/null || true fi # Modul Status if lsmod | grep -q evdi; then log "EVDI Kernel Modul erfolgreich geladen" else warn "EVDI Kernel Modul nicht geladen. Versuche manuelles Laden..." modprobe evdi || error "EVDI Modul konnte nicht geladen werden" fi # USB Geräte check if lsusb | grep -i displaylink; then log "DisplayLink USB-Gerät erkannt" else warn "Kein DisplayLink USB-Gerät erkannt. Schließen Sie ein Gerät an." fi } create_troubleshooting_script() { log "Erstelle Troubleshooting-Skript..." cat > /usr/local/bin/displaylink-troubleshoot << 'EOF' #!/bin/bash echo "=== DisplayLink Troubleshooting ===" echo "" echo "1. Service Status:" systemctl status displaylink.service dlm.service displaylink-driver.service 2>/dev/null || echo "Services nicht gefunden" echo "" echo "2. Kernel Module:" lsmod | grep evdi || echo "EVDI Modul nicht geladen" echo "" echo "3. USB Devices:" lsusb | grep -i displaylink || echo "Keine DisplayLink Geräte gefunden" echo "" echo "4. Displays:" xrandr --listproviders 2>/dev/null || echo "Xrandr nicht verfügbar" echo "" echo "5. Logs:" journalctl -u displaylink.service --no-pager -n 10 2>/dev/null || echo "Keine Service Logs" echo "" echo "=== Schnelle Fixes ===" echo "Service neu starten:" echo " sudo systemctl restart displaylink.service" echo "" echo "Modul neu laden:" echo " sudo modprobe -r evdi && sudo modprobe evdi" echo "" echo "Display erkennung:" echo " xrandr --setprovideroutputsource 1 0 && xrandr --auto" EOF chmod +x /usr/local/bin/displaylink-troubleshoot log "Troubleshooting-Skript erstellt: /usr/local/bin/displaylink-troubleshoot" } cleanup() { log "Räume temporäre Dateien auf..." cd / rm -rf "$TEMP_DIR" 2>/dev/null || true } main() { log "Starte DisplayLink Installation..." check_root detect_distro install_dependencies download_displaylink_driver install_displaylink_driver configure_services fix_common_issues check_installation create_troubleshooting_script cleanup echo -e "${GREEN}========================================${NC}" echo -e "${GREEN} Installation abgeschlossen!${NC}" echo -e "${GREEN}========================================${NC}" echo "" log "Installation erfolgreich abgeschlossen!" log "Bitte starten Sie das System neu für beste Ergebnisse." log "Bei Problemen verwenden Sie: displaylink-troubleshoot" echo "" echo -e "${YELLOW}Nächste Schritte:${NC}" echo "1. System neu starten" echo "2. DisplayLink Gerät anschließen" echo "3. Monitor-Konfiguration mit: xrandr --auto" echo "4. Bei Problemen: displaylink-troubleshoot ausführen" } # Trap für Cleanup trap cleanup EXIT # Hauptfunktion ausführen main "$@" ``` ## Zusätzliche Konfigurationsdateien ### 1. Desktop-Shortcut für schnelle Display-Konfiguration: ```bash #!/bin/bash # Erstelle Desktop-Shortcut cat > ~/Desktop/configure-displays.desktop << EOF [Desktop Entry] Version=1.0 Type=Application Name=Configure DisplayLink Displays Comment=Configure external displays via DisplayLink Exec=bash -c 'xrandr --setprovideroutputsource 1 0 && xrandr --auto && notify-send "Displays konfiguriert"' Icon=preferences-desktop-display Terminal=false Categories=System;Settings; EOF chmod +x ~/Desktop/configure-displays.desktop ``` ### 2. Automatische Display-Konfiguration bei USB-Anschluss: ```bash # Udev-Regel für automatische Konfiguration cat > /etc/udev/rules.d/99-displaylink-autoconfig.rules << EOF ACTION=="add", SUBSYSTEM=="usb", ATTR{idVendor}=="17e9", RUN+="/usr/local/bin/displaylink-autoconfig.sh" EOF # Autoconfig-Skript cat > /usr/local/bin/displaylink-autoconfig.sh << 'EOF' #!/bin/bash sleep 3 export DISPLAY=:0 xrandr --setprovideroutputsource 1 0 xrandr --auto EOF chmod +x /usr/local/bin/displaylink-autoconfig.sh ``` ## Verwendung: 1. Skript als root ausführen: ```bash sudo bash displaylink-install.sh ``` 2. Nach der Installation System neu starten 3. Bei Problemen Troubleshooting ausführen: ```bash displaylink-troubleshoot ``` Das Skript automatisiert die komplette Installation und behebt die häufigsten Probleme mit DisplayLink-Treibern unter verschiedenen Linux-Distributionen.