En ocasiones nos toca respaldar gran cantidad de información de un equipo a otro y una de las maneras más cómodas de hacerlo es a través de la red. Para esta tarea usaremos Rsync que, al igual que netcat, son unas navajas suizas en lo que a red se refiere. Rsync, entre otras cosas, nos permite sincronizar directorios a través de la red y de esa forma lo usaremos para enviar nuestros archivos de un equipo a otro.

Comando y parámetros

Lo primero que necesitamos es acceso vía SSH al equipo remoto. Puede ser por clave pública o con usuario y contraseña. Luego nos ubicamos en la carpeta que queremos respaldar y ejecutamos el comando: $ rsync -ravz archivo_a_respaldar usuario@IP:directorio_destino Donde:
  • r: recorre los directorios de manera recursiva
  • a: conserva los atributos de los archivos (usuario, permisos, etc)
  • v: imprime información en pantalla
  • z: comprime los datos antes de enviar
Luego de la autenticación comenzará la copia de los archivos. Es importante resaltar que en el directorio_destino debemos colocar la ruta absoluta a la carpeta.

Copiar un archivo

Supongamos que queremos respaldar el archivo backup.tar.gz en un equipo remoto con IP 192.168.0.3, el usuario es satanas y el directorio destino es el home del usuario, el comando nos quedaría así:
$ rsync -avz backup.tar.gz satanas@192.168.0.3:~
El símbolo ~ puede sustituirse por la ruta absoluta /home/satanas.

Copiar un directorio y todos sus subdirectorios

Ahora supongamos que queremos respaldar el directorio /tmp/music en el mismo equipo anterior pero ahora el destino es la carpeta /home/satanas/musica, el comando nos quedaría así: $ rsync -ravz /tmp/music satanas@192.168.0.3:/home/satanas/musica

Con esta receta podremos pasar nuestro respaldo de archivos de un equipo a otro sin mucho inconveniente. Espero que les sirva

Leer más

Situación

Queremos conocer el espacio en disco usado por un directorio (y sus subdirectorios inmediatos) con un comando de consola.

Comando

$ du -h -s /tu/directorio/*

Resultado

El comando te imprimirá algo como:
$ du -h --summarize /tu/directorio/*
2.5M /var/backups
286M /var/cache
139M /var/lib
4.1k /var/local
4.1k /var/lock
98M /var/log
4.4M /var/mail
4.1k /var/opt
103k /var/run
66k /var/spool
4.1k /var/tmp

Explicación

El comando du te da un estimado del espacio utilizado por un directorio, la opción -h te imprime los números en potencias de 1024, --sumarize muestra solo el total para cada elemento y /tu/directorio/* corresponde al directorio que deseas analizar. El * al final es la clave para indicarle al comando que queremos ver los subdirectorios.

Leer más

Si usualmente utilizas la consola interactiva de Ruby On Rails para realizar pruebas, correr tareas de Rake, entre otras cosas y te resultaría sumamente útil ver el log de lo que esta haciendo el ActiveRecord, entonces este tip es para ti.

Simplemente ejecuta la consola desde la carpeta raíz de tu aplicación Rails:

Para rails 3.x:
$ rails c
Para rails 2.x:
$ script/console
Y luego indícale al logger que use la salida estándar:
ActiveRecord::Base.logger = Logger.new(STDOUT)
Con eso los mensajes de log del ActiveRecord se imprimirán en la consola.

Leer más

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:

En Debian:
# 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" "28"
Option "FingerHigh" "35"
Option "FingerPress" "70"
# Taps time
Option "MaxTapTime" "180"
Option "MaxTapMove" "220"
Option "MaxDoubleTapTime" "180"
Option "SingleTapTimeout" "180"
Option "ClickTime" "100"
Option "FastTaps" "0"
# 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.5"
Option "MaxSpeed" "7.0"
Option "AccelFactor" "0.35"
Option "TrackstickSpeed" "0"
Option "EdgeMotionMinZ" "29"
Option "EdgeMotionMaxZ" "59"
Option "EdgeMotionMinSpeed" "1"
Option "EdgeMotionMaxSpeed" "40"
Option "EdgeMotionUseAlways" "0"
# Scrolling flags
Option "UpDownScrolling" "0"
Option "LeftRightScrolling" "0"
Option "UpDownScrollRepeat" "0"
Option "LeftRightScrollRepeat" "0"
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" "7"
Option "PalmMinZ" "40"
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

Actualización: Acá pueden ver la configuración actual que tengo en mi repo github

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:

Leer más

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:

Leer más

¿No les ha pasado que a veces encuentran en Youtube videos que son unas verdaderas joyas musicales y les gustaría tenerlos en su colección musical? Bueno con este truco es muy fácil hacerlo.

Primero instalamos el Youtube Downloader. Desde Debian sería:
# aptitude install youtube-dl
Instalamos el ffmpeg (en caso de no tenerlo):
# aptitude install ffmpeg
Luego descargamosel video desde Youtube y extraemos el audio:
$ youtube-dl --extract-audio
Eso nos generará un archivo .aac, ahora procedemos a convertirlo a mp3 (o al formato de nuestra preferencia):
$ ffmpeg -i .aac -ar 22050 -ab 32 .mp3
Y ya podremos disfrutar de la pieza de audio en nuestro reproductor favorito a partir del video de Youtube

Leer más

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

Leer más

Si usando rvm, intentas abrir una consola de Rails (con rails c o con script/console) y te escupe un error como este:

no such file to load -- readline (LoadError)

Entonces sigue estos pasos y resolverás el problema.

Primero, debemos instalar el paquete del readline en rvm (y no en el Sistema Operativo). Para eso removemos la versión actual de Ruby que podamos tener:

$ rvm remove 1.8.7

Instalamos el paquete readline:

$ rvm install package

E instalamos Ruby pero indicándole la ubicación del paquete readline:

$ rvm install 1.8.7 --with-readline-dir=$rvm_path/usr

Acto seguido, entramos a la carpeta en donde rvm almacena los fuentes de las extensiones de Ruby, específicamente del readline. En mi caso:

$ cd ~/.rvm/src/ruby-1.8.7-p302/ext/readline

Luego (como root) instalamos las dependencias necesarias. En Debian sería:

# aptitude update
# aptitude install libreadline5-dev


Procedemos (como usuario) a compilar e instalar la extensión en cuestión:

$ ruby extconf.rb
$ make
$ make install


Y con eso ya deberíamos disfrutar nuevamente de la consola interactiva de Rails sin problemas.

Leer más