Anzeige automatisch klonen

Hallo,

nach längerem Ausprobieren, habe ich nun eine Lösung gefunden, die sich im privaten Bereich mit 2 Anzeigegeräten schon bewährt:

Ein Skript stellt beim Aufrufen die native Bildschirmauflösung für 1 Anzeigegerät ein und klont die Anzeige skaliert auf das andere Anzeigegerät.
So ist auf einem Anzeigegerät immer die optimale Darstellung gegeben und auf dem anderen Anzeigegerät wird die Darstellung zwar verzerrt aber vollständig angezeigt unter Ausnutzung der gesamten Bildschirmfläche. Durch erneutes Starten wird das andere Anzeigegerät als jenes mit der native Bildschirmauflösung gesetzt.

Das Skript habe ich nun so erweitert, dass alle Einstellungen vom Skript selbst ermittelt werden. Man muss also das Skript nicht konfigurieren.

Getestet habe ich es nur mit 2 Anzeigegeräten - aber ich habe die Hoffnung, dass es auch mit mehr als 2 Anzeigegeräten funktionieren könnte. Ich habe jedenfalls versucht die for-Schleife so zu bauen, dass es möglich sein sollte. Ob der xrandr-Befehl das aber packt, weiß ich nicht.

Wer Lust hat zu testen, möge bitte Rückmeldung geben.

#!/bin/bash

# Anzeige skaliert klonen
#
# Stellt die native Bildschirmauflösung für 1 Anzeigegerät ein und skaliert die anderen Anzeigegeräte.
# So ist auf einem Anzeigegerät immer die optimale Darstellung gegeben
# und auf den restlichen Anzeigegeräten wird die Darstellung zwar verzerrt aber vollständig angezeigt
# unter Ausnutzung der gesamten Bildschirmfläche.
# Durch erneutes Starten wird das nächste Anzeigegerät als jenes mit der native Bildschirmauflösung ausgewählt
# 
# Sen 2017-10-14
# Linux Mint 18.2 Xfce 64bit
#
# GPL v3


# NUR FÜR XFCE-Desktop geeignet: Shortcut setzen, um Skript per Shortcut aufrufen zu können
# xfconf-query -c xfce4-keyboard-shortcuts -p "/commands/custom/<Primary><Alt>r" -n -t string -s "/opt/xrandr-beamer/xrandr-beamer-clone.sh"

# Anzahl der angeschlossenen Anzeigeräte ermitteln 
dispcon=($(xrandr --query | grep -c " connected"))
# Höchste Nummer der Anzeigegeräte
dispmaxnumb=$((dispcon - 1))
# Bezeichnungen aller angeschlossenen Anzeigeräte ermitteln
disp=($(xrandr --query | grep " connected" | awk '{print $1}'))
# Native Auflösungen der angeschlossenen Anzeigeräte ermitteln
natres=($(xrandr --query | grep -e \+$ -e \+[[:space:]] | awk '{print $1}'))

case $dispcon in 
 1*)
  ### Ein Anzeigegerät angeschlossen
  # Standardauflösung einstellen
  xrandr --output ${disp[0]} --mode ${natres[0]} --scale 1x1
 ;;
 *)
  ### Mehrere Anzeigegeräte angeschlossen
  # Zähler auslesen - Nummer des zuletzt nativ angezeigten Anzeigegeräts
  numb=$(head -n 1 /tmp/xrandr-beamer-clone.log)
  # Zähler erhöhen
  numb=$((numb + 1))
  # Zähler überprüfen und gegebenenfalls zurücksetzen
  [[ ! $numb = [0-$dispmaxnumb] ]] && numb=0
  # Zähler in Datei schreiben
  echo $numb > /tmp/xrandr-beamer-clone.log
  # Auflösungen einstellen
  for((i=0; i<$dispcon; i++)); do
  if [ ! $i = $numb ]; then 
    xrandr --output ${disp[$numb]} --mode ${natres[$numb]} --scale 1x1 --output ${disp[$i]} --same-as ${disp[$numb]} --mode ${natres[$i]} --scale-from ${natres[$numb]}
  fi  
done
 ;;
esac

# Benachrichtigung anzeigen
notify-send -t 8700 "Anzeige ist nun optimiert für Anzeigerät ${disp[$numb]}"

exit 0

Hier die Datei zum Download: xrandr-beamer-clone.sh.txt (2,1 KB)

Gruß
Stefan

P.S: Ich bevorzuge nun diese Methode, weil die andere Methode, welche die größte gemeinsame Auflösung verwendet, sich mit den neueren Beamern leider bei mir nicht bewährt hat, da Beamer mit nativ 1024x768 mittlerweile auch Auflösungen anbieten wie 1366x768. Dann kommt es zu unschönen Anzeigen.