Linux na maszynie wirtualnej – jak automatycznie zmieniać rozdzielczość ekranu?

0

Postanowiłem używać Openboxa na Fedorze na maszynie wirtualnej do pewnych zadań. Maszyna jest obsługiwana przez trójkę komponentów: QEMU/KVM/libvirt (nie znam się dokładnie na tym – tak tu pisze: https://fedoramagazine.org/full-virtualization-system-on-fedora-workstation-30/).

Poza tym, że część konfiguracji ułatwiającej życie w "pełnych środowiskach graficznych" nie działa – co przebolewam, bo Openbox ma inne zalety – to nie działa także automatyczne dopasowanie rozdzielczości (to znaczy, po zalogowaniu). Zamiast 1366x768 Openbox (?) uparcie konfiguruje mi ekran na 1024x768. Da się na tym pracować, ale nie lubię, jak Linux robi coś gorzej, niż mógłby.

By rozwiązać ten problem, spróbowałem użyć polecenia xrandr --fb 1366x768. Umieściłem je w pliku crontab i ustawiłem czas wykonania na @reboot. I teoretycznie to działa, rozdzielczość jest zmieniana na wybraną – ale niestety dopiero po wylogowaniu. Dokładnie jest tak:

  1. System się uruchamia, pokazuje się ekran logowania; rozdzielczość nie jest zmieniona.
  2. Loguję się; rozdzielczość nie jest zmieniona.
  3. Wylogowuję się; na ekranie logowania rozdzielczość jest już zmieniona.

Nie mam ochoty wylogowywać się i logować za każdym razem. Czy znacie jakiś sposób, by zmienić rozdzielczość automatycznie po starcie systemu, czy też po zalogowaniu?

Nie musi być do tego użyty xrandr, niemniej wolałbym, by to było jakieś narzędzie, co jest domyślnie w Fedorze.


UPDATE: Być może wystarczy uruchomić ponownie jakąś usługę po ustawieniu rozdzielczości narzędziem xrandr?

0

Widzę tu co najmniej 3 rozwiązania:

  1. Utworzyć odpowiedni plik konfiguracyjny dla xorg - zdaje się w /etc/X11/xorg.conf.d/ z odpowiednią rozdzielczością. Tak jak to kiedyś sie robiło - trzeba było zdefiniować sobie plik xorg.conf i wybrać tam driver obsługi monitora, karty graficznej, rozdzielczości ekranu, timingi karty graficznej.
  2. plik ~/.xinitrc albo katalog z plikami /etc/X11/xinit - i tam spróbować wstawić xrandr w odpowiednim miejscu
  3. poszukać w manualu Openboxa jakie pliki są uruchamiane wraz ze startem tego managera i tam wstawić xrandr
4

Wiem, że KVM robi z Ciebie macho ale zastanów się nad Virtualbox. Prostszy w obsłudze i po zainstalowaniu dodatków sam zmienia rozdzielczość i to przez resize okna a Linuks w środku ładnie to łapie. Miałem tak Debiana z IceWM i tez łapał niestandardowe rozdzielczości przez resize okna.

0

Nie znam kvm wiec sie wypowiem:

  • za mala rozdzielczosc moze sygnalizowac co najmniej dwa problemy:
    a) za malo RAM przydzielone dla grafiki
    b) interfejs nizszych lotow: vga zamiast svga, emulowany zamiast akcelerowany
0

@vtx:

Utworzyć odpowiedni plik konfiguracyjny dla xorg - zdaje się w /etc/X11/xorg.conf.d/ z odpowiednią rozdzielczością. Tak jak to kiedyś sie robiło - trzeba było zdefiniować sobie plik xorg.conf i wybrać tam driver obsługi monitora, karty graficznej, rozdzielczości ekranu, timingi karty graficznej.

  1. Czemu dla xorg? Rozumiem, że odnosisz się do serwera X. To by oznaczało, że jest on restartowany przy wylogowaniu, tak?
  2. Masz jakieś źródło?
  3. Czy to dużo roboty? Wolałbym nie wchodzić w kwestie inne niż rozdzielczość (tzn. nie musieć szukać cały dzień w internecie, jaki sterownik ma jaką nazwę/ścieżkę).

plik ~/.xinitrc albo katalog z plikami /etc/X11/xinit - i tam spróbować wstawić xrandr w odpowiednim miejscu

Pytanie nr 1 jak wyżej.

poszukać w manualu Openboxa jakie pliki są uruchamiane wraz ze startem tego managera i tam wstawić xrandr

Próbowałem, ale nadal trzeba się wylogować.


