Category Archives: Sistemas operativos

Resolver problema con la resolución de un monitor ViewSonic con nVidia en Linux

X.Org

X.Org

Resumen

Un monitor ViewSonic VG2021wm y una placa de video nVidia GeForce 6500 dejan de entenderse espontáneamente en Linux Mint y el Xorg pasa a funcionar sólo en modo 640×480. ¿La solución? Deshabilitar el uso de EDID y configurar manualmente los datos del monitor en el xorg.conf.

Desarrollo

Ayer me sucedió algo muy raro. Hace varios meses vengo usando Linux Mint sin mayores inconvenientes en mi máqunia. Cuando ayer fui a encender la máquina (sin que mediara ningún cambio extraño, ningún update de los drivers de la placa de video ni ninguna instalación de software), el X iniciaba sesión solamente en resolución 640×480. Teniendo un monitor de 20″, cuya resolución óptima es de 1680×1050, se darán cuenta que la imagen era espantosa: no entraba nada en la pantalla.

Después de varias horas sin entender bien cuál era el problema, postear en el foro de Linux Mint sin respuesta, y buscar en Internet, me puse a revisar los logs del X y encontré que mencionaba errores para leer el EDID. Por ejemplo:

Unable to get display device CRT-0's EDID; cannot compute DPI

¿Qué es el EDID? Extended display identification data, es una estructura de datos que ofrecen los dispositivos de visualización (ej.: los monitores) y que permiten, por ejemplo, a una placa de video conocer sus cualidades. De esta manera, la operatoria normal habría sido que mi placa de video obtuviera los datos del monitor de su EDID y conforme a ello me diera las opciones adecuadas para configurar mi pantalla. Más concretamente, el Xorg lo que hace es obtener a través de la placa de video, entre otros datos, la frecuencia horizontal (HorizSync) y la tasa de refresco vertical (VertRefresh) (para más información sobre qué es cada una de estas variables, pueden consultar esta página).

La cuestión es que de buenas a primeras, el Xorg dejó de poder leer el EDID de mi monitor y por eso levantaba con los datos default para un monitor CRT (por cierto, entre las cosas que aprendí ayer, el driver de nVidia le pone de nombre “CRT” a cualquier dispositivo que se conecte al puerto VGA, no tiene nada que ver con lo que efectivamente esté conectado). Eso quiere decir que tomaba un HorizSync y un VertRefresh que solamente eran compatibles con una resolución de 640×480@50 Hz.

¿Por qué pasa esto? La verdad, no lo sé a ciencia cierta. Encontré a este usuario que le pasó lo mismo, y levantando de un Live CD se dio cuenta que no era un problema de configuración, entonces lo resolvió cambiando su cable DVI por un cable VGA con un adaptador. Yo comprobé lo mismo, el problema no estaba en la configuración de mi Xorg, pero como yo sólo tenía cable VGA, probé cambiandolo por otro cable VGA, pero no hizo diferencia. Entonces seguí buscando y llegué a este otro post donde alguien lo resolvió sencillamente cambiando los HorizSync y VertRefresh en el xorg.conf.

Me bajé el manual de mi monitor (ViewSonic VG2021wm) y busqué los datos correspondientes (HorizSync y VertRefresh), y los puse en el xorg.conf. Este tipo de configuración manual del Xorg es lo que viene a evitar el EDID. El tema es que al reinicar el X, el Xorg seguía intentando leer el EDID y como no podía, seguía dando el mismo problema.

Finalmente, y casi por casualidad, me di cuenta que el nvidia-xconfig tenía unos parámetros para que configurara el xorg.conf indicándole al Xorg ignorar el EDID. Entonces ejecuté el siguiente comando:

sudo nvidia-xconfig --no-use-edid --no-use-edid-dpi --no-use-edid-freqs --mode=1680x1050

Y con eso me quedó generado el siguiente xorg.conf

# nvidia-xconfig: X configuration file generated by nvidia-xconfig
# nvidia-xconfig:  version 280.13  (pbuilder@cake)  Mon Aug  8 15:37:15 UTC 2011

