用户名: 密码: 忘记密码? 注册

High resolution Plymouth & ATI/NVIDIA cards

作者:  时间: 2010-05-13

[Rant]
Deja vu. When Ubuntu first introduced PulseAudio, it was one hell of a plight for the end-user. And now it is Plymouth turn to make life an uphill struggle for user with recent ATI or NVIDIA card and proprietary drivers (as well as people having examination like me >.<). Here is an interesting article by Scott James Remnant on why your expensive card doesn’t play nice with Plymouth in Lucid. I also grow tired and wary of all the copy-n-paste instructions lying on the Internet which are out-dated and untested yet considered as panacea. My most hated one is ‘set gfxpayload=keep’ originated from Arch forum and now spreading like fire. It makes your the Virtual Terminal (VT) useless, ‘keep’ is not the working option in Ubuntu, last and not least, in Lucid, there is a more graceful way to do it. And I hope my guide below will not suffer the same fate as them. It was quite comprehensive after days of manual grinding and testing during exam period.


[Problems/Symptoms/Why-Are-You-Here]
Plymouth splash screen…
  • is in low res mode.
  • has corrupted graphic
  • is decent but can’t switch to virtual terminal or VT is horribly in low res mode
  • is decent but the splash screen only appears for a brief 1-2 second ( you are missing the dots moving :P ), before that you only see a black/blank screen

[Environment]
Use Synaptic or ‘apt-cache policy ‘ or common-sense to find out.
  • GRUB >= 1.98-1ubuntu5
  • Plymouth >= 0.8.2-2
  • ATI cards with FGLRX >= 8.723.1-0ubuntu3
  • NVIDIA cards with nvidia-glx-1*
  • A clean without other tweaks to plymouth & grub, please revert them before proceeding. Really, it will not work if you insisted on apply other tweaks. !!! IMPORTANT !!!
  • Common-sense and google searching skill
  • A bit of risk taking spirit and confidence

[Caveats and Limitations]
I will use the uvesafb to fix all the problems mentioned above but I have to warn you about certain limitations first. They don’t affected me much though (widescreen works on mine). I think problem will come when you want to use solar theme or any complex theme as uvesafb doesn’t have acceleration -> slow. Extract from documentation for uvesafb

uvesafb is a _generic_ driver which supports a wide variety of video cards, but which is ultimately limited by the Video BIOS interface. The most important limitations are:
- Lack of any type of acceleration.
- A strict and limited set of supported video modes. Often the native or most optimal resolution/refresh rate for your setup will not work with uvesafb, simply because the Video BIOS doesn’t support the video mode you want to use. This can be especially painful with widescreen panels, where native video modes don’t have the 4:3 aspect ratio, which is what most BIOS-es are limited to.
- Adjusting the refresh rate is only possible with a VBE 3.0 compliant Video BIOS. Note that many nVidia Video BIOS-es claim to be VBE 3.0 compliant, while they simply ignore any refresh rate settings.

Also, uvesafb replaces vesafb in Ubuntu, in case you are wondering.


[Fix/Workaround]
* uvesafb required v86d package to be installed. Hwinfo package is required for the next step as well.
sudo apt-get install v86d hwinfo

 

 

* Find out the supported resolution by using hwinfo.
sudo hwinfo --framebuffer

Sample output :

02: None 00.0: 11001 VESA Framebuffer
[Created at bios.464]
...
Hardware Class: framebuffer
Model: "(C) 1988-2005, ATI Technologies Inc. M92"
Vendor: "(C) 1988-2005, ATI Technologies Inc. "
Device: "M92"
SubVendor: "ATI ATOMBIOS"
...
Mode 0x0321: 640x480 (+2560), 24 bits
Mode 0x0322: 800x600 (+3200), 24 bits
Mode 0x0323: 1024x768 (+4096), 24 bits
Mode 0x03ee: 1366x768 (+1408), 8 bits
Mode 0x03ef: 1366x768 (+2752), 16 bits
Mode 0x03f0: 1366x768 (+5504), 24 bits
Config Status: cfg=new, avail=yes, need=no, active=unknown

 

 

* Edit /etc/default/grub to make sure we boot with uvesafb framebuffer. For the mode_option parameter change to your native screen resolution you see from running the above comment (if not just set to 1024×768-24 which is safest. Oh, Netbook user – please exercise some common-sense here) Non relevant lines are omitted for clarity.

...
GRUB_CMDLINE_LINUX_DEFAULT="quiet splash nomodeset video=uvesafb:mode_option=1366x768-24,mtrr=3,scroll=ywrap"
...
GRUB_GFXMODE=1366x768

 

 

* Edit /etc/initramfs-tools/modules to include uvesafb by adding the following line.

uvesafb mode_option=1366x768-24 mtrr=3 scroll=ywrap

 

 

* Force the use of framebuffer:
echo FRAMEBUFFER=y | sudo tee /etc/initramfs-tools/conf.d/splash

 

 

* Update and we are done :)

sudo update-grub2
sudo update-initramfs -u

 

* Now reboot and enjoy the high resolution sensation :) (my first reboot hangs, but 2nd time onward it works flawlessly). If it works correctly, you should be able to have moving dots with the splash screen; lesser time of blank screen and much more time with splash screen.

* And contrary to popular belief, my laptop resume and suspend works with uvesafb! :)

* Thing you probably will see in dmesg if succeed:

[ 0.000000] Kernel command line: BOOT_IMAGE=/boot/vmlinuz-2.6.32-21-generic-pae root=UUID=44c7c661-1f5e-49e6-a14e-7a35f1ec3f9f ro quiet splash nomodeset video=uvesafb:mode_option=1366x768-24,mtrr=3,scroll=ywrap
[ 6.684235] uvesafb: (C) 1988-2005, ATI Technologies Inc. , M92, 01.00, OEM: ATI ATOMBIOS, VBE v3.0
[ 6.783693] uvesafb: protected mode interface info at c000:a2d4
[ 6.783695] uvesafb: pmi: set display start = c00ca376, set palette = c00ca434
[ 6.783727] uvesafb: VBIOS/hardware supports DDC2 transfers
[ 6.845060] uvesafb: monitor limits: vf = 61 Hz, hf = 48 kHz, clk = 69 MHz
[ 6.845110] uvesafb: scrolling: ywrap using protected mode interface, yres_virtual=1536
[ 6.847159] uvesafb: framebuffer at 0xc0000000, mapped to 0xf8380000, using 8256k, total 16384k
[ 6.854259] uvesafb: mode switch failed (eax=0x34f, err=0). Trying again with default timings.


[Other Alternatives]
* Rog131′s ‘Making a low resolution low color plymouth theme’ is an ingenious workaround. Here

* No splash screen but high resolution virutal terminal using EFI framebuffer. Edit /etc/default/grub, remove ‘splash’ option and replace the two entries below with your native resolution. Seriously, this is way better than setting the payload to keep and in 00_header. GRUB_GFXPAYLOAD_LINUX is only available from grub 1.98 in lucid.

...
GRUB_CMDLINE_LINUX_DEFAULT="quiet"
...
GRUB_GFXMODE=1366x768
GRUB_GFXPAYLOAD_LINUX=1366x768
...


[Last Words]
- Comments are welcome and appreciated.
- Testers are welcome.
- I will try to respond to you ASAP but spare me some thoughts cos the poor guy here is having his final exams at his university life