Xrandr-Einstellungen in Debian 7 auf VirtualBox können nicht zuverlässig automatisiert werden

2098
Kyle Strand

Obwohl es in der Sache mehr bestehenden Fragen sind (von denen die meisten hilfreichen Antwort ist dies ) und verschiedene Threads auf anderen Foren, ich kann nicht zuverlässig meine einstellen xrandrEinstellungen in Debian 7 auf VirtualBox.

Ich versuche, die xrandrAnzeigeeinstellungen zu steuern (anstatt meiner Desktopumgebung die Automatisierung zu ermöglichen), weil ich den i3Fenstermanager verwende, der die Anzeigeeinstellungen nicht automatisiert oder die Anzeigeeinstellungen der Gnome-Desktopumgebung verwendet.

Konfiguration:

Ich bin mir nicht sicher, wie relevant dies alles ist, insbesondere die Hardware, da ich nicht glaube, dass Debian tatsächlich auf viele Informationen über das Monitor-Setup zugreifen kann. Soweit ich das beurteilen kann, meldet VirtualBox nur das Vorhandensein von virtuellen Bildschirmen, als wären es Hardwaremonitore.

Hardware

  • Lenovo Laptop mit nVidia-Grafikkarte (die integrierte Intel-GPU wird nicht verwendet, AFAIK - dazu habe ich eine BIOS-Einstellung verwendet)
    • Windows 7
    • 32 GB RAM
    • Mit neuesten (glaube ich) nVidia - Treiber (340,84) - dies könnte wichtig, da ich die 3D - Beschleunigung in VirtualBox freigegeben (siehe unten), die ich denke, das Gastbetriebssystem ermöglicht den Zugriff auf die Host - Hardware haben
  • Seiki 4K TV (als Monitor verwendet) über HDMI über Dockingstation (die DisplayPort intern in HDMI konvertiert)
  • Samsung SyncMaster 243T-Monitor vertikal gedreht

VirtualBox

  • Verwendung von VirtualBox 4.3.20
  • Gastzugänge (gleiche Version) werden installiert
  • Monitoranzahl: 2 (im Vollbildmodus dem Seiki und dem SyncMaster zugewiesen)
  • Maximal verwendeter Videospeicher (128 MB)
  • Die 3D-Beschleunigung ist aktiviert

Gasteinstellungen

  • 32-Bit-Debian 7
  • gnomeund gdm3installiert sind
  • Bevorzugtes WM ist i3

Verhalten:

Wenn ich die i3Abfrage starte und abfrage xrandr, scheinen die standardmäßigen Anzeigeeinstellungen zwischen VBOX0und VBOX1, den zwei "Monitoren", an die VirtualBox berichtet, immer identisch zu sein xrandr(zumindest verstehe ich es, ich kann etwas vermissen). Soweit ich das beurteilen kann, gibt es keine gute Möglichkeit herauszufinden, welche VBOX-Nummer welcher Monitor ist, der zu kurz kommt.

Normalerweise beinhaltet dies eine vernünftige (wenn auch etwas weniger als native) Auflösung für meinen vertikalen SyncMaster, aber keine 4K-Auflösung für das Seiki. Die Option "Gastanzeige automatisch skalieren" in VirtualBox scheint nicht zu beeinflussen xrandr.

Ich habe verschiedene Modifikationen des in der oben verlinkten Antwort beschriebenen Skripts ausprobiert, aber ich bekomme im Allgemeinen verschiedene xrandrFehler. Ich habe nicht viele Zusammenhänge zwischen den verschiedenen Dingen gefunden, die ich ausprobiert habe, und den Fehlern, die ich bekomme, aber hier sind die wichtigsten Dinge, die wichtig sein könnten:

Skript zwickt

  • Überspringen (normalerweise) die VBoxServiceNeustartschritte (sie scheinen das xrandrVerhalten nicht zu ändern )
  • Verwenden Sie xrandr --fbOption vor allen anderen xrandrBefehlen; Dies führt manchmal zu einem "angegebenen Bildschirm, der nicht groß genug ist"
  • Verwenden Sie 30 Bilder pro Sekunde statt 60 (4K über das aktuelle HDMI-Gerät ist maximal 30 Bilder pro Sekunde, aber ich denke nicht, dass dies in VirtualBox eine Rolle spielt; in jedem Fall glaube ich, dass ich manchmal funktionierte und manchmal in beide Richtungen versagte).
  • Verwenden Sie cvtstatt gtf(diese scheinen sich im Wesentlichen gleich zu verhalten)
  • Ersetzen Sie die erste Zahl, die durch gtf(normalerweise um 200 oder 300) angegeben wird, durch eine kleinere Zahl, z. B. 100.00(Ich denke, das hat ein- oder zweimal in der Befehlszeile funktioniert, scheint aber im Allgemeinen keinen Unterschied zu machen).
  • Neue Modusnamen mit zufallsgenerieren verwenden $RANDOM(Ich habe auch verschiedene andere Arten des Fummelns mit Namen ausprobiert)
  • Explizit --rmmodeModi vor dem Erstellen mit --newmode(dies scheint zu verhindern, dass der "Schrift" -Fehler unten aufgeführt wird)
  • Verwenden Sie --right-ofoder, --left-ofwenn Sie --outputs einstellen (da die Bildschirme standardmäßig standardmäßig gespiegelt werden).

Fehlermeldungen

  • xrandr: specified screen 5120x2160 not large enough for output VBOX0 (3840x2160+3840+0) X Error of failed request: BadValue (integer parameter out of range for operation) Ich habe dieses jetzt erhalten, als ich das Skript erneut ausführte, nachdem die Monitore bereits zu ihrer korrekten Auflösung gezwungen worden waren (mit der im nächsten Abschnitt beschriebenen Umgehung). Das hat mich überrascht, denn xrandrfolgendes berichtet: Screen 0: minimum 64 x 64, current 5120 x 2160, maximum 16384 x 16384
  • X Error of failed request: BadMatch (invalid parameter attributes) Dies tritt manchmal auf, wenn Sie versuchen, ein --newmode. Es ist wahrscheinlich der zweithäufigste Grund für das Scheitern des Skripts. Ich denke, es kann durch das xrandr"Erinnern" des Modusnamens von einem früheren Einrichtungsversuch verursacht werden, aber die Verwendung $RANDOMscheint das Problem nicht konsistent zu lösen, daher kann es ein anderes Problem sein. (Ich vermute, dass es auch bei $RANDOMNamenskollisionen möglich sein kann.) Ich habe diesen Fehler nicht mehr gesehen, seit ich angefangen habe --rmmode, aber ich habe das Skript seit dem Hinzufügen des Befehls nicht genug ausgeführt, um sicher zu sein, dass es einen Unterschied macht das Verhalten.
  • X Error of failed request: BadMatch (invalid parameter attributes) Dies tritt manchmal auf, wenn versucht wird, eine --addmode. Es ist wahrscheinlich der häufigste Grund für das Scheitern des Skripts und es rätselt mich. Die manuelle Ausführung der gleichen Befehlsfolge (z. B. in einem Terminal) scheint eine praktikable Lösung für diesen Fehler zu sein, was bizarr ist.

Gnome Workaround:

