Felbontások skálázásának és igazításának kényszerítése X11-ből

 ( TCH | 2019. április 14., vasárnap - 14:00 )

Adott egy monitor, aminek natív felbontása 1920x1080. Ha a rendszer 4:3-as arányú felbontást akar ráerőltetni, akkor az ocsmány stretch-ben fog végetérni a képernyőn. A kérés, hogy van-e lehetőség xorg.conf-ból, vagy xrandr-rel beállítani, hogy ha a rendszer képernyőmódot vált pl. 640x480-ra, akkor maradjon a natív felbontáson, a kimenő 640x480-as képet skálázza fel 2x2-esre és igazítsa be a monitoron 320,60-ra? xrandr-rel megpróbáltam belőni a manual alapján, de továbbra is stretchel. Az nVidia driver beállításaiban be tudok állítani ilyen felbontást, de ott nagyon körülményes és amúgy is az lenne a lényeg, hogy ez automatikus legyen.

Hozzászólás megjelenítési lehetőségek

A választott hozzászólás megjelenítési mód a „Beállítás” gombbal rögzíthető.

up

Senki nem tudja?

Ez ha jól tudom a --set "scaling mode" "Full aspect" lenne, de még Intelen sem működik külső monitoron (az okot külön érdemes elolvasni):
https://wiki.archlinux.org/index.php/intel_graphics#Setting_scaling_mode

Egy workaround lehet az Xnest -geometry paraméterrel vagy a Xephyr (ez modernebb, de én még nem használtam).

Hát sajnos nem jött be, meg ez amúgy is nVidia. A driver settingsben belőttem, hogy 640x480 felskálázva, középre igazítva és a xorg.conf-ban ezt kaptam:

Option "metamodes" "DVI-D-0: 640x480_60 +0+0 {viewportin=640x480, viewportout=1920x1440+320+0, ForceCompositionPipeline=On, ForceFullCompositionPipeline=On}; DVI-D-0: nvidia-auto-select +0+0"

Ezt kéne valahogy ráerőltetni a rendszerre, hogy automatikus legyen 640x480-ban.

Ha csak a torzításmentesség a lényeg, akkor a monitor saját menüjének beállításainál kell megnézni, hogy mit választhatsz.
Például egy előttem lévő lg esetén aspect ratio: full wide / original / 1:1
Az első szétnyújtja teljes felületre, a második képaránytató nagyítás. Az utolsó pedig a képernyő közepére teszi akkorában, ahány pixeles.

Nem tudom, hogy tudni fogja-e a monitor, de köszi a tippet.
Ezen be lehetett lőni, csak kérdés, hogy az original az egész szorzós is, vagy csak képaránytartó? Mert én azt szeretném, ha a nagyítás csak 2x2/3x3/4x4/stb. lehetne, de pl. 1.333x1.333 vagy 1.5x1.5 nem.

Sajnos ahogy nézem, nem csak egész számokkal skálázza a képet, mert az 1920x1080 ezen a monitoron már nem skálázható egész szorzással, tehát ezt eredetiben kéne megjelenítenie, de mégis széthúzza. A 640x480-as ugyan jól jelenik meg, mert az 1440-ben a 480 pont 3x van meg, de a másik monitoron 1080 lesz.

természetesen, mivel képarányra vonatkozó beállítás, így az original nagyít, de nem torzítja el az arányokat.Az eredeti leírásodból nem volt teljesen tiszta, hogy a teljes szélességű széthúzás-e a gondod, vagy a képaránytartás.

Ha szoftveresen szeretnéd kezelni, akkor talán az nvidia driverben lévő meta MetaModes, ViewPortIn és ViewPortOut felvitele talán tudja ezt.
Viszont neked kell megadni, hogy milyen kért felbontást milyen valós felbontáson mutassa. Magam nem próbáltam még ezt. Az újabb driverekben lehet grafikus felületen is elérhető.
https://download.nvidia.com/XFree86/Linux-x86_64/304.137/README/configtwinview.html

Azt nem tudom, hogy a szoftveres megoldás homályos lesz-e vagy pixeles. Mert könnyen lehet, hogy nem a pixeleket többszörözi, hanem az is valami komolyabb algoritmussal skáláz.
Szerk, arra is lehet ráhatás ResamplingMethod értékkel:
nvidia-settings -a CurrentMetaMode="DP-2: 2880x1800 {ViewPortIn=1440x900, ViewPortOut=2880x1800, ResamplingMethod=Nearest }, HDMI-0: 1920x1080+1440+0"
https://forums.linuxmint.com/viewtopic.php?t=159064
Gondolom meg is adható a konfigban.

Itt is van nvidia specifikus rész
http://tanalin.com/en/articles/lossless-scaling/
Érdekes, hogy e szerint mintha rossz lenne a másik szálon lévő példád, mert ő az elején a fizikai felbontást írja, nem azt, hogy milyen felbontásról szeretnéd a nagyítást.

Neo, mostmár neked kell a zöld pirulát lenyelni, a nyúl üregének mélységét már tudod :D

Ez az, köszi!

Ez alapján így lehet belőni a 640x480-at 1920x1080-on:

nvidia-settings -a CurrentMetaMode="DVI-D-0: 1920x1080 { ViewPortIn=640x480, ViewPortOut=1280x960+320+60, ResamplingMethod=Nearest, ForceCompositionPipeline=On, ForceFullCompositionPipeline=On }"

És így 2560x1440-en:

nvidia-settings -a CurrentMetaMode="DVI-D-0: 2560x1440 { ViewPortIn=640x480, ViewPortOut=1920x1440+320+0, ResamplingMethod=Nearest, ForceCompositionPipeline=On, ForceFullCompositionPipeline=On }"

Grafikus felületen sajnos nem elérhető.

Még egyszer thx!