This is a nice laptop, very reasonably priced with plenty of
features and not too heavy. There are a number of "gotchas" you will
probably encounter when installing a vanilla FC4, however. So I am
posting a record of my experiences here so you don't have to puzzle
over these problems.
First, the good news: The DVD rewriter works out of the box (using the drag-and drop interface provided by Nautilus). So does the onboard wired Ethernet card, using the tg3 driver.
When I first booted it, the processor was slow, and the fan was on all the time. ACPI seemed to be throttling the CPU. /proc/acpi/thermal_zone/*/trip_points showed all the trip points at 16C.
According to a thread on fedoraforum, older kernels need the option
no_timer_check=0 or disable_timer_pin_1. The latest kernels (e.g.
2.6.16) do not need this fix.
ACPI still doesn't change fan speed. We may overheat if we are not careful.
I configured cpuspeed to throttle the processor when temperature exceeds 75 degrees. I did this by uncommenting a line in /etc/cpuspeed.conf:
OPTS="$OPTS -t /proc/acpi/thermal_zone/TZ1/temperature 75"
[It is possible to modify the speed of the processor by writing the desired speed (in kHz) to the file /sys/devices/system/cpu/cpu0/cpufreq/scaling_setspeed. Using this facility the cpuspeed daemon adjusts the speed dynamically based on temperature and CPU idle times.]
Unfortunately this seems to interact badly with ACPI. I attempted to monitor the temperatures continuously by the command
watch "cat /proc/acpi/thermal_zone/*/temperature"
When I started the cpuspeed service (service cpuspeed start), the reported temperatures stopped changing, even when running glxgears. When the cpuspeed service was stopped, the true temperature was reported.
So, I turned off cpuspeed.
After much googling I discovered several patches on the 'Net. These
will improve things slightly.
First, it is necessary to install a patched DSDT (Differentiated System Description Table) from here:
http://acpi.sourceforge.net/dsdt/view.php?manufacturer=HP&name=nx6125
The original version would simply never change the fan speed because of some conditional involving the _OS variable.
The simplest way to replace the DSDT is to override it at boot time using a table placed in your initrd (I assume for now you have an initrd - I believe it is also possible to compile it into the kernel itself but this is less flexible). The kernel patch for the DSDT override is found here:
http://gaugusch.at/kernel.shtml
and the compiler for the DSDT table is part of the ACPI-CA package found here:
http://developer.intel.com/technology/iapc/acpi/license2.htm
Basically, you need to patch your kernel with the DSDT override patch (you know how to patch a kernel, don't you?). Then download the customized DSDT which matches your BIOS version (I am presently using F.0D). Using the compiler (iasl) you convert this table from ACPI source language into ACPI machine language. The resulting table is appended to the initrd after a magic string. The kernel recognizes the magic string at boot time and loads the following table in place of the one provided by the HP BIOS. Thus, assuming your compiled DSDT is in the file DSDT.aml and your initrd is /boot/initrd-2.6.15.img, you would do this:
cp -p /boot/initrd-2.6.15.img /boot/initrd-2.6.15.img.BAK (HIGHLY RECOMMENDED: back up your initrd in case you damage it: If you damage it fatally and can't boot you can modify your GRUB entry to boot with the backup version)
echo -n INITRDDSDT123DSDT123 >> /boot/initrd-2.6.15.img
cat DSDT.aml >> /boot/initrd-2.6.15.img
That's it: now you should be able to boot with the new DSDT and the
fans should come on at the thermal trip points.
Be careful with the custom DSDT patch, especially if you upgrade the
BIOS (see here).
It still doesn't work. There seems to be a problem with either the HP BIOS or the Linux ACPI subsystem or the interaction between them. This is all discussed further on bugzilla.kernel.org, http://bugzilla.kernel.org/show_bug.cgi?id=5534. For the time being the only workaround is to run "cat /proc/acpi/thermal_zone/*/temperature" periodically (e.g. from the crontab every minute).
The synaptics touchpad didn't work.
I tried synclient -l. It didn't work initially, I had to set Option
"SHMConfig" "yes" in xorg.conf section for Synaptics input device.
I couldn't see anything wrong in the synclient output. However, taps
were
mapped to button 2 instead of button 1, and dragging with the left
button down often did not work (the state field of the event was zero,
not 0x100).
It seems that the synaptics driver which comes with Fedora does not work. I follow these instructions (reproduced from a post on FedoraForum) to install the latest version:
First, get the package synaptics-0.14.3.tar from http://web.telia.com/~u89404340/touchpad/ (thank you!). bunzip2 it, untar and read and follow the install. in my case, the file /usr/X11R6/lib/modules/input/synaptics_drv.o already existed, but it didn't work until after replacing it with the freshly compiled driver.
Now, the /etc/X11/xorg.conf edits are:
Section "ServerLayout"
...
InputDevice "Mouse0" "CorePointer"
InputDevice "Keyboard0" "CoreKeyboard"
InputDevice "Synaptics Mouse" "AlwaysCore"
EndSection
Section "Module"
...
Load "synaptics"
Load "dri"
EndSection
Section "InputDevice"
Identifier "Synaptics Mouse"
Driver "synaptics"
Option "Device" "/dev/psaux"
Option "Protocol" "auto-dev"
Option "LeftEdge" "1700"
Option "RightEdge" "5300"
Option "TopEdge" "1700"
Option "BottomEdge" "4200"
Option "FingerLow" "25"
Option "FingerHigh" "30"
Option "MaxTapTime" "180"
Option "MaxTapMove" "220"
Option "VertScrollDelta" "100"
Option "MinSpeed" "0.09"
Option "MaxSpeed" "0.18"
Option "AccelFactor" "0.0015"
Option "SHMConfig" "on"
EndSection
It now works perfectly with complete fuctionality.
The sound card was not recognized. system-config-soundcard showed this output:
The following audio device was detected.
Vendor: ATI
Model Technologies Inc: Unknown device 4370
Module: snd-atiixp
Hitting "Play test sound", nothing was audible. Also, when run from a terminal (xterm, gnome-terminal or whatever), the following messages were seen:
[root@ceiriog1 prw]# system-config-soundcard
amixer: Unable to find simple control 'PCM-2',0
amixer: Unable to find simple control 'DRC Range',0
Playing WAVE '/usr/share/system-config-soundcard/sound-sample.wav' : Signed 16 bit Little Endian, Rate 44100 Hz, Stereo
Also, the light on the "mute" button above the keyboard is on all the time. It does not toggle when pressed.
This problem persisted after upgrading to kernel-2.6.14-1.1656_FC4, alsa-lib-1.0.10-3.FC4 and alsa-utils-1.0.10-1.FC4.
In order to hear a sound, you need to apply the patch from the Linux Kernel mailing list:
http://www.ussg.iu.edu/hypermail/linux/kernel/0511.3/0014.html
(or use a later kernel).
Now the hardware buttons for mute and volume control still do not work but the volume can be controlled by software (alsamixer).
How to get modem to work? First I tried the SoftLink modem driver. I couldn't compile slmodemd-2.9.9e_pre1_alsa because we lack /usr/include/gnu/stubs-32.h. slmodemd comes with a binary driver component (dsplibs.o) which is 32-bit. Therefore the package must be compiled in 32-bit mode (-m32), and requires 32-bit libraries and headers.
The modem still didn't work. Starting up slmodemd I got this error:
Starting SmartLink modem daemon:ALSA lib pcm.c:1969:(snd_pcm_open_conf) Invalid type for PCM modem:1 definition (id: modem, value: cards.pcm.modem)
[FAILED]
This problem persists after upgrading to kernel-2.6.14-1.1656_FC4, alsa-lib-1.0.10-3.FC4 and alsa-utils-1.0.10-1.FC4.
I downloaded scanModem.gz from the linmodems site (linmodems.technion.ac.il) and ran it. The PCI vendor is is 1002 (ATI), and the device id is 4378. SoftModem.txt indicates this may be supported by Conexant, see http://www.linuxant.com. Windows also reports the modem as having "Manufacturer: CXT". Slmodem-ALSA.txt suggests there may be support in the ALSA package using the snd-atiixp-modem driver.
I tried running
slmodemd --country=UK --alsa hw:0
This ran, but givegave the error message
error: mixer setup: Off-hook switch not found for card hw:0
Running wvdial gives NO CARRIER, and slmodemd spits out the errors
error: cannot set channels for playback: Invalid argument
So, I tried the driver from www.linuxant.com. I used the generic RPM version (hsfmodem-7.18.00.07x86_64full-1.x86_64.rpm) since there seems to be no precompiled version for a FC4 x86_64 kernel. hfsconfig successfully compiled the modules but failed to insert them.
modprobe /dev/ttySHSF gave:
WARNING: Error inserting hsfserial (/lib/modules/2.6.14-prepprw1/extra/hsfserial.ko): Invalid argument
FATAL: Error inserting hsfpcibasic2 (/lib/modules/2.6.14-prepprw1/extra/hsfpcibasic2.ko): Unknown symbol in module, or unknown parameter (see dmesg)
dmesg then showed:
hsfserial: falsely claims to have parameter calloutmajor
This problem is fixed in hsfmodem-7.43.00.01x86_64full-1.x86_64.rpm. However, this version has problems if used in conjunction with the Software Suspend 2 kernel patch (conflicting typedefs). This can be fixed by renaming the typedefs using the following patch:
hsfmodem.patch
Wireless driver (Broadcom) didn't work. The wireless card appears to be a Broadcom AirForce One (54g), model number BCM4318.I installed ndiswrapper 1.8 and obtained the Broadcom Windows drivers from my HP driver disk. I initialized the drivers using
ndiswrapper -i /path/bcmwl5.inf
and loaded the ndiswrapper module. Unfortunately, /var/log/messages showed
Jan 29 21:59:25 ceiriog1 kernel: ndiswrapper version 1.8 loaded (preempt=no,smp=no)
Jan 29 21:59:25 ceiriog1 loadndisdriver: loadndisdriver: load_driver(361): couldn't load driver bcmwl5
Jan 29 21:59:25 ceiriog1 kernel: ndiswrapper (check_nt_hdr:149): Windows driver is not 64-bit; bad magic: 010B
Jan 29 21:59:25 ceiriog1 kernel: ndiswrapper (load_sys_files:218): couldn't prepare driver 'bcmwl5'
Jan 29 21:59:25 ceiriog1 kernel: ndiswrapper (load_wrap_driver:112): loadndiswrapper failed (65280); check system log for messages from 'loadndisdriver'
since the Windows version which came with my nx6125 is only 32-bit and Broadcom don't supply drivers for 64-bit Windows.
Some research showed that, unfortunately, 32-bit drivers cannot be loaded on 64-bit kernels. This limitation applies both to ndiswrapper and to the commercial DriverLoader product from www.linuxant.com. Linuxant have a 64-bit Broadcom driver on their site, but it does not support the particular model we need (4318). After some googling, however, I found the necessary driver on the Acer site:
ftp://ftp.support.acer-euro.com/notebook/aspire_3020_5020/driver/winxp64bit
Full marks to Acer, no marks to HP or Broadcom.
The following procedure worked for me:
First register the Windows driver:
/usr/sbin/ndiswrapper -i /path/to/bcmwl5.inf
Then load the ndiswrapper module:
/sbin/modprobe ndiswrapper
If this succeeds, the command
/usr/sbin/ndiswrapper -l
should print (among others) the line:
bcmwl5 driver present, hardware present
After loading ndiswrapper, we can scan the available wireless access points with the command
iwlist wlan0 scan
which works more or less OK for me, except for the warning
Warning: Driver for device wlan0 has been compiled with version 19
of Wireless Extension, while this program supports up to version 17.
Some things may be broken...
Next add an alias to modprobe.conf so that subsequent references to the interface "wlan0" will automatically load ndiswrapper. This is done by the command
ndiswrapper -m
Reboot or modprobe ndiswrapper. Then run
/usr/bin/system-config-network
and select "New", "Wireless connection". "ndiswrapper (wlan0)" should show up in the list of available devices. Here you can specify mode and SSID (i.e. ESSID), choose to obtain an IP address using DHCP and so on. You can also choose to let all (non-root) users activate and deactivate the device.
At this point I ran
/sbin/service network stop
/sbin/service network start
This gave an error message:
Bringing up interface wlan0: Error : unrecognised wireless request "Mb/s"
However, /sbin/ifconfig showed the wlan0 interface was up and running anyway, and I could access the management interface of my wireless router (192.168.1.1).
This is a general 64-bit problem: There is no official 64-bit Java plugin for firefox or mozilla! I downloaded both jre-1_5_0_06-linux-amd64.rpm and jre-1_5_0_06-linux-i586.rpm (from java.sun.com). The latter contains the "plugin" subdirectory with the libjavaplugin_oji.so files, but the former does not. Since I can't load a 32-bit plugin in a 64-bit application, I'm stumped.
http://forum.java.sun.com/thread.jspa?threadID=568127&tstart=75
suggests that the answer is to get the unofficial version from
blackdown.org. I tried this. It is necessary to run the self-extracting
binary and then create a soft-link to libjavaplugin_oji.so in
/usr/lib64/firefox-1.0.7/plugins. Some applets work, but others crash
firefox immediately. In the end I had to resort to installing the
32-bit version of the browser.
Kernel Compilation: make xconfig doesn't work (at least for kernel-2.6.14-1.1653_1.rhfc4.cubbi_swsusp2.src.rpm).
It seems that scripts/kconfig/Makefile expects to find the QT libraries in /usr/lib64/qt-3.3/lib/../lib64; they are not here, they are just in /usr/lib64/qt-3.3/lib. For the time being we need to remove the line which modifies LIBPATH by appending the output of $(HOSTCXX) -print-multi-os-directory.
OK, having got the wireless card working with my wireless router, I tried to enable WEP encryption. I set the router to use the "Open" mode. However, the Fedora Network Configuration tool (system-config-network) does not seem to have a button to set the mode on the client. Wireless Settings contains a field for the "Key", however, it is not even clear what type of encryption this refers to (it must be WEP because I eventually made it work). Setting the appropriate key here alone does not work. iwconfig wlan0 (as root) shows that the Security mode is "restricted". However when I executed the command
iwconfig wlan0 key open
and then tried again, all was OK!
Is there any way to set this up in a GUI so that it happens automatically?
Anyway, it is arguably better to run the access point in the "Restricted" or "Shared key" mode. In that case the default network setting on the client is OK.
CONFIG_DRIVER_NDISWRAPPER=yNow build the package with make, and copy wpa_cli and wpa_supplicant to /usr/local/bin. You should be able to test the daemon by running it in the foreground like this:
wpa_supplicant -i wlan0 -c examples/wpa-psk-tkip.conf -D ndiswrapperIf this works, you can append the following lines to /etc/sysconfig/network-scripts/ifup-wireless, so wpa_supplicant can be started every time the interface is brought up:
if [ "$WPA" = "y" -a -x /usr/local/bin/wpa_supplicant ]; thenThen you enable WPA by editing /etc/sysconfig/network-scripts/ifcfg-wlan0 and inserting the line
/usr/local/bin/wpa_supplicant -D ndiswrapper -Bw \
-c/etc/wpa_supplicant.conf -i$DEVICE -P /var/run/wpa_supplicant.pid
fi
WPA=y
With the cpuspeed service disabled, the CPU speed keeps dropping
back to 800 MHz. You can verify this by putting the Gnome CPU speed
applet on the panel and trying to change it. Under certain loads (NOT
always), the speed keeps dropping back. There is a complex interaction
between ACPI and cpufreq subsystems, which I describe elsewhere (FIXME).
rpmbuild -ba /usr/src/redhat/SPECS/ati-fglrx.spec --without userland --target x86_64 --define "ksrc /lib/modules/2.6.14-1.1656_FC4/build"You need to give the correct path to your kernel source tree as the value of "ksrc".
First I went over to http://freshrpms.net
and grabbed the RPMS for mplayer and mplayer-fonts. More stuff is
needed, however:
error: Failed dependencies:These dependencies are resolved by:
libXvMCW.so.1()(64bit) is needed by mplayer-1.0-0.20.pre7.2.fc4.x86_64
libaa.so.1()(64bit) is needed by mplayer-1.0-0.20.pre7.2.fc4.x86_64
libdvdread.so.3()(64bit) is needed by mplayer-1.0-0.20.pre7.2.fc4.x86_64
libfribidi.so.0()(64bit) is needed by mplayer-1.0-0.20.pre7.2.fc4.x86_64
liblirc_client.so.0()(64bit) is needed by mplayer-1.0-0.20.pre7.2.fc4.x86_64
liblzo.so.1()(64bit) is needed by mplayer-1.0-0.20.pre7.2.fc4.x86_64
libmad.so.0()(64bit) is needed by mplayer-1.0-0.20.pre7.2.fc4.x86_64
libmp3lame.so.0()(64bit) is needed by mplayer-1.0-0.20.pre7.2.fc4.x86_64
libxvidcore.so.4()(64bit) is needed by mplayer-1.0-0.20.pre7.2.fc4.x86_64
yum install aalibIt is now possible to play DVDs by, for example,
yum install fribidi
yum install lirc
yum install lzo
http://ftp.freshrpms.net/pub/freshrpms/fedora/linux/4/libdvdread/libdvdread-0.9.4-8cvs.2.fc4.x86_64.rpm
http://ftp.freshrpms.net/pub/freshrpms/fedora/linux/4/libdvdcss/libdvdcss-1.2.9-1.2.fc4.x86_64.rpm
http://ftp.freshrpms.net/pub/freshrpms/fedora/linux/4/libmad/libmad-0.15.1b-3.2.fc4.x86_64.rpm
http://ftp.freshrpms.net/pub/freshrpms/fedora/linux/4/lame/lame-3.96.1-2.2.fc4.x86_64.rpm
http://ftp.freshrpms.net/pub/freshrpms/fedora/linux/4/xvidcore/xvidcore-1.0.3-1.2.fc4.x86_64.rpm
http://ftp.freshrpms.net/pub/freshrpms/fedora/linux/4/libXvMCW/libXvMCW-0.9.3-1.2.fc4.x86_64.rpm
This command selects English as the audio language and Hungarian as the subtitle language.mplayer dvd://1 -alang en -slang hu -dvd-device /dev/hdc
yum install vlcvlc (VideoLan Client) has a very nice, fast player which integrates well into the Gnome desktop.
yum install libdvdcss
my_app --argsyou run
aoss my_app --argsSince RealPlayer is a 32-bit application, you need a 32-bit alsa-oss library. So the steps to build it are these:
CFLAGS=-m32 CXXFLAGS=-m32 ./configureTo ensure that the aoss wrapper is run every time, you can edit the shell script /usr/local/RealPlayer/realplay to replace "$REALPLAYBIN" by "aoss $REALPLAYBIN".
make
make install