Ich habe festgestellt, dass, wenn ich auf den Gnome - Desktop anmelden, führen Sie VirtualBox „Auto-Größe ändern Gastanzeige“ -Funktion, dann melden Sie sich ab und wieder an mit i3, xrandrumfasst in der Regel die richtigen Auflösungen sowohl für den Seiki und den SyncMaster in seinem Auto-generated Liste der Modi und die 4K-Auflösung wird als "bevorzugte" Auflösung für jeden VBOX-Bildschirm festgelegt. Dies ermöglicht mir die einfache Verwendung von xrandr --output [4K VBOX] --auto --left-of [SyncMaster VBOX], gefolgt von xrandr --output [SyncMaster VBOX] --mode [SyncMaster resolution](Beachten Sie, dass die SyncMaster-Auflösung noch manuell festgelegt werden muss, da xrandrdie gleiche bevorzugte Auflösung für beide angezeigt wird, VBOX#ohne dass Wahrheitsgehalt oder Vernunft beachtet wird).

Diese Problemumgehung bleibt nach dem Herunterfahren anscheinend auch nach Herunterfahren und Neustarts bestehen (dh die gewünschten Modi sind immer noch in der Modusliste vorhanden xrandr, obwohl ich xrandrnach dem Starten einer i3Sitzung immer noch die beiden Befehle ausführen muss ), sie bleiben jedoch nicht immer bestehen sich abmelden und eine neue i3Sitzung starten . Beachten Sie, dass der gdm3Anmeldebildschirm niemals die korrekte Auflösung hat (soweit ich gesehen habe). Ich habe keinen Kommentar zu der Fremdartigkeit, die hier vorgeht.

BEARBEITEN: Dieser Ansatz scheint nicht skriptfähig zu sein und das Verhalten scheint tatsächlich nicht konsistent zu sein.

Weitere Hinweise:

  • Ich habe keine xconf(oder ähnliche) Datei in meinem etc/X11Verzeichnis.
  • Das Reparieren der Anzeigen ist ein ziemlich häufiges Problem, da VirtualBox jedes Mal, wenn ich einen meiner Monitore ausschalte, einen der virtuellen Vollbildmonitore beendet. (Urgh.)

Fragen:

  • Gibt es eine Möglichkeit, programmgesteuert zwischen den tatsächlichen Hardwarefunktionen (dh nativen Auflösungen) verschiedener Monitore in VirtualBox zu unterscheiden?
  • Warum sehe ich diese verschiedenen Fehler? Was ist los mit xrandretc?
  • Gibt es eine Möglichkeit, zuverlässig die richtige Vollbildauflösung zu erreichen, ohne dass ich gnomevor meiner i3Sitzung eine Sitzung starten muss ?

Möglicherweise verwandte Probleme

  • Mein Mauszeiger stimmt nicht zuverlässig mit der Stelle überein, an der Klicks erkannt zu werden scheinen. Klicks treten normalerweise unterhalb und rechts vom Zeiger auf. Wenn ich die Bildschirme richtig konfiguriert habe, wird dieses Problem normalerweise nicht mehr angezeigt. Die Bildschirme verfügen zwar derzeit über die richtigen Auflösungen, der Zeiger ist jedoch immer noch etwas deaktiviert.
  • Wenn ich die Auflösungen richtig einstellen kann, flackert der Bildschirm gelegentlich. Das ist ärgerlich, aber lebenswert. Irgendeine Idee, was verursacht es oder wenn es behoben werden kann?
23
Ich muss meine Notizen ausgraben, aber welche Modi werden für Ihre Anzeigen unterstützt? hat i3 eine Möglichkeit, ein Skript vor / direkt nach dem Login zu starten? http://superuser.com/questions/808737/setting-and-keeping-resolution-settings-for-a-display-thats-not-autodetected-on ist das, was ich mit einem ähnlichen, physischen Problem gemacht habe, aber das hier Möglicherweise benötigen Sie ein bisschen Geld, um in Ihrem Fall zu arbeiten. Journeyman Geek vor 9 Jahren 0
@JourneymanGeek Das 4K unterstützt die meisten Standardmodi bei 60 Hz und die Unterstützung für größere Modi (einschließlich 4K) bei 30 Hz. Der SyncMaster scheint die meisten normalen Modi mit einer nativen (vertikalen) Auflösung von 1920x1280 zu unterstützen. Das i3-Konfigurationsskript unterstützt die Ausführung eines Skripts beim Anmelden. Ich benutze diese Funktion, um das oben beschriebene Skript automatisch auszuführen, das Ihrem ähnelt, aber ich bekomme immer wieder seltsame `xrandr`-Fehler. Kyle Strand vor 9 Jahren 0
Wie starte ich i3? Hat es eine eigene X-Initialisierungsroutine? Oder legen Sie es in Ihre `.xinitrc` und verwenden Sie` startx`? Ich verwende xmonad (was, wie ich es verstehe, ähnlich ist wie i3?), Das ich mit `startx 'starte. Mein `xrandr`-Skripting wird alles in` .xinit` ausgeführt, kurz bevor mein Fenstermanager gestartet wird. Ich habe auf diese Weise hervorragende Ergebnisse erzielt. X ist bereit zu gehen und es wurde nichts anderes gestartet. Chris vor 9 Jahren 0
Ich verwende "gdm3" und habe "i3" als Standard-Desktopumgebung für mein Konto ausgewählt. Kyle Strand vor 9 Jahren 0
Sorry, nicht sicher, wie ich das vermisst habe. Haben Sie versucht, die `xrandr`-Befehle direkt in die gdm-Startskripte einzufügen? (/ etc / gdm / * laut [Arch Wiki] (https://wiki.archlinux.org/index.php/Xrandr#Configuration)) Obwohl ich nicht sicher bin, wie hilfreich das ist, wenn vbox isn 'ist t konsequent Anzeige-IDs zuweisen ... Chris vor 9 Jahren 0
@ Chris Nun, es ist eine * lange * Frage :) Ich habe es nicht probiert - das wäre sicher einen Versuch wert. Eine Strategie wäre, die "bevorzugten" Modi in "gdm" init einzustellen und dann "--auto" in der "i3" - Init zu verwenden (was ziemlich zuverlässig funktioniert, wenn die bevorzugten Modi korrekt sind). Irgendeine Idee, ob es möglich ist, die bevorzugten Modi manuell einzustellen? Kyle Strand vor 9 Jahren 0
Leider fällt mir keiner sofort ein, da VBox den Monitoren scheinbar keine Namen zuweist. Könnten Sie die Ausgabe von `xrandr --query` (a) posten, wenn die Einstellungen falsch erkannt werden, und (b) nachdem Sie alles richtig funktioniert haben? Oder zumindest einer von allem, der richtig funktioniert. Chris vor 9 Jahren 1
@ Chris Die Namen sind eigentlich keine große Sache - ich kann sie einfach wechseln, wenn es nötig ist, und im Allgemeinen scheinen sie sich nicht so sehr zu ändern. Das Problem ist, dass VBox anscheinend immer die * gleichen * gültigen "Gültigkeitsmodi" für jeden Monitor meldet, aber es ist inkonsistent, ob die echten Hardware-nativen Auflösungen gemeldet werden oder nicht. Eigentlich ... wenn man darüber nachdenkt, meldet es vielleicht den gültigen Satz von Hardwareauflösungen korrekt, aber "xrandr" liest die Auflösungen zu ungünstigen Zeitpunkten, wenn ein oder mehrere Bildschirme getrennt sind. Wo bekommt `xrandr 'eigentlich die Liste seiner gültigen Modi? Kyle Strand vor 9 Jahren 0
..... Außerdem ist mir gerade aufgefallen, dass in meinem aktuellen (gültigen) Setup die systemeigenen Auflösungen zwischen den für jeden Bildschirm aufgelisteten Modi * nicht * repliziert werden, dh jeder Bildschirm verfügt über einige gängige Low-Res-Modi (bis zu einer höheren Auflösung) bis 1024x768) plus * ein * hochauflösender Modus, der der tatsächlichen korrekten nativen Auflösung entspricht. Kyle Strand vor 9 Jahren 0
Ich bin nicht sicher, wie es in diesen Zustand geraten ist, aber ich wette, ich könnte herausfinden, wie ich es zwingen kann, wenn ich besser verstehe, wo `xrandr` eigentlich seine Informationen bekommt. Kyle Strand vor 9 Jahren 0
`xrandr` sollte die Einstellungen direkt vom Grafiktreiber über die RandR-Erweiterung erhalten. Ich habe eine Theorie: Der VBox-Treiber meldet aus Kompatibilitätsgründen standardmäßig jeden möglichen Modus. Es muss einen Haken im Treiber geben, an den Gnome einrastet, damit er mit der Funktion zur automatischen Größenänderung funktioniert. Wenn ja, funktioniert es mit `i3` nie richtig. Ich denke, der Schlüssel ist, herauszufinden, wo genau diese Funktion zur automatischen Größenänderung in das Display-Management-Subsystem einhakt ... Aber ich muss zugeben, dass es an dieser Stelle eine fundierte Vermutung ist. Chris vor 9 Jahren 0
Könnten Sie dem Laptop eine genaue Referenz geben, um zu sehen, welche Grafikkarte Sie verwenden. Es ist auch wichtig zu verstehen, was das Host-Betriebssystem ist. Haben Sie versucht, auf die neueste Virtualbox zu aktualisieren? yilmi vor 8 Jahren 0
@yilmi Ich habe die genaue Grafiktreiberversion angegeben und auch erwähnt, dass der Host Windows 7 ist. Gibt es spezielle zusätzliche Informationen, die helfen können? Kyle Strand vor 8 Jahren 0
Die genaue Referenz des Laptops, einige Laptops verfügen über eine Dual-GPU mit kabelgebundenem Ausgang. Ich ging durch das Änderungsprotokoll und stellte fest, dass VirtualBox 5.0.2 das Problem beheben konnte, ein 3D-Problem, das Ihrem entsprechen könnte, aber nichts Besseres als ein Versuch ;-) yilmi vor 8 Jahren 0
@yilmi Augh, wollte früher antworten. Ich verwende ein ThinkPad W540, denke ich (es liegt momentan nicht vor mir) oder T540. Ich habe definitiv noch kein Upgrade auf VirtualBox 5 durchgeführt, also versuche ich es. Kyle Strand vor 8 Jahren 0
@Kyle: Das W540 und das T540p verwenden nvidia als diskrete Grafikkarte. Dies bedeutet, dass die Intel-GPU die Hauptfunktion ist. Die Nvidia-GPU wird für das Abladen verwendet. Welche Treiber verwenden Sie auf dem Host-Betriebssystem? yilmi vor 8 Jahren 0
@yilmi Wie ich bereits erwähnt habe, gibt es eine BIOS-Einstellung, die ich verwende, um den Nvidia gpu zum primären zu machen. Ich werde später nachsehen. Kyle Strand vor 8 Jahren 0
@yilmi Eigentlich bin ich nicht sicher, nach welchen Host-OS-Treibern Sie fragen. Wie in der Frage erwähnt, ist mein Grafiktreiber die nVidia-Version 340.84. Kyle Strand vor 8 Jahren 0
@yilmi Beim Aktualisieren auf die neueste VirtualBox wurde das Problem möglicherweise wie hier beschrieben behoben. Ich habe meine Maschine seit einiger Zeit nicht neu gestartet, aber es scheint, dass ich immer in der Lage bin, die korrekten Bildschirmeinstellungen beizubehalten, auch wenn die Hardware-Monitore getrennt wurden, zwischen dem Fenster- und dem Vollbildmodus hin und her gewechselt werden usw. Ein neues Problem Wenn ich die physischen Bildschirme trenne und wieder verbinde und dann versuche, die Bildschirme des Gast-Betriebssystems anzuzeigen, kann ich nur die Popup-Symbolleiste VirtualBox anzeigen, bis Sie die Auswahl von Ansicht-> Vollbildmodus aufheben. Kyle Strand vor 8 Jahren 0

1 Antwort auf die Frage

0
Kyle Strand

Das Update auf die neueste VirtualBox-Version 5.0.14 scheint das Problem gelöst zu haben.