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 xrandr
ustawień w Debian 7 na VirtualBox.
Próbuję użyć xrandr
do sterowania ustawieniami wyświetlania (zamiast pozwalać na zautomatyzowanie ich przez środowisko pulpitu), ponieważ korzystam z i3
menedż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
gnome
igdm3
są zainstalowane- Preferowaną WM jest
i3
Zachowanie:
Kiedy uruchamiam i3
i pytam xrandr
, domyślne ustawienia wyświetlania zawsze wydają się być identyczne pomiędzy VBOX0
i VBOX1
dwoma „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 xrandr
błę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
VBoxService
kroków ponownego uruchomienia (wydaje się, że nie zmieniająxrandr
zachowania) - Użyj
xrandr --fb
opcji przed innymixrandr
poleceniami; 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
cvt
zamiastgtf
(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ład100.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
--rmmode
tryby przed ich użyciem za pomocą--newmode
(wydaje się, aby uniknąć błędu „czcionki” wymienionego poniżej) - Użyj
--right-of
lub--left-of
podczas ustawiania--output
s (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żxrandr
zgł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 przezxrandr
„pamiętanie” nazwę trybie z poprzedniej próby, aby ustawić go w górę, ale przy użyciu$RANDOM
nie 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$RANDOM
kolizjach 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
, xrandr
zazwyczaj 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ż xrandr
zgł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 xrandr
liście trybów, chociaż xrandr
po uruchomieniu i3
sesji nadal muszę uruchamiać dwie komendy ), ale nie zawsze się utrzymuje, gdy po prostu wylogowanie i rozpoczęcie nowej i3
sesji. Pamiętaj, że gdm3
ekran 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 kataloguetc/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
xrandr
itp.? - Czy jest jakiś sposób, aby niezawodnie osiągnąć właściwą rozdzielczość pełnoekranową bez konieczności rozpoczynania
gnome
sesji przedi3
sesją?
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ć?
xrandr
błędy.
.xinitrc
i używasz startx
? Używam xmonada (który, jak rozumiem, jest podobny do i3?), Którego używam startx
. Moje xrandr
skrypty są gotowe .xinit
tuż 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ć.
gdm3
i wybrałem i3
jako domyślne środowisko pulpitu dla mojego konta.
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.