Linux on HP ProBook-4320s

Probook-4320s

Hardware Specs

  Processor        Intel Core i3 370M 2.40GHz (3MB L2 cache)
  Video            Intel GMA HD - 5700MHD with external VGA and HDMI
  Memory           2048MB DDR3 RAM 1333MHz
  HDD              Hitachi Travelstar 7K500 250GB (SATA, 7200rpm)
  Optical          HP DVDRAM GT30L (DVDRW, DL 24x)
  Sound            Intel HD Audio (Sigmatel STAC92xx) with int. michrophone
  Display          13.3 inch LED TFT 1366x768 max, AntiGlare display
  Networking       RTL8111/8168B Gigabit ethernet and Ralink RT3090 wireless
  Bluetooth        Ralink (148f:1000)
  Touchpad         Synaptics PS/2 Clickpad
  USB              3 x 2.0 USB ports
  PC Express       1 x PC-Express port /34
  CardReader       Realtek 5-in-1 (SD/MMC/MS/MS PRO/xD)
  WebCam           Chicony 2MP, UVC webcam (04f2:b1ac)

Recent Changes

  * May 16 native multitouch support in synaptics 1.6.0
  * Dec 12 full clickpad LED support, even in synaptics 1.5.0
  * Jul 30 kismet works fine, all networks detected
  * Jan 19 more information on touchpad bugs
  * Jan 13 identified sound chip as STAC92xx
  * Jan 11 kismet working without kernel panics
  * Jan 08 share the fix for blinking VGA output
  * Jan 07 more acurate rfkill info in Wireless section

System Installation


If you're wondering; this laptop works fine with GNU/Linux and you should have no doubts about buying it or switching to GNU/Linux. Just make sure to choose a distribution that had a release recently.

lspci

00:00.0 Host bridge: Intel Corporation Core Processor DRAM Controller (rev 02)
00:02.0 VGA compatible controller: Intel Corporation Core Processor Integrated Graphics Controller (rev 02)
00:16.0 Communication controller: Intel Corporation 5 Series/3400 Series Chipset HECI Controller (rev 06)
00:1a.0 USB Controller: Intel Corporation 5 Series/3400 Series Chipset USB2 Enhanced Host Controller (rev 05)
00:1b.0 Audio device: Intel Corporation 5 Series/3400 Series Chipset High Definition Audio (rev 05)
00:1c.0 PCI bridge: Intel Corporation 5 Series/3400 Series Chipset PCI Express Root Port 1 (rev 05)
00:1c.1 PCI bridge: Intel Corporation 5 Series/3400 Series Chipset PCI Express Root Port 2 (rev 05)
00:1c.3 PCI bridge: Intel Corporation 5 Series/3400 Series Chipset PCI Express Root Port 4 (rev 05)
00:1c.5 PCI bridge: Intel Corporation 5 Series/3400 Series Chipset PCI Express Root Port 6 (rev 05)
00:1d.0 USB Controller: Intel Corporation 5 Series/3400 Series Chipset USB2 Enhanced Host Controller (rev 05)
00:1e.0 PCI bridge: Intel Corporation 82801 Mobile PCI Bridge (rev a5)
00:1f.0 ISA bridge: Intel Corporation Mobile 5 Series Chipset LPC Interface Controller (rev 05)
00:1f.2 SATA controller: Intel Corporation 5 Series/3400 Series Chipset 6 port SATA AHCI Controller (rev 05)
00:1f.6 Signal processing controller: Intel Corporation 5 Series/3400 Series Chipset Thermal Subsystem (rev 05)
43:00.0 Network controller: RaLink RT3090 Wireless 802.11n 1T/1R PCIe
44:00.0 Ethernet controller: Realtek Semiconductor Co., Ltd. RTL8111/8168B PCI Express Gigabit Ethernet controller (rev 03)
ff:00.0 Host bridge: Intel Corporation Core Processor QuickPath Architecture Generic Non-core Registers (rev 02)
ff:00.1 Host bridge: Intel Corporation Core Processor QuickPath Architecture System Address Decoder (rev 02)
ff:02.0 Host bridge: Intel Corporation Core Processor QPI Link 0 (rev 02)
ff:02.1 Host bridge: Intel Corporation Core Processor QPI Physical 0 (rev 02)
ff:02.2 Host bridge: Intel Corporation Core Processor Reserved (rev 02)
ff:02.3 Host bridge: Intel Corporation Core Processor Reserved (rev 02)

Kernel

At the moment I'm running a 3.3 kernel provided by Arch. It's a very well configured kernel, very modular, and everything works OK with it. I have no intention of compiling my own for now, so I don't provide a kernel config file like some articles do.

Installation

I partitioned the hard drive during installation:
  Disk:
      /dev/sda
  Partitions:
      /dev/sda1 -  50MB - ext2 - /boot  (* flagged bootable)
      /dev/sda2 -  10GB - ext3 - /
      /dev/sda3 -   2GB - swap - swap space
      /dev/sda4                - extended
      /dev/sda5 -  50GB - ext3 - /home
      /dev/sda6 - 170GB - ext3 - /mnt/storage
