Mostrando entradas con la etiqueta Configuraciones. Mostrar todas las entradas
Mostrando entradas con la etiqueta Configuraciones. Mostrar todas las entradas

Configurar opciones por defecto para el comando gem

sábado, marzo 10, 2012

Cada vez que voy a instalar una gema con el comando gem uso los parámetros --no-rdoc y --no-ri para que no me genere la documentación, principalmente porque nunca la uso y además demora demasiado el tiempo de instalación de las gemas. Pero escribir esos parámetros cada vez que ejecuto el comando es fastidioso.

Afortunadamente gem busca el archivo de configuración ~/.gemrc en el directorio personal del usuario y aplica las opciones que estén definidas, así que creando ese archivo en nuestro home con la siguiente línea no tendremos que tipear las opciones nunca más:

gem: --no-rdoc --no-ri

Configurar el Touchpad Synaptics de una HP Pavilion dm4 en Debian

lunes, octubre 31, 2011

En un artículo anterior expliqué cómo configurar el video Intel i915 con KMS en una HP Pavilion dm4. Esta vez explicaré cómo configurar el Touchpad Synaptics de esa misma laptop.

Leer el manual

Lo primero que debes hacer si deseas configurar correctamente el Touchpad es leer el manual (RTFM).
$ man synaptics

Yo configuré el touchpad a mi gusto, así que puedes probarlo y si no te gusta lo adaptas al tuyo. Sin embargo es una tarea de ensayo y error que no podrás completar a menos que conozcas todas las opciones que tienes disponibles.

Dependencias

Lo único que necesitamos es un Xorg bien configurado y los drivers synaptics. Para instalar los drivers ejecutamos:
# aptitude install xserver-xorg-input-synaptics


Entender cómo funciona el Touchpad

Básicamente no es un Touchpad, es un ClickPad y eso lo hace un poco especial. ¿Diferencias? Pues la superficie táctil también funciona como botón, que actua como uno u otro (left, right) dependiendo de la zona que se presione. No tenemos un área táctil con unos botones separados, tenemos con todo incluido, eso debe quedar muy claro.



Configuración

Xorg provee una serie de plantillas predeterminadas para la configuración de dispositivos. Estas plantillas se encuentran en /usr/share/X11/xorg.conf.d/ y basta con copiar a /etc/X11/xorg.conf.d/ la que necesitemos y comenzar a modificarla. Xorg se encargará de cargar estos valores luego de los valores predeterminados. Para nuestro caso usaremos la plantilla 50-synaptics.conf.

# mkdir /etc/X11/xorg.conf.d/
# cp /usr/share/X11/xorg.conf.d/50-synaptics.conf /etc/X11/xorg.conf.d/

Lo que haremos será modificar el InputClass para agregar los parámetros que deseamos configurar. En el manual de synaptics tenemos bien documentados cada una de las opciones con su descripción y posibles valores.

Mi configuración quedó así:
Section "InputClass"
    Identifier  "touchpad catchall"
    Driver      "synaptics"
    MatchIsTouchpad "on"
    MatchDevicePath "/dev/input/event*" 
        Option      "Protocol" "auto-dev"
        Option      "SHMConfig" "true"
        # Edges
        Option      "LeftEdge" "1500"
        Option      "RightEdge" "5200"
        Option      "TopEdge" "1350"
        Option      "BottomEdge" "3500"
        # Finger press
        Option      "FingerLow" "24"
        Option      "FingerHigh" "29"
        Option      "FingerPress" "255"
        # Taps time
        Option      "MaxTapTime" "180"
        Option      "MaxTapMove" "220"
        Option      "MaxDoubleTapTime" "180"
        Option      "SingleTapTimeout" "180"
        Option      "ClickTime" "100"
        Option      "FastTaps" "100"
        # Emulate
        Option      "EmulateMidButtonTime" "75"
        Option      "EmulateTwoFingerMinZ" "70"
        Option      "EmulateTwoFingerMinW" "5"
        # Scrolling
        Option      "VertScrollDelta" "100"
        Option      "HorizScrollDelta" "0"
        Option      "VertEdgeScroll" "1"
        Option      "HorizEdgeScroll" "0"
        Option      "CornerCoasting" "0"
        Option      "VertTwoFingerScroll" "1"
        Option      "HorizTwoFingerScroll" "1"
        # Pointer speed
        Option      "MinSpeed" "0.1"
        Option      "MaxSpeed" "1.0"
        Option      "AccelFactor" "0.75"
        Option      "TrackstickSpeed" "0"
        Option      "EdgeMotionMinZ" "29"
        Option      "EdgeMotionMaxZ" "159"
        Option      "EdgeMotionMinSpeed" "1"
        Option      "EdgeMotionMaxSpeed" "401"
        Option      "EdgeMotionUseAlways" "0"
        # Scrolling flags
        Option      "UpDownScrolling" "1"
        Option      "LeftRightScrolling" "1"
        Option      "UpDownScrollRepeat" "1"
        Option      "LeftRightScrollRepeat" "1"
        Option      "ScrollButtonRepeat" "100"
        # Touchpad mouse on/off
        Option      "TouchpadOff" "0"
        Option      "GuestMouseOff" "0"
        # Dragging
        Option      "LockedDrags" "0"
        Option      "LockedDragsTimeout" "5000"
        # Corners
        Option      "RTCornerButton" "0"
        Option      "RBCornerButton" "2"
        Option      "LTCornerButton" "0"
        Option      "LBCornerButton" "1"
        # Tap
        Option      "TapButton1" "1"
        Option      "TapButton2" "3"
        Option      "TapButton3" "2"
        # Click
        Option      "ClickFinger1" "1"
        Option      "ClickFinger2" "0"
        Option      "ClickFinger3" "0"
        # Circular
        Option      "CircularScrolling" "0"
        Option      "CircScrollDelta" "0.1"
        Option      "CircScrollTrigger" "0"
        Option      "CircularPad" "0"
        # Palm
        Option      "PalmDetect" "1"
        Option      "PalmMinWidth" "10"
        Option      "PalmMinZ" "199"
        Option      "CoastingSpeed" "0"
        # Grab
        Option      "GrabEventDevice" "1"
        Option      "TapAndDragGesture" "1"
        # Area
        Option      "AreaLeftEdge" "0"
        Option      "AreaRightEdge" "0"
        Option      "AreaTopEdge" "0"
        Option      "AreaBottomEdge" "3500"
EndSection

Section "InputClass"
    Identifier  "Ignore mouse devs"
    MatchDevicePath "/dev/input/mouse*"
    Driver      "synaptics"
    Option      "Ignore" "on"
EndSection

No explicaré en detalle cada una de las opciones (para eso está el manual de synaptics), solo explicaré las más relevantes o las "problemáticas". Lo primero es ignorar las pulsaciones en el área de los botones. Para eso definimos el rango de acción del dispositivo (límites):
        # Edges
        Option      "LeftEdge" "1500"
        Option      "RightEdge" "5200"
        Option      "TopEdge" "1350"
        Option      "BottomEdge" "3500"

        # Area
        Option      "AreaLeftEdge" "0"
        Option      "AreaRightEdge" "0"
        Option      "AreaTopEdge" "0"
        Option      "AreaBottomEdge" "3500"

Colocando el límite inferior (BottomEdge y AreaBottomEdge) en 3500 evitamos que el cursor se mueva al pasar sobre el área de botones. Estableciendo el límite derecho (RightEdge) a 5200 evitamos que el cursor se mueva en la columna derecha (para habilitar la zona de scrolling vertical). La imagen a continuación ilustra estos ajustes:



El dispositivo solo tiene un botón y a simple vista no encontré la forma de configurarlo para que funcione como ambos. Estuve compilando el driver synaptics con un patch para agregar el soporte de clickpads pero no he logrado generar el .ko, así que simplemente dejé su funcionamiento por defecto (left click) y configuré el click izquierdo con tap, el doble click con doble tap y el click derecho con tap de dos dedos.

Eso podemos verlo en:
        # Tap
        Option      "TapButton1" "1"
        Option      "TapButton2" "3"
        Option      "TapButton3" "2"

El botón para activar/desactivar el clickpad tampoco pude hacerlo funcionar pero creo que es cuestión de seguir trasteando hasta lograr una solución. Además de eso, el resto de la configuración es el ajuste de valores para la sensibilidad, aceleración y velocidad del puntero, pero eso lo dejo como tarea para el lector.

Tarea para la casa

Una de las herramientas más importantes para lograr una efectiva configuración es synclient. Gracias a esta herramienta pude determinar las coordenadas que definen los límites de mi dispositivo (que en las imágenes de arriba están marcados con azul y rojo) y verificar los valores de configuración

Usando el siguiente comando podemos verificar la actividad del touchpad en vivo:
$ synclient -m 10

La salida debería ser algo como:
   time     x    y   z f  w  l r u d m     multi  gl gm gr gdx gdy
 874.169  5392 4317   3 0  0  0 0 0 0 0  00000000
 874.269  5392 4317   0 0  0  0 0 0 0 0  00000000
 874.670  5392 4317   1 0  0  0 0 0 0 0  00000000
 874.770  5392 4317   7 0  0  0 0 0 0 0  00000000
 874.870  4143 1708   9 1 11  0 0 0 0 0  00000000
 874.970  4225 1811   3 0  0  0 0 0 0 0  00000000
 875.070  4225 1811   2 0  0  0 0 0 0 0  00000000

Donde:
  • x, y: definen las coordenadas de la pulsación
  • z: la presión aplicada
  • f: el número de dedos tocando la superficie
  • w: es una medida del ancho del dedo
  • l,r,m: el estado de los botones left, right y middle

Para más información:
$ man synclient

Espero que con esta guía puedas configurar tu ClickPad y usarlo decentemente. Me queda pendiente por investigar la función de deshabilitar el touchpad mientras se escribe, los botones left-right y el botón para activar. Cuando lo logré postearé nuevamente :)

