X.org General Musings

A few weeks ago I blogged about moving my development machine to Ubuntu. So far so good, but here is what I've noticed so far as a developer:

  • apt-get source foo is the best command in the world when playing with packages
  • Fedora configured my X with a very small xorg.conf. Ubuntu's default xorg.conf is HUUUGE and bloated on this new install. Congrats to the Redhat guys that made this possible. Ubuntu guys, please start doing the same.

Also on related X news, I'm very suprised at the lack of noise about open source NVidia driver effort. It seems to me that 5 talented X hackers using renouveau could probably do a half decent OpenGL driver in a couple of weeks. Even if the driver wasn't complete, a driver that would work for 90% of typical use scenarios would be great. Or even better, if renouveau could be made point and click so that 500 semi-talented hackers could do it in a few months.

After looking at the TODO page I've decided my code-karma is probably lacking for X and DRI work, although I'm doing lots of background reading to try and do something useful in a few months, and if nothing else, I can help improve the documentation.

Moving from Fedora to Ubuntu

With a little regret, I'm writing this blog entry. These are my opinions only.

Ever since I've been a Linux user (and now developer) I've stuck with Redhat and Fedora.
Back in 2002 I was happily using Redhat 8.0, then 9, then FC1, FC2, FC3, FC4, FC5 as each were released.

I don't tend to install “distro-of-the-month” as Fedora always did what I needed.
Recently, Fedora has been annoying me (yes, I know some have solutions).

  • YUM, pirut and yum-updatesd seem to want to fight with each other all the time. This stuff should just work but the interaction seems very immature.
  • It's a pain in the arse to use proprietary drivers (some hardware you don't get to choose).
  • Sometimes I need to access NTFS stuff on my windows partition.
  • Fedora Extras is growing all the time, but it is still no match to the packagers of debian.
  • A single broken rpm/yum transaction hoses my entire system.
  • Mirror balancing never worked, and often the yum update would just fail or worse, hang.
  • I was compiling kernel.org kernels by hand to get all my hardware working.
  • Upgrading from stable version to stable version / rawhide using yum sometimes breaks horribly.

So I gave Ubuntu Edgy 2 weeks on my new laptop, vowing to return to Fedora if I found I couldn't do certain things.

Things that have been great:

  • Hardware that just works, or that works correctly after installing firmware.
  • apt-get, it's faster that yum and seems to just work, Plus no meta-data downloading just to install one quick package.
  • NTFS volumes that work out of the box.
  • No arguing over what belongs in extras and core.
  • One CD installer, that doubles as a live CD. This is amazing.
  • The concept of soft-deps, i.e. where a package can “suggest” another but not depend on it. Very sane IMO.
  • Ability to install modified DSDT easily without hacking the kernel.
  • More random oddball packages (that I need for Uni) than in extras.
  • Less licence hassle. Yup, enable the multiverse and restricted repo, and done.
  • Synaptic. It's so much more mature than pirut. And it's easy and quick to use.
  • Community response. I've got better response from Ubuntu dev's in launchpad than I did in Redhat bugzilla.
  • Sane menus. I want to see Firefox and Evolution in my menus rather than “Web browser” and “Email”
  • Boot speed. Not sure what the Ubuntu guys have done, but it's 4 seconds quicker to get me to the login window.

Things that have been less great:

  • Less patches tend to go upstream from Ubuntu than Fedora in my opinion.
  • Compiling a .deb seems very complicated to me compared to a .rpm.
  • No compiz support out of the box.
  • The horror of xorg.conf is back. Fedora seemed to detect stuff automatically which is more sane.
  • No root user. Not sure this is a good thing or a bad thing. sudo seems to do what I want.
  • The grub screen is hideous compared to the Fedora boot artwork. (bug filed)
  • The Ubuntu shutdown is slower by one second.

So, after a couple of weeks, I can't imagine going back to Fedora, which is a little bit worrying.
Don't get this wrong, I love Fedora and think Redhat as a company are great, but I think Ubuntu is more the distro for me at the moment.

Re-writing the _BIF and _BST ACPI methods…

A couple of days ago my new laptop arrived. A nice shiny new Lenovo 3000 N100. Most stuff worked out of the box (well done kernel guys), but most important to me: the battery ACPI code was really bad. So I got no rate information and a really bad approximation of the charge level. For a bloke working on gnome-power-manager, this was really bad news. Windows XP just gave me the percentage charge also, so this wasn't a Linux bug.

Last night I decompiled the DSDT and was surprised to find no errors or warnings. Hmm. So I looked closely at the source. LENOVO were just hardcoding values rather than querying the smart battery which is what they are meant to do. And when they were querying the battery, the return value was being processed incorrectly.

So I re-wrote the _BIF and _BST ACPI methods to actually interface with the hardware in a sane way. Bear in mind I only had a copy of the generic ACPI spec, but managed to figure out most of the undocumented embedded controller interface (EC0). I'll formally write up what I found when I get a chance.

So now, I have a really custom DSDT that provides me with accurate voltage, charge and rate information that works really well. If anyone from LENOVO is reading this, then please get one of your BIOS engineers to call me on my mobile or email me. I would love for this to be included in a BIOS update to fix all the other Windows XP and Linux laptops out there. I've also got a fully commented (well the battery bits anyway) DSDT for any LENOVO owners wanting to hack even more than I've done.

Also, I had to recompile a custom kernel with this patch just to enable dsdt loading into the kernel using an initrd. Ubuntu make this super-duper easy I'm told, but working with Fedora makes this a pain in the backside. Anyone with contacts to IBM/Lenovo then please send them a link to this post or get them to email me. In the words of Mattew Garrett: “0 out of 10 – See Me”

ACPI: Embedded Controller [EC0]

I spent a couple of hours last night trying to fix a broken BIOS.
It's a long shot, but do any of you have the specification for ACPI: Embedded Controller [EC0] (gpe 25)?
So far, I think I'm managed to work out (from the ACPI spec and lots of googling):

  • EC0.BMF0, 3 // always == 2
  • EC0.BTY0, 1 // always == 1
  • EC0.BST0, 8 // Battery State Bitfield
  • EC0.BRC0, 16 // Remaining Current (mAh)
  • EC0.BSN0, 16 // Serial Number ???
  • EC0.BPV0, 16 // Present Voltage
  • EC0.BDV0, 16 // Design Voltage ???
  • EC0.BDC0, 16 // Design Capacity ???
  • EC0.BFC0, 16 // Last Full Capacity
  • EC0.GAU0, 8 // Battery Gauge = WTF?

But these may be wrong, and I don't know what Battery Gauge is.
Any helpful links, pointers or other help will be rewarded with a beer at GUADEC2007. :-)