@somedev:

Wiem, że KVM robi z Ciebie macho ale zastanów się nad Virtualbox.

Dzięki za sugestię. Używałem. Przestałem, bo miałem z nim jakiś problem, ale nie pamiętam, z czym. Jedyne co pamiętam, to to, że oceniłem, że natywne rozwiązanie dla Linuksa jest lepsze pod tym względem. (Z rozdzielczością nie pamiętam, jak było – czy lepiej, czy tak samo).


@vpiotr:

za mala rozdzielczosc moze sygnalizowac co najmniej dwa problemy:
a) za malo RAM przydzielone dla grafiki
b) interfejs nizszych lotow: vga zamiast svga, emulowany zamiast akcelerowany

Ciekawe, nie myślałem o tym. Ale to by wymagało dużo kombinowania z konfiguracją maszyny wirtualnej, nieprawdaż? Jeśli masz jakieś źródło, które bezpośrednio o tym mówi, to może przeczytam – jeśli rozwiązanie @vtx nie zadziała.


PS. @somedev: mogło nawet nie być lepsze, ale takie samo, więc mogłem ocenić, że skoro działa, to nie chce mi się wracać do VirtualBoksa. Tak czy siak, nie pamiętam.

0

Ja bym tam bardzo nie szedł w kryterium natywności. Btw pa co potrafi (końcówka filmu) , a coś takiego robiłem już dekadę temu. Jeśli natywne linuksowe oprorgamowanie ma z tym problem, to mnie utwierdza, żeby nie mieć Linuksa jako główny system (pokój, nie chce kręcić burzy ;) )

0

A nie możesz po prostu na guescie wyeksportować zmiennej DISPLAY i łączyć się do X serwera, który masz na hoście?

Na gościu:

export DISPLAY=<interfejs sieciowy wystawiony z host>:0.0
someAppWithGUI.sh
0

@yarel: jeśli to możliwe, brzmi nie tak źle. Ale wolałbym najpierw spróbować z maksymalnym rozdzieleniem obu systemów.

0
Silv napisał(a):

@vtx:

Utworzyć odpowiedni plik konfiguracyjny dla xorg - zdaje się w /etc/X11/xorg.conf.d/ z odpowiednią rozdzielczością. Tak jak to kiedyś sie robiło - trzeba było zdefiniować sobie plik xorg.conf i wybrać tam driver obsługi monitora, karty graficznej, rozdzielczości ekranu, timingi karty graficznej.

  1. Czemu dla xorg? Rozumiem, że odnosisz się do serwera X. To by oznaczało, że jest on restartowany przy wylogowaniu, tak?

Tak, zakładam że jakiś display manager uruchamia Xserver-a.
Z tego co widzę to są jakieś 2 pakiety dla Archa: arandr i autorandr. Być może dla Fedorki też będą.

Poza tym:
https://askubuntu.com/questions/74808/how-do-i-force-a-resolution-of-1024x768

  1. Masz jakieś źródło?

może to:?
https://bbs.archlinux.org/viewtopic.php?id=210700

0

@vtx: Co do Twoich trzech propozycji:

Ad 2. Zgodnie z https://wiki.archlinux.org/index.php/Xinit#xinitrc wpisywałem polecenie xrandr zmieniające rozdzielczość zarówno w ~/.xinitrc, jak i w /etc/X11/xinit/xinitrc – bez rezultatu. Rozdzielczość na ekranie logowania, jak i po zalogowaniu jest taka sama, jak bez tych wpisów.

Ad 3. Zgodnie z http://openbox.org/wiki/Help:Autostart wpisywałem polecenie xrandr zmieniające rozdzielczość zarówno w ~/.config/openbox/autostart (wyeksportowałem na wszelki wypadek zmienną DISPLAY w ~/.config/openbox/environment), jak i w /etc/xdg/openbox/autostart – bez rezultatu. Rozdzielczość na ekranie logowania, jak i po zalogowaniu jest taka sama, jak bez tych wpisów.

Bedę jeszcze próbować punkt nr 1.


UPDATE: Poprawiłem nazwę pliku xinitrc w katalogu /etc/X11/xinit/ – powinna być bez kropki na początku.

1

Ale wiesz, że do wirtualizacji na desktop lepsiejszy jest VMware lub VirtualBox i tam po prostu instalujesz guest utils w maszynie wirtualnej i boom działa, od tak! magia!

1
Silv napisał(a):

@vtx: Co do Twoich trzech propozycji:

Ad 2. Zgodnie z https://wiki.archlinux.org/index.php/Xinit#xinitrc wpisywałem polecenie xrandr zmieniające rozdzielczość zarówno w ~/.xinitrc, jak i w /etc/X11/xinit/.xinitrc – bez rezultatu. Rozdzielczość na ekranie logowania, jak i po zalogowaniu jest taka sama, jak bez tych wpisów.

Robiłem to kiedyś i działało poprawnie, tyle tylko że nie pamiętam wszystkich szczegółów. A na pewno dałeś sleep-a tak jak w odpowiedzi #2 ze stronki https://bbs.archlinux.org/viewtopic.php?id=210700 ? Bo xrandr z tego co wiem może operować dopiero po zainicjowaniu X-ów a nie przed - stąd ten sleep.

Ad 3. Zgodnie z http://openbox.org/wiki/Help:Autostart wpisywałem polecenie xrandr zmieniające rozdzielczość zarówno w ~/.config/openbox/autostart (wyeksportowałem na wszelki wypadek zmienną DISPLAY w ~/.config/openbox/environment), jak i w /etc/xdg/openbox/autostart – bez rezultatu. Rozdzielczość na ekranie logowania, jak i po zalogowaniu jest taka sama, jak bez tych wpisów.

A upewniłeś się, że ten plik ~/.config/openbox/autostart na pewno sie wykonał?

Proponowałbym jeszcze dodać do wywołania kernela - tzn. do jego parametrów wejściowych dodać: "vga=ask". Nie wiem czego tam się używa w Fedorce - ale zapewne GRUB-a - jeśli tak - to właśnie tam trzeba dodać ten wpis. Co to da? Podczas startu kernela - na samym początku kernel powinien zapytać o rozdzielczość sterownika grafiki na której chcesz pracować. Dostaniesz po prostu listę rozdzielczości i wybierasz jedną z nich. Ale to przy założeniu, że kernel ma wkompilowaną tę opcję - a tego to niestety nie wiem czy Fedora to ma.

0

@Silv: a nie da sie po prostu zestawic rozdzielczosci jak trzeba, wtedy zrzucic image czy snapshota i jego uzywac?

0

@vtx:

Robiłem to kiedyś i działało poprawnie, tyle tylko że nie pamiętam wszystkich szczegółów. A na pewno dałeś sleep-a tak jak w odpowiedzi #2 ze stronki https://bbs.archlinux.org/viewtopic.php?id=210700 ? Bo xrandr z tego co wiem może operować dopiero po zainicjowaniu X-ów a nie przed - stąd ten sleep.

Nie wpisałem polecenia sleep, rzeczywiście. Ale jeśli zmiana rozdzielczości miałaby wymagać ode mnie takiej niepewnej, hm, "zabawy" z "race condition", to wolę już nie zajmować się tym; w ostateczności wolałbym nawet zmienić – na VMware czy coś innego.

A upewniłeś się, że ten plik ~/.config/openbox/autostart na pewno sie wykonał?

Nie, nie upewniłem się. W jaki sposób mogę to zrobić?

Proponowałbym jeszcze dodać do wywołania kernela - tzn. do jego parametrów wejściowych dodać: "vga=ask". (...)

Brzmi ciekawie. Ale to trzeba poznać to w Fedorze... Spróbuję, gdybym miał kiedyś bardzo dużo czasu. ;)


@WhiteLightning:

Mógłbym i tak zrobić... ale jeśli Cię rozumiem, to to by wymagało nieuruchamiania systemu-gościa od nowa, nieprawdaż?

1
Silv napisał(a):

@vtx:

Robiłem to kiedyś i działało poprawnie, tyle tylko że nie pamiętam wszystkich szczegółów. A na pewno dałeś sleep-a tak jak w odpowiedzi #2 ze stronki https://bbs.archlinux.org/viewtopic.php?id=210700 ? Bo xrandr z tego co wiem może operować dopiero po zainicjowaniu X-ów a nie przed - stąd ten sleep.

Nie wpisałem polecenia sleep, rzeczywiście. Ale jeśli zmiana rozdzielczości miałaby wymagać ode mnie takiej niepewnej, hm, "zabawy" z "race condition", to wolę już nie zajmować się tym; w ostateczności wolałbym nawet zmienić – na VMware czy coś innego.

A upewniłeś się, że ten plik ~/.config/openbox/autostart na pewno sie wykonał?

Nie, nie upewniłem się. W jaki sposób mogę to zrobić?

Chociażby tak: touch /tmp/plik w tym pliku autostartu. A potem po uruchomieniu systemu sprawdzasz czy plik istnieje.