Fuentes:

Configurar video Intel i915 + KMS en Debian Wheezy

viernes, octubre 28, 2011

Es esta receta explicaré como configurar y activar el KMS (Kernel Mode Setting) con el driver Intel i915 en una HP Pavilion dm4 . Las instrucciones están hechas para Debian Wheezy (testing a la fecha) y requiere de un kernel >= 2.6.29.

Instalar dependencias

Suponiendo que tenemos Xorg instalado y corriendo (quizás funcionando con el driver vesa) procedemos instalar el driver intel y sus dependencias:
# aptitude install libgl1-mesa-glx libglu1-mesa xserver-xorg-video-intel mesa-utils

Activar el KMS

Luego vamos al archivo /etc/modprobe.d/i915-kms.conf y agregamos la línea:
options i915 modeset=1

Regeneramos la imagen del kernel con:
# update-initramfs -u

Editamos el archivo /etc/default/grub y modificamos esta línea:
GRUB_CMDLINE_LINUX_DEFAULT="quiet i915.modeset=1 video=LVDS-1:e"

El parámetro i915.modeset=1 habilita el KMS al momento del booteo y para que la pantalla no se quede en negro luego de cargar el módulo, debemos agregar el parámetro video=LVDS-1:e.

Es importante no cargar ningún otro driver para framebuffer que no sea el de Intel y eliminar de los parámetros de booteo cualquier opción del tipo vga=xxx o video=xxx.

El parámetro video=LVDS-1:e tiene una razón de ser muy particular. El BIOS de esta máquina tiene un bug; cuando inicia, indica erróneamente que la tapa de la laptop está cerrada. El kernel, basándose en esa información, manda a apagar la pantalla y por eso todo se queda en negro, no es que se congela ni que deja de funcionar. Pueden corroborar esto cerrando y abriendo la tapa de la laptop cuando se apaga. Verán que el video vuelve mágicamente y que el equipo no se había detenido, seguía funcionando pero a ciegas.

Es bien conocido que el kernel no usa el BIOS para casi ninguna de sus tareas, sin embargo a partir del kernel 2.6.32 los desarrolladores decidieron "escuchar" al BIOS en este tipo de eventos, así que hasta que no se masifique el patch que corrige la situación debemos aplicar este correctivo.

Si desean más información pueden revisar el reporte y la resolución del bug en Launchpad o el reporte del error en fredesktop.org

Luego de ese paréntesis técnico continuamos con nuestra configuración. Reconfiguramos el grub para que se apliquen los cambios anteriores:
# update-grub

Configuración de Xorg

Lo siguiente es crear y personalizar el archivo de configuración de Xorg.

A partir de la versión 1.8, Xorg ya no necesita archivos de configuración. En lugar de eso intenta detectar y configurar todo el hardware (video y dispositivos de entrada) por si mismo. Sin embargo existen casos especiales que requieren algunos "ajustes". Este es uno de esos casos.

Procedemos entonces a detener el servidor X. Si tenemos un entorno de escritorio basta con detener el gestor de sesión (gdm, kdm, slim, xdm, etc), sino matamos las X.

Hecho esto pasamos a ejecutar:
# Xorg -configure

Eso debería generarnos un archivo xorg.conf.new que servirá como base. A ese archivo le editamos la sección "Device" para que nos quede algo como:
Section "Device"
        Option      "DRI"                       "True"
        Option      "Tiling"                    "True"
        Option      "XAANoOffscreenPixmaps"     "True"
        Identifier  "Card0"
        Driver      "intel"
        BusID       "PCI:0:2:0"
EndSection

Y agregamos al final del archivo la siguiente sección:
Section "Extensions"
        Option          "Composite" "enable"
EndSection

Observen que indicamos el driver de video y algunas opciones para mejorar el desempeño gráfico. Si conocen otras opciones (que apliquen para tarjetas Intel) también pueden agregarlas acá.

Con esto terminamos nuestra configuración del servidor X.

Reiniciar

Reiniciamos y ya deberíamos disfrutar de nuestro video usando KMS. Verán que la transición entre modos de video es casi instantánea y el parpadeo se redujo considerablemente. Además de que compiz y todas esas yerbas aromáticas se ven con una suavidad asombrosa.

Deshabilitar el KMS

Si desean deshabilitar el KMS basta con desactivar el modeset en la línea:
GRUB_CMDLINE_LINUX_DEFAULT="quiet i915.modeset=0 video=LVDS-1:e"

Reconfiguramos el grub:
# update-grub

Y KMS desactivado.

Espero que esta receta les haya servido de ayuda. En un próximo post explicaré cómo configurar el Touchpad Synaptics.

Fuentes:

Debian Wheezy sin interfaz inalámbrica luego de un safe-upgrade

martes, mayo 24, 2011

Me ocurrió hace unos días que actualicé mi Debian y repentinamente me quedé sin conexión inalámbrica. Uso Debian Testing (Wheezy para la fecha) en una HP Pavilion dv2000 y la tarjeta de red inalámbrica es una Intel PRO/Wireless 4965 AG.

Leyendo y leyendo diferentes manuales todos afirmaban que con solo instalar el paquete firmware-iwlwifi del repo non-free la cosa funcionaba a la perfección y me constaba porque así lo había hecho en un principio. Sin embargo, luego de actualizar no anduvo más y lo curioso es que el lspci me devolvía señales de vida:

07:00.0 Network controller: Intel Corporation PRO/Wireless 4965 AG or AGN [Kedron] Network Connection (rev 61)

El paquete en efecto estaba instalado:

$ aptitude search iwl | grep ^i
i firmware-iwlwifi - Binary firmware for Intel Wireless 3945, 4


El lsmod me mostraba los módulos cargados y todo estaba bien:

$ lsmod | grep iwl
iwlagn                122417  0 
iwlcore                50368  1 iwlagn
mac80211              160285  2 iwlagn,iwlcore
cfg80211              106889  3 iwlagn,iwlcore,mac80211


Incluso, los binarios del firmware también parecían estar en orden:

# find / -name "*ucode*"
/sys/module/iwlagn/parameters/ucode_alternative
/lib/firmware/iwlwifi-6050-5.ucode
/lib/firmware/iwlwifi-3945-2.ucode
/lib/firmware/iwlwifi-6000g2b-5.ucode
/lib/firmware/iwlwifi-5000-5.ucode
/lib/firmware/iwlwifi-5000-1.ucode
/lib/firmware/iwlwifi-4965-2.ucode
/lib/firmware/iwlwifi-5000-2.ucode
/lib/firmware/iwlwifi-4965-1.ucode
/lib/firmware/iwlwifi-6000-4.ucode
/lib/firmware/iwlwifi-6000g2a-5.ucode
/lib/firmware/iwlwifi-1000-3.ucode
/lib/firmware/iwlwifi-6050-4.ucode
/lib/firmware/iwlwifi-3945-1.ucode
/lib/firmware/iwlwifi-5150-2.ucode
/lib/firmware/iwlwifi-100-5.ucode


Luego intento ver el log del kernel y me encuentro con algo que me dio algunas pistas:

# tail -f /var/log/syslog
May 24 23:03:31 mpn82 kernel: [ 6214.119061] iwlagn: Intel(R) Wireless WiFi Link AGN driver for Linux, in-tree:
May 24 23:03:31 mpn82 kernel: [ 6214.119064] iwlagn: Copyright(c) 2003-2010 Intel Corporation
May 24 23:03:31 mpn82 kernel: [ 6214.119140] iwlagn 0000:07:00.0: PCI INT A -> GSI 19 (level, low) -> IRQ 19
May 24 23:03:31 mpn82 kernel: [ 6214.119153] iwlagn 0000:07:00.0: setting latency timer to 64
May 24 23:03:31 mpn82 kernel: [ 6214.119187] iwlagn 0000:07:00.0: Detected Intel(R) Wireless WiFi Link 4965AGN, REV=0x4
May 24 23:03:31 mpn82 kernel: [ 6214.157779] iwlagn 0000:07:00.0: device EEPROM VER=0x36, CALIB=0x5
May 24 23:03:31 mpn82 kernel: [ 6214.157782] iwlagn 0000:07:00.0: Device SKU: 0Xb
May 24 23:03:31 mpn82 kernel: [ 6214.157979] iwlagn 0000:07:00.0: Tunable channels: 11 802.11bg, 13 802.11a channels
May 24 23:03:31 mpn82 kernel: [ 6214.158062] iwlagn 0000:07:00.0: irq 46 for MSI/MSI-X
May 24 23:03:31 mpn82 NetworkManager[1140]:  found WiFi radio killswitch rfkill4 (at /sys/devices/pci0000:00/0000:00:1c.3/0000:07:00.0/ieee80211/phy2/rfkill4) (driver )
May 24 23:03:31 mpn82 kernel: [ 6214.161805] iwlagn 0000:07:00.0: loaded firmware version 228.61.2.24
May 24 23:03:31 mpn82 kernel: [ 6214.162128] ieee80211 phy2: Selected rate control algorithm 'iwl-agn-rs'
May 24 23:03:31 mpn82 NetworkManager[1140]:    SCPlugin-Ifupdown: devices added (path: /sys/devices/pci0000:00/0000:00:1c.3/0000:07:00.0/net/wlan0, iface: wlan0)
May 24 23:03:31 mpn82 NetworkManager[1140]:    SCPlugin-Ifupdown: device added (path: /sys/devices/pci0000:00/0000:00:1c.3/0000:07:00.0/net/wlan0, iface: wlan0): no ifupdown configuration found.
May 24 23:03:31 mpn82 NetworkManager[1140]:  (wlan0): driver supports SSID scans (scan_capa 0x01).
May 24 23:03:31 mpn82 NetworkManager[1140]:  (wlan0): new 802.11 WiFi device (driver: 'iwlagn' ifindex: 6)
May 24 23:03:31 mpn82 NetworkManager[1140]:  (wlan0): exported as /org/freedesktop/NetworkManager/Devices/3
May 24 23:03:31 mpn82 NetworkManager[1140]:  (wlan0): now managed
May 24 23:03:31 mpn82 NetworkManager[1140]:  (wlan0): device state change: 1 -> 2 (reason 2)
May 24 23:03:31 mpn82 NetworkManager[1140]:  (wlan0): bringing up device.
May 24 23:03:31 mpn82 NetworkManager[1140]:  (wlan0): deactivating device (reason: 2).


