Dual-Monitor-Setup mit xrandr: Erweiterung ohne / mit deaktiviertem Scrollen

10

Dies ist keine Frage, sondern eine Lösung für ein Problem unter Ubuntu, auf das ich gestoßen bin.

Einrichtung:
Bei einem Laptop-Bildschirm (z. B. "LVDS-1-0") und einem zweiten Bildschirm (z. B. "DP-1") ist der zweite Bildschirm Ihr primärer Bildschirm und Ihr Monitor rechts von Ihrem primären Bildschirm (z. oder links) als Erweiterung (siehe Bild). Der erste Bildschirm wurde trotz expliziter xrandr-Anweisungen, dies nicht zu tun, immer virtuell erweitert. Bei der Eingabe konnte ich das lästige Scrollen vermeiden, wenn ich den Mauszeiger auf dem primären Monitor nach rechts bewegte.

xrandr --output LVDS-1-0 --off
xrandr --output DP-1 --mode 1920x1080 --primary --pos 0x0 --output LVDS-1-0 --mode 1920x1080 --pos 1920x0

Danach geht es einfach von einem Monitor zum anderen, ohne den Bildschirm zu scrollen.

Aktualisieren

Nach dem Wechsel zu einer diskreten Grafikkarte (nvidia ist diskret und Intel ist für meinen Laptop integriert) musste die Reihenfolge der Ausgänge geändert werden:

output_DP=$(xrandr | grep " connected" | grep DP | awk '{print $1}')
output_LVDS=$(xrandr | grep " connected" | grep LVDS | awk '{print $1}')

xrandr --output $output_LVDS --off
xrandr --output $output_LVDS --mode 1920x1080 --pos 1920x0 --output $output_DP --mode 1920x1080 --pos 0x0  --primary

Zur Vereinfachung habe ich diese Variablen flexibler gestaltet, da das Umschalten zwischen diskreten und integrierten Grafikkarten die Bezeichnung der Ausgabegeräte ändert (z. B. LVDS-1-0 gegenüber LVDS-1).

Monitorlayout

rocky_hiker
quelle

Antworten:

6

Ich habe den gleichen Fehler getroffen. Ihre Problemumgehung hat bei mir nicht funktioniert. Ihr Trick ist einfach ein Auslöser, der den Fehler verursacht, nicht hineinzufallen. Ich habe mich ein wenig eingegraben und einen netten Kerl mit einer Lösung gefunden , die auch anderen hier helfen könnte.

Das Hauptproblem besteht darin, dass der Fehler, auf den wir hier gestoßen sind, dazu führt, dass der Monitor, der in den anderen scrollt, einen virtuellen Bildschirm mit der Größe beider Bildschirme hat. Die Lösung scheint also diesen zusätzlichen virtuellen Speicherplatz auf diesem Bildschirm zu deaktivieren, um der Auflösung des Monitors zu entsprechen. Dies geschieht normalerweise mit dem --panning AxBArgument - Wir verwenden es, um die Größe des virtuellen Raums festzulegen.

So könnten Sie es machen:

xrandr \
  --output LVDS-1-0 --mode 1920x1080 --panning 1920x1080 --pos 1920x0 \
  --output HDMI-0   --mode 1920x1080 --panning 1920x1080 --pos 0x0    --primary

(Schrägstrich \hinzugefügt, um Zeilenumbrüche im Befehl zu verwenden.)

Leider besteht das Problem hier darin, dass der Treiber (das ist der Fehler) das von uns eingestellte (oder nicht eingestellte) Schwenken zu überschreiben scheint. Was es aber nicht tut, ist, einen anderen Teil des Schwenks festzulegen: den Verfolgungsbereich! Der Verfolgungsbereich ist tatsächlich der Teil des Bildschirms, auf dem die Kamera dem Cursor auf diesem Monitor folgt.

tl; dr: Die Idee ist also, das Schwenken als Treiber festzulegen, aber stattdessen den Verfolgungsbereich einzuschränken.

Dies erfolgt mit folgendem Befehl:

xrandr \
  --output LVDS-1-0 --mode 1920x1080 \
  --output HDMI-0   --mode 1920x1080 --panning 3840x1080+0+0/1920x1080+1920+0/0/0/0/0    --primary

"Die ersten vier Parameter [des panningArguments] geben den gesamten Schwenkbereich an, die nächsten vier den Zeigerverfolgungsbereich (standardmäßig derselbe Bereich). Die letzten vier Parameter geben den Rand und den Standardwert 0 an." [ man xrandr ]

Sebastian Barth
quelle
Ich habe den letzten Befehl in ein Shell-Skript eingefügt, das ich über die Tastatur (beim Wechseln der Anzeigehardware) und einige Sekunden nach der automatischen Anmeldung aufrufe.
Sebastian Barth
Das Einstellen des Verfolgungsbereichs war auch in meinem Setup von entscheidender Bedeutung.
krlmlr
Am Ende hat mir Ihre Lösung nicht geholfen, aber ich habe eine Lösung gefunden, indem ich die Vorsätze in Ruhe gelassen habe. Befehl für Spiegel: xrandr --output HDMI1 --same-as Laptop1und für erweitert:xrandr --output Laptop1 --auto --output HDMI1 --auto --left-of Laptop1
Edenshaw