Section "ServerLayout"
    Identifier     "Layout0"
    Screen      0  "Screen0" 0 0
    InputDevice    "Keyboard0" "CoreKeyboard"
    InputDevice    "Mouse0" "CorePointer"
EndSection

Section "Files"
EndSection

Section "InputDevice"

    # generated from default
    Identifier     "Mouse0"
    Driver         "mouse"
    Option         "Protocol" "auto"
    Option         "Device" "/dev/psaux"
    Option         "Emulate3Buttons" "no"
    Option         "ZAxisMapping" "4 5"
EndSection

Section "InputDevice"

    # generated from default
    Identifier     "Keyboard0"
    Driver         "kbd"
EndSection

Section "Monitor"

    Identifier     "Monitor0"
    VendorName     "Unknown"
    ModelName      "LCD-1"
    HorizSync 24.0 - 82.0
    VertRefresh 50.0 - 85.0
    Option         "DPMS"
EndSection

Section "Device"
    Identifier     "Device0"
    Driver         "nvidia"
    VendorName     "NVIDIA Corporation"
EndSection
Section "Screen"
    Identifier     "Screen0"
    Device         "Device0"
    Monitor        "Monitor0"
    DefaultDepth    24
    Option "UseEdidFreqs" "False"
    Option "UseEdid" "False"
    Option "UseEdidDpi" "False"
    SubSection     "Display"
        Depth       24
        Modes      "1680x1050" "1680x1050_60.00"
    EndSubSection
EndSection

Si ven los parámetros resaltados, en la sección Monitor defino el HorizSync y el VertRefresh. Y luego en la sección Screen, los parámetros que evitan que se use el EDID (anteriormente existía una opción IgnoreEDID que fue deprecada, ver los comentarios de este artículo).

Una vez modificado el xorg.conf solamente tuve que reiniciar el X y volvió a la normalidad. Después tuve que pelearme un rato con GDM para volver a configurar la resolución adecuada (1680×1050@60 Hz) utilizando nvidia-settings. Pero esto puede tener que ver con todas las vueltas que dí antes de encontrar la solución.

Enrutamiento Avanzado y Control de Tráfico en Linux

Leyendo El CóDiGo K me entero sobre la existencia de este manual de Enrutamiento Avanzado y Control de Tráfico en Linux. Anoche lo bajé y lo estuve hojeando un poco. La verdad que es muy interesante y vale realmente la pena. Dejo la explicación de Daniel que me pareció muy clara.

Uno de los documentos más completos y más leídos por los Administradores de Redes cuando se habla de Calidad de Servicio (QoS) en los sistemas conectados.

Este interesante documento pretende descubrir a fondo herramientas que perteneces a la poderosa infraestructura iproute2, sustituyendo antiguos comandos tales como routeifconfig.

Actualmente el documento “Enrutamiento Avanzado y Control de Tráfico en Linux” se encuentra en 8 idiomas totalmente traducidos, con diversos ejemplos para dominar por completo la administración de recursos de los sistemas.

Enlaces

Ubuntu Netbook Remix en Eee PC 1101ha

Lo logré!!!

Con esta sensación de satisfacción por lograr lo anhelado, me dispongo a escribir este pequeño post.1101-screen

Después varios meses dandole vueltas al tema (soy muy indeciso), buscando alternativas, precios, ahorrando, etc. me compré una netbook. Como habrán adivinado por el título, es una Eee PC 1101ha con procesador Intel Atom z520, 2 GB de RAM, disco de 160 GB, webcam de 1.3 MPx, y pantalla de 11.6”. El temita es que venía con Win XP y eso de entrada me parecía un pecado. Luego de jugar un poquito (inicialmente tenía la idea de aprovechar para terminar de desarrollar una pequeña aplicacioncita que estaba haciendo en Python para Windows, pero luego desistí), me decidí a instalarle Linux.

