Tag Archives: GNU/Linux

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

Instalar ConfigServer Security & Firewall en Linux con Directadmin

ConfigServer Security & Firewall

En esta sencilla guía vamos a ver cómo instalar ConfigServer Security & Firewall (CSF), un paquete de aplicaciones para Linux que incluye in firewall ampliamente configurable y herramientas para análisis de logs y detección de intrusiones. Además se integra como plugin a Directadmin, y chequea distintos items de la configuración del servidor para darnos ideas sobre cuestiones a mejorar.

La instalación es muy sencilla.

cd /usr/src
wget http://www.configserver.com/free/csf.tgz
tar -xzf csf.tgz
cd csf
sh install.sh

Cuando lo probé yo me dio un error indicando que necesitaba el módulo LWP de Perl, el cual instalé con CPAN.

cpan -i LWP

Por último, es importante correr las pruebas que vienen incluidas para ver si tenemos todos los módulos de iptables necesarios. Aquí lo importante es que no dé FATAL ERRORS.

perl /etc/csf/csftest.pl

Eso es todo. Ahora ingresamos como admin a Directadmin, y en la sección de plugins encontraremos a ConfigServer. Allí podemos cambiar la configuración del firewall. Una vez terminado de configurar, cuando estamos seguros que todo funciona, debemos deshabilitar el testing mode. Este último lo que hace es limpiar el iptables regularmente, por si nos equivocamos, para no quedarnos sin acceder al servidor. También desde aquí podemos pedirle a ConfigServer que ejecute sus pruebas para ver la seguridad del servidor, y nos indique qué puntos nos quedan asegurar.

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].

mod_python + Python 2.6 en CentOS

mod_python

mod_python

Hace algún tiempo escribí un pequeño artículo sobre cómo instalar mod_python en Apache 2.2. El tema es que, lógicamente, cada tanto uno quiere actualizar Python para tener las últimas correcciones de bugs y los últimos features. En mi caso quería instalar Python 2.6.1 en un CentOS. El tema es que con yum no veía ninguna actualización, pero tenía Python 2.4.x instalado y yo quería lo último. Me bajé el código, lo compilé, lo instalé y al rato me di cuenta que al hacer eso había roto el yum (que está escrito en Python). Así fue que llegué a darme cuenta de cómo instalar Python 2.6.1 por separado, y recompilar mod_python para que trabaje con esa versión, y esto es lo que quería compartir con ustedes.

Primero: Instalar Python 2.6 en una ubicación alternativa

Lo primero que vamos a hacer es descargar, compilar e instalar Python 2.6 en una ruta alternativa, es decir, sin pisar la instalación actual de Python 2.4 que viene con CentOS.

# cd /usr/src
# wget http://www.python.org/ftp/python/2.6.1/Python-2.6.1.tgz
# tar zxvf Python-2.6.1.tgz
# cd Python-2.6.1/
# ./configure --prefix=/usr
# make
# make altinstall

La clave está justamente en el último paso. En vez de hacer “make install”, hacemos “make altinstall” para que se instale sin sobreescribir la versión actual de Python. Básicamente lo que hace es instalar todas las libs en /usr/lib/python2.6 (esto lo hace de todas formas), y luego crear el binario /usr/bin/python2.6 pero sin sobreescribir /usr/bin/python.

Editado el 10/03/2010: En algunos casos puede ser necesario agregar al configure de Python la opción –enable-shared. Gracias Orcen!

Segundo: Recompilar mod_python

Ahora queda recompilar mod_python contra la nueva versión de python.

# cd /usr/src
# wget http://www.apache.org/dist/httpd/modpython/mod_python-3.3.1.tgz
# tar -zxvf mod_python-3.3.1.tgz
# cd mod_python-3.3.1
# ./configure --with-python=/usr/bin/python2.6
# make
# make install

La clave aquí está en el configure al que le pasamos el parámetro de qué binario de Python debe usar.

Tercero: Reiniciar Apache y probar

Por último queda reiniciar Apache y repetir la prueba explicada en el artículo anterior.

# service httpd restart