Ich habe zwei Ubuntu 10.4-Rechner (und Ubuntu versteckt immer mehr xorg.conf-Konfigurationen, sodass ich nicht mehr weiß, wo ich sie finden kann). Einer ist ein Laptop mit Dual-Headed-Auflösung – DP1 ist der interne Bildschirm und VGA1 ein externer Monitor; beide laufen mit 1600 x 900. Der andere Rechner ist ein Desktop mit VGA1 und HDMI1 (was eigentlich ein Displayport mit einem DVI-Adapter ist) mit 1600 x 900. In beiden Fällen ist mein Desktop also 3200 x 900. Ich betreibe einen VNC-Server auf dem Laptop und verbinde mich vom Desktop aus damit (über einen SSH-Tunnel) – wenn ich die Vollbild-Taste drücke, bekomme ich eine 1600 x 900-Ansicht des Remote-Rechners auf einem Monitor und die Hälfte meines lokalen Desktops auf dem anderen Monitor – der „Vollbildmodus“ wird nur erweitert, um einen lokalen Monitor auszufüllen.
Normalerweise ist das genau das, was Sie wollen, wenn Sie einen Webbrowser, einen E-Mail-Client oder eine andere Anwendung im Vollbildmodus anzeigen. Ich bin sicher, es gibt irgendeine Art von X-Magie, um klarzustellen, was ein Vollbildmodus eigentlich bedeutet, und die VNC-Client-Anwendung akzeptiert einfach brav, was ihr gesagt wird. Ich würde zwar gerne das normale Vollbildverhalten für reguläre Anwendungen beibehalten, aber wenn ich per VNC mit einer anderen 3200 x 900-Maschine verbunden bin, möchte ich wirklich, dass sich der Vollbildmodus über beide lokalen Displays erstreckt. Die Fenstergröße so zu ändern, dass sie „geschlossen“ ist, ist nicht ganz gut genug, da ich immer noch lokale Bedienfelder oben und unten auf einem Display habe (obwohl ich sie so einstellen kann, dass sie automatisch ausgeblendet werden), plus den Fensterrand der VNC-Client-Anwendung (da dieser -notitle nicht zu respektieren scheint).
Gibt es eine gute Möglichkeit, X dazu zu bringen, einer einzelnen Anwendung die Größe des „Vollbilds“ vorzutäuschen? Kann ich es dazu bringen, allen Anwendungen gegenüber zu lügen? xrandr --noprimary
scheint wirkungslos zu sein.
Antwort1
Ich habe ein bisschen nachgeforscht. Die moderne Version der von mir vermuteten X11-Magie ist eigentlich Window-Manager-Magie,_NET_WM_STATE_VOLLBILD. Mein VNC-Client verwendet diese Anfrage tatsächlich und wird auf einen einzelnen Monitor erweitert. Es scheint, dass er zuerst Folgendes einstellen sollte:_NET_WM_VOLLBILDMONITORENum zu beschreiben, welche Monitore als obere/untere/linke/rechte Ränder verwendet werden sollen, aber das ist nicht der Fall. Ich habe jedoch die Quelle von dpkg gezogen und mich damit beschäftigt, sie zu hacken. Selbst mit _NET_WM_FULLSCREEN_MONITORS konnte ich das richtige Verhalten nicht erzielen. Der VNC-Client weiß, dass er 3200 x 900 erreichen möchte, und er versucht mehrere Male (30), die Größe im oberen Fenster darauf zu ändern (indem er sowohl die Basis- als auch die maximale Breite und Höhe in XA_WM_NORMAL_HINTS einstellt und dann XResizeWindow() verwendet), aber es wird immer ignoriert. Vielleicht verhält sich Compiz falsch?
Der VNC-Client verfügt jedoch auch über Code, um X direkt zu verarbeiten, anstatt über einen Fenstermanager zu gehen. Wenn ich den WM-Erkennungscode ausschalte, ändert er das Stammfenster direkter (XtNoverrideRedirect, XReparentWindow nach oben, XMapRaised usw.) und das funktioniert wunderbar (solange ich auch den Erkennungscode in der Funktion zum Aufheben des Vollbildmodus deaktiviere). Es funktioniert wohl sogar noch besser – Alt-Tab und andere Tasten zur Fensterverwaltung werden jetzt an die Remote-Maschine weitergeleitet, bis ich den Vollbildmodus des VNC-Clientfensters aufhebe.
Es kann sich also um ein Hack handeln und auch sonst ein paar Fallstricke haben*, aber zumindest habe ich es für den Moment so hinbekommen, dass es sich in meinen Augen akzeptabel verhält.
*: Durch das Aufheben der Vollbildanzeige werden das Stammfenster oder andere Fenster, die verdeckt waren, nicht richtig neu gezeichnet. Aber das Wechseln zu einem anderen Ansichtsfenster und dann wieder zurück erzwingt eine Neuzeichnung, was eine akzeptable Problemumgehung ist.
Antwort2
Eine weitere zu untersuchende Möglichkeit könnte die Möglichkeit sein, einige Programme beim Start auf eine bestimmte Größe/einen bestimmten Speicherort zu zwingen.
Den Befehl zum Starten von Opera über ein E17-Symbol definiere ich wie folgt:
/usr/local/bin/opera-11.01 -geometry 1600x3200-0+100 %U
Dadurch werden Größe und Position des Opera-Fensters festgelegt.
Und in Xemacs kann ich den Speicherort nicht steuern, aber ich kann in meinem init.el die Fenstergröße angeben, in der es beim Start ausgeführt werden soll:
(Rahmengröße festlegen (Fensterrahmen) 140 80)
Dies ist keine exakte Lösung für Ihre Situation, aber Sie können vielleicht versuchen, die von Ihnen ausgeführte Software auf eine bestimmte Größe/Position einzustellen, die einem vollen (Doppel-)Bildschirm entspricht? Nicht alle werden diese Art von Option haben, aber es ist vielleicht einen Blick wert.