1.- El firmware se estaba cargando con la versión más actualizada según la página de Intel
May 24 23:03:31 mpn82 kernel: [ 6214.161805] iwlagn 0000:07:00.0: loaded firmware version 228.61.2.24

2.- Por alguna razón la interfaz se estaba apagando luego que cargaba el NetworkManager

Decidí buscar un poco en internet y me conseguí con este reporte de bug en Red Hat que involucraba al NetworkManager, la interfaz wireless y un mensaje de error muy similar al mío.

Probé entonces con:

# rfkill list
0: hp-wifi: Wireless LAN
 Soft blocked: yes
 Hard blocked: no
2: hp-bluetooth: Bluetooth
 Soft blocked: yes
 Hard blocked: no
4: phy2: Wireless LAN
 Soft blocked: yes
 Hard blocked: yes


Jum... phy2 y hp-wifi bloqueados por software, adicionalmente phy2 bloqueado por hardware. Raro, raro.

Hago un:

# rfkill unblock 0 && rfkill unblock 4

Y voilá, volvió a enceder el led de la interfaz inalámbrica e inmediatamente se conectó a internet :D

Cosas tontas pero que te salvan la vida. Espero que les sea de utilidad

Habilitar la función de "tap" en un TouchPad

viernes, abril 22, 2011

En estos días estaba usando mi netbook y me di cuenta que al hacer tap sobre el touchpad no se ejecutaba el click del ratón y no fue hasta hoy que me digné a buscar la solución. Es tan simple como agregar una línea en un archivo de texto.

Buscamos el archivo /etc/modprobe.d/options.conf, si no existe lo creamos y copiamos la siguiente línea:

options psmouse proto=imps

Luego hacemos (como root):

# modprobe -r psmouse
# modprobe psmouse proto=imps


Y a disfrutar del tap xD

MPD + Sonata: Una combinación perfecta para reproducir música

martes, julio 27, 2010

Lo primero que debo aclarar antes de empezar éste post es que la forma de reproducir música con éstas herramientas es completamente diferente a la tradicional. Si no te interesa reproducir música como un verdadero geek entonces huye y busca otras aplicaciones, éstas no son para tí.

Si eres valiente, continuemos entonces. MPD es un demonio (o sea un servicio) para reproducir música, corre en segundo plano y no tiene interfaz gráfica. De hecho se inicia como cualquier otro servicio de tu equipo (red, hal, udev, etc).

¿Cómo demonios hago para interactuar con él? te preguntarás. Sencillo, está basado en una arquitectura cliente-servidor así que existen aplicaciones que se comunican con él (clientes) y que te permiten manejarlo. Ahí es donde entra Sonata y compañía.

Lo primero que debemos hacer es instalar las dependencias:

# aptitude install mpd mpc sonata

Yo instalaré 2 clientes, Sonata y MPC, porque quiero controlar la reproducción vía SSH desde mi celular xD (sí, sí, muy geek... pero me gusta la comodidad)

Luego vamos a nuestro directorio personal, creamos la carpeta .mpd y dentro de ésta creamos dos carpetas más, playlists y music

$ cd ~
$ mkdir -p .mpd/playlists
$ mkdir -p .mpd/music


Dentro de la carpeta .mpd creamos los archivos mpd.db, mpd.log y mpd.error

$ touch .mpd/mpd.db
$ touch .mpd/mpd.log
$ touch .mpd/mpd.error


Ahora, por cada carpeta de música que tengamos en nuestro sistema creamos un enlace simbólico dentro de music:

$ ln -s /ruta/de_la/carpeta1 .mpd/music
$ ln -s /ruta/de_la/carpeta2 .mpd/music
...


Luego (como root) editamos el archivo de configuración del MPD en /etc/mpd.conf y modificamos las siguientes opciones:

music_directory     /home/tu_usuario/.mpd/music
playlist_directory  /home/tu_usuario/.mpd/playlists
db_file             /home/tu_usuario/.mpd/mpd.db
log_file            /home/tu_usuario/.mpd/mpd.log
error_file          /home/tu_usuario/.mpd/mpd.error


Comentamos la línea de usuario para evitar problemas con los permisos:

#user             "mpd"


Y buscamos el apartado de audio y lo configuramos para ALSA o para PulseAudio:

ALSA:
audio_output {
        type    "alsa"
        name    "My ALSA Device"
}


PulseAudio:
audio_output {
        type    "pulse"
        name    "My PulseAudio Device"
}


Establecemos un mezclador por software descomentando la siguiente línea:

mixer_type "software"

Y voilá! Luego reiniciamos el servicio y creamos la base de datos de tags:

# /etc/init.d/mpd restart --create-db

Ahora desde Sonata (o desde mpc) agregamos las canciones que queramos a la lista y empezamos a disfrutar. Es tan genial ésta combinación que podemos cerrar el Sonata e incluso hasta la sesión gráfica y la música seguirá sonando.

Nos quedará algo tan mínimo como esto:


O en su versión extendida:


Y con unas agradables notificaciones:


Díganme... ¿No es una maravilla? Bueno de aquí en adelante los dejo para que experimenten y se enamoren.

Firefox casi tan rápido como Google Chrome

martes, febrero 16, 2010

Esta semana estuve formateando mi PC (con Debian obviamente xD) y una de las cosas que más me gusta hacer es poner el sistema a punto.

Firefox, Firefox, Firefox... necesitaba optimizarlo con urgencia, estaba lento como una marrana y a pesar de que Google Chrome le estaba quitando algo de terreno (porque es rapidísimo), le soy fiel a mi obeso amigo. Decidí entonces investigar y tratar de ponerlo a dieta. Los resultados: ¡Excelentes! Casí tan veloz como Chrome. Acá les dejo la receta.

Intentaré explicar solo los más resaltantes para no extenderme mucho. Para empezar vamos a la barra de direcciones y escribimos about:config, luego de aceptar la advertencia editamos las claves que indicaré a continuación. Si la clave no existe, debemos crearla. Podemos ayudarnos con el filtro para ubicar las claves con mayor rapidez.

¡Empecemos!

1.- Optimizar las conexiones TCP: Si tienes una conexión banda ancha esto hará que Firefox la aproveche para mejorar su rendimiento al momento de cargar las páginas.

  • network.http.max-connections = 48
  • network.http.max-connections-per-server = 16
  • network.http.max-persistent-connections-per-proxy = 8
  • network.http.max-persistent-connections-per-server = 4
  • network.http.pipelining = true
  • network.http.pipelining.maxrequests = 8
  • network.http.pipelining.ssl = true
  • network.http.proxy.pipelining = true
  • network.http.request.timeout = 300
  • network.dns.disableIPv6 = true (si vives en un país donde no usen IPv6)
  • network.prefetch-next = false (evita que Firefox descargue las páginas antes de que les des clic)
  • content.notify.ontimer = true
  • content.interrupt.parsing = true
  • content.max.tokenizing.time = 2250000
  • content.maxtextrun = 8191
  • content.notify.interval = 750000
  • content.switch.threshold = 750000

2.- Optimizar el consumo de memoria: Todos sabemos que Firefox consume mucha RAM; bueno esta es la parte donde lo ponemos a dieta.

  • browser.cache.disk.capacity = 20000 (establece la cantidad de disco en KB que se usará para la cache. Usa 20000 si tienes más de 1GB de RAM, 15000 si tienes entre 1GB - 512MB y 5000 si tienes menos de 512MB de RAM)
  • browser.cache.memory.capacity = 32768 (indica la cantidad de RAM en KB que usa Firefox para la cache. Si la clave no existe la creamos de tipo Entero. Se recomienda 32768 si tienes 2GB de RAM, 16384 si tienes entre 1GB - 512MB y 8192 para menos de 512MB)

3.- Usar el nuevo motor de JavaScript TraceMonkey: El nuevo motor es más rápido y mejora la experiencia al momento de cargar páginas con alto contenido de JS (ya viene por defecto en las versiones más nuevas de Firefox).

  • javascript.options.jit.chrome = true
  • javascript.options.jit.content = true

4.- Mejorar el comportamiento: Modificaremos otras claves para mejorar el comportamiento de Firefox en diferentes situaciones.

  • toolkit.scrollbox.scrollIncrement = 75 (acelera el scrolling entre pestañas)
  • browser.sessionstore.interval = 30000 (guarda la sesión cada 30 seg y no cada 10)
  • browser.sessionstore.max_tabs_undo = 5 (indica el número de pestañas que puedes restaurar luego de cerrarlas)
  • browser.sessionhistory.max_total_viewers = 4 (indica el número de páginas que son almacenadas en la RAM para que no deban ser reprocesadas por Firefox. Puedes visitar éste sitio para mayor información)

Ya está, con eso tendremos un Firefox un poco más rápido. Y a ti, ¿te ha funcionado la receta? Deja tu comentario

Fluxbox con esteroides en Debian

sábado, septiembre 19, 2009

Fluxbox siempre me había parecido un gestor de ventanas genial, pero consideraba que aún le faltaban algunas cosas para ser un entorno de escritorio "serio", capáz de darle competencia a GNOME... Hasta hoy.

Me puse a experimentar con la mini Acer y dije... "¿Por qué no? Vamos a meterle Fluxbox a ver que tal corre" y pues, dejénme decirle que los resultados que obtuve son simplemente impresionantes.