Sin averiguar demasiado me mandé a instalar distros para netbooks, probé varias más de una vez: Ubuntu Netbook Remix, Eeebuntu, EasyPeasy (ex Ubuntu-eee). Fue un proceso tortuoso en el cual aprendí algunas cositas de lo que estaba haciendo, pero no lograba darme cuenta de por qué me andaba TAN LENTO!. No podía creer que Win XP anduviera más rápido! Después de estar un rato largo (más de un día) me fui dando cuenta que el problema no era que el procesador o la RAM no dieran (me llamaba la atención todo lo que cy)onsumía el netbook-launcher en UNR y EasyPeasy), sino en la placa de video, porque no tenía los drivers correspondientes. Luego de dar muchas vueltas por internet encontré dos posts en dos blogs que me ayudaron a sacarla andando:

Perfect Ubuntu Jaunty on the Asus eeePC 1005HA (and 1008HA)

Configurar en Ubuntu 9.10 la tarjeta gráfica Intel GMA500 y Compiz

Con esos dos posts logré sacarla andando, haciendo algunas modificaciones menores. Así que pongo el procedimiento que hice para instalar Ubuntu Netbook Remix, con el Desktop tradicional de Ubuntu (no el netbook-laucher) y los drivers para la placa Intel GMA 500.

Instalar Ubuntu

Lo primero fue descargar Ubuntu Netbook Remix y crear el USB para bootear. Luego F2 para entrar al BIOS de la Eee, configurar para que levante del USB, y ahí mismo levantó la interfaz de instalación de Ubuntu que todos conocemos. No me voy a extender sobre ésto porque hay miles de guías en internet al respecto, además de que la instalación es bastante intuitiva.

El particionamiento del disco elegí hacerlo manualmente, y tomé el recaudo que señalaba el primer artículo citado de dejar una pequeña partición sin formatear de 16 MB para poder configurar el boot booster.

Afortunadamente, la última versión de UNR me levantó sin problemas la placa de red inalámbrica (la ethernet no la probé en realidad), así que no me tuve que preocupar por eso.

Quitar la interfaz para netbooks

El siguiente paso fue quitar la interfaz para netbooks, que consumía bastante. Ahí lo que me enteré fue que a partir de Karmic, el Desktop Switcher ya no viene más en Ubuntu Netbook Remix. Por lo tanto, lo que tuve que hacer fue deshabilitar el Netbook Launcher y Maximus Window Management en System -> Preferences -> Startup Applications (y de paso aproveché para deshabilitar otras que no necesitaba). Con ello, cuando reinicié, acomodé los paneles para que quedaran como en Ubuntu y listo.

Instalar EeePC Tray


Luego, siguiendo la guía, instalé eeepc-tray. Para ello agregué los repositorios de statux.org siguiendo esta guía. Luego ejecuté:

# sudo apt-get update
# sudo apt-get install eeepc-tray

En la guía original decía que había que instalar eeepc-laptop-dkms. El tema es que cuando lo intenté, pinchaba al intentar compilar contra el kernel de Karmic. Luego de googlear un poco me enteré de que no era necesario instalar ese paquete en Karmic.

Habilitar boot booster

Por último, el último item de la guía que ejecuté fue el de formatear la unidad de 16 MB que había dejado libre al particionar.

sudo sfdisk --change-id /dev/sda 3 ef

Donde 3 es el número de la partición correspondiente (en este caso, /dev/sda3). Con eso al entrar el BIOS se puede habilitar el boot booster.

Configurar placa de video

Para configurar la placa de video seguí íntegramente la guía de Otro Blog Más. Con ella pude instalar poulsbo como driver para la placa de video Intel GMA500. Una vez seguidos esos pasos, al reiniciar no lo podía creer. Una imagen increíble y los efectos 3d andando aceptablemente bien. Ahora tengo compiz andando, con los efectos que más me gustan.

Pimp my Ubuntu

Finalmente, si quieren configurar algunas cositas que quizás falten, la guía de Ubuntu Life sobre cosas para hacer luego de instalar Ubuntu 9.10 es genial.

