Linux en Dell Vostro 1500

Algunas notas sueltas sobre la configuración del Laptop Dell Vostro 1500 en Gentoo. Seguramente aplicable tanto a otros Linux como a otros portátiles Dell (p.e: Insiron 1520) o con el mismo hardware.

No pretende ser una guía completa sobre como configurar el hardware, solo un resumen de ciertos pasos por si algún día tengo que repetirlos.

Linux On Laptops

Hardware

Para los que vienen de google :)

# lspci
00:00.0 Host bridge: Intel Corporation Mobile PM965/GM965/GL960 Memory Controller Hub (rev 0c)
00:01.0 PCI bridge: Intel Corporation Mobile PM965/GM965/GL960 PCI Express Root Port (rev 0c)
00:1a.0 USB Controller: Intel Corporation 82801H (ICH8 Family) USB UHCI Controller #4 (rev 02)
00:1a.1 USB Controller: Intel Corporation 82801H (ICH8 Family) USB UHCI Controller #5 (rev 02)
00:1a.7 USB Controller: Intel Corporation 82801H (ICH8 Family) USB2 EHCI Controller #2 (rev 02)
00:1b.0 Audio device: Intel Corporation 82801H (ICH8 Family) HD Audio Controller (rev 02)
00:1c.0 PCI bridge: Intel Corporation 82801H (ICH8 Family) PCI Express Port 1 (rev 02)
00:1c.1 PCI bridge: Intel Corporation 82801H (ICH8 Family) PCI Express Port 2 (rev 02)
00:1c.3 PCI bridge: Intel Corporation 82801H (ICH8 Family) PCI Express Port 4 (rev 02)
00:1d.0 USB Controller: Intel Corporation 82801H (ICH8 Family) USB UHCI Controller #1 (rev 02)
00:1d.1 USB Controller: Intel Corporation 82801H (ICH8 Family) USB UHCI Controller #2 (rev 02)
00:1d.2 USB Controller: Intel Corporation 82801H (ICH8 Family) USB UHCI Controller #3 (rev 02)
00:1d.7 USB Controller: Intel Corporation 82801H (ICH8 Family) USB2 EHCI Controller #1 (rev 02)
00:1e.0 PCI bridge: Intel Corporation 82801 Mobile PCI Bridge (rev f2)
00:1f.0 ISA bridge: Intel Corporation 82801HEM (ICH8M) LPC Interface Controller (rev 02)
00:1f.1 IDE interface: Intel Corporation 82801HBM/HEM (ICH8M/ICH8M-E) IDE Controller (rev 02)
00:1f.2 IDE interface: Intel Corporation 82801HBM/HEM (ICH8M/ICH8M-E) SATA IDE Controller (rev 02)
00:1f.3 SMBus: Intel Corporation 82801H (ICH8 Family) SMBus Controller (rev 02)
01:00.0 VGA compatible controller: nVidia Corporation GeForce 8600M GT (rev a1)
03:00.0 Ethernet controller: Broadcom Corporation BCM4401-B0 100Base-TX (rev 02)
03:01.0 FireWire (IEEE 1394): Ricoh Co Ltd R5C832 IEEE 1394 Controller (rev 05)
03:01.1 SD Host controller: Ricoh Co Ltd R5C822 SD/SDIO/MMC/MS/MSPro Host Adapter (rev 22)
03:01.2 System peripheral: Ricoh Co Ltd R5C843 MMC Host Controller (rev 12)
03:01.3 System peripheral: Ricoh Co Ltd R5C592 Memory Stick Bus Host Adapter (rev 12)
03:01.4 System peripheral: Ricoh Co Ltd xD-Picture Card Controller (rev 12)
0c:00.0 Network controller: Intel Corporation PRO/Wireless 3945ABG Network Connection (rev 02)

La configuración completa del Kernel está adjuntada al final de esta entrada, por si alguien la quiere usar como base o por si he olvidado mencionar alguna opción en las siguientes secciones.