Al momento de hacer esto lo que tenía en mente era lograr un entorno de escritorio 100% funcional (tanto o más que GNOME) pero manteniendo siempre el bajo consumo de recursos y pensando siempre en una frase que leí una vez (si mal no recuerdo en la descripción del paquete Fluxbox para Debian):

Si quiere que su escritorio se parezca a Windows entonces no use Fluxbox

Primero vamos a instalar los paquetes básicos:
# aptitude install fluxbox conky eterm pcmanfm gqview audacious wbar
Explico para qué cada cosa:

  • fluxbox: Creo que es obvio ¿no? El gestor de ventanas
  • conky: Un monitor del sistema bien ligero y configurable
  • eterm: Un emulador de terminal ligero (usado en Enlightenment) o xterm para los más rudos
  • pcmanfm: Un explorador de archivos rápido y liviano. Para no explicar mucho diré que es un Nautilus a dieta xD. También podemos instalar thunar, el explorador de archivos de XFCE
  • gqview: Un visor de imágenes ligero. También podemos usar eog (el visor de imágenes de GNOME)
  • audacious: Un reproductor de música super liviano y parecido a Winamp (para los nostálgicos :'( )
  • wbar: Un dock que imita la famosa barra de Mac OS X. Útil para usarla como lanzador de aplicaciones

Nuevamente resalto que la selección de las aplicaciones se hizo en base a la premisa de "aplicaciones ligeras y de bajo consumo", sin embargo podemos instalar cualquier otra aplicación que nos guste: pidgin, inkscape, deluge, etc, etc, etc.

¡OJO! Si no tenemos instalado GNOME necesitaremos instalar unos paquetes adicionales; pero seré sincero... NO he hecho la prueba desde una instalación sin GNOME. Me imagino que instalando los paquetes (y sus dependencias) es más que suficiente pero no puedo asegurar. Si no funciona así, griten y yo intentaré probar para actualizar el post con el procedimiento correcto (o si prueban ustedes y me dicen, mejor xD). Entonces, si no tenemos problemas de espacio en el disco recomiendo instalar:

# aptitude install gnome-desktop-environment

O si son más aventureros y desean experimentar, solo instalamos:

# aptitude install gnome-power-manager gnome-settings-daemon network-manager

Bueno, vamos ahora con la parte divertida.

Configuremos Conky

Conky como dije anteriormente es un monitor de sistema muy liviano. Allí podemos monitorear cientos de parametros de nuestro equipo y se ve bastante bien con Fluxbox :)

Lo primero que debemos hacer es habilitar el soporte de la extensión Double Buffer (DBE) del servidor X para evitar el parpadeo, ya que sin ésta no logrará actualizar la pantalla con suficiente rapidez. Para ello, vamos al archivo /etc/X11/xorg.conf y agregamos una línea con Load "dbe" en la sección Section "Module". Debería verse algo así:

Section "Module"
    Load           "dbe"
    Load           "extmod"
    Load           "type1"
    Load           "freetype"
    Load           "glx"
EndSection

Luego copiamos el archivo de configuración de ejemplo que viene con el Conky a nuestra carpeta personal:

$ cp /etc/conky/conkyrc.conf ~/.conkyrc

y lo abrimos con nuestro editor de texto favorito. Se darán cuenta que el archivo está dividido en dos partes. La primera contiene las opciones de configuración del programa (alteran su comportamiento). La segunda define las variables, el texto, y los gráficos que se mostrarán en pantalla.

La cantidad de variables y opciones que se pueden manejar son muchísimas, así que dejo la lista completa de opciones para configuración y de variables a monitorear. Si eso no es suficiente, aquí pueden ver unos cuantos screenshots con sus respectivos archivos de configuración para que echen a volar su imaginación y además les dejo mi archivo de configuración (hoy me siento benevolénte :P)

# Conky, a system monitor, based on torsmo
#

alignment top_right
background no
border_width 1
cpu_avg_samples 2
default_color white
default_outline_color white
default_shade_color white
draw_borders no
draw_graph_borders yes
draw_outline no
draw_shades no
use_xft yes
xftfont DejaVu Sans Mono:size=10
gap_x 5
gap_y 60
minimum_size 5 5
maximum_width 200
net_avg_samples 2
no_buffers yes
out_to_console no
out_to_stderr no
own_window no
own_window_class Conky
own_window_type desktop
stippled_borders 0
update_interval 1.0
uppercase no
use_spacer none
show_graph_scale no
show_graph_range no

TEXT
$nodename # $sysname $kernel on $machine
$hr
${color slate grey}${time %a, }${color }${time %d %b %G}
${color grey}Uptime:$color $uptime_short
${color slate grey}Kernel: $kernel
${color black}CPU:
$color ${cpu cpu0}% ${cpubar cpu0 4}
$color ${cpu cpu1}% ${cpubar cpu1 4}

${color grey}RAM:$color $mem / $memmax
$color ${memperc}% ${membar 4}
${color grey}Swap:$color $swap / $swapmax
$color ${swapperc}% ${swapbar 4}

${color grey}Processes:$color $processes  ${color grey}Running:$color $running_processes
$hr
${color grey}File systems:
 / $color${fs_used /}/${fs_size /} 
${fs_bar 6 /}
${color grey}Networking:
Up:$color ${upspeed eth0} ${color grey} - Down:$color ${downspeed eth0}
$hr
#${color grey}Name              PID   CPU%   MEM%
#${color lightgrey} ${top name 1} ${top pid 1} ${top cpu 1} ${top mem 1}
#${color lightgrey} ${top name 2} ${top pid 2} ${top cpu 2} ${top mem 2}
#${color lightgrey} ${top name 3} ${top pid 3} ${top cpu 3} ${top mem 3}
#${color lightgrey} ${top name 4} ${top pid 4} ${top cpu 4} ${top mem 4}

Configuremos Wbar

Wbar es un lanzador de aplicaciones que emula algunas características de la barra de Mac OS X. Es altamente configurable y la más decente que he visto hasta ahora... ¡Toma eso Gnome-Do!

Al igual que Conky trae un archivo de configuración de ejemplo y solo debemos copiarlo a nuestra carpeta personal con el nombre .wbar:

$ cp /usr/share/wbar/dot.wbar ~/.wbar

El archivo define cada uno de los lanzadores de la barra tiene el siguiente formato:

i: /ruta/del/icono
c: comando_a_ejecutar
t: Título del lanzador


La primera entrada corresponde a la imagen de fondo de la barra y no debe llevar comando.

Recomiendo hacer una selección de los iconos que desea para cada lanzador y colocarlos en una carpeta. A continuación imprimo mi archivo de configuración de lanzadores (en mi caso hice la selección de los iconos y los coloque en una carpeta llamada personal en /usr/share/wbar/iconpack/:

i: /usr/share/wbar/iconpack/wbar.osx/osxbarback.png
c:
t: /usr/share/wbar/iconpack/wbar.osx/font/16

i: /usr/share/wbar/iconpack/personal/gnome-fs-home.png
c: pcmanfm
t: Explorador de archivos

i: /usr/share/wbar/iconpack/personal/mozicon50.xpm
c: firefox
t: Firefox

i: /usr/share/wbar/iconpack/personal/gnome-terminal.png
c: xterm
t: Terminal

i: /usr/share/wbar/iconpack/personal/pidgin-menu.xpm
c: pidgin
t: Pidgin

i: /usr/share/wbar/iconpack/personal/text-editor.png
c: gedit
t: Gedit

i: /usr/share/wbar/iconpack/personal/audacious-32.xpm
c: audacious
t: Audacious

i: /usr/share/wbar/iconpack/personal/xchat.png
c: xchat
t: XChat

La otra parte interesante del wbar son los argumentos que se le pasan al momento de ejecutarlo. A continuación la lista de opciones:

Opciones
 -config: ruta del archivo de configuración (ej: $HOME/.wbar)
 -above-desk: para ejecutarlo encima del escritorio
 -idist i: distancia entre los iconos (ej: 1)
 -isize i: tamaño de los iconos (ej: 32)
 -zoomf i: factor de zoom (ej: 1.8)
 -jumpf i: factor de salto (1.0 - 0.0)
 -pos|p: posición (top | bottom | left | right | center)
 -dblclk i: milisegundos para el double click (0: un solo clic)
 -bpress: los iconos parecen presionados al darle clic
 -vbar: barra vertical
 -balfa i: transparencia de la barra (0-100)
 -falfa i: transparencia de la barra cuando no tiene foco (0-100)
 -nofont: deshabilita el dibujado de las fuentes

Los argumentos que le paso al wbar los pueden ver en el archivo startup de Fluxbox un poco más abajo.

Configuremos Fluxbox

~/.fluxbox/init

Este archivo maneja la configuración general de Fluxbox. Podemos definir la posición, el ancho y los elementos que deseamos en la barra de tareas. El archivo es extenso y con muchas opciones, así que mostraré un pedazo de mi archivo con las opciones más relevantes. Para información más detallada ...

session.screen0.toolbar.alpha: 255                    # Transparencia de la barra de herramientas
session.screen0.toolbar.widthPercent: 100             # Ancho de la barra
session.screen0.toolbar.visible: true                 # Mostrar la barra de tareas
session.screen0.toolbar.tools: prevworkspace, workspacename, nextworkspace, iconbar, systemtray, clock  # Herramientas que deseamos motrar (y el orden en que aparecerán)
session.screen0.toolbar.placement: BottomCenter       # Posición de la barra
session.screen0.toolbar.autoHide: false               # Ocultar automaticamente
session.screen0.workspacewarping: true                # Cambiar una ventana de escritorio al moverla hacie los extremos laterales
session.screen0.workspaces: 4                         # Cantidad de escritorios
session.screen0.strftimeFormat: %d %b, %a %02k:%M:%S  # Formato de la hora del reloj
session.screen0.workspaceNames: Workspace 1,Workspace 2,Workspace 3,Workspace 4,  # Nombre de cada escritorio

# Ejecutar el wbar con un delay de 5 seg para esperar que carguen todos los demás programas
session.screen0.rootCommand: sleep 5 && wbar -pos left -above-desk -vbar -jumpf 0.0 -zoomf 1.5 -idist 1 -bpress -config $HOME/.wbar

El orden en que se definan las herramientas será el orden que tengan en la barra. Las posibles herramientas son: workspacename, prevworkspace, nextworkspace, iconbar, systemtray, prevwindow, nextwindow y clock

~/.fluxbox/startup

Aquí definimos que aplicaciones se ejecutan al inicio del sistema. Mostraré mi archivo y comentaré cada opción.

#!/bin/sh
#
# fluxbox startup-script:
#
# Lines starting with a '#' are ignored.

# Change your keymap:
xmodmap "/home/satanas/.Xmodmap"

# Applications you want to run with fluxbox.
# MAKE SURE THAT APPS THAT KEEP RUNNING HAVE AN ''&'' AT THE END.

conky -d -b &
nm-applet --sm-disable &
gnome-power-manager --sm-disable &
gnome-settings-daemon &

# And last but not least we start fluxbox.
# Because it is the last app you have to run it with ''exec'' before it.

exec fluxbox
# or if you want to keep a log:
# exec fluxbox -log "/home/satanas/.fluxbox/log"


conky -d -b: El monitor del sistema ejecutado con double buffer y en segundo plano
nm-applet: El Network Manager de GNOME que nos permite manejar nuestras redes
gnome-power-manager: El applet de GNOME que entre otas funciones nos muestra el estado de la batería
gnome-settings-daemon: El demonio de configuración de GNOME. Esto es para que podamos ver los iconos y el tema de GNOME sin problemas (necesario para pcmanfm)
wbar: La famosa barrita para lanzar aplicaciones ;)

