Unten angehängt das Script. Ich habe einfach solange rumprobiert bis es funktionert hatte, es werden auch metamodes automatisch eingefügt, die habe ich gelöscht. Ob das alles so richtig ist -naja- es funktioniert hier genauso wie es soll: ich kann per mausklick bzw zugewiesener Tastenkombination umschalten. Manches is auch sicherheitshalber doppelt gemoppelt.
mit nv-control-dpy --print-metamodes kann man die aktuellen Einstellungen abfragen. Bei Source wird angegeben wo der Mode herkommt. Zb. Xconfig aus der xorg.conf.
source=nv-control, das sind die selbst angelegten Modes, man muss dafür sorgen das keine Modes existieren die eine gleiche Auflösung haben wie die, die man schalten will. Dann kann man mit xrandr -s breitexhöhe die gewünschte Auflösung setzen, der nvidia-Treiber erkennt dies und schaltet in den gewünschten Metamode.
xrandr ohne Parameter aufgerufen gibt auch alle derzeit möglichen Auflösungen an. Alternativ zu -s HöhexBreite kann man auch -s 0 für den ersten mode, -s 1 für den zweiten usw.. angeben. Wenn es mehrere Modes mit der selben Auflösung gäbe könnte man damit umschalten, was der Nvidia-Treiber davon hält und wie der weiss welche Modeline/Metamode er nun verwenden soll, es scheint sich da zu beissen...
CRT-0 ist der VGA Ausgang, DFP-0 ist das Notebook-Display und DFP-1 der DVI-Ausgang. Im Prinzip muss man für jeden Ausgang angeben ob er mit NULL abgeschalten wird,
oder welche Auflösung gefahren werden soll und um wieviele Pixel vom Primärscreen (der mit den +0+0) versetzt werden soll. Das @gibt an ob eine virtuell höhere Auflösung gefahren werden soll. (mit der Maus kann man in die kanten/ecken fahren um zu scrollen)
--------------------------------------------------
nv-control-#!/bin/bash
status=`cat /sys/devices/platform/dock.0/docked`
if [ "$status" == "1" ]; then
nv-control-dpy --add-metamode "CRT: 1280x1024 +1280+0, DFP-1: 1280x1024 +0+0"
nv-control-dpy --dynamic-twinview
nv-control-dpy --delete-metamode "CRT-0: nvidia-auto-select @1280x1024 +0+0, DFP-0: nvidia-auto-select @1680x1050 +1280+0, DFP-1: NULL"
nv-control-dpy --delete-metamode "DFP-0: 1280x1024 @1280x1024 +1280+0, CRT-0: NULL, DFP-1: NULL"
nv-control-dpy --delete-metamode "CRT-0: 1280x1024 @1280x1024 +1280+0, DFP-0: NULL, DFP-1: NULL"
nv-control-dpy --delete-metamode "CRT-0: 1280x1024 @1280x1024 +1280+0, DFP-1: 1280x1024 @1280x1024 +0+0, DFP-0: NULL"
nv-control-dpy --delete-metamode "CRT-0: 1280x1024 @2560x1024 +0+0, DFP-0: NULL, DFP-1: NULL"
nv-control-dpy --delete-metamode "CRT-0: 1680x1050 @1680x1050 +0+0, DFP-0: NULL, DFP-1: NULL"
nv-control-dpy --delete-metamode "CRT-0: 1280x1024 @1280x1024 +1280+0, DFP-1: 1280x1024 @1280x1024 +0+0, DFP-0: NULL"
nv-control-dpy --delete-metamode "DFP-0: nvidia-auto-select @1680x1050 +0+0"
nv-control-dpy --delete-metamode "DFP-0: 1600x1024 @2560x1024 +0+0"
nv-control-dpy --delete-metamode "DFP-0: 1280x1024 @1280x1024 +1280+0"
nv-control-dpy --delete-metamode "DFP-0: 1680x1050 +0+0"
nv-control-dpy --delete-metamode "CRT: 1280x1024 +1280+0, DFP-1: 1280x1024 +0+0"
nv-control-dpy --add-metamode "CRT: 1280x1024 +1280+0, DFP-1: 1280x1024 +0+0"
nv-control-dpy --add-metamode "DFP-0: 1680x1050 +0+0"
nv-control-dpy --delete-metamode "DFP-0: 1680x1050 +0+0"
nv-control-dpy --delete-metamode "CRT: 1280x1024 +1280+0, DFP-1: 1280x1024 +0+0"
nv-control-dpy --add-metamode "CRT: 1280x1024 +1280+0, DFP-1: 1280x1024 +0+0"
nv-control-dpy --add-metamode "DFP-0: 1680x1050 +0+0"
xrandr -s 2560x1024
else
nv-control-dpy --add-metamode "CRT: 1280x1024 +1280+0, DFP-1: 1280x1024 +0+0"
nv-control-dpy --dynamic-twinview
nv-control-dpy --delete-metamode "CRT-0: nvidia-auto-select @1280x1024 +0+0, DFP-0: nvidia-auto-select @1680x1050 +1280+0, DFP-1: NULL"
nv-control-dpy --delete-metamode "DFP-0: 1280x1024 @1280x1024 +1280+0, CRT-0: NULL, DFP-1: NULL"
nv-control-dpy --delete-metamode "CRT-0: 1280x1024 @1280x1024 +1280+0, DFP-0: NULL, DFP-1: NULL"
nv-control-dpy --delete-metamode "CRT-0: 1280x1024 @1280x1024 +1280+0, DFP-1: 1280x1024 @1280x1024 +0+0, DFP-0: NULL"
nv-control-dpy --delete-metamode "CRT-0: 1280x1024 @2560x1024 +0+0, DFP-0: NULL, DFP-1: NULL"
nv-control-dpy --delete-metamode "CRT-0: 1680x1050 @1680x1050 +0+0, DFP-0: NULL, DFP-1: NULL"
nv-control-dpy --delete-metamode "CRT-0: 1280x1024 @1280x1024 +1280+0, DFP-1: 1280x1024 @1280x1024 +0+0, DFP-0: NULL"
nv-control-dpy --delete-metamode "DFP-0: nvidia-auto-select @1680x1050 +0+0"
nv-control-dpy --delete-metamode "DFP-0: 1600x1024 @2560x1024 +0+0"
nv-control-dpy --delete-metamode "DFP-0: 1280x1024 @1280x1024 +1280+0"
nv-control-dpy --delete-metamode "DFP-0: 1680x1050 +0+0"
nv-control-dpy --delete-metamode "CRT: 1280x1024 +1280+0, DFP-1: 1280x1024 +0+0"
nv-control-dpy --add-metamode "CRT: 1280x1024 +1280+0, DFP-1: 1280x1024 +0+0"
nv-control-dpy --add-metamode "DFP-0: 1680x1050 +0+0"
nv-control-dpy --delete-metamode "DFP-0: 1680x1050 +0+0"
nv-control-dpy --delete-metamode "CRT: 1280x1024 +1280+0, DFP-1: 1280x1024 +0+0"
nv-control-dpy --add-metamode "CRT: 1280x1024 +1280+0, DFP-1: 1280x1024 +0+0"
nv-control-dpy --add-metamode "DFP-0: 1680x1050 +0+0"
xrandr -s 1680x1050
fi
------------------------
die Abfrage gibt bei mir folgendes aus:
/etc $ nv-control-dpy --print-metamodes
Using NV-CONTROL extension 1.17 on :0.0
Connected Display Devices:
CRT-0 (0x00000001): Samsung SyncMaster
DFP-0 (0x00010000): IBM
DFP-1 (0x00020000): Arnos Instruments F-419
MetaModes:
id=50, switchable=yes, source=xconfig :: CRT-0: nvidia-auto-select @1280x1024 +0+0, DFP-0: NULL, DFP-1: NULL
id=51, switchable=no, source=implicit :: CRT-0: nvidia-auto-select @1280x1024 +0+0, DFP-0: NULL, DFP-1: NULL
id=52, switchable=no, source=implicit :: CRT-0: 1280x960 @1280x960 +0+0, DFP-0: NULL, DFP-1: NULL
id=53, switchable=no, source=implicit :: CRT-0: 1152x864 @1152x864 +0+0, DFP-0: NULL, DFP-1: NULL
id=54, switchable=no, source=implicit :: CRT-0: 1152x864 @1152x864 +0+0, DFP-0: NULL, DFP-1: NULL
id=55, switchable=no, source=implicit :: CRT-0: 1152x864 @1152x864 +0+0, DFP-0: NULL, DFP-1: NULL
id=56, switchable=no, source=implicit :: CRT-0: 1152x864 @1152x864 +0+0, DFP-0: NULL, DFP-1: NULL
id=57, switchable=no, source=implicit :: CRT-0: 1024x768 @1024x768 +0+0, DFP-0: NULL, DFP-1: NULL
id=58, switchable=no, source=implicit :: CRT-0: 1024x768 @1024x768 +0+0, DFP-0: NULL, DFP-1: NULL
id=59, switchable=no, source=implicit :: CRT-0: 1024x768 @1024x768 +0+0, DFP-0: NULL, DFP-1: NULL
id=60, switchable=no, source=implicit :: CRT-0: 960x600 @960x600 +0+0, DFP-0: NULL, DFP-1: NULL
id=61, switchable=no, source=implicit :: CRT-0: 960x540 @960x540 +0+0, DFP-0: NULL, DFP-1: NULL
id=62, switchable=no, source=implicit :: CRT-0: 840x525 @840x525 +0+0, DFP-0: NULL, DFP-1: NULL
id=63, switchable=no, source=implicit :: CRT-0: 840x525 @840x525 +0+0, DFP-0: NULL, DFP-1: NULL
id=64, switchable=no, source=implicit :: CRT-0: 840x525 @840x525 +0+0, DFP-0: NULL, DFP-1: NULL
id=65, switchable=no, source=implicit :: CRT-0: 832x624 @832x624 +0+0, DFP-0: NULL, DFP-1: NULL
id=66, switchable=no, source=implicit :: CRT-0: 800x600 @800x600 +0+0, DFP-0: NULL, DFP-1: NULL
id=67, switchable=no, source=implicit :: CRT-0: 800x600 @800x600 +0+0, DFP-0: NULL, DFP-1: NULL
id=68, switchable=no, source=implicit :: CRT-0: 800x600 @800x600 +0+0, DFP-0: NULL, DFP-1: NULL
id=69, switchable=no, source=implicit :: CRT-0: 800x600 @800x600 +0+0, DFP-0: NULL, DFP-1: NULL
id=70, switchable=no, source=implicit :: CRT-0: 800x600 @800x600 +0+0, DFP-0: NULL, DFP-1: NULL
id=71, switchable=no, source=implicit :: CRT-0: 640x480 @800x512 +0+0, DFP-0: NULL, DFP-1: NULL
id=72, switchable=no, source=implicit :: CRT-0: 720x450 @720x450 +0+0, DFP-0: NULL, DFP-1: NULL
id=73, switchable=no, source=implicit :: CRT-0: 700x525 @700x525 +0+0, DFP-0: NULL, DFP-1: NULL
id=74, switchable=no, source=implicit :: CRT-0: 700x525 @700x525 +0+0, DFP-0: NULL, DFP-1: NULL
id=75, switchable=no, source=implicit :: CRT-0: 680x384 @680x384 +0+0, DFP-0: NULL, DFP-1: NULL
id=76, switchable=no, source=implicit :: CRT-0: 680x384 @680x384 +0+0, DFP-0: NULL, DFP-1: NULL
id=77, switchable=no, source=implicit :: CRT-0: 640x480 @640x512 +0+0, DFP-0: NULL, DFP-1: NULL
id=78, switchable=no, source=implicit :: CRT-0: 640x480 @640x512 +0+0, DFP-0: NULL, DFP-1: NULL
id=79, switchable=no, source=implicit :: CRT-0: 640x480 @640x480 +0+0, DFP-0: NULL, DFP-1: NULL
id=80, switchable=no, source=implicit :: CRT-0: 640x480 @640x480 +0+0, DFP-0: NULL, DFP-1: NULL
id=81, switchable=no, source=implicit :: CRT-0: 640x480 @640x480 +0+0, DFP-0: NULL, DFP-1: NULL
id=82, switchable=no, source=implicit :: CRT-0: 640x480 @640x480 +0+0, DFP-0: NULL, DFP-1: NULL
id=83, switchable=no, source=implicit :: CRT-0: 512x384 @576x432 +0+0, DFP-0: NULL, DFP-1: NULL
id=84, switchable=no, source=implicit :: CRT-0: 512x384 @576x432 +0+0, DFP-0: NULL, DFP-1: NULL
id=85, switchable=no, source=implicit :: CRT-0: 512x384 @576x432 +0+0, DFP-0: NULL, DFP-1: NULL
id=86, switchable=no, source=implicit :: CRT-0: 512x384 @576x432 +0+0, DFP-0: NULL, DFP-1: NULL
id=87, switchable=no, source=implicit :: CRT-0: 512x384 @512x384 +0+0, DFP-0: NULL, DFP-1: NULL
id=88, switchable=no, source=implicit :: CRT-0: 512x384 @512x384 +0+0, DFP-0: NULL, DFP-1: NULL
id=89, switchable=no, source=implicit :: CRT-0: 512x384 @512x384 +0+0, DFP-0: NULL, DFP-1: NULL
id=90, switchable=no, source=implicit :: CRT-0: 400x300 @416x312 +0+0, DFP-0: NULL, DFP-1: NULL
id=91, switchable=no, source=implicit :: CRT-0: 400x300 @400x300 +0+0, DFP-0: NULL, DFP-1: NULL
id=92, switchable=no, source=implicit :: CRT-0: 400x300 @400x300 +0+0, DFP-0: NULL, DFP-1: NULL
id=93, switchable=no, source=implicit :: CRT-0: 400x300 @400x300 +0+0, DFP-0: NULL, DFP-1: NULL
id=94, switchable=no, source=implicit :: CRT-0: 400x300 @400x300 +0+0, DFP-0: NULL, DFP-1: NULL
id=95, switchable=no, source=implicit :: CRT-0: 320x240 @320x240 +0+0, DFP-0: NULL, DFP-1: NULL
id=96, switchable=no, source=implicit :: CRT-0: 320x240 @320x240 +0+0, DFP-0: NULL, DFP-1: NULL
id=97, switchable=no, source=implicit :: CRT-0: 320x240 @320x240 +0+0, DFP-0: NULL, DFP-1: NULL
id=99, switchable=no, source=nv-control :: DFP-0: 1680x1050 @1680x1050 +0+0, CRT-0: NULL, DFP-1: NULL
id=98, switchable=no, source=nv-control :: CRT-0: 1280x1024 @1280x1024 +1280+0, DFP-1: 1280x1024 @1280x1024 +0+0, DFP-0: NULL
id 99= nur Notebook-Display
id 98= VGA rechts neben DVI, Notebook-Display ist aus. Wie man sieht, 1680.1050 und die aus 2x1280x1024 zusammengesetzten Metamodes gibts nur einmal, daher ist das für den Treber eindeutig.In der Anleitung vom Treiber die sich über die Metamodes/Modelines auslässt steht was vom "grössten rechteck" Man kann auch bildschirme mixen, also laptop+DVI, oder Laptop+VGA. Dann muss man als Auflösung die breite über alles, also (1680+1280=2960) 2960x1050 angeben.
in der Xorg-conf habe ich folgendes angegeben:
Identifier "Screen0"
Device "Device0"
Monitor "Monitor0"
DefaultDepth 24
Option "TwinView" "1"
Option "TwinViewXineramaInfoOrder" "DFP-1"
Option "metamodes" "DFP-1: 1280x1024 +0+0"
Das T61 steuert beim Bootvorgang den VGA-Ausgang an. Das kommt wohl so da BIOS-Einstellung. Sobald die Anmeldemaske kommt wird auf 1280x1024 auf dem DFP-1 (DVI) geschalten. ist am DVI nix angeschlossen bleibts bei dieser Auflösung-das Bild wird aber auf dem Notebook dargestellt. Nach dem anmelden lasse ich obiges script laufen, das wertet aus ob das T61 an oder abgedockt ist und setzt die passende Auflösung/Twinview.
PS: Nein, 3 Bildschirme lassen sich scheinbar nicht ansteuern, da weigert sich nv-control-dpy diesen Mode anzulegen. Wie gesagt, ich bin kein Linux Profi-eher Anfänger.
Wenn euch obiges geholfen hat, lasst es mich wissen..
Inzwischen bin ich bei meinem udev-Problem etwas weiter, das script wird gestartet-jedoch immer nur eines. Das wäre nicht weiter schlimm wenn man obiges Abfragescript laufen lässt. Das habe ich mit /usr/bin/logger ausgestattet damit ich sehen kann was passiert. Xrandr scheint gestartet zu werden, zumidest tauchen mit logger davor und danach abgesetzte einträge in /var/log/messages auf. Jedoch schaltet schaltet xrandr nicht um. Rufe ich Das script manuell auf bekomme ich wie gewünscht twinview nach dem andocken.
Vielleicht fällt jemandem was dazu ein..