poulsbo

Editado: 07/12/2009

Esta mañana cometí el error de aceptar sin mirar las actualizaciones automáticas de Ubuntu. 108 MB de actualizaciones de todo el SO, incluyendo kernel, xorg y otras cosas heavies. Cuando se reinició, los drivers PSB no funcionaban más. Luego de dar vueltas por internet encontré la solución:

# sudo apt-get remove psb-kernel-source
# sudo dpkg -i psb-kernel-source_4.41.2-0ubuntu1~910um1_all.deb

Importante: el archivo .deb es el mismo que había bajado ayer de Otro Blog Más.

A partir de ahora voy a ser más cuidadoso antes de aceptar las actualizaciones automáticas de Ubuntu ^^.

Editado 11/12/2009: Corregí el link de Ubuntu Life que estaba mal.

Un poco más de swap…

exhausted4Antes que nada debo pedirles disculpas por la poca regularidad de mis posts últimamente. Luego de rendir el examen más largo de mi carrera, que me tomó todo el verano preparar, me quedaron muchas tareas pendientes y estoy tratando de ponerme al día. Espero que sepan disculpar.

Hoy les traigo algunos tips para darle un “respiro” a nuestras máquinas cuando tienen un consumo excesivo de RAM, aumentando un poco la swap de Linux. Esto no va a solucionar todos nuestros problemas (la swap es en definitiva memoria en el disco, cuya lectura es mucho más lenta que la RAM), pero puede darnos una pequeña ayudita para superar un momento de mucho uso.

Concretamente vamos a ver dos casos: crear y montar un archivo swap, y hacer lo propio con un pendrive usando swapboost.

Crear un archivo swap

Comenzaremos por este ejemplo que es el más sencillo y el más explicativo. Lo primero que debemos hacer es crear un archivo del tamaño que vamos a reservar para la swap con dd. Por ejemplo, para crear uno de 512 MB haremos:

dd if=/dev/zero of=/tmp/swapfile bs=1M count=512

Luego debemos crear un swapfile vacío con mkswap.

mkswap /tmp/swapfile

Por último montamos el archivo con swapon.

swapon /tmp/swapfile

Ahora podemos ver el archivo montado:

swapon -s
Filename                                Type            Size    Used    Priority
/dev/sdb6                               partition       497972  84032   -1
/tmp/swapfile                           file            524280  0       -2

Vemos en la última línea el archivo con 512 MB de swap y una prioridad secundaria respecto a nuestra partición swap.

Swapboost: crear swap en un flashdrive USB

Swapboost es un sencillo script en BASH que nos permite montar el espacio disponible de un dispositivo de almacenamiento USB como swap en forma sencilla. El procedimiento es sencillo.

Descargamos el script y le damos permisos de ejecución.

wget http://zelut.org/projects/misc/swapboost.sh
chmod +x swapboost.sh

Insertamos el pendrive y lo montamos (esto puede hacerse con mount o si estamos en un entorno gráfico como gnome o KDE, permitiéndo que éstos lo monten automáticamente), y ejecutamos:

./swapboost.sh -n

para crear una nueva swap en el espacio libre del USB. Ahora podemos revisar su uso con:

swapon -s

Por último, para borrar la swap creada y desmontar el USB ponemos:

./swapboost.sh -d

Más información en Ubuntu Tutorials [en inglés].

PAE (Physical Address Extension) en Linux

GNU/Linux

GNU/Linux

Como sucede a menudo, una situación inesperada me hizo toparme con algo nuevo para aprender, que creo bueno compartir. Hace algún tiempo vendimos un servidor dedicado con un CPU Xeon X3210 (quad-core), para el cual solicitamos una instalación estándar de CentOS 5 con Directadmin. Ayer necesitamos agregarle un poco más de RAM (llegando a 4GB) y nos enteramos que el sistema operativo instalado era de 32 bits.