~/.fluxbox/keys

En este archivo configuramos las combinaciones de teclas (atajos de teclado) de nuestro entorno de escritorio. Fluxbox denomina a la tecla Alt como Mod1 y a la innombrable (la tecla Super o Win) como Mod4. La sintaxis del archivo es:

[teclas]: [acción] [parámetros]

Una lista completa de posibles acciones podemos verla en http://fluxbox.sourceforge.net/docbook/en/html/x359.html

Algunos atajos útiles serían:

  • Cambiar de ventana con Alt + Tab
    Mod1 Tab :NextWindow
  • Cambiar al escritorio 1 con Ctrl + F1 (se debe repetir para cada escritorio que tengamos)
    Control F1 :Workspace 1
  • Abrir un terminal con Alt + F1
    Mod1 F1 :Exec eterm
  • Abrir un diálogo de "Ejecutar" con Alt + F2
    Mod1 F2 :Exec fbrun

Resultado


Un agradable y eficiente escritorio como el que se ve en las fotos :)





Un último tip es habilitar el plugin StatusIcon de Audacious (tal como se ve en la imagen de abajo) para que podamos minimizarlo a la bandeja de sistema (haciendo clic en el icono).


¡Uff! con tanto configurar y escribir ya me dió sueño, así que me voy. Hasta la próxima

Otras referencias:
[1] http://www.gentoo.org/doc/es/fluxbox-config.xml
[2] http://fluxbox.sourceforge.net/docbook/en/html/chap-toolbar.html
[3] http://debianitas.net/doc/minicomos/Todo%20Sobre%20FLUXBOX/html/fluxbox.html
[4] http://www.estrellateyarde.es/so/fluxbox


BAM 3G Digitel en Debian

sábado, agosto 15, 2009

Hoy por fin tuve la oportunidad de jugar con un aparitico USB de Digitel; de esos que llaman Banda Ancha Móvil (un Huawei E160 para ser exáctos) y decidí configurarlo para conectarme desde Debian.

Anteriormente había tenido la oportunidad de configurar unas tarjetas Kiocera y unos CDU-680 de Movilnet, así que imaginé que no debía ser muy diferente, o sea una conexión ppp, unos parámetros de usuario, un número telefónico para marcar, bla, bla, bla y listo! internet parejo.

Sin embargo la cuestión es un tanto diferente respecto a los mencionados arriba, así que me tocó investigar y googlear un buen rato. Todas las soluciones que encontré lo configuraban usando wvdial, pero como soy terco quería hacerlo con ppp así que tuve que leer un poco sobre los chatscripts y hacer unas cuantas pruebas, hasta que dí con ésta solución.

Lo primero es conectar el dispositivo y ejecutar como root el comando dmesg. Deberíamos ver algo como:

USB Serial support registered for GSM modem (1-port)
option 1-5:1.0: GSM modem (1-port) converter detected
usb 1-5: GSM modem (1-port) converter now attached to ttyUSB0
option 1-5:1.1: GSM modem (1-port) converter detected
usb 1-5: GSM modem (1-port) converter now attached to ttyUSB1
usbcore: registered new interface driver option
option: v0.7.2:USB Driver for GSM modems

Ese mensaje nos indica que el dispositivo fue reconocido correctamente y está bajo el puerto ttyUSB0.

Ahora instalamos el pppconfig:
# aptitude install pppconfig
Posteriormente ejecutamos el pppconfig como root y creamos una conexión nueva. Para ello debemos completar el asistente con los siguientes parámetros:

Nombre del proveedor: conexion (aquí ponemos el nombre que queremos darle a la conexión)
DNS: Dinámico
Método de autenticación: CHAP
Nombre de usuario: digitel
Contraseña: 0000
Método de marcado: Tone
Número a marcar: *99#
Detectar automáticamente el modem: No
Puerto del modem: /dev/ttyUSB0

Guardamos y salimos del asistente.

Ahora la parte divertida (y la que me tomó tiempo en descifrar) es configurar el script de chat de la conexión que acabamos de crear para que funcione correctamente. Lo que tenemos que hacer es abrir (como root) el archivo /etc/chatscripts/conexion con nuestro editor favorito y en la sección # modem init colocar esto:

'' ATZ
'' ATZ+CPIN="0000"
OK 'ATQ0 V1 E1 +FCLASS=0'
OK 'AT+CGDCONT=1,"IP","gprsweb.digitel.ve"'

Un chatscript es una secuencia de pares "cadena esperada" "cadena enviada", es decir, siempre esperas algo antes de enviar algo.

Si queremos enviar algo sin esperar nada debemos usar una cadena vacía al inicio (indicada por '') y de la misma manera si queremos esperar algo sin enviar nada. Es necesario saber que si queremos esperar/enviar una cadena conformada por varias palabras, debemos encerrarla entre comillas para que sea una sola entidad para el script.

Dicho esto, procedo a explicar el script de chat que he creado para la conexión digitel. Primero inicializamos el modem. Observen que no esperamos nada del modem y enviamos la cadena ATZ:

'' ATZ
Luego enviamos el PIN de la SIM Card (si lo han conectado desde Windows se habrán dado cuenta que el software que trae el dispositivo pide el código PIN al momento de iniciar la conexión):

'' ATZ+CPIN="0000"
Ahora enviamos una trama de autenticación (aún no tengo muy clara su función) esperando un OK de la fase anterior pero entre comillas porque tiene varias palabras:

OK 'ATQ0 V1 E1 +FCLASS=0'
Y por último enviamos la información del servidor DNS:

OK 'AT+CGDCONT=1,"IP","gprsweb.digitel.ve"'
y voilá! El archivo /etc/chatscripts/conexion debería quedar algo así:

# This chatfile was generated by pppconfig 2.3.18.
# Please do not delete any of the comments. Pppconfig needs them.
#
# ispauth CHAP
# abortstring
ABORT BUSY ABORT 'NO CARRIER' ABORT VOICE ABORT 'NO DIALTONE' ABORT 'NO DIAL TO$
# modeminit
'' ATZ
'' ATZ+CPIN="0000"
OK 'ATQ0 V1 E1 +FCLASS=0'
OK 'AT+CGDCONT=1,"IP","gprsweb.digitel.ve"'
# ispnumber
OK-AT-OK "ATDT*99#"
# ispconnect
CONNECT \d\c
# prelogin

# ispname
# isppassword

Ahora vamos a probar la conexión. En un terminal ejecutaremos el siguiente comando para monitorear el progreso de la conexión:

# tail -f /var/log/messages
y en otro terminal escribiremos:

# pon conexion
El script se ejecutará, enviará las tramas que hemos especificado en la inicialización del modem y marcará el número que indicamos en la configuración de la conexión ppp para luego asignarnos una IP. Si vemos en el log la palabra Failed o Exit es porque la conexión no se realizó con éxito y debemos ejecutar nuevamente el comando pon conexion como root. El terminal ejecutando el tail de /var/log/messages mostrará el progreso de la conexión, algo como:

