Hi.
Also ich empfehle zu Beginn ein
einfaches Skript für den Monitorwechsel zu schreiben, welches über Parameter verschiedene Aufgaben via xrandr ausführt. Das wichtigste dabei ist, dass das Skript sauber die ganzen benötigten Anwendungsfälle abdeckt. Sprich alle möglichen Monitor-Kombinationen. Ggf. auch hochkant gestellt Monitore.
Ich empfehle bewusst ein manuelles vorgehen, da die automatische Konfiguration häufig nicht funktioniert und auch unter Umständen mehr Aufwand zur Einrichtung erfordert. Du kannst das von mir empfohlene Skript dann in einem nächsten Schritt für eine Automatisierung nutzen. Dazu rufst du einfach von einem anderen Skript oder über udev oder andere event-basierte Mechanismen das Monitor-Switching-Skript auf. Du kannst dann sowohl automatische Konfiguration, als auch manuelle durchführen. Ich bin bisher nicht wirklich über manuelle Konfiguration hinausgekommen. Es geht einfach super fix das manuell per Tastenkombi zu switchen.
Wenn das Skript geschrieben ist ist, dann kannst du die Kombinationen über Aufrufe des Skriptes manuell steuern. Dazu belegst du idealerweise Hotkeys in deinem DE oder Window Manager. Ctrl+Alt+, ruft dann das Skript auf mit dem Parameter für z.B. dem internen Monitor. Ctrl+Alt+. dann für den erste externen Monitor usw.
Außerdem kommt es vor, dass dein Bildschirm beim Ausdocken mal schwarz ist.. dann schaltest du einfach per Tastenkombi auf den internen Monitor um :thumbup:.
Da du drei Screens hast, lohnt es sich ggf. eine toggle Funktion einzubauen, die einfach zwischen den Modi durchschaltet. Dazu musst du den State deiner aktuellen Monitorkonfiguration irgendwo speichern. Dazu kann das Skript einfach nach jedem xrandr Aufruf ein einer
.monitor-config.last oder ähnlichem den aktuellen State reinschreiben. Falls aktuell nur der interne Montor an ist, dann würde dort einfach
int drinstehen. Das machst du ungefähr so:
Code:
if [ "$scheme" == "int" ]; then
xrandr --output $ext --off --output $int --auto
echo "int" > $HOME/.monitor-config.last
fi
Dann musst du am Anfang des Skripts die letzte config wieder einlesen in eine Variable:
Code:
lastscheme=$(<$HOME/.monitor-config.last)
So, und dann musst du eben zum nächsten möglichen State springen der nach dem letzten kommt. Dafür müsstest du dir irgendwas ausdenken. Das kann man bestimmt mit einem einfachen Bash Array lösen.
Und hier noch das Skript an sich
ohne die toggle-Funktion. Du musst dann noch eine weitere ext Variable einfügen. Du hättest dann ext1 ext2 oder so etwas. Oder extleft, extright. Der Fantasie sind keine Grenzen gesetzt, solange die Variablennamen den Vorgaben der bash entsprechen
.
Code:
#!/bin/bash
int="LVDS1"
ext="DP1"
scheme="$1"
# automatic
if [ "$scheme" == "auto" ]; then
xrandr --auto
fi
# only internal monitor
if [ "$scheme" == "int" ]; then
xrandr --output $ext --off --output $int --auto
fi
# only external monitor
if [ "$scheme" == "ext" ]; then
xrandr --output $int --off --output $ext --auto
fi
# both internal and external monitor. external is primary
if [ "$scheme" == "dual" ]; then
xrandr --output $ext --auto --right-of $int --primary --output $int --auto
fi
Das Skript rufst du dann so als normaler user auf:
Code:
./monitor-switch auto
./monitor-switch ext
./monitor-switch dual
usw.
Wenn du das Skript in $HOME/bin ablegst und dieser Pfad in deiner PATH Variable ist, dann kannst du das wie ein ganz normales Kommando ausführen.
So, ich hoffe das war verständlich genug. Bitte gib Bescheid, falls etwas unklar ist. Viel Spaß beim Konfigurieren.
- - - Beitrag zusammengeführt - - -
Achja, es kann passieren, dass du einen schwarzen Bildschirm hast und deine Tastenkombi nicht funktioniert.. dann hast du möglicherweise einen Lockscreen, der das verhindert. Dann musst du blind das Passwort eingeben und dann erneut die Tastenkombi versuchen. Dafür hab ich noch keine schöne Lösung gefunden.
Vor dem Ausdocken schalte ich häufig auf den internen Monitor, um eventuelle Schwierigkeiten zu vermeiden. Das ist meistens nicht sonderlich schlimm, es sei denn ich bin etwas unter Zeitdruck
.
Gruß