I booted the core CD and walked trough the setup. With Arch Linux you partition your drive(s), edit crucial config files like /etc/{rc,resolv,lilo}.conf ..., and install core packages. Once the system was running I updated the pacman (Arch package manager) database and installed everything else; X.org, graphic and audio drivers, libraries, window manager... everything you need on a workstation.

System Configuration


X11

For the initial setup I run xorgconfig, then edited xorg.conf to fine tune it. Graphics did not run fine with the vesa driver, so I installed the opensource intel driver (xf86-video-intel) right away and that's what I'm using now.

HDMI / External VGA

Both cloned and extended displays are possible with this chip/driver. Both the VGA and HDMI outputs are working. For a static configuration you can take a look at my xorg.conf, but xrandr is widely used today for dynamic, on the fly setup and (re)configuration.

This is the third generation Intel graphics chip I own, and the first one which had some blinking problems with the external monitor. Each time it was connected, even when I did not use --auto in xrandr it was resetting the resolution several times, powering off and on the monitor. I solved this by appending the following to the kernel, in my lilo configuration: drm_kms_helper.poll=0

Backlight

The backlight controls (and buttons) do work trough the ACPI video module and hp_wmi (more about this below), but I noticed brightness level is reset on next boot. Also the brightness can not be controlled on the console using the keys. If need be one can echo a value between 0 and 24 to "/sys/class/backlight/acpi_video0/brightness"

Framebuffer

Since Linux 2.6.32 the KMS (Kernel Mode Setting) support for Intel graphics is finally reliable. When using KMS no vga lines are required in your bootloader configuration, correct resolution is auto-detected. However if correct resolution is not detected on your external monitor you can append the following to your kernel in lilo or grub configuration: video=VGA-1:1280x800

Synaptics

This device is a so called ClickPad, and since version 1.6.0 xf86-input-synaptics finally has native multitouch support, without any of the patches I previously listed here. I do however use a patch that adds the LED support to the user-space component of the driver. The user-space patch and a recipe for building from source you can find here. If you want the touchpad LED to actually light up on LEDDoubleTap you will need to update your psmouse kernel module until the functionality finds its way into the kernel. Once again you can use the Arch Linux repository to see the simple recipe for building the new driver, there it's packaged as synaptics-led.

Once you setup synaptics you also get tapping and scrolling functionality on the touchpad it self. No special circular or pinch gestures are working at the moment.

Extra keys

All of the extra keys work perfectly. With latest X.org, no HAL involved. Correct scancodes and keycodes are assigned to each one. You should also use the HP WMI hotkeys driver, a part of Linux now. Just modprobe hp_wmi.

ACPI

All ACPI modules work fine; battery, button, processor, thermal, video.

In userspace you can install acpitool or ACPI Client which replicate behavior of the old "apm" command, thus giving you temperature, battery... and all kind of other information.

Processor frequency scaling is possible with this CPU (see the cpufreq section). Also note that newer Linux kernels no longer have a fixed 1000Hz timer tick. The result (in theory) is huge power savings because the CPU stays in low power mode for longer periods during system idle. For other ways of saving power read sections below this one, and visit the LessWats project.

Suspend

You can choose between uswsusp, tuxonice and direct kernel suspend/hibernate. Uswsusp is completely software based, doesn't require any kernel modifications and gives you the possibility to use quirks and compress (+ encrypt) images during hibernation. I use it in combination with pm-utils, which is now the standard power management framework on every distribution and supports all three mentioned suspend methods.

Hibernation and suspend (with acpi s3) works fine. It was a joy to have both working minutes after the install. No broken BIOS surprises like with Lenovo. I submitted the patch and in future uswsusp releases it will be supported out of the box. No other quirks or workarounds are needed.

acpid

To setup acpid take a look in /etc/acpi, I mapped the power key to do a clean shutdown, Fn+Sleep to suspend, Lid closing to lock the desktop and AC events start laptop-mode-tools. My handler file is here.

laptop-mode

Laptop-mode-tools is a laptop power saving package for Linux systems (a shell script and a bunch of config files really). I configured acpid to call it when I switch to/from battery power. It can enable the Laptop Mode feature of the kernel, control CPU throttling, HDD power management, remount your partitions and setup the system do to less frequent writes, enable power saving for Intel HDA sound cards and Intel's SATA controllers, stop/start services and programs, remove modules... and a whole lot more (+ restoring the system to original state when AC is plugged in).

cpufreq

Install cpufrequtils first, then load the acpi-cpufreq module. Run cpufreq-info next to see what are your options. I chose not to use the cpufreq daemon or any utility other than laptop-mode-tools. I configured its cpufreq module to use the conservative governor (load cpufreq_conservative module) while on battery, with max and min frequencies identical to what cpufreq-info reported as max/min. Otherwise when on AC I decided to always use the performance governor (default, no modules to load).

APS

This machine comes with the HP 3D DriveGuard, disk protection system like HDAPS in ThinkPad's. The driver is in the kernel, you can load hp_accel. However I found no good userspace tool except for SuSE hp-drive-guard-client ... which unfortunately depends on Policykit and all kind of other crap. Except for those unreasonable deps it's a nice little utility.