Aug 15 21:04:33 belzebu pppd[3615]: pppd 2.4.4 started by root, uid 0
Aug 15 21:04:34 belzebu chat[3617]: abort on (BUSY)
Aug 15 21:04:34 belzebu chat[3617]: abort on (NO CARRIER)
Aug 15 21:04:34 belzebu chat[3617]: abort on (VOICE)
Aug 15 21:04:34 belzebu chat[3617]: abort on (NO DIALTONE)
Aug 15 21:04:34 belzebu chat[3617]: abort on (NO DIAL TONE)
Aug 15 21:04:34 belzebu chat[3617]: abort on (NO ANSWER)
Aug 15 21:04:34 belzebu chat[3617]: abort on (DELAYED)
Aug 15 21:04:34 belzebu chat[3617]: send (ATZ^M)
Aug 15 21:04:34 belzebu chat[3617]: send (ATZ+CPIN="0000"^M)
Aug 15 21:04:34 belzebu chat[3617]: expect (OK)
Aug 15 21:04:34 belzebu chat[3617]: ATZ^M^M
Aug 15 21:04:34 belzebu chat[3617]: OK
Aug 15 21:04:34 belzebu chat[3617]: -- got it
Aug 15 21:04:34 belzebu chat[3617]: send (ATQ0 V1 E1 +FCLASS=0^M)
Aug 15 21:04:34 belzebu chat[3617]: expect (OK)
Aug 15 21:04:34 belzebu chat[3617]: ^M
Aug 15 21:04:34 belzebu chat[3617]: ATZ+CPIN="0000"^M^M
Aug 15 21:04:34 belzebu chat[3617]: ERROR^M
Aug 15 21:04:34 belzebu chat[3617]: ATQ0 V1 E1 +FCLASS=0^M^M
Aug 15 21:04:34 belzebu chat[3617]: OK
Aug 15 21:04:34 belzebu chat[3617]: -- got it
Aug 15 21:04:34 belzebu chat[3617]: send (AT+CGDCONT=1,"IP","gprsweb.digitel.ve"^M)
Aug 15 21:04:35 belzebu chat[3617]: expect (OK)
Aug 15 21:04:35 belzebu chat[3617]: ^M
Aug 15 21:04:35 belzebu chat[3617]: AT+CGDCONT=1,"IP","gprsweb.digitel.ve"^M^M
Aug 15 21:04:35 belzebu chat[3617]: OK
Aug 15 21:04:35 belzebu chat[3617]: -- got it
Aug 15 21:04:35 belzebu chat[3617]: send (ATDT*99#^M)
Aug 15 21:04:35 belzebu chat[3617]: expect (CONNECT)
Aug 15 21:04:35 belzebu chat[3617]: ^M
Aug 15 21:04:35 belzebu chat[3617]: ATDT*99#^M^M
Aug 15 21:04:35 belzebu chat[3617]: CONNECT
Aug 15 21:04:35 belzebu chat[3617]: -- got it
Aug 15 21:04:35 belzebu chat[3617]: send (\d)
Aug 15 21:04:36 belzebu pppd[3615]: Serial connection established.
Aug 15 21:04:36 belzebu pppd[3615]: Using interface ppp0
Aug 15 21:04:36 belzebu pppd[3615]: Connect: ppp0 <--> /dev/ttyUSB0
Aug 15 21:04:37 belzebu pppd[3615]: CHAP authentication succeeded
Aug 15 21:04:37 belzebu pppd[3615]: CHAP authentication succeeded
Aug 15 21:04:37 belzebu kernel: [ 1953.295830] PPP BSD Compression module registered
Aug 15 21:04:37 belzebu kernel: [ 1953.314554] PPP Deflate Compression module registered
Aug 15 21:04:39 belzebu pppd[3615]: Could not determine remote IP address: defaulting to 10.64.64.64
Aug 15 21:04:39 belzebu pppd[3615]: local IP address 10.68.174.162
Aug 15 21:04:39 belzebu pppd[3615]: remote IP address 10.64.64.64
Aug 15 21:04:39 belzebu pppd[3615]: primary DNS address 204.59.152.208
Aug 15 21:04:39 belzebu pppd[3615]: secondary DNS address 57.73.127.195

Para finalizar la conexión y retirar el modem basta con ejecutar como root:

# poff conexion
y esperar que se apague el led del aparato.

Es todo, ahí tenemos nuestra flamante conexión de banda ancha desde Debian :) Cualquier otra información útil o sugerencia es bienvenida.

Cambio y fuera

Gestor de ventanas por defecto en GNOME

sábado, marzo 21, 2009

Casi siempre me la paso jugando con gestores de ventanas (léase Compiz, Metacity, Openbox, etc) y resulta bastante incómodo que para hacer que uno de ellos arranque al inicio de la sesión tengamos que agregarlo en los programas de inicio de GNOME. Al hacerlo así, GNOME inicia primero su gestor de ventanas por defecto (metacity) y después inicia el que nosotros queremos. Obviamente tenemos que esperar casi el doble del tiempo para tener un escritorio usable.

Eso me motivó a leer e investigar para dar con el paradero del @#!=&%$ fulano gestor de ventanas predeterminado, hasta que por fin lo encontré!

Basta con crear un archivo .gnomerc (si no existe) en nuestro directorio personal y dentro del archivo escribimos la siguiente línea indicando la ruta del gestor de ventanas que nosotros queremos como predeterminado:

export WINDOW_MANAGER=/usr/bin/compiz

La ruta /usr/bin/compiz podemos reemplazarla por cualquier otra, como por ejemplo
/usr/bin/openbox-gnome-session para correr GNOME usando Openbox como gestor de ventanas ;)

Cambiar zona horaria en Debian

martes, diciembre 16, 2008

Para ver o configurar la zona horaria establecida en nuestro sistema Debian basta con ejecutar:

# dpkg-reconfigure tzdata

Seleccionamos el Área Geográfica:


Y posteriormente el país:

Editar la configuración de GNOME desde la consola

sábado, noviembre 29, 2008

El escritorio GNOME y muchas aplicaciones utilizan GConf para almacenar las preferencias del usuario y los datos de configuración del sistema en un repositorio central que almacena los valores en forma de pares clave-valor, simplificando la administración de la configuración para los usuarios y administradores del sistema.

GNOME viene con un editor de preferencias llamado GConf Editor. Puede invocarse desde la consola ejecutando el comando:

$ gconf-editor

Desde allí podemos cambiar la mayoría de las preferencia del sistema.

Sin embargo, cuando necesitamos cambiar las preferencias de forma automática (digamos desde un script o algún programa) el editor NO será de gran ayuda. Para ello contamos con la herramienta gconftool. Usarla es realmente simple; mostraré con un ejemplo como hacerlo.

Supongamos que deseamos mostrar en nuestro escritorio el icono de la Papelera de Reciclaje. Desde el GConf Editor podemos ver que la ruta donde se encuentra esta preferencia es /app/nautilus/desktop/ y la clave es trash_icon_visible. Obviamente si la clave está en true se mostrará el icono de la papelera y si está en false no se mostrará.

El comando sería tan sencillo como:

$ gconftool -s --type=bool /apps/nautilus/desktop/trash_icon_visible true
donde:
  • -s indica que la variable será establecida (del inglés set)

  • --type indica el tipo de clave a editar. Hasta ahora he usado string para el texto y bool para los valores booleanos (verdaderos y falsos)

  • Luego se especifica la ruta completa de la clave, en este caso /apps/nautilus/desktop/trash_icon_visible

  • Y por último el valor que le queremos asignar a la clave, en este caso true.

Podemos usar el comando donde y cuando sea necesario para ajustar nuestras preferencias al gusto.

Cambiar orden de arranque en GRUB2

miércoles, noviembre 26, 2008

GRUB (GRand Unified Bootloader) es un gestor de arranque múltiple que se usa para iniciar dos o más sistemas operativos instalados en un mismo equipo. Es el gestor de arranque usado por la mayoría de las distribuciones GNU/Linux, sin embargo su desarrollo ya no esta activo; solamente se corrigen errores mientras GRUB2 se estabiliza.

GRUB2 es un gestor de arranque derivado de PUPA y constituye la evolución del famoso GRUB. Ha sido reescrito desde cero con la finalidad de corregir todos los errores de GRUB e implementar nuevos esquemas de modularidad y portabilidad.

Los que venimos de GRUB estamos acostumbrados a cambiar todas las opciones de arranque desde el archivo /boot/grub/menu.lst, sin embargo en GRUB2 este archivo no se utiliza. Para cambiar las opciones de arranque (especificamente el orden de arranque) en GRUB2 debemos editar el archivo /etc/default/grub. En la línea:

GRUB_DEFAULT=0
Colocaremos la opción que queremos por defecto al momento de arrancar (0 para la primera opción, 1 para la segunda y así sucesivamente).

Luego ejecutamos (como super usuario):

# update-grub
Ese último comando regenera todos los archivos de configuración del GRUB2 para que los cambios surtan efecto.

Solo queda reiniciar y verificar que todo está en el orden que deseamos :)

Timidity y Guitar Pro 5 en Debian Lenny

viernes, agosto 01, 2008

Guitar Pro es un editor de tablaturas multipistas para guitarra, bajo, percusión y otros instrumentos musicales. Por los momentos es uno de los mejores (si no el mejor) editor de tablaturas pero es propietario y de paso solo disponible solo para Windows y Mac. A pesar del creciente auge del software libre es difícil encontrar un reemplazo con las mismas funcionalidades. Existen algunas alternativas libres, como kguitar o dguitar pero aún les falta madurar un poco para hacer frente a guitar pro como verdaderos contendientes.

He visto que algunas amigos no se pasan por completo a GNU/Linux porque no pueden usar Guitar Pro, así que decidí instalarlo y configurar todas las herramientas necesarias para obtener un rendimiento similar al que puede obtenerse en Windows y es lo que pretendo enseñarles a continuación. Sin embargo, hago la aclaración de que el RSE (Real Sound Engine) no funcionará muy bien (aún no he logrado corregirlo), pero el soporte MIDI funcionará al 100%. Para aquellos que no tengan Guitar Pro y deseen probarlo pueden descargar una versión de prueba de 15 días aquí

Los pasos siguientes son válidos para Debian y Ubuntu, pero la base debería ser la misma para otras distribuciones. También se supone que el sistema tiene instalado y configurado ALSA como manejador de sonidos.

Primero instalaremos Wine y Timidity.

$ sudo apt-get install wine timidity
Para explicarlo con pocas palabras, Wine es una reimplementación de la API de Windows para sistemas operativos basados en Unix (o sea, nos permitirá instalar el Guitar Pro para Windows) y Timidity es un software sintetizador que permite reproducir archivos MIDI.

Necesitamos descargar la librería de sonidos Fluid y la aplicación sfarkxtc para descomprimirla. Adicionalmente debemos instalar otra librería para que el sfarkxtc funcione correctamente:

