rdp-client/files/apply-mouse-settings.sh

61 lines
2.3 KiB
Bash

#!/bin/bash
# Wendet gespeicherte Mauseinstellungen beim Start an
# Speichere als: files/apply-mouse-settings.sh
CONFIG_FILE="$HOME/.config/mouse-settings/settings.ini"
# Prüfe ob Konfigurationsdatei existiert
if [ ! -f "$CONFIG_FILE" ]; then
exit 0
fi
# Warte kurz, bis X11 bereit ist
sleep 2
# Lese Geschwindigkeit aus Config
SPEED=$(awk -F' = ' '/^speed/ {print $2}' "$CONFIG_FILE")
if [ -z "$SPEED" ]; then
exit 0
fi
# Konvertiere 0-100 zu verschiedenen Formaten
LIBINPUT_SPEED=$(echo "scale=2; ($SPEED / 50.0) - 1.0" | bc) # -1.0 bis 1.0
EVDEV_ACCEL=$(echo "scale=2; $SPEED / 10.0" | bc) # 0 bis 10
EVDEV_DECEL=$(echo "scale=2; 10.0 / $EVDEV_ACCEL" | bc 2>/dev/null || echo "1.0") # Umkehrwert
MATRIX_SCALE=$(echo "scale=2; $SPEED / 50.0" | bc) # 0 bis 2.0
# Finde ALLE Maus-IDs (alle Pointer mit 'mouse' im Namen)
MOUSE_IDS=$(xinput list | grep -i pointer | grep -v "Virtual core" | grep -i mouse | grep -o 'id=[0-9]*' | cut -d= -f2)
if [ -n "$MOUSE_IDS" ]; then
SUCCESS_COUNT=0
# Wende Einstellungen auf ALLE Mäuse an
for MOUSE_ID in $MOUSE_IDS; do
# Methode 1: Versuche libinput (modern)
if xinput set-prop "$MOUSE_ID" "libinput Accel Speed" "$LIBINPUT_SPEED" 2>/dev/null; then
echo "Maus $MOUSE_ID: Geschwindigkeit gesetzt (libinput): $SPEED%"
SUCCESS_COUNT=$((SUCCESS_COUNT + 1))
# Methode 2: Versuche evdev (älter)
elif xinput set-prop "$MOUSE_ID" "Device Accel Constant Deceleration" "$EVDEV_DECEL" 2>/dev/null; then
echo "Maus $MOUSE_ID: Geschwindigkeit gesetzt (evdev): $SPEED%"
SUCCESS_COUNT=$((SUCCESS_COUNT + 1))
# Methode 3: Versuche Coordinate Transformation Matrix (Fallback für Logitech etc.)
# WICHTIG: Matrix-Werte müssen als einzelne Argumente übergeben werden
elif xinput set-prop "$MOUSE_ID" "Coordinate Transformation Matrix" \
$MATRIX_SCALE 0 0 0 $MATRIX_SCALE 0 0 0 1 2>/dev/null; then
echo "Maus $MOUSE_ID: Geschwindigkeit gesetzt (matrix): $SPEED%"
SUCCESS_COUNT=$((SUCCESS_COUNT + 1))
else
echo "Warnung: Konnte Geschwindigkeit für Maus $MOUSE_ID nicht setzen"
fi
done
if [ $SUCCESS_COUNT -eq 0 ]; then
echo "Warnung: Konnte Mausgeschwindigkeit für keine Maus setzen"
fi
else
echo "Keine Maus gefunden"
fi