Portál AbcLinuxu, 6. května 2025 14:34
Řešení dotazu:
Parametr vga=0x315 ke určen pro VGA/VESA ovladač, tedy pro textový režim. V okamžiku, kdy se jádro pokusí předat vládu ovladači framebufferu (to je ten citovaný), tak si ovladač (psbfb) nastaví nové rozlišení (i kdyby bylo stejné). No a tady zjevně nastaví chybný režim na externím monitoru.
framebufferové ovladače, respektive ovladače s KMS, se ovládají přes parametr video, jak jste sám použil. Syntaxe je v Documentation/fb/modedb.txt. Jako první argument před dvojtečkou je název výstupu. Vy máte dva výstupy. Jste si jistý, že ten externí se jmenuje „uvesafb“. Názvy výstupů jsou vidět v jaderných hláškách systému drm a v /sys/class/drm/ a závisí na ovladači a grafické kartě.
Doporučil bych vám zjistit jaký režim má externí monitor na začátku, když je ve stavu, jak se vám libí, a stejnou hodnotu vnutit přes parametr video. Včetně obnovovací frekvence.
Mám taky zkušenost, že KMS používá přísný výklad EDID údajů z monitou, které bývají často nekorektní, a tak KMS odmítne režim, který monitor ve skutečnosti umí, jen to o sobě v EDID neříká. Pak je možné si vyrobit vlastní EDID a ten do jádra zakompilovat. Ale to jsem nikdy nezkoušel.
Nakonec mám stejně dojem, že na virtuální konzole, ať máte rozlišení monitorů jakékoliv, budete mít její velikost omezenou na nejmenší výstup, protože jádro obraz klonuje na všechny výstupy.
# ls /sys/class/drm
card0 card0-DP-1 card0-DVI-D-1 card0-LVDS-1 card0-VGA-1 controlD64 ttm version
LVDS je interni display, VGA je externi monitor
# dmesg |grep -i vga
[ 0.000000] Console: colour VGA+ 80x25
[ 0.547820] vgaarb: device added: PCI:0000:00:02.0,decodes=io+mem,owns=io+mem,locks=none
[ 0.547957] vgaarb: loaded
[ 0.548055] vgaarb: bridge control possible 0000:00:02.0
# dmesg |grep -i lvds
(zadny vystup)
# dmesg |grep -i vesa
[ 0.000000] Kernel command line: video=uvesafb:1280x1024-32,mtrr:3,ywrap snd-hda-intel.model=acer-aspire i915.modeset=1 fbcon=rotate:3
[ 1.961292] uvesafb: Getting VBE info block failed (eax=0x4f00, err=-3)
[ 1.961393] uvesafb: vbe_init() failed with -22
[ 1.961531] uvesafb: probe of uvesafb.0 failed with error -22
# dmesg |grep -i fb
[ 0.000000] Kernel command line: video=uvesafb:1280x1024-32,mtrr:3,ywrap snd-hda-intel.model=acer-aspire i915.modeset=1 fbcon=rotate:3
[ 1.961292] uvesafb: Getting VBE info block failed (eax=0x4f00, err=-3)
[ 1.961393] uvesafb: vbe_init() failed with -22
[ 1.961531] uvesafb: probe of uvesafb.0 failed with error -22
[ 2.592089] fbcon: psbfb (fb0) is primary device
[ 3.030117] fb0: psbfb frame buffer device
# dmesg |grep -i frame
[ 1.994160] ehci_hcd 0000:00:1d.7: reset hcc_params 6871 thresh 7 uframes 1024 64 bit addr
[ 3.020658] Console: switching to colour frame buffer device 75x64
[ 3.030117] fb0: psbfb frame buffer device
Já mám na jednom stroji s nouveau parametry video=VGA-1:1280x1024@85e video=TV-1:d
, což značí nastavit výstup VGA-1 a vypnout výstup TV-1. Ovladač jinak nutil výstupu VGA-1 rozlišení z TV-1, které VGA-1 neumí, takže se monitor na VGA-1 vypnul. Vtipné je, že TV-1 nemá ani vyvedený konektor.
V hláškách jádra se pak objeví:
Jul 29 19:51:35 gw kernel: [drm] forcing VGA-1 connector ON Jul 29 19:51:35 gw kernel: [drm] forcing TV-1 connector OFF
Takže si bych vám doporučil video=VGA-1:1280x1024 video=LVDS-1:d
, případně za VGA-1:1280x1024
připojit zavináčem frekvenci, kterou monitor při daném rozlišení umí.
Ještě pořád můžete vyhodit z jádra podporu framebufferu a používat klasický textový režim.
Tiskni
Sdílej:
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.