Multimedia

This particular Intel HDA is supported by alsa, fortunately udev will load the modules (snd_hda_intel...) for you. First you must run alsamixer to unmute the channels, then store your config with alsactl store, that's it. Built in microphone also works, you should max out your Capture channels in alsamixer and then try to record something with a utility like arecord:
  $ arecord -f cd -d 3 -t wav -N test.wav
If you have problems with auto-detection of the model, or the results are not as good as you hoped for (small number of channels, low sound...) try to specify the model in /etc/modprobe.d/sound.conf:
  options snd-hda-intel model=basic
I found that auto(detection) gives best results in terms of mixers, support and capture. The sound is reasonably loud. The microphone beats any that I owned previously.

I noticed that applications which rely on OSS always see PCM channel as muted and they can't control it. Another issue was with games that use OSS, like enemy-territory, they had no sound. This was added to the system init (rc.local):
  # OSS emulation mixer fix
  #   PCM alsa control isn't auto. mapped to OSS equivalent
  echo 'PCM "PCM" 0' > /proc/asound/card0/oss_mixer
  # Enemy Territory sound fix
  echo "et.x86 0 0 direct" > /proc/asound/card0/pcm0p/oss

Webcam

This webcam is supported trough the UVC driver, once installed I tested it with ffmpeg and kopete it was also reported to work with Skype... you can also check luvcview which I guess gives some more control over the picture. Since Linux 2.6.26 UVC is part of the kernel, module is uvcvideo.

You can use the following ffmpeg example for a quick test. I was impressed, in a dark room it displayed a nice bright video:
  $ ffmpeg -f video4linux2 -s 320x240 -r 5 -i /dev/video0 -f m4v out.m4v

Card Reader

The hardware is recognized and supported, but I only had an microSD card for testing. Be sure that the correct modules are loaded depending on the card you're inserting (tifm_core, tifm_sd, tifm_7xx1, mmc_core, sdhci, sdhci_pci...).

Networking

Provided ethernet card works OK with the r8169 module. This is my third laptop with the chipset. I can tell you, they are very reliable.

Wireless

This model came with a Ralink RT3090 which is a real shame. There are two options. One using the staging, old and broken driver called rt2860sta or try your luck with the opensource rt2800pci driver. The STA driver couldn't connect to my WPA2 AES network. With some tweaking the opensource driver did. It was really the opposite of what I expected. However I had several huge kernel locks with the opensource driver, you should be cautious. Monitor mode seems to trigger it most often.

Now about those tweaks. The only way to get your card working is to make sure to unblock RF-Kill for the device. In Arch Linux a simple startup service takes care of it, part of the rfkill package. You also have to make sure one or the other driver is blacklisted. Having them both loaded leads to connection failures.

As for actual connecting, with rt2800pci, you can take a look at my connection script. It includes sample wpa_supplicant configuration as well. See rt-connect.sh.

Update: since Linux 2.6.37 starting or stopping kismet (and thus Monitor mode) has never produced a kernel panic.

I also own an Atheros PC Express card, those chips always had great support. People at the MadWifi project are doing a great job. If you're buying wifi hardware consider something with an Atheros chip and not these pathetic products Ralink makes.

My kismet.conf looks like this:
  ...
  ncsource=wlan0:type=mac80211,name=ralink
  ncsource=wlan1,type=mac80211,name=atheros
  ...
  # I switch these depending on cards running at the moment
  enablesources=ralink
  #enablesources=atheros
  #enablesources=atheros,ralink
  ...

Bluetooth

I didn't personally verify this chipset works, others claim it does. But from previous experience I can tell you that once bluetooth, btusb and the rest of the modules are loaded; You need to install bluez-libs, bluez-utils and optional some GUI utility, like kdebluetooth set of tools. There are many guides available, one that set me going in no time was Gentoo's Bluetooth Guide. For more specific usage like using your mobile phone as a modem or remote control you can check the docs on BlueZ.

i2c / lm_sensors / hddtemp / intel_ips

I was surprised that lm_sensors picked up lots of sensors (coretemp and acpitz-virtual modules). If you install hddtemp you can also get thermal readings from SMART, it works OK with this HDD model. You can get those with smartctl as well, so it's not worth the trouble.

Also note that I have blacklisted the intel_ips module. It caused the machine to freeze 3 times before I even had a chance to figure out what the hell it does. Well, now I don't care for it.

sysctl

For the record my sysctl.conf looks like this:
  #
  # Kernel sysctl configuration
  #
  
  # Magic-sysrq key
  kernel.sysrq=1
  
  # Custom memory settings
  vm.swappiness=1
  #vm.overcommit_memory=2
  vm.vfs_cache_pressure=50

Screenshot

screenshot1

Final Note

I would suggest to use some of these stickers instead of that ugly sticker that comes shipped with the laptop: http://www.openstickers.com/

You can find my contact info on my home page http://sysphere.org/~anrxc/, I would be glad to hear from you with some suggestions or solutions, or possibly be of some help to you (but please note that I have no time for Ubuntu users to lazy to read any kind of documentation). Thank you, anrxc.