make.conf

CHOST="x86_64-pc-linux-gnu"
CFLAGS="-march=nocona -O2 -pipe -msse3"
CXXFLAGS="${CFLAGS}"
MAKEOPTS="-j3"

FEATURES="parallel-fetch unmerge-orphans"

Controlador SATA

IDE interface: Intel Corporation Mobile SATA Controller IDE (rev 02)

Device Drivers  --->
  <*> Serial ATA (prod) and Parallel ATA (experimental) drivers  --->
  <*>   Intel ESB, ICH, PIIX3, PIIX4 PATA/SATA support

Controlador IDE

IDE interface: Intel Corporation Mobile IDE Controller (rev 02)

Lo necesitamos para el CD-ROM

Device Drivers  --->
  <*> ATA/ATAPI/MFM/RLL support  --->
    [*]     Generic PCI bus-master DMA support
    <*>       Intel PIIXn chipsets support

ACPI y ahorro de energía

Poco que explicar, la guía oficial de Gentoo es bastante completa. Lo único a destacar es que si decides usar laptop-mode-tools estudia a fondo su archivo de configuración /etc/laptop-mode/laptop-mode.conf, que está muy bien documentado y permite ajustar muy bien el control de ahorro de energía en bastantes aspectos.

Tarjeta de sonido

Audio device: Intel Corporation HD Audio Controller (rev 02)

Instalar una versión de ALSA >=1.0.14-r1 (Actualización: El kernel v2.6.24 ya incluye la última versión del driver y la nueva política de Gentoo es recomendar el uso de la versión del kernel) y en /etc/modules.d/alsa poner

options snd_hda_intel model=laptop-eapd power_save=300

Eliminar ruidos de alta frecuencia

El Vostro 1500, como otros muchos portátiles Core 2 Duo, emite unos sonidos de alta frecuencia. Usando los altavoces integrados a penas se aprecian pero usando altavoces externos o auriculares son bastante molestos. Los ruidos son debidos a los estados de ahorro de energía del procesador, parte de ACPI.

Existen varios estados de ahorro de energía C0,C1,C2,.... Cuanto más alto es el número que identifica al estado, mayor es el grado de ahorro de energía. Normalmente los ruidos solo se producen a partir del estado C3 o C4.

Para eliminar los ruidos tendremos que prescindir de los estados "ruidosos", algo en principio no recomendado cuando usamos baterías, ya que se incrementa el consumo.

Si solo quieres prescindir de los estados ruidosos cuando el ruido moleste (escuchando música, viendo una película,...) se puede cambiar el máximo estado de ahorro en tiempo de ejecución con el siguiente comando:

# echo NIVEL > /sys/module/processor/parameters/max_cstate

Para averiguar el primer estado en el que nuestro procesador empieza a emitir ruido ejecutar:

# echo 1 > /sys/module/processor/parameters/max_cstate
# echo 2 > /sys/module/processor/parameters/max_cstate
# echo 3 > /sys/module/processor/parameters/max_cstate
# echo 4 > /sys/module/processor/parameters/max_cstate
...

En mi caso, el estado ruidoso es el C4. Como no quiero anular de forma permanente ese estado de ahorro de energía, cada vez que me molesta el ruido fijo C3 como máximo estado de ahorro de energía ejecutando el comando

# echo 3 > /sys/module/processor/parameters/max_cstate

pero si quisiese anularlo definitivamente, otra opcion es indicar la siguiente opción al módulo del kernel que controla los estados ACPI del procesador.

# echo "options processor max_cstate=3" > /etc/modules.d/ruidoProcesador
# update-modules

Trajeta de red

Ethernet controller: Broadcom Corporation BCM4401-B0 100Base-TX (rev 02)

