Ubuntu on an Acer Ferrari - Hoary
The graphics subsystem is one of the biggest problems with the laptop. Ubuntu correctly identifies the graphics card, and sets up the appropriate xorg.conf file. However, somewhere along the technology chain, something switches the primary display to the vga-out and the secondary display to the laptop's LCD. Because it's not being told to clone the display, it switches off the secondary display (the LCD) when starting X.org. The end result is a black screen after X.org starts. The quick and easy fix to this is to add the following to your Section "Device":
Option "CRT2Position" "clone" Option "MonitorLayout" "LVDS,CRT"
This allowed me to use the laptop with the full 1680x1050 resolution in order to debug and set up everything else. I'm not sure where the bug exists, (Module, Ubuntu Configuration, etc) but I will inform the ubuntu developers and hopefully they will track down where the bug exists for breezy.
To obtain working hardware accelaration, you need to use a more recent driver than the one available in Hoary. There are likely a number of ways to do this. I'll leave it up to you to decide. I dislike fiddling, and every time I've ever used the ATI installer, I've had to fiddle to no-end. To avoid fiddling with the xorg.conf and module compilation, I decided to upgrad my driver to the one which is in breezy. I recommend that you do not follow what I did, but rather go and find a copy of the breezy fglrx driver and install it by hand using:
sudo dpkg -i xorg-driver-fglrx.deb
What I did: Do this at your own risk
I edited the apt sources and changed every reference of 'hoary', 'breezy', then I ran apt-get update and finally, I upgraded the fglrx driver. Rememeber that I should immediately change the sources.list back to it's original form by changing 'breezy' to 'hoary' and running apt-get update. If you forget to do this or you install any sort of updates while the apt-sources are in this form, you will end up with breezy install.sudo vim /etc/apt/sources.list sudo apt-get update sudo apt-get install xorg-driver-fglrx sudo vim /etc/apt/sources.list
Once you have done this you need to make sure that you are using the appropriate driver, namely: fglrx. I used the fglrxconfig. If you do it this way, then you will have to edit /etc/X11/xorg.conf and add the following to Section "Device" which corresponds to the fglrx driver:
Option "CRT2Position" "clone" Option "MonitorLayout" "LVDS,CRT"
Then, restart your X-server and use:
lakin@zedd:~$ glxinfo | grep direct direct rendering: Yes
to test if it's working.
The wired networking was working out of the box. I haven't even bothered to find out which module it was using.
Wireless worked well using ndiswrapper as per the following sites:
http://www.detla.de/index_ferrari.html
First, I installed ndiswrapper using synaptic, then I downloaded the:
ftp://ftp.support.acer-euro.com/notebook/ferrari_4000/driver/winxp64bit/80211g.zip
and installed it using:
sudo ndiswrapper -i bcmwl5.inf sudo modprobe ndiswrapper
Then I tried using one of the 5 unprotected networks surrounding my apartment using the gnome-networking tool which is found in System -> Administration -> Networking.
DVD Playback had me worried, as I kept seeing the following in my logs:
[ 637.266077] hdc: command error: status=0x51 { DriveReady SeekComplete Error }
[ 637.266081] hdc: command error: error=0x50 { LastFailedSense=0x05 }
[ 637.266084] ide: failed opcode was: unknown
[ 637.266086] end_request: I/O error, dev hdc, sector 12126124
In the end, I'm fairly certain this was simply due to the region not being set on my DVD drive, which is easily solved by installing the regionset application through synaptic, and then running it with sudo. Remember, you can only change your region on your DVD drive a specified number of times, so be careful with this utility.
sudo apt-get install regionset sudo regionset
You should then install libdvdcss. I leave this exercise up to you. Totem still refused to play the DVD, due to some codec issues:
** Message: don't know how to handle video/mpeg, mpegversion=(int)2, systemstrea m=(boolean)false ** Message: don't know how to handle audio/x-ac3
which was solved by installing all of the gstreamer-plugins:
sudo apt-get install gstreamer0.8-pluginsI'm sure that this is overkill to solve the problem, but in my case, I figured that extra media plugins was probably a good thing. Gnome even autostarts the totem when the DVD is inserted into the drive.
Update: I haven't looked at or used these versions of the dsdt but they may be of help to someone: ftp://ftp.suse.com/pub/people/jeffm/acpi/. After installing the machine, you can look at the output of dmesg and notice the following error messages:
Aug 9 15:15:04 localhost kernel: ACPI: Subsystem revision 20050211 Aug 9 15:15:04 localhost kernel: ACPI-0352: *** Error: Looking up [Z00I] in namespace, AE_NOT_FOUND Aug 9 15:15:04 localhost kernel: search_node 000001003fadc2c0 start_node 000001003fadc2c0 return_node 0000000000000000
These are specifically due to a buggy ACPI implementation shipped with the computer. I spent a long time figuring out how to fix this and if it wasn't for these pages, I would have had NO clue:
http://acpi.sourceforge.net/download.html,
http://gaugusch.at/kernel.shtml
The essential idea behind this method is that you should make a copy of the buggy acpi implementation (dsdt.asl) from the bios, then you fix a number of typos and errors in it, and you can then recompile it. Once you have a compiled version without the errors, you should instruct your kernel to use this new version instead of the version found in the BIOS.
I have had a number of reports mentioning that this method did not work for them. I suspect that it might have to do with the kernel that they are using. I upgraded my kernel to the kernel in breezy before trying this ACPI fix. Others have reported success with compiling their own kernel. I'll try and get more information soon.
The first tool that we need is a tool which can be downloaded from here (Note this compiled without problems for me):
http://www.intel.com/technology/iapc/acpi/downloads.htm
The second tool is here:
http://people.freebsd.org/~takawata/pacpidump.tar.gz
It took a bit of fiddling to get acpidump to compile correctly: First, edit the makefile and comment out the FreeBSD Cflags and uncomment the Linux CFLAGS. Then, open up acpi.c and starting at line 75, make it look like this:
printf("DefinitionBlock (\n"
"\"acpi_dsdt.aml\", //Output filename\n"
"\"DSDT\", //Signature\n"
"0x%x, //DSDT Revision\n"
"\"%s\", //OEMID\n"
"\"%s\", //TABLE ID\n"
"0x%x //OEM Revision\n)\n",
dsdt_header.rev, oemid, oemtblid, dsdt_header.oemrev);
}
After this, type make and it should compile fine. I then copied both the acpidump and the iasl program to the directory where I would do all of this work. The following command is used to grab a copy of the dsdtl:
sudo ./acpidump > dsdt.asl
Then to compile this file you can use:
./iasl -tc dsdt.asl
If you compile it directly after getting a copy of it, you will encounter with all of these errors.
Intel ACPI Component Architecture
ASL Optimizing Compiler / AML Disassembler version 20050624 [Aug 9 2005]
Copyright (C) 2000 - 2005 Intel Corporation
Supports ACPI Specification Revision 3.0
dsdt.asl 124: Method(_WAK, 1) {
Warning 2026 - ^ Reserved method must return a value (_WAK)
dsdt.asl 201: If(\_OSI) {
Error 1028 - Too few arguments ^ (\_OSI requires 1)
dsdt.asl 202: "Windows 2001.1"
Error 1037 - ^ syntax error, unexpected PARSEOP_STRING_LITERAL
dsdt.asl 207: If(\_OSI) {
Error 1028 - Too few arguments ^ (\_OSI requires 1)
dsdt.asl 208: "Windows 2001 SP1"
Error 1037 - ^ syntax error, unexpected PARSEOP_STRING_LITERAL
dsdt.asl 213: If(\_OSI) {
Error 1028 - Too few arguments ^ (\_OSI requires 1)
dsdt.asl 214: "Windows 2001"
Error 1037 - ^ syntax error, unexpected PARSEOP_STRING_LITERAL
dsdt.asl 2622: If(LLess(\_PR_.CPU0._PPC, Local1)) {
Error 1022 - Object does not exist ^ (\_PR_.CPU0._PPC)
dsdt.asl 2623: Store(Local1, \_PR_.CPU0._PPC)
Error 1022 - Object does not exist ^ (\_PR_.CPU0._PPC)
dsdt.asl 2635: If(LNot(LEqual(\_PR_.CPU0._PPC, 0x0))) {
Error 1022 - Object does not exist ^ (\_PR_.CPU0._PPC)
dsdt.asl 2636: Store(0x0, \_PR_.CPU0._PPC)
Error 1022 - Object does not exist ^ (\_PR_.CPU0._PPC)
dsdt.asl 2908: Method(DRUL, 1) {
Warning 2019 - ^ Not all control paths return a value (DRUL)
dsdt.asl 3596: If(LNot(LEqual(\_PR_.CPU0._PPC, 0x0))) {
Error 1022 - Object does not exist ^ (\_PR_.CPU0._PPC)
dsdt.asl 3597: Store(\_PR_.CPU0._PPC, Local1)
Error 1022 - Object does not exist ^ (\_PR_.CPU0._PPC)
dsdt.asl 3598: Store(0x0, \_PR_.CPU0._PPC)
Error 1022 - Object does not exist ^ (\_PR_.CPU0._PPC)
dsdt.asl 3601: Store(Local1, \_PR_.CPU0._PPC)
Error 1022 - Object does not exist ^ (\_PR_.CPU0._PPC)
dsdt.asl 3658: Z00I,
Error 1022 - ^ Object does not exist (Z00I)
dsdt.asl 3659: Z00I,
Error 1022 - ^ Object does not exist (Z00I)
ASL Input: dsdt.asl - 3914 lines, 149638 bytes, 2558 keywords
Compilation complete. 16 Errors, 2 Warnings, 0 Remarks, 986 Optimizations
The first and easiest to fix, is the Z00I error (the last two). Simply open up dsdt.asl and change all occurances(without the quotes) of 'Z00I' to 'Z001'. For the following errors, I will try and be explicit about which line numbers are affected. Because we are inserting new lines and changing lines, the line numbers will only be accurate if you do these changes in the same order.
The first change occurs on line 175. In this case you must insert a new line BEFORE this line, with the following value:
Return(Package(0x02){0x00,0x00})
The next change is the most complicated of them all, and I'm not even positive it is the right change. It does allow us to compile this file without errors, and because it deals with windows related stuff, I'm fairly certain it is harmless. Find all instances of 'If(\_OSI) {'. These should each be followed by another line which has the name of a particular version of Windows in quotes. Reduce these two lines so that they look like this: (The first one is given as an example)
If(\_OSI("Windows 2001.1") ) {
There are three occurances of these, do it for all of them.
Then insert these lines BEFORE line 2910:
Else
{
Return(0x0)
}
The final change is to add the following line AFTER line 83:
External (\_PR.CPU0._PPC)
Finally, when you compile it after making these changes, you should see a success message and a file called DSDT.aml should appear in that directory.
lakin@zedd:~$ ./iasl -tc dsdt.asl Intel ACPI Component Architecture ASL Optimizing Compiler / AML Disassembler version 20050624 [Aug 9 2005] Copyright (C) 2000 - 2005 Intel Corporation Supports ACPI Specification Revision 3.0 ASL Input: dsdt.asl - 3916 lines, 149726 bytes, 2540 keywords AML Output: acpi_dsdt.aml - 22997 bytes 662 named objects 1878 executable opcodes Compilation complete. 0 Errors, 0 Warnings, 0 Remarks, 985 Optimizations
Congratulations, you are half way there. We've now 'fixed' the ACPI stuff. Now we need to let the computer know that we should be using this as our dsdt implementation. To do this you must add this file to the end of the initial ramdisk with some special magic.
lakin@zedd:~$ cp /boot/initrd.img-2.6.12-6-amd64-k8 . lakin@zedd:~$ echo -n "INITRDDSDT123DSDT123" >> initrd.img-2.6.12-6-amd64-k8 # magic signature lakin@zedd:~$ cat DSDT.aml >> initrd.img-2.6.12-6-amd64-k8 lakin@zedd:~$ sudo cp initrd.img-2.6.12-6-amd64-k8 /boot/initrd.img-2.6.12-6-amd64-k8.fixed_acpi Password: lakin@zedd:~$ sudo rm /boot/initrd.img lakin@zedd:~$ sudo ln -s /boot/initrd.img-2.6.12-6-amd64-k8.fixed_acpi /boot/initrd.img
Reboot, and the battery status should be able to be read correctly now. Sheesh what an effort.
Jordan Steinberg has informed me of the following, but I haven't had a chance to check it out:
To get your method to work, I had to... 1) apply the DSDT in initrd support and initramfs problems patches (both at http://gaugusch.at/kernel.shtml) to the kernel 2) compile to source an option "Allow external DSDT (new)" or something of the like in the ACPI power mngmt settings in make menuconfig 3) recompile the kernel (I did it with 2.6.13) 4) then use your method to append the fixed DSDT to the initrd It didn't work (and I tried several times) before taking these additional steps. But it works beautifully now. I should also note that I did a BIOS flash before all of this to A21 instead of the A19 it shipped with. This may be why I had to take these extra steps.
Ubuntu mostly configured this out of the box, but it didn't install some of the necessary packages:
sudo apt-get install bluez-pin bluez-utils
After installing these packages turn on the hidd server by editing /etc/default/bluez-utils and changing the following line:
HIDD_ENABLED=0
to:
HIDD_ENABLED=1
Make sure the button for the bluetooth is on in the front (it should be glowing blue). Then restart the bluez-utils package:
sudo /etc/init.d/bluez-utils restart
After this I think it should be working, move your mouse around, click some buttons and/or use the button on the bottom of the mouse to initiate the connection. I should mention that I did not get it to work very well until after I used the gnome-bluetooth-manager package to discover the address of my device and then I ran:
sudo hidd --connect XX:XX:XX:XX:XX:XX
Since then blue tooth has been working upon boot with no extra work. I simply make sure that bluetooth is "on" and move the mouse.
This is not completely working. To start, you should edit the /etc/default/acpi-support and turn on sleep support. Then I ran /etc/acpi/sleep.sh
This succesfully puts the laptop to sleep. However, I cannot yet succesfully get it back from sleep mode. The screen does not come back on.
In this section I am going to provide some of my working configuration files. I do this so that users of other distributions have a reference point. I do not recommend that you simply download and use these configuration files. Especially for another distribution. These files are not perfectly configured, and there are many issues I should still work out.
If you do use these files as a reference and you find any problems that I can fix, I would appreciate knowing about them.
A copy of my /boot/grub/menu.lst
A copy of my lsmod output. Because I am using stock ubuntu kernels this output is fairly long, and may contain many unused modules.