$ sudo apt-get install libstdc++5
Mientras se descarga el Fluid instalaremos Guitar Pro en nuestro flamante sistema GNU/Linux (el método descrito también funciona para la versión completa de Guitar Pro). Para ello debemos abrir un terminal y ubicarnos en el directorio donde se encuentra el instalador y escribir:

$ wine GP5DEMO.exe
o simplemente haciendo clic derecho sobre el instalador y seleccionando la opción "Abrir con <<wine>>".


Si ésta opción no aparece entonces seleccionamos "Abrir con otra aplicación..." y en comando personalizado escribimos wine.

Lo siguiente es ejecutar en un terminal:

$ winecfg



En la versión del sistema operativo escogemos Windows XP y en la pestaña Audio seleccionamos la casilla ALSA Driver.



Vamos ahora con la configuración del Timidity. Lo primero es editar el archivo /etc/default/timidity y ubicamos la línea:
#TIM_ALSASEQ=true
y la descomentamos. Quedaría así:
TIM_ALSASEQ=true

También buscamos la línea:
TIM_ALSASEQPARAMS="-Os"
y la reemplazamos por:
TIM_ALSASEQPARAMS="-iAr -B2,8 -Os1l -s 44100 -EFreverb=0"

Posteriormente creamos la carpeta .timidity en nuestro directorio home (si es que no existe):
mkdir ~/.timidity

Cuando tengamos la librería Fluid descargada la descomprimimos junto con el sfarkxtc, en la misma ubicación (archivos FluidR3122501.zip y sfarkxtc_lx86.tar.gz respectivamente). Desde el terminal, nos colocamos en la carpeta donde fueron descomprimidos los archivos y ejecutamos:

$ ./sfarkxtc FluidR3\ GM.sfArk
$ ./sfarkxtc FluidR3\ GS.sfArk
$ mv FluidR3\ GM.SF2 ~/.timidity/FluidR3GM.SF2
$ mv FluidR3\ GS.SF2 ~/.timidity/FluidR3GS.SF2

Y con eso tendremos sendos archivos .SF2 listos para usarse. A continuación editamos el archivo /etc/timidity/timidity.cfg (también con privilegios de root) y buscamos la línea:

source /etc/timidity/freepats.cfg
y la reemplazamos por:

soundfont "~/.timidity/FluidR3GM.SF2"
soundfont "~/.timidity/FluidR3GS.SF2"

Por último, reiniciamos Timidity:

$ sudo /etc/init.d/timidity restart
En este punto ya disponemos de un Timidity con esteroides, correctamente configurado y listo para trabajar con Guitar Pro.

Si te aparece un error similar a este:
Starting TiMidity++ ALSA midi emulation...ALSA lib seq_hw.c:457:(snd_seq_hw_open) open /dev/snd/seq failed: No such file or directory
error in snd_seq_open


Entonces necesitas cargar el módulo snd_seq, para ello ejecutas:
# modprobe snd_seq

Y para que se cargue cada vez que iniciamos el equipo editas el archivo /etc/modules y agregas una nueva línea con la palabra snd_seq

Nos queda configurar el Guitar Pro para que use Timidity como dispositivo de salida MIDI. Ejecutamos Guitar Pro bien sea desde el menú Aplicaciones->Wine->Programas->Guitar Pro 5 o tecleando en el terminal:

$ cd ~/.wine/drive_c/Archivos\ de\ programa/Guitar\ Pro\ 5
$ wine GP5.exe

Allí vamos al menú Opciones->Ajuste de Audio (MIDI/RSE)... seleccionamos Timidity como dispositivo de salida MIDI y General MIDI como juego de instrumentos. Podemos jugar también con la Capacidad de los Buffers poniéndolos en un valor más alto (yo lo tengo en 2048) si notamos un sonido cortado o un poco laggeado. Para más información puedes visitar la página de soporte de Wine para Guitar Pro. Solo queda empezar a usarlo y disfrutar de secuencias MIDI con una excelente calidad xD

¿Y a tí, te sirvió esta receta?

Configurar sonido 5.1 en Ubuntu Hardy Heron

martes, julio 22, 2008

Desde hace algún tiempo tenía este tópico pendiente y hoy me decidí a resolverlo y publicar mis resultados. Trataré de explicar paso a paso lo que hice para lograr el tan anhelado sonido 5.1 en Ubuntu Hardy Heron.

Ubuntu Hardy Heron ya incluye PulseAudio así que no hace falta instalarlo (para ver una lista de todas las distribuciones haga clic aquí), sin embargo a simple vista no es posible notar su presencia porque no se incluyen las herramientas auxiliares. Lo que haremos será usar PulseAudio como reemplazo del ESD y configurar ALSA para que use PulseAudio.

La configuración de ALSA se guarda en un par de archivos ocultos en nuestro directorio home, ellos son .asoundrc y .asoundrc.asoundconf. Si estos archivos existen debemos borrarlos/renombrarlos a fin de evitar cualquier error por una configuración residual. Para lograr esto escribimos en el terminal:

$ cd ~
$ mv .asoundrc .asoundrc_old
$ mv .asoundrc.asoundconf .asoundrc.asoundconf_old


Las instrucciones anteriores nos posicionan en nuestro home y renombran los archivos .asoundrc y .asoundrc.asoundconf a .asoundrc_old y .asoundrc.asoundconf_old respectivamente. La instrucción cd ~ puede reemplazarse por cd /home/mi_directorio.

Ahora hacemos que ALSA genere estos archivos automáticamente. Primero listamos el nombre de nuestra tarjeta de sonido:

$ asoundconf list

Y el nombre que nos muestre el comando anterior lo usaremos en:

$ asoundconf set-default-card nombre_de_la_tarjeta

Posteriormente procedemos a editar el archivo de configuración del PulseAudio:

$ sudo gedit /etc/pulse/daemon.conf

Allí ubicaremos la siguiente línea:

;default-sample-channels = 2

y la reemplazaremos por:

default-sample-channels = 6

Lo que hacemos es quitar el ; para que la línea sea tomada en cuenta y cambiamos la cantidad de canales de 2 a 6.

Ahora hay que asegurarse que PulseAudio no intentará abrir el dispositivo por "defecto" para su propia salida de audio. Para ello abrimos el archivo:

$ sudo gedit /etc/pulse/default.pa

Y buscamos el siguiente fragmento de texto:

### Automatically load driver modules depending on the hardware available
.ifexists module-hal-detect.so
load-module module-hal-detect
.else
### Alternatively use the static hardware detection module (for systems that
### lack HAL support)
load-module module-detect
.endif


Debemos comentar todas estas líneas, para dejarlo así:

### Automatically load driver modules depending on the hardware available
#.ifexists module-hal-detect.so
#load-module module-hal-detect
#.else
### Alternatively use the static hardware detection module (for systems that
### lack HAL support)
#load-module module-detect
#.endif


E inmediatamente después de ese fragmento de texto agregamos la línea:

load-module module-alsa-sink device=hw:0

Una cosa importante que se debe aclarar es que PulseAudio crea sus propios grupos y todos los usuarios que quieran usar este servidor de sonidos deben pertenecer a ellos. Para que el usuario pertenezca a estos grupos ejecutamos las siguientes instrucciones:

$ sudo adduser nombre_usuario pulse
$ sudo adduser nombre_usuario pulse-access
$ sudo adduser nombre_usuario pulse-rt


Luego vamos hasta el menú Sistema->Preferencias->Sonido, en la pestaña Dispositivos seleccionamos PulseAudio Sound Server para todas las opciones y como dispositivo mezclador seleccionamos el nombre de nuestra tarjeta de sonido.



En la pestaña Sonidos nos aseguramos que la opción Activar mezcla de sonidos por software (ESD) esté activada.



Sólo nos resta reiniciar el ALSA y el PulseAudio, para esto escribimos en el terminal:

$ sudo /etc/init.d/pulseaudio restart
$ sudo /sbin/alsa reload


Con esto ya deberíamos tener todos nuestros altavoces funcionando. Recuerda verificar que el volumen está en el nivel adecuado (que no está muy bajo o silenciado), para ello cuentas con:

$ alsamixer

¿Te ha funcionado ésta configuración? Deja tu comentario y cuenta cuáles han sido tus resultados

NetBeans con C++ y Qt

miércoles, julio 16, 2008

NetBeans es un IDE que aparte de ser gratuito y open-source es muy completo. Lo he usado para varios proyectos que he desarrollado en Java y nunca me ha dejado mal.

Pero ¿qué pasa si queremos esa funcionalidad para programar en C++ usando las librerías gráficas de Qt? Pues solo hace falta seguir estos sencillos pasos y tendremos a NetBeans configurado como IDE para C++/Qt. Esta explicación se hará bajo un sistema operativo GNU/Linux y suponiendo que ya tenemos el NetBeans instalado (sino puede visitar la página de NetBeans, descargarlo e instalarlo).

Configuración del Editor
  1. Instalar el plugin para C/C++: Vamos al menú Tools->Plugins, en la pestaña Available Plugins buscamos el de C/C++, lo marcamos y hacemos clic en instalar.



    Luego hacemos clic en Next, aceptamos la licencia y comenzará la descarga del plugin



  2. Incluir las librerias de C++ y Qt: Para esto vamos al menú principal, en Tools->Options y nos ubicamos en la pestaña Code Assistance.



    Aquí debemos agregar las siguientes rutas para que el editor reconozca las librerias de C++

    /usr/include/c++/4.2
    /usr/include/c++/4.2/i486-linux-gnu
    /usr/include/c++/4.2/backward
    /usr/local/include
    /usr/lib/gcc/i486-linux-gnu/4.2.3/include
    /usr/include

    Y estas otras para que reconozca las librerias de Qt

    /usr/include/qt4
    /usr/include/qt4/Qt
    /usr/include/qt4/QtCore
    /usr/include/qt4/QtGui
    /usr/include/qt4/QtSql
    /usr/include/qt4/QtNetwork

    Si está usando un sistema operativo distinto de GNU/Linux debe buscar el equivalente de estas rutas.