Proponowałbym jeszcze dodać do wywołania kernela - tzn. do jego parametrów wejściowych dodać: "vga=ask". (...)

Brzmi ciekawie. Ale to trzeba poznać to w Fedorze... Spróbuję, gdybym miał kiedyś bardzo dużo czasu. ;)

Eeee nic trudnego ani czasochłonnego - od tego jest plik /boot/grub/grub.cfg. Najprościej w sumie to możnaby zrobić podczas startu systemu kiedy grub pokazuje menu startowe - nacisnąć zdaje się klawisz 'e' lub Tab i dodać to "vga=ask" i zobaczyć czy kernel wyświetli wspierane rozdzielczości. Proste i szybkie.

0
vtx napisał(a):

A upewniłeś się, że ten plik ~/.config/openbox/autostart na pewno sie wykonał?

Nie, nie upewniłem się. W jaki sposób mogę to zrobić?

Chociażby tak: touch /tmp/plik w tym pliku autostartu. A potem po uruchomieniu systemu sprawdzasz czy plik istnieje.

Sprawdziłem, plik ~/.config/openbox/autostart został wykonany. Więc rozdzielczość, wedle moich najlepszych szacunków, powinna być zmieniona – tylko, tak sądzę, nie została jeszcze, hm, użyta przez jakąś usługę (może właśnie przez X). Czyli rozdzielczość w tym pliku jest – prawdopodobnie – zmieniana za późno.


UPDATE: Ech, konfiguracja Xorg przez plik wydaje się być bardzo skomplikowana...

0
Silv napisał(a):
vtx napisał(a):

A upewniłeś się, że ten plik ~/.config/openbox/autostart na pewno sie wykonał?

Nie, nie upewniłem się. W jaki sposób mogę to zrobić?

Chociażby tak: touch /tmp/plik w tym pliku autostartu. A potem po uruchomieniu systemu sprawdzasz czy plik istnieje.

Sprawdziłem, plik ~/.config/openbox/autostart został wykonany. Więc rozdzielczość, wedle moich najlepszych szacunków, powinna być zmieniona – tylko, tak sądzę, nie została jeszcze, hm, użyta przez jakąś usługę (może właśnie przez X). Czyli rozdzielczość w tym pliku jest – prawdopodobnie – zmieniana za późno.

Raczej za wcześnie zmieniana :)

UPDATE: Ech, konfiguracja Xorg przez plik wydaje się być bardzo skomplikowana...

man xorg mówi że jest opcja -configure, która sama generuje wstępną wersję pliku konfiguracyjnego.

Na twoim miejscu spróbowałbym jeszcze z tym grub-em, o czy pisałem poprzednio.

0
vtx napisał(a):

man xorg mówi że jest opcja -configure, która sama generuje wstępną wersję pliku konfiguracyjnego.

Nie zauważyłem, ale teraz przypominam sobie, że coś mi mignęło z tym generowaniem. Póki co wstrzymuję się – jeszcze myślę nad tymi czterema (no, pięcioma) plikami, napiszę o tym później.

Na twoim miejscu spróbowałbym jeszcze z tym grub-em, o czy pisałem poprzednio.

Jeśli w ogóle, to zostawiam na sam koniec.

0
Silv napisał(a):
vtx napisał(a):

man xorg mówi że jest opcja -configure, która sama generuje wstępną wersję pliku konfiguracyjnego.

Nie zauważyłem, ale teraz przypominam sobie, że coś mi mignęło z tym generowaniem. Póki co wstrzymuję się – jeszcze myślę nad tymi czterema (no, pięcioma) plikami, napiszę o tym później.

Ok, spróbowałem to skonfigurować pod qemu+fedora31 i u mnie zadziałało. Nie chce mi się przepisywać ręcznie z wirtualki mojej konfiguracji - więc podaję linka do podobnego rozwiązania:
https://classicforum.manjaro.org/index.php?topic=3112.0
Zobacz sobie plik konfiguracyjny w tym poście podany przez usera "yubasin". Wytnij tylko linijkę:
Driver "intel" #Choose the driver used for this monitor
i ustaw rozdzielczość. Rozdzielczość powinna być 1360x768 a nie 1366x768 jak napisałeś w pierwszym poście.

Poza tym dobrze jest mieć zainstalowany pakiet arandr do zmiany rozdzielczości przy pomocy GUI.

0

Hm, miałem napisać... napiszę jeszcze o tych plikach. Dzięki! Zobaczę i Twoje.

1 użytkowników online, w tym zalogowanych: 0, gości: 1