Nie można niezawodnie zautomatyzować ustawień xrandr w Debian 7 na VirtualBox

23

Chociaż istnieje kilka pytań w tej sprawie (na które najbardziej pomocna jest ta odpowiedź ) i różne wątki na innych forach, nie mogę wiarygodnie ustawić moich xrandrustawień w Debian 7 na VirtualBox.

Próbuję użyć xrandrdo sterowania ustawieniami wyświetlania (zamiast pozwalać na zautomatyzowanie ich przez środowisko pulpitu), ponieważ korzystam z i3menedżera okien , który nie automatyzuje ustawień wyświetlania ani nie używa ustawień wyświetlania środowiska graficznego Gnome.

Ustawiać:

Nie jestem pewien, jak istotne jest to wszystko, szczególnie sprzęt, ponieważ nie sądzę, aby Debian mógł uzyskać dostęp do wielu informacji na temat konfiguracji monitora; o ile wiem, VirtualBox po prostu zgłasza istnienie wirtualnych ekranów, jakby były monitorami sprzętowymi.

Sprzęt komputerowy

  • Laptop Lenovo z grafiką nVidia (zintegrowany procesor graficzny Intel nie jest używany, AFAIK - do tego celu użyłem ustawień BIOS)
    • System Windows 7
    • 32 GB pamięci RAM
    • Korzystanie z najnowszego (jak sądzę) sterownika nVidia (340.84) - to może mieć znaczenie, ponieważ włączyłem akcelerację 3D w VirtualBox (patrz poniżej), co moim zdaniem umożliwia systemowi- gościowi dostęp do sprzętu hosta
  • Telewizor 4K Seiki (używany jako monitor) przez HDMI za pośrednictwem stacji dokującej (która wewnętrznie konwertuje DisplayPort na HDMI)
  • Monitor Samsung SyncMaster 243T został obrócony w pionie

VirtualBox

  • Korzystanie z VirtualBox 4.3.20
  • Dodatki gości (ta sama wersja) są zainstalowane
  • Liczba monitorów: 2 (przypisana do Seiki i SyncMaster w trybie pełnoekranowym)
  • Maksymalna używana pamięć wideo (128 MB)
  • Akceleracja 3D jest włączona

Ustawienia gościa

  • 32-bitowy Debian 7
  • gnomei gdm3są zainstalowane
  • Preferowaną WM jest i3

Zachowanie:

Kiedy uruchamiam i3i pytam xrandr, domyślne ustawienia wyświetlania zawsze wydają się być identyczne pomiędzy VBOX0i VBOX1dwoma „monitorami”, do których VirtualBox zgłasza xrandr(przynajmniej tak to rozumiem; mógłbym coś przeoczyć). Zauważ, że o ile mogę stwierdzić, nie ma dobrego sposobu, aby stwierdzić, który VBOX # to monitor, który nie ma prób i błędów.

Zwykle obejmuje to rozsądną (choć nieco niższą) rozdzielczość dla mojego pionowego SyncMastera, ale brak rozdzielczości 4K dla Seiki. Wydaje się, że opcja „automatycznego zmieniania rozmiaru ekranu gościa” w VirtualBox nie ma wpływu xrandr.

Próbowałem różnych modyfikacji skryptu opisanych w odpowiedzi na link powyżej , ale ogólnie wydaje mi się, że mam różne xrandrbłędy. Nie znalazłem wielu korelacji między różnymi rzeczami, które próbowałem, a występującymi błędami, ale oto najważniejsze rzeczy, które mogą być ważne:

Poprawki skryptu

  • (Zwykle) pomijanie VBoxServicekroków ponownego uruchomienia (wydaje się, że nie zmieniają xrandrzachowania)
  • Użyj xrandr --fbopcji przed innymi xrandrpoleceniami; czasami powoduje to wyświetlenie podanego poniżej błędu „określony ekran nie jest wystarczająco duży”
  • Używaj 30 kl./s zamiast 60 (4K przy obecnym HDMI to maks. 30 kl./s, ale nie sądzę, że powinno to mieć znaczenie w VirtualBox; w każdym razie myślę, że czasami działało, a czasem zawodziło w obie strony)
  • Użyj cvtzamiast gtf(te wydają się zachowywać zasadniczo w ten sam sposób)
  • Zastąp pierwszą liczbę podaną przez gtf(która zwykle wynosi około 200 lub 300) mniejszą liczbą, na przykład 100.00(Myślę, że zadziałało to raz lub dwa razy w wierszu poleceń, ale ogólnie nie wydaje się mieć znaczenia)
  • Randomizuj nazwy nowych trybów za pomocą $RANDOM(próbowałem też różnych innych sposobów majstrowania przy nazwach)
  • Jawnie --rmmodetryby przed ich użyciem za pomocą --newmode(wydaje się, aby uniknąć błędu „czcionki” wymienionego poniżej)
  • Użyj --right-oflub --left-ofpodczas ustawiania --outputs (ponieważ ekrany są zwykle domyślnie dublowane)

Komunikaty o błędach

  • 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) Dostałem ten właśnie teraz, kiedy ponownie uruchomiłem skrypt po tym, jak monitory zostały już wymuszone do ich właściwej rozdzielczości (korzystając z obejścia opisanego w następnej sekcji). Zaskoczyło mnie to, ponieważ xrandrzgłasza: Screen 0: minimum 64 x 64, current 5120 x 2160, maximum 16384 x 16384
  • X Error of failed request: BadMatch (invalid parameter attributes) Zdarza się to czasami podczas próby wykonania --newmode. Jest to prawdopodobnie drugi najczęstszy powód niepowodzenia skryptu. I pomyśleć to może być spowodowane przez xrandr„pamiętanie” nazwę trybie z poprzedniej próby, aby ustawić go w górę, ale przy użyciu $RANDOMnie nie wydaje się konsekwentnie rozwiązać ten problem, więc może to być jakiś inny problem. (Przypuszczam, że możliwe jest, że nawet przy $RANDOMkolizjach nazw.) Nie widziałem tego błędu, odkąd zacząłem go używać --rmmode, ale nie uruchomiłem skryptu wystarczająco długo od dodania tego polecenia, aby mieć pewność, że zmieniło się zachowanie.
  • X Error of failed request: BadMatch (invalid parameter attributes) Zdarza się to czasami podczas próby wykonania --addmode. Jest to prawdopodobnie najczęstsza przyczyna niepowodzenia skryptu i to mnie dziwi. Czasami ręczne (tj. W terminalu) wykonywanie tej samej sekwencji poleceń używanych przez skrypt wydaje się realnym rozwiązaniem tego błędu, co jest dziwne.

Obejście gnome:

Przekonałem się, że jeśli zaloguję się na pulpicie Gnome, to wykonam funkcję VirtualBox „Auto-resize display display”, a następnie wyloguję się i ponownie zaloguję i3, xrandrzazwyczaj zawiera prawidłowe rozdzielczości dla Seiki i SyncMaster w jego automatycznie generowanym listę trybów, a rozdzielczość 4K jest ustawiona jako „preferowana” rozdzielczość dla każdego ekranu VBOX. To pozwala mi po prostu użyć xrandr --output [4K VBOX] --auto --left-of [SyncMaster VBOX], a następnie xrandr --output [SyncMaster VBOX] --mode [SyncMaster resolution](zauważ, że rozdzielczość SyncMaster musi być nadal określona ręcznie, ponieważ xrandrzgłasza tę samą preferowaną rozdzielczość dla obu VBOX# bez względu na prawdę lub rozsądek).

To obejście, po wykonaniu, najwyraźniej utrzymuje się przy zamykaniu systemu i ponownym uruchamianiu (to znaczy, pożądane tryby są nadal obecne na xrandrliście trybów, chociaż xrandrpo uruchomieniu i3sesji nadal muszę uruchamiać dwie komendy ), ale nie zawsze się utrzymuje, gdy po prostu wylogowanie i rozpoczęcie nowej i3sesji. Pamiętaj, że gdm3ekran logowania nigdy nie ma właściwej rozdzielczości (o ile widziałem). Nie mam dalszych komentarzy na temat dziwności, która się tutaj dzieje.

EDYCJA: To podejście nie wydaje się być skryptowalne, a zachowanie nie wydaje się być spójne.

Inne notatki:

  • Nie mam xconf(lub podobnego) pliku w moim katalogu etc/X11.
  • Naprawianie wyświetlaczy jest dość częstym problemem, ponieważ za każdym razem, gdy wyłączam jeden z moich monitorów, VirtualBox zabija jeden z pełnoekranowych wirtualnych monitorów. (Urgh.)

Pytania:

  • Czy istnieje jakiś sposób programowego rozróżnienia rzeczywistych możliwości sprzętowych (tj. Rodzimych rozdzielczości) różnych monitorów z poziomu VirtualBox?
  • Dlaczego widzę te różne błędy? Co się dzieje xrandritp.?
  • Czy jest jakiś sposób, aby niezawodnie osiągnąć właściwą rozdzielczość pełnoekranową bez konieczności rozpoczynania gnomesesji przed i3sesją?

Możliwe problemy

  • Mój wskaźnik myszy nie jest prawidłowo ustawiony w jednej linii z miejscem, w którym wydaje się, że kliknięcia zostały wykryte; kliknięcia zwykle występują poniżej i po prawej stronie wskaźnika. Po prawidłowym skonfigurowaniu ekranów problem zwykle znika, chociaż obecnie ekrany mają prawidłowe rozdzielczości, ale wskaźnik jest nadal nieco wyłączony.
  • Gdy uda mi się uzyskać prawidłowe rozdzielczości, ekran czasami migocze. To denerwujące, ale znośne. Masz pojęcie, co go powoduje lub czy można to naprawić?
Kyle Strand
źródło
Będę musiał wykopać notatki, ale jakie są obsługiwane tryby dla twoich wyświetlaczy? czy i3 ma jakiś sposób na uruchomienie skryptu przed / zaraz po zalogowaniu? superuser.com/questions/808737/... to właśnie skończyłem z podobnym, fizycznym problemem, ale może to wymagać trochę finansowania, aby zadziałało w twoim przypadku.
Journeyman Geek
@JourneymanGeek 4K ma wsparcie dla większości standardowych trybów przy 60 Hz i obsługuje większe tryby (w tym 4K) przy 30 Hz. SyncMaster wydaje się obsługiwać większość normalnych trybów, z natywną (pionową) rozdzielczością 1920x1280. Skrypt konfiguracji i3 obsługuje uruchamianie skryptu podczas logowania; Używam tej funkcji do automatycznego uruchamiania skryptu opisanego powyżej, który wygląda podobnie do twojego, ale ciągle pojawiają się dziwne xrandrbłędy.
Kyle Strand
Jak uruchomić i3? Czy ma własną procedurę inicjalizacji X? A może upuszczasz go .xinitrci używasz startx? Używam xmonada (który, jak rozumiem, jest podobny do i3?), Którego używam startx. Moje xrandrskrypty są gotowe .xinittuż przed uruchomieniem mojego menedżera okien. W ten sposób uzyskałem doskonałe wyniki. X jest gotowy do działania, a nic innego nie uruchomiło się, aby ingerować.
Chris
Używam gdm3i wybrałem i3jako domyślne środowisko pulpitu dla mojego konta.
Kyle Strand,
1
Niestety nie ma o czym myśleć od razu, ponieważ VBox nie wydaje się konsekwentnie przypisywać nazw monitorom. Czy możesz opublikować dane wyjściowe xrandr --query(a), gdy nieprawidłowo wykrywa ustawienia, i (b) po tym, jak wszystko działa poprawnie? Lub przynajmniej jeden z wszystkiego działa poprawnie.
Chris

Odpowiedzi:

0

Wydaje się, że aktualizacja do najnowszej wersji VirtualBox 5.0.14 rozwiązała problem.

Kyle Strand
źródło