Si todo ha salido bien al hacer clic en el menú File->New Project deberíamos tener una ventana como la que se muestra a continuación, donde se observa claramente la nueva opción de C/C++ en las categorías de proyectos.



Configuración del Proyecto

Con lo que hemos hecho hasta ahora NetBeans sabe como crear, compilar y ejecutar un proyecto en C/C++ e incluso sabe dónde están las librerías estándar de C/C++ y Qt, pero aún no tiene idea de cómo compilar y ejecutar una aplicación para Qt.

NetBeans usa un archivo Makefile para cada proyecto (generado automáticamente) donde se encuentran las reglas para la compilación. Las aplicaciones Qt no usan las mismas reglas que las aplicaciones C/C++ estándares, así que la solución para esto la tenemos en estos sencillos pasos

  1. Generar el Makefile: Debemos generar nuestro propio Makefile indicándole a NetBeans las reglas para compilar nuestros proyectos Qt. Las aplicaciones Qt se compilan de la siguiente forma:

    qmake -project (para generar el proyecto, es decir el archivo .pro)
    qmake (para generar el Makefile)
    make (para compilar la aplicación usando el Makefile de arriba)


    Es decir, solo tenemos que agregar las dos instrucciones con qmake antes del make correspondiente. Sin embargo aquí se presenta un problema, NetBeans trabaja con un archivo Makefile y qmake trabaja con otro archivo Makefile, ambos son diferentes pero con el mismo nombre. Si compilamos el proyecto de esta forma el Makefile generado por qmake sobreescribirá al Makefile del NetBeans y tendremos que estar reescribiendo este archivo cada vez que queramos generar el proyecto. Para evitar eso basta con hacer que qmake genere su archivo con otro nombre, eso lo logramos agregando la opción -o al qmake. El nuevo Makefile del Netbeans (el único Makefile que debería queda a este punto) podría ser algo como:

    # build
    build: QMake
    make -f QMakefile

    # clean
    clean: QMake
    make distclean -f QMakefile
    rm *.pro -f
    rm QMakefile -f

    # all
    all: build

    QMake:
    qmake -project
    qmake -o QMakefile

    Nota: Antes de cada instrucción DEBE ir un tabulador.

    En el código anterior se nota claramente la definición de la regla QMake, que se encargará de manejar todo lo referente al qmake, además pasamos el parámetro -o al qmake para que genere un archivo de nombre QMakefile y no sobreescriba el Makefile de NetBeans. En el build se llama a la regla QMake (para que qmake genere el .pro y el QMakefile) y luego se hace el make del QMakefile, en el clean llamamos a la regla QMake (para que qmake limpie todo), hacemos la limpieza con make y luego borramos el .pro y el QMakefile para asegurarnos de que se crearan nuevamente la próxima vez que generemos el proyecto

  2. Especificar la ruta del ejecutable: NetBeans ubica los ejecutables en una ruta que depende de la forma en la que generamos el proyecto (Debug o Release) pero qmake coloca el ejecutable en la misma ruta donde se encuentra el proyecto (.pro). Para lograr que NetBeans pueda ejecutar nuestra aplicación debemos especificar la ruta en la que se encuentra nuestro ejecutable. Para ello vamos a las propiedades del proyecto (en la ventana de proyectos hacemos clic sobre el nombre de nuestro proyecto y luego clic derecho -> Properties). Acá buscamos la opción Linker->General y editamos el atributo Output; solo debemos colocar el nombre de la carpeta del proyecto (con mayúsculas y minúsculas)


Con esto ya pueden disfrutar de un completo IDE para C/C++ y Qt.

¿Cómo cambiar la resolución de pantalla en Hardy Heron?

miércoles, junio 04, 2008

Hace poco me topé con un problemita en Hardy Heron. Quería cambiar la resolución de la pantalla.

Primero fui hasta el menú Sistema->Preferencias->Resolución de pantalla. Allí no me reconocía otra resolución excepto 800x600 y 640x480. Decidí ir hasta el menú Sistema->Administración y buscar la opción Pantallas y gráficos pero... ¿Dónde está? ¿Dónde lo pusieron? Simplemente desapareció.

Bueno no importa, me dije, voy a hacerlo por consola; ahí no hay pérdida. Abro mi terminal y ejecuto:

$ sudo dpkg-reconfigure xserver-xorg




¿Cuál es mi sorpresa? Que el reconfigure solo me preguntó por distribución de teclado y una que otra tontería sobre mis dispositivos de entrada. No me preguntó por mi adaptador de vídeo, ni por el monitor, ni nada de eso ¿Qué rayos hicieron con las opciones de configuración para la resolución de pantalla?

Bueno después de trastear un poco con google, algunos comandos y algunas páginas del manual encontré la solución. Para obtener el dialogo de configuración tenemos que ejecutar:

$ sudo displayconfig-gtk

y listo! Tendremos nuestro dialogo para seleccionar el adaptador de vídeo y la resolución del monitor.



No sé por qué escondieron tan bien ese dialogo en esta versión. Esperemos que solo sea un bug xD

Firestarter en Hardy Heron

lunes, abril 28, 2008


¿Acaso actualizaste tu flamante y estable Gutsy Gibbon a Hardy Heron y ahora no te funciona el Firestarter? Bueno, si es tu caso posiblemente encuentres la solución en las próximas líneas.

El problema viene porque el script del Firestarter toma la salida del comando ifconfig y busca todas las líneas que contengan la palabra Mas (de Mascara) pero en Hardy Heron, el comando ifconfig no devuelve la palabra Mascara sino Máscara (con acento en la primera a).

Así, para solucionar este inconveniente abrimos el archivo /etc/firestarter/firestarter.sh con nuestro editor favorito (en modo superusuario) y reemplazamos todas las ocurrencias de:
grep Mas
por
grep Más
Con eso tendremos nuestro Firestarter funcionando a la perfección nuevamente.

Configurar un servidor SVN sin dolor

martes, enero 29, 2008

Con esta entrada pretendo explicar como configurar tu propio servidor SVN de una forma indolora :D. Los pasos que describo son los que he seguido para configurar mi propio servidor, así que sí los siguen al pie de la letra y no se topan con ninguna "anormalidad" todo debería marchar sobre ruedas.

No pretendo extenderme en la explicación, sólo daré las bases para que estes en capacidad de manejar y mantener su propio servidor. Todos los procedimientos aquí descritos fueron realizados bajo Debian "Lenny" sin embargo, son compatibles para cualquier distro Debian-based. Si no usas una distribución basada en Debian entonces debes buscar el equivalente para algunos de los comandos (principalmente para los de instalación).

Antes de comenzar aclaro que todos los comandos que comienzen con # deben ser ejecutados con privilegios de super usuario o root. Los que comiencen con $ pueden ser ejecutados por el usuario corriente.

Bueno ¡Comencemos!


  • Primero, instalemos Subversion. Como root debes ejecutar:
    # apt-get install subversion

  • Luego creamos un repositorio de pruebas. Por defecto, subversion creará al árbol de directorios en /srv/svn, así que usaremos ésta ruta para nuestro repo
    # svnadmin create /srv/svn/repo

  • Ahora configuremos quienes pueden acceder al repositorio. Editamos el archivo /srv/svn/test/conf/svnserve.conf y nos aseguramos que quede como se indica más abajo.
    ¡Atención!: Estos permisos serán concedidos de una forma bastante básica. Si necesitas un nivel de seguridad mayor te recomiendo que leas al detalle el manual de SVN.
    [general]
    anon-access = none
    auth-access = write
    password-db = passwd

    Con esa modificación le decimos al servidor svn que los usuarios anónimos no tienen acceso, los usuarios autenticados pueden leer/escribir y que la base de datos empleada para las contraseñas es el archivo passwd.

  • Pasemos a la configuración de los usuarios y las contraseñas. Editamos el archivo /srv/svn/test/conf/passwd
    [users]
    pete = contraseña_de_pete
    maria = contraseña_de_maria

  • Es hora de iniciar el servidor:
    # svnserve -d -r /srv/svn

    Fíjense en el argumento "-r", esto se usa para esconder la ruta real de nuestro repositorio en la url pública del repositorio. Explicaré esto mejor con un ejemplo: sin la -r los usuarios para hacer una tarea común como el 'checkout' deben hacer svn checkout svn://hostname/srv/svn/test, pero si incluímos la -r a la hora de iniciar el servidor solo basta con hacer svn checkout svn://hostname/test para realizar la tarea (Nótese la ausencia de la ruta /srv/svn en la segunda opción)

  • Ahora creamos la carpeta de nuestro proyecto (con la estructura trunk, branch y tags), en este caso test:
    # mkdir -p /srv/svn/repo/test/trunk
    # mkdir -p /srv/svn/repo/test/branch
    # mkdir -p /srv/svn/repo/test/tags


Ok, ¡estamos listos con el servidor! Fácil, ¿no? Bueno, ahora probemos nuestro repo. Vamos a crear unos archivos de prueba y hagamos el primer 'commit'.

$ echo "Hola Mundo" > /tu_directorio_actual/test
$ echo "Texto de prueba" > /tu_directorio_actual/test2


Con el cliente svn ejecutamos la siguiente instrucción:
$ svn import /tu_directorio_actual/ svn://hostname/test -m "Initial Commit"
Adding /tu_directorio_actual/test1
Adding /tu_directorio_actual/test2

Commited revision 1.

Excelente, ya tenemos configurado nuestro servidor SVN y ¡funciona!. Recuerda que en la instrucción anterior debes reemplazar hostname por la dirección IP del servidor

Para actualizar tu "copia" del repositorio ejecuta:
$ svn update

Para verificar el estado de tus archivos de trabajo:
$ svn status

Y por último, pero no menos importante, el envío de tus modificaciones al servidor (commit):
$ svn commit -m "Comentario del Commit"

Es todo por ahora, espero que ésta pequeña guía les sea de utilidad.