init at home
This commit is contained in:
@@ -0,0 +1,418 @@
|
||||
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.
|
||||
Reference in New Issue
Block a user