Personalmente creo que a esta altura ya no se justifica instalar un SO de 32 bits sobre un servidor con arquitectura de 64 bits porque implica un desperdicio de los recursos del sistema y porque la mayoría de las aplicaciones que uno puede llegar a utilizar en máquinas con esta función, trabajan correctamente sobre 64 bits. Es más discutible para una máquina de escritorio, pero últimamente incluso en este caso ya no es tan relevante (sobre todo desde los lanzamientos de Wine o el plugin de Flash para 64 bits en Linux). De hecho yo hace unos dos años que utilizo Linux de 64 bits en mi máquina de escritorio y siempre pude sobrellevar los problemas que ello implicó. Al respecto es interesante este artículo de AMD.

Por si no llegaron a la conclusión, el problema en este caso de tener un sistema operativo de 32 bits es que no permite la asignación de más de 4 GB de memoria física. De hecho, en la práctica el límite suele ser inferior (alrededor de 3.5 GB) por la memoria que de por sí necesita el sistema operativo para algunos dispositivos (acá hay un interesante artículo de Coding Horror sobre este tema en Windows).

Pero existe una solución que se llama PAE: Physical Address Extension (Extensión de dirección física). Se trata de una funcionalidad incluida en los procesadores x86 y x86-64 que permite asignar más de 4 GB de memoria física (hasta 64 GB). El tema es que para hacer uso de esta funcionalidad es necesario que el kernel de nuestro sistema operativo sepa cómo hacerlo. En Windows esto se llama AWE y por supuesto Linux tiene el correspondiente soporte si se lo compila con el flag adecuado.

En el caso de mi problema, como no podía reinstalar el servidor porque hubiera sido riesgoso (está en Estados Unidos y ni sé quién lo hubiera hecho) y perdería bastante tiempo de uptime, esta funcionalidad me resultó indispensable para poder hacer uso de los recursos del servidor. La opción más linda para los que nos gusta experimentar hubiera sido recompilar el kernel por mi mismo, pero las circunstancias para ello no eran las mejores, así que siendo CentOS tuve que recurrir a la basura de yum. Y el procedimiento es tan sencillo como:

# yum install kernel-PAE

Importante: La instrucción la vi en este post, pero no mencionaba un detalle. Lógicamente este procedimiento descarga e instala un nuevo kernel (con el flag activado). Pero, al menos en mi caso, no hizo el cambio adecuado en el GRUB. Por lo cual edité el archivo /etc/grub.conf:

# grub.conf generated by anaconda
#
# Note that you do not have to rerun grub after making changes to this file
# NOTICE:  You have a /boot partition.  This means that
#          all kernel and initrd paths are relative to /boot/, eg.
#          root (hd0,0)
#          kernel /vmlinuz-version ro root=/dev/VolGroup00/LogVol00
#          initrd /initrd-version.img
#boot=/dev/sda
default=1
timeout=5
splashimage=(hd0,0)/grub/splash.xpm.gz
hiddenmenu
title CentOS (2.6.18-92.1.22.el5PAE)
root (hd0,0)
kernel /vmlinuz-2.6.18-92.1.22.el5PAE ro root=/dev/VolGroup00/LogVol00 rhgb quiet
initrd /initrd-2.6.18-92.1.22.el5PAE.img
title CentOS (2.6.18-92.1.13.el5)
root (hd0,0)
kernel /vmlinuz-2.6.18-92.1.13.el5 ro root=/dev/VolGroup00/LogVol00 rhgb quiet
initrd /initrd-2.6.18-92.1.13.el5.img
title CentOS (2.6.18-92.el5)
root (hd0,0)
kernel /vmlinuz-2.6.18-92.el5 ro root=/dev/VolGroup00/LogVol00 rhgb quiet
initrd /initrd-2.6.18-92.el5.img

Donde tuve que cambiar la línea que dice “default=1″ por “default=0″, para que inicie con el kernel que tiene el soporte para PAE activado. Luego corremos “grub” de nuevo y reiniciamos.

# grub
# reboot