Device Drivers --->
  Network device support --->
    Network device support --->
      Ethernet (10 or 100Mbit)  --->
      [*] Ethernet (10 or 100Mbit)
      [*] EISA, VLB, PCI and on board controllers
      <M>   Broadcom 4400 ethernet support

Las nuevas versiones de UDEV cargan todas las interfaces que esten configuradas en /etc/conf.d/net, por lo que no es necesario añadir su script de inicio a ningún runlevel

# rc-update del net.eth0

Para que la interfaz cableada se incie solo cuando haya un cable conectado, instalar el siguiente programa (no es necesario hacer nada más):

# emerge sys-apps/netplug

Parte relevante de /etc/conf.d/net

config_eth0=( "192.168.0.3 netmask 255.255.255.0 brd 192.168.0.255" )
routes_eth0=( "default via 192.168.0.1" )

Tarjeta Wi-Fi

(Obsolteto, consultar información sobre iwlwifi un poco más abajo)

Network controller: Intel Corporation PRO/Wireless 3945ABG Network Connection (rev 02)

Networking  --->
  Wireless  --->
    <M> Generic IEEE 802.11 Networking Stack
    <M>   IEEE 802.11 WEP encryption (802.1x)
    <M>   IEEE 802.11i CCMP support
    <M>   IEEE 802.11i TKIP encryption

Device Drivers --->
  Network device support --->
    Wireless LAN ->
      [*] Wireless LAN (IEEE 802.11)
# emerge ipw3945 wpa_supplicant

Para evitar que UDEV no la inicie al arrancar y así ahorrar energía poner en /etc/conf.d/rc :

RC_PLUG_SERVICES="!ipw3945d !net.eth1"

Además, el módulo ipw3945 da problemas para hibernar, ya que hemos quitado ipw3945d y net.eth1 no necesitamos el módulo

# echo "blacklist ipw3945" >> /etc/modprobe.d/blacklist

Parte relevante de /etc/conf.d/net

modules=( "wpa_supplicant" )
wpa_supplicant_eth1="-w -D wext"


config_eth1=( "192.168.0.33 netmask 255.255.255.0 brd 192.168.0.255" )
routes_eth1=( "default via 192.168.0.1" )
#dhcp_eth1="nontp nonis -t 10" # para que no se sobreescriba el resolv.conf añadir -R

depend_eth1() {
        need ipw3945d
}

Parte relevante de /etc/wpa_supplicant/wpa_supplicant.conf

ctrl_interface=/var/run/wpa_supplicant
ctrl_interface_group=0
update_config=0
fast_reauth=1


network={
 ssid="mi_ssid"
 #psk sacado con el comando 'wpa_passphrase mi_ssid mi_clave', así no se guarda la clave en texto plano en este archivo
 psk=7987979879873924792374987329794732984792374923749237497234798
 pairwise=TKIP
 group=TKIP
 priority=5
}

Tarjeta Wi-Fi

Actualización: El kernel v2.6.24 ya incluye la última versión del driver iwlwifi que resulta mucho más estable.

Configuración del kernel:

Networking  --->
  Wireless  --->
    {M} Improved wireless configuration API
    [*]   nl80211 new netlink interface support
    -*- Wireless extensions
    <M> Generic IEEE 802.11 Networking Stack (mac80211)

Device Drivers --->
  Network device support --->
    Wireless LAN ->
      [*] Wireless LAN (IEEE 802.11)
      [*]   Intel Wireless WiFi Link Drivers
      [*]     Enable Sensitivity Calibration in iwlwifi drivers
      [*]     Enable Spectrum Measurement in iwlwifi drivers
      <M>     Intel PRO/Wireless 3945ABG/BG Network Connection

Este driver requiere la instalación del paquete de firmware de Intel

# emerge -C net-wireless/ipw3945 net-wireless/ipw3945d
# emerge -n net-wireless/iwl3945-ucode wpa_supplicant

De nuevo, si queremos que UDEV no inicie la tarjeta al arrancar y así ahorrar energía poner en /etc/conf.d/rc :

RC_PLUG_SERVICES="!net.wlan0"

Las configuraciones relativas a /etc/conf.d/net y /etc/wpa_supplicant/wpa_supplicant.conf explicadas para el driver ipw3945 sirven también para este driver teniendo en cuenta las pequeñas modificaciones triviales que implica que la tarjeta Wi-Fi ahora se llama wlan0 en vez de eth1.

Framebuffer y Splash

Usar el driver vesafb con el parámetro de arranque vga=0x0369
Parte relevante de /boot/grub/grub.conf

title=Gentoo 2.6.22-r2
root (hd0,1)
kernel /boot/bzImage-2.6.22-r2 root=/dev/sda2 video=vesa:ywrap,mtrr vga=0x0369 splash=silent,fadein,theme:livecd-2007.0 quiet CONSOLE=/dev/tty1 fbcon=scrollback:12
initrd /boot/splash-livecd-2007.0-1680x1050

Si prefieres usaruvesafb, puedes pasar el parámetro video=uvesafb:1680x1050-32,mtrr:3,ywrap

Faltaría añadir el soporte para resume2

Touchpad

Dispositivos de entrada en /etc/make.conf

INPUT_DEVICES="evdev keyboard mouse synaptics"
Device Drivers  --->
   Input device support  --->
      --- Mouse interface
      <M> Event interface
      [*] Mice
      <M>   PS/2 mouse

Parte relevante de /etc/X11/xorg.conf

Section "ServerLayout"
...
	InputDevice	"TouchPad" "CorePointer"
	InputDevice	"Logitech MX500 evdev" "SendCoreEvents"
...
EndSection

Section "InputDevice"
	Driver	"synaptics"
	Identifier	"TouchPad"
	Option		"SendCoreEvents"
	Option		"Protocol" "auto-dev"
	Option		"SHMConfig" "on"
EndSection

Para desactivar el tocuhpad mientras se pulsa una tecla (salvo SHIFT,CONTROL y similares) y así evitar pulsaciones involuntarias mientras se escribe, edita /etc/conf.d/syndaemon:

SYNDAEMON_OPTS="-k"

y luego

# rc-update add syndaemon default

A mi me falla el script de inicio de syndaemon, así que he añadido el siguiente comando en ~/.xinitrc:

/usr/bin/syndaemon -k

Ranura de expansión ExpressCard

No tengo ninguna tarjeta para probar, consultar el Wiki.

Lector de tarjetas

Ricoh Co Ltd R5C822 SD/SDIO/MMC/MS/MSPro Host Adapter (rev 22)

Code maturity level options  --->
     [*] Prompt for development and/or incomplete code/drivers

Device Drivers  --->
  <M> MMC/SD Card support  -->
    <M>   MMC block device driver
    [*]     Use bounce buffer for simple hosts
    <M>   Secure Digital Host Controller Interface support  (EXPERIMENTAL)
    <M>     Ricoh MMC Controller Disabler  (EXPERIMENTAL)

File systems --->
  DOS/FAT/NT Filesystems  --->
    <M>   MSDOS fs support
    <M>   VFAT (Windows-95) fs support

Los dispositivos que se crean al insertar la tarjeta son /dev/mmcblk0*

Teclas multimedia

En general, el kernel asigna a cada tecla un código llamado "raw scancode" (en hexadecimal). En el entorno X, el teclado funciona de forma algo distinta: los "raw scancode" son traducidos a unos códigos propios llamados "keycode" (en decimal). Por tanto, para que una tecla funcione en X tiene que tener un "keycode" asociado. Para ver si una tecla tiene un "keycode" asociado ejecutar el comando

# xev

y pulsar la tecla en cuestión. Si la salida es parecida a esta

...
keycode 160 (keysym 0x0, NoSymbol)
...

es que la tecla tiene un "keycode" (en este caso el 160). En caso contrario tenemos que averiguar si al menos tiene un "raw scancode". Para ello ejecutar

# tail -f /var/log/messages

y pulsar la tecla en cuestión. Si la salida es parecida a esta

...
Unknown key pressed (translated set 2, code 0x92 on isa0060/serio0).
Use 'setkeycodes e012 ' to make it known.
...

es que la tecla tiene un "raw scancode" (en este caso el e012). En caso contrario, el kernel no reconoce la tecla y por tanto no la podemos usar.

Para asignar un "raw scancode" a un "keycode" se usa el comando

# setkeycodes "raw scancode" "keycode"

El valor de "keycode" no puede ser un valor cualquiera. Tiene que estar entre el máximo valor de "keycode" de nuestro esquema de teclado y 127. En mi caso, uso el esquema de teclado español, cuya definición está en el archivo /usr/share/keymaps/i386/qwerty/es.map.gz. Mirando dicho archivo se aprecia que el último "keycode" usado es el 97.

Los cambios hechos con setkeycodes se pierden al apagar el equipo. Para evitarlo, podemos poner los comandos en /etc/conf.d/local.start

Una vez que todas las tecla que queremos usar tengan un "keycode" asignado podemos
-asignarles un comando (usando el programa xbindkeys )
-asignarles una tecla o combinación de teclas (usando el programa xvkbd invocado desde xbindkeys )

# emerge xbindkeys xvkbd

Crear el fichero ~/.xbindkeysr y asegúrate que el script de inicio de tu gestor de ventanas u escritorio ejecuta xbindkeys.

Este es mi ~/.xbindkeys

#El botón 6 del ratón cambia de aplicación (Alt+Tab)
"xvkbd -text "\[Alt_L]\[Tab]""
b:6

#El botón 7 del ratón cierra la aplicación (Alt+F4)
"xvkbd -text "\[Alt_L]\[F4]""
b:7

#El botón 8 del ratón lanza la calculadora
"kcalc"
b:8

#El botón 9 del ratón lanza el editor de texto
"kate -u"
b:9

#La tecla con keycode 160 silencia la tarjeta de sonido (Mute) ('amixer set Master mute' no me funciona)
"amixer -q set Master 0"
m:0x10 + c:160

#La tecla con keycode 174 baja el volumen
"amixer -q set Master 2-"
m:0x10 + c:174

#La tecla con keycode 176 sube el volumen
"amixer -q set Master 2+"
m:0x10 + c:176

#La tecla con keycode 162 reproduce/pausa en Amarok/Kaffeine
"dcop amarok player playPause ; dcop kaffeine KaffeineIface pause"
m:0x10 + c:162

#La tecla con keycode 144 retrocede una pista en Amarok/Kaffeine
"dcop amarok player prev ; dcop kaffeine KaffeineIface prev"
m:0x10 + c:144

#La tecla con keycode 153 avanza una pista en Amarok/Kaffeine
"dcop amarok player next ; dcop kaffeine KaffeineIface next"
m:0x10 + c:153

#La tecla con keycode 164 detiene la reproducción en Amarok/Kaffeine
"dcop amarok player stop ; dcop kaffeine KaffeineIface stop"
m:0x10 + c:164

Runleveles

               acpid | battery      default
           alsasound |         boot
            bootmisc |         boot
             checkfs |         boot
           checkroot |         boot
               clock |         boot
         consolefont |         boot
                hald | battery      default
   hibernate-cleanup |         boot
            hostname |         boot
             keymaps |         boot
         laptop_mode | battery
           lcd4linux |              default
               local | battery      default nonetwork
          localmount |         boot
             modules |         boot
              net.lo |         boot
           rmnologin |         boot
           syslog-ng |              default
             urandom |         boot
          vixie-cron |              default
                 xdm | battery      default
AdjuntoTamaño
xorg.conf5.67 KB
linux-2.6.26.config45.55 KB