Archive for the ‘GNU/Linux’ Category

Distribución GNU/Linux para niños

noviembre 3, 2017

Quienes me conocen (como los amigos de la Comunidad Software Libre Puebla) y quienes leen mi blog saben que la distribucíón GNU/Linux que uso generalmente es Debian. En el post anterior escribí sobre una distribución GNU/Linux que recomiendo a usuarios finales (basada en Debian).

Este post trata sobre una distribución GNU/Linux que recomiendo para niños; y si, adivinaron, también está basada en Debian. Se llama PicarOS y la encuentran en la página http://minino.galpon.org. De acuerdo a el texto que aparece en su propio sitio de Internet, está personalizada para la enseñanza primaria y es recomendable para niños de entre 3 y 12 años.

Conozco a una niña que aprendió a usar la computadora cuando tenía 2 años con la distribución GNU/Linux llamada DoudouLinux, también basada en Debian y ahora usa PicarOS. DoudouLinux también es bastante recomendable pero está menos actualizada que PicarOS, de hecho varios programas que vienen en DoudouLinux también vienen en PicarOS.

Estas dos distribuciones de GNU/Linux son una buena opción para que los niños aprendan a usar una PC, y que mejor que con un buen sistema operativo como GNU/Linux.

Anuncios

Distribución GNU/Linux recomendable para usuarios finales

octubre 4, 2017

Las distribuciones GNU/Linux que suelo instalar en servidores son Debian y CentOS (principalmente Debian porque me gusta más el sistema de paquetes .deb que el .rpm). Pero para una PC que va a ser utilizada por un usuario final suelo recomendar Point Linux que precisamente está basada en Debian.

Aquí les dejo un video de cómo descargar Point Linux y también un documento con capturas de pantalla para hacer una instalación.

Instalar PointLinux

Instalar Scratch 2 en Debian

abril 30, 2016

Scratch es un software diseñado por el MIT (Massachusetts Institute of Technology) para acercar a los niños al mundo de la programación de computadoras enseñándoles los principios de la lógica de programación https://scratch.mit.edu/about.

Instalar Scratch 2 Offline Editor en GNU/Linux puede ser un poco complicado para un usuario final debido a que Scratch requiere que esté instalado Adobe Air, y las últimas versiones de Adobe Air ya no son compatibles con GNU/Linux. La última versión de Adobe Air para GNU/Linux es la 2.6. En este post explico como instalarlo en Debian pero el procedimiento debería funcionar también en la mayoría de las distribuciones de GNU/Linux basadas en Debian, lo probé también en Point Linux y funcionó.

Empecemos:

Descargar Adobe Air 2.6 para GNU/Linux

Se puede descargar directamente de la página de Scratch https://scratch.mit.edu/scratch2download/

Descarga_AdobeAir

o de http://airdownload.adobe.com/air/lin/download/2.6/AdobeAIRInstaller.bin

Desde una terminal nos vamos al directorio en donde descargamos el archivo AdobeAIRInstaller.bin y le damos permisos de ejecución

chmod +x AdobeAIRInstaller.bin

Ejecutamos el instalador sudo ./AdobeAIRInstaller.bin

Nos aparece la siguiente ventana

instalacion_AdobeAir

Hacemos click en Acepto.

Si en lugar de que aparezca un mensaje diciendo “Instalación completada” nos aparece algo como “Adobe AIR could not be installed. Install either Gnome Keyring or KDE KWallet before installing Adobe AIR”, entónces hay que verificar que en /usr/lib se encuentren los archivos libgnome-keyring.so.0 y libgnome-keyring.so.0.x.x (en dónde x.x son números, por ejemplo 1.1, o 2.0). Si esos archivos no están ahí, seguramente están en /usr/lib/i386-linux-gnu, así que demos hacer enlaces simbólicos

Ejemplo suponiendo que el segundo archivo es libgnome-keyring.so.0.2.0

sudo ln -s /usr/lib/i386-linux-gnu/libgnome-keyring.so.0 /usr/lib

sudo ln -s /usr/lib/i386-linux-gnu/libgnome-keyring.so.0.2.0 /usr/lib

Ejecutar el instalador nuevamente (sudo ./AdobeAIRInstaller.bin)

Instalar Scratch

Descargar Scratch https://scratch.mit.edu/scratch2download/

Descarga_Scratch

El día de hoy que estoy publicando este post, el archivo que se descarga es Scratch-446.air

Desde la terminal, estando en el directorio en donde descargamos scratch, ejecutamos

sudo /opt/Adobe\ AIR/Versions/1.0/Adobe \AIR\ Application\ Installer /home/salomon/Scratch-446.air

Con eso estamos indicando que queremos instalar Scratch en el directorio /opt.

Aparece la siguiente ventana

Instalacion_Scratch

hacemos click en Instalar, aparece otra ventana en la que sólo debemos hacer click en Continuar y eso es todo. Queda instalado Scratch 2 Offline Editor

Restaurar el MBR (Master Boot Record) de Windows desde GNU/Linux

diciembre 6, 2014

Un amigo mio acudió a mi con un “problema”, en su trabajo le dieron una netbook Asus Eee PC que viene con Windows 7 Starter, la máquina trae una partición oculta en la que viene una imagen de la instalación de fábrica, dicha imagen sirve para reinstalar Windows en la computadora y que quede como si se fuera a usar por primera vez.

Mi amigo le instaló una distribución de GNU/Linux (sin borrar Windows) y rara vez utilizaba Windows, de hecho yo creo que si fuera por el lo hubiera borrado, pero no puede hacerlo ya que la computadora pertenece a la empresa y en cualquier momento pueden solicitarle que la regrese en las condiciones en las que se la entregaron (ya sea porque le van a dar otra y esa se la van a asignar a alguien más, o si renuncia o lo despiden, etc.). En fin, el caso es que la última vez que intentó entrar a Windows, le apareció el mensaje “Bootmgr is missing Press Ctrl+Alt+Del to restart”.

Como realmente en la partición de Windows no tenía información que le interesara respaldar, le sugerí que desde GRUB seleccionáramos la partición de recuperación de Windows (la imagen que permite reinstalar Windows en la computadora y que quede como si se fuera a usar por primera vez), el dijo que estaba bien y me preguntó si era posible también instalarle otra distribución de GNU/Linux en lugar de la que tenía; ya que al parecer, esa distribución iba a dejar de ser soportada por sus desarrolladores.

Arrancamos entonces desde su distribución de GNU/Linux que tenía instalada, respaldamos en una memora USB la información que quería respaldar y reiniciamos la computadora.

Al arrancar con la partición de recuperación de Windows, la aplicación te da la opción de hacer la recuperación o crear un respaldo, después de indicar que deseábamos hacer la recuperación, la computadora se reiniciaba y volvía a aparecer el menú de GRUB. Para que esto funcionara debíamos eliminar GRUB del sector de arranque.

Arrancamos nuevamente desde su distribución de GNU/Linux para restaurar el MBR de Windows y así eliminar GRUB del sector de arranque.

Lo que hay que hacer es instalar el paquete syslinux

sudo apt-get install syslinux

y después copiar el archivo mbr.bin al disco duro con el comando dd

sudo dd if=/usr/lib/syslinux/mbr/mbr.bin of=/dev/sda

Una vez hecho esto, reiniciamos la PC y ya no aparecía el menú de GRUB, sólo el mensaje “Bootmgr is missing Press Ctrl+Alt+Del to restart”. Para entrar a la partición oculta (ya sin GRUB); en el momento en que está arrancando la computadora hay que pulsar la tecla F9 (esto es en el caso específico de la netbook Asus Eee PC, en otras marcas y modelos puede ser con otra tecla o combinación de teclas).

Reiniciamos la computadora, entramos a la partición de recuperación de Windows pulsando F9, indicamos que deseábamos hacer la recuperación y no un respaldo y esta vez la aplicación para restaurar la imagen de Windows y dejar la instalación como cuando se compró la computadora, funcionó. Acto seguido procedimos a instalar una nueva distribución de GNU/Linux en la computadora.

Menú en la terminal de GNU/Linux con C++ y códigos de escape

enero 4, 2013

El hacer un programa en modo texto para GNU/Linux en C++ que muestre un menú con una barra que se controle con las flechas del teclado implica más trabajo del que se requiere para lograr lo mismo si nuestro programa fuera a ejecutarse en un sistema operativo basado en DOS (ya sea MS-DOS, Windows, etc.)

A continuación muestro una posible solución de como lograrlo sin utilizar ncurses, únicamente códigos de escape, esto tiene la pequeña desventaja de que no funciona para cualquier terminal, pero para xterm y algunas otras no debe haber problema

Crearemos una fución que espere a que el usuario pulse una tecla y regrese el valor correspondiente a esa tecla, la función debe tomar en cuenta las teclas que al ser pulsadas regresan tres valores, siendo el primer valor el que corresponde a la tecla ESC (que es el 27)

int lee_caracter()
{
 struct termios config_ant;
 struct termios config_nueva;
 int caracter;

 tcgetattr(STDIN_FILENO, &config_ant);
 config_nueva = config_ant;                /* Guarda los valores actuales de configuración de la terminal */
 config_nueva.c_lflag &= ~(ICANON | ECHO); /* resetea las banderas canonical y echo para que no se muestre en pantalla lo que se teclea*/
 tcsetattr(STDIN_FILENO, TCSANOW, &config_nueva); /* Establece los nuevos valores para la terminal */
 caracter = getchar();

 // si se pulsa una tecla que empieza con un código de escape
 if (caracter==27)
    {
     caracter=getchar();
     if (caracter==91)
         caracter=getchar(); //caracter ahora tiene el valor de la tecla pulsada
    }

 tcsetattr(STDIN_FILENO, TCSANOW, &config_ant); /* Vuelve a poner los valores originales de configuración de la terminal */

 return caracter;
}

Los atributos y colores que podemos manejar son los siguientes:

#define RESET        0
#define BRIGHT       1
#define DIM          2
#define UNDERLINE    3
#define BLINK        4
#define REVERSE      7
#define HIDDEN       8
#define BLACK        0
#define RED          1
#define GREEN        2
#define YELLOW       3
#define BLUE         4
#define MAGENTA      5
#define CYAN         6
#define WHITE        7

Necesitamos también una función que nos permita establecer el atributo, color de la fuente y color de fondo que vamos a utilizar antes de escribir un texto

void ColorTexto(int atributo, int texto, int fondo)
{
 std::string color = "\033["+toString(atributo)+";"+toString(texto+30)+";"+toString(fondo+40)+"m";
 cout<<color;
}

Este programa utiliza las dos funciones descritas anteriores para mostrar un menú vertical, se asume una terminal de 80 columnas

/*
Debido a que este programa usa el archivo de cabecera termios.h,
sólo funciona en sistemas operativos que cumplan con el estándar POSIX
Es decir, cualquier distribución de GNU/Linux o cualquier Unix.
*/

#include <iostream>
#include <sstream>    /* Para poder usar istringstream */
#include <string>
#include <termios.h>  /* Para poder usar las estructuras termios */
#include <stdio.h>    /* Para poder usar getchar() */
#include <iomanip>    /* Para poder usar setw */

#define RESET        0
#define BRIGHT       1
#define DIM          2
#define UNDERLINE    3
#define BLINK        4
#define REVERSE      7
#define HIDDEN       8

#define BLACK        0
#define RED          1
#define GREEN        2
#define YELLOW       3
#define BLUE         4
#define MAGENTA      5
#define CYAN         6
#define WHITE        7

const std::string default_console = "\033[0m";

using std::cout;
using std::endl;
using std::setw;

template <typename T>
static std::string toString (T numero)
{
 std::ostringstream ss;
 ss << numero;
 return ss.str();
}

void ColorTexto(int atributo, int texto, int fondo);
int lee_caracter();
void ImprimeMenu(std::string menu[], int tamanio, int op);

int main()
{
 std::string str_menu[4] = {"1. Registrar", "2. Consultar", "3. Modificar", "4. Salir    "};
 int tecla, opcion=0, seleccion=1;

do
 {
  ImprimeMenu(str_menu,4,seleccion);
  tecla = lee_caracter();

  switch (tecla)
         {
          case 10:
                  // Enter
                  opcion = seleccion;
                  break;
          case 65:
                  // Flecha arriba
                  seleccion = (seleccion==1 ? 4 : seleccion-1);
                  opcion = 0;
                  break;
          case 66:
                  // Flecha abajo
                  seleccion = (seleccion==4 ? 1 : seleccion+1);
                  opcion = 0;
                  break;
          default:
                  opcion = tecla-48;
                  if (opcion>=1 && opcion<=4)
                     {
                      seleccion = opcion;
                      ImprimeMenu(str_menu,4,seleccion);
                     }
         }
  if (opcion>=1 && opcion<=4)
     {
      cout<<"Opcion "<<opcion<<endl;
      lee_caracter();
     }
  }
 while (opcion!=4);

 return 0;
}

void ColorTexto(int atributo, int texto, int fondo)
{
 std::string color = "\033["+toString(atributo)+";"+toString(texto+30)+";"+toString(fondo+40)+"m";
 cout<<color;
}

int lee_caracter()
{
 struct termios config_ant;
 struct termios config_nueva;
 int caracter;

 tcgetattr(STDIN_FILENO, &config_ant);
 config_nueva = config_ant;                /* Guarda los valores actuales de configuración de la terminal */
 config_nueva.c_lflag &= ~(ICANON | ECHO); /* resetea las banderas canonical y echo para que no se muestre en pantalla lo que se teclea*/
 tcsetattr(STDIN_FILENO, TCSANOW, &config_nueva); /* Establece los nuevos valores para la terminal */
 caracter = getchar();

 // si se pulsa una tecla que empieza con un código de escape
 if (caracter==27)
    {
     caracter=getchar();
     if (caracter==91)
         caracter=getchar(); //caracter ahora tiene el valor de la tecla pulsada
    }

 tcsetattr(STDIN_FILENO, TCSANOW, &config_ant); /* Vuelve a poner los valores originales de configuración de la terminal */

 return caracter;
}

void ImprimeMenu(std::string menu[], int tamanio, int op)
{
 int x=0, pos;
 unsigned int longitud=0;

 // Obtiene la longitud de la opción del menú con más caracteres
 for (x=0; x<tamanio; ++x)
     {
      if (menu[x].length() > longitud)
          longitud = menu[x].length();
     }
 pos = (80 - longitud) / 2;

 // Limpia la pantalla
 cout << "\033[2J\033[1;1H";

 for (x=0; x<tamanio; ++x)
     {
      // Deja el número de espacios adecuado para que el menú quede centrado (se asume una pantalla de 80 caracteres)
      cout<<default_console;
      cout<<setw(pos)<<" ";

      if (x+1==op)
          ColorTexto(BRIGHT,YELLOW,MAGENTA);
      else
          ColorTexto(BRIGHT,WHITE,BLUE);
      cout<<menu[x]<<endl;
     }
 cout<<default_console<<endl;
}

menu

Ahora la versión para mostrar el menú en forma horizontal

/*
 Debido a que este programa usa el archivo de cabecera termios.h,
 sólo funciona en sistemas operativos que cumplan con el estándar POSIX
 Es decir, cualquier distribución de GNU/Linux o cualquier Unix.
*/

#include <iostream>
#include <sstream>    /* Para poder usar istringstream */
#include <string>
#include <termios.h>  /* Para poder usar las estructuras termios */
#include <stdio.h>    /* Para poder usar getchar() */
#include <iomanip>    /* Para poder usar setw */

#define RESET        0
#define BRIGHT       1
#define DIM          2
#define UNDERLINE    3
#define BLINK        4
#define REVERSE      7
#define HIDDEN       8

#define BLACK        0
#define RED          1
#define GREEN        2
#define YELLOW       3
#define BLUE         4
#define MAGENTA      5
#define CYAN         6
#define WHITE        7

const std::string default_console = "\033[0m";

using std::cout;
using std::endl;
using std::setw;

template <typename T>
static std::string toString (T numero)
{
 std::ostringstream ss;
 ss << numero;
 return ss.str();
}

void ColorTexto(int atributo, int texto, int fondo);
int lee_caracter();
void ImprimeMenu(std::string menu[], int tamanio, int op);

int main()
{
 std::string str_menu[4] = {"1. Registrar", "2. Consultar", "3. Modificar", "4. Salir"};
 int tecla, opcion=0, seleccion=1;

 do
   {
    ImprimeMenu(str_menu,4,seleccion);
    tecla = lee_caracter();

    switch (tecla)
           {
            case 10:
                    // Enter
                    opcion = seleccion;
                    break;
            case 67:
                    // Flecha derecha
                    seleccion = (seleccion==4 ? 1 : seleccion+1);
                    opcion = 0;
                    break;
            case 68:
                    // Flecha izquierda
                    seleccion = (seleccion==1 ? 4 : seleccion-1);
                    opcion = 0;
                    break;
            default:
                    opcion = tecla-48;
                    if (opcion>=1 && opcion<=4)
                       {
                        seleccion = opcion;
                        ImprimeMenu(str_menu,4,seleccion);
                       }
           }
    if (opcion>=1 && opcion<=4)
       {
        cout<<"Opcion "<<opcion<<endl;
        lee_caracter();
       }
   }
 while (opcion!=4);

 return 0;
}

void ColorTexto(int atributo, int texto, int fondo)
{
 std::string color = "\033["+toString(atributo)+";"+toString(texto+30)+";"+toString(fondo+40)+"m";
 cout<<color;
}

int lee_caracter()
{
 struct termios config_ant;
 struct termios config_nueva;
 int caracter;

 tcgetattr(STDIN_FILENO, &config_ant);
 config_nueva = config_ant;                /* Guarda los valores actuales de configuración de la terminal */
 config_nueva.c_lflag &= ~(ICANON | ECHO); /* resetea las banderas canonical y echo para que no se muestre en pantalla lo que se teclea*/
 tcsetattr(STDIN_FILENO, TCSANOW, &config_nueva); /* Establece los nuevos valores para la terminal */
 caracter = getchar();

 // si se pulsa una tecla que empieza con un código de escape
 if (caracter==27)
    {
     caracter=getchar();
     if (caracter==91)
         caracter=getchar(); //caracter ahora tiene el valor de la tecla pulsada
    }

 tcsetattr(STDIN_FILENO, TCSANOW, &config_ant); /* Vuelve a poner los valores originales de configuración de la terminal */

 return caracter;
}

void ImprimeMenu(std::string menu[], int tamanio, int op)
{
 int x=0, pos;
 unsigned int longitud=0;

 // Obtiene la longitud total del menú dejando dos espacios entre cada opción
 for (x=0; x<tamanio; ++x)
     {
      longitud += menu[x].length();
      if (x!=tamanio-1)
          longitud +=2;
     }

 pos = (80 - longitud) / 2;

 // Limpia la pantalla
 cout << "\033[2J\033[1;1H";

 // Deja el número de espacios adecuado para que el menú quede centrado (se asume una pantalla de 80 caracteres)
 cout<<setw(pos)<<" ";
 for (x=0; x<tamanio; ++x)
     {
      if (x+1==op)
          ColorTexto(BRIGHT,YELLOW,MAGENTA);
      else
          ColorTexto(BRIGHT,WHITE,BLUE);
      cout<<menu[x];
      if (x!=tamanio-1)
        {
         ColorTexto(BRIGHT,WHITE,BLUE);
         cout<<"  ";
        }
     }
 cout<<default_console<<endl;
}

menuh

Instalar JRE en CentOS 6

agosto 9, 2011

CentOS 6 viene con Firefox 3.6.9, para instalar el plugin de Java en dicho navegador en esta versión de CentOS hay que hacer lo siguiente (básicamente son los pasos que indica la página de Java, sólo que ahi tienen algunos errores, al menos al momento en que estoy escribiendo este post):

Descargar de la página de Java el paquete (archivo RPM)

Cerrar Firefox

Desde la terminal, cambiarse al usuario root

Ir al directorio en donde se desea hacer la instalación y poner ahi el archivo RPM; en mi caso fue el archivo jre-6u26-linux-i586.rpm.bin y lo instalé en /usr/local

Agregar permisos de ejecución al archivo RPM tecleando chmod a+x jre-6u26-linux-i586.rpm.bin

Ejecutar el archivo tecleando ./jre-6u26-linux-i586.rpm.bin

Ir al directorio /usr/lib/firefox-3.6 y crear el directorio plugins

cd /usr/lib/firefox-3.6

mkdir plugins

Ir al directorio plugins y crear ahi un enlace simbólico al archivo libnpjp2.so de la instalación de Java

cd plugins

ln -s /usr/java/jre1.6.0_26/lib/i386/libnpjp2.so

Para comprobar la instalación, abrir Firefox y en la barra de direcciones teclear about:plugins (se muestran los plguins que están instalados y debe aparecer entre ellos el de Java).

Instalación de Debian Squeeze en Lenovo Ideapad S12

febrero 7, 2011

Debemos descargar los archivos necesarios para hacer una memoria usb desde la cual podamos arrancar la Netbook e instalar Debian Squeeze.

Ir a http://ftp.nl.debian.org/debian/dists/squeeze/main/installer-i386/current/images/ y entrar a la opción hd-media que aparece del lado izquierdo

Descargar el archivo boot.img.gz

Ir a http://cdimage.debian.org/debian-cd/6.0.0/i386/iso-cd/ y descargar la imagen iso netinstall de Debian 6  (debian-6.0.0-i386-netinst.iso).

Insertar la memoria usb y desde la terminal teclear df -k, que en mi caso muestra la siguiente información:

Filesystem           1K-blocks      Used Available Use% Mounted on
/dev/hda1              4806904   3638732    923988  80% /
tmpfs                   501760         0    501760   0% /lib/init/rw
udev                     10240       744      9496   8% /dev
tmpfs                   501760         0    501760   0% /dev/shm
/dev/hda3             33309260   3991576  27625640  13% /home
/dev/sda1               244476    217996     26480  90% /media/usb0

Lo que significa que la usb está en /dev/sda1.

Desmontar la memoria usb:

sudo umount /dev/sda1

Copiar el archivo boot.img.gz a la memoria usb usando el comando zcat

zcat boot.img.gz > /dev/sda1

Volver a montar la memoria usb, copiar la imagen iso y desmontar la memoria

sudo mount /dev/sda1 /media/usb0

sudo cp debian-6.0.0-i386-netinst.iso /media/usb0

sudo umount /dev/sda1

Ahora ya podemos utilizar la memoria usb para arrancar la Netbook desde ahi (hay que configurar en el BIOS de la Netbook que la usb sea el primer dispositivo de arranque)

Configuración de la tarjeta de red inalámbrica

Debian Squeeze no configura la tarjeta de red inalámbrica que viene con la Lenovo Ideapad S12, que es el modelo BCM4312 de Broadcom Corporation. Para lograr que funcione, se deben seguir los siguientes pasos (que están en http://wiki.debian.org/wl)

Agregar a nuestro archivo /etc/apt/sources.list los repositorios non-free y contrib

deb http://ftp.us.debian.org/debian/ squeeze main contrib non-free

Depués de guardar el archivo, hacer el correspondiente sudo apt-get update e instalar los paquetes module-assistant y wireless-tools

sudo apt-get install module-assistant wireless-tools

Para los siguientes pasos, les sugiero que se cambien al usuario root, ya que algunos no funcionan simplemente usando sudo.

Usando module assitant, construir e instalar el paquete broadcom-sta-modules

m-a a-i broadcom-sta

Hay que poner en la lista negra (blacklist) el módulo brcm80211 para evitar que exista conflicto con el soporte para las tarjetas de red inalámbrica BCM4313, BCM43224 y BCM43225

echo blacklist brcm80211 >> /etc/modprobe.d/broadcom-sta-common.conf

Se debe reconstruir el sistema de archivos inicial que se carga en memoria RAM cuando inicia GNU/Linux para que siempre estén bloqueados los módulos que se difinieron en /etc/modprobe.d/broadcom-sta-common.conf

update-initramfs -u -k $(uname -r)

Descargar de la memoria los módulos que causan conflicto con el módulo wl

modprobe -r b44 b43 b43legacy ssb brcm80211

Cargar el módulo wl

modprobe wl

Y con eso queda funcionando la tarjeta de red inalámbrica en Debian Squeeze en la Netbook Lenovo Ideapad S12

Configuración del cliente de mensajería en GNOME

Debian Squeeze instalado con el escritorio GNOME trae como cliente de mensajerría el paquete Empathy que por  default sólo trae la opción de usar cuentas de jabber, chat de facebook y google talk.

Para poder usar una cuenta de msn (como hotmail por ejemplo), hay que instalar el paquete telepathy-butterfly

sudo apt-get install telepathy-butterfly

Instalación del plugin de Flash

Para ver videos en Youtube, debemos tener instalado el plugin de flash, así que para instalarlo ejecutamos

sudo apt-get install flashplugin-nonfree

Evento KDE España

abril 21, 2010

Para quienes colaboran de alguna forma con el proyecto KDE, usuarios o seguidores de este escritorio, les comento que se llevará acabo el Akademy-es 2010 en Bilbao, España, los días 7, 8 y 9 de Mayo.

Más información en los siguientes enlaces:

http://www.kde-espana.es/akademy-es2010/doku.php

http://www.kde-espana.es/akademy-es2010/doku.php?id=anuncio

Descargar videos con clive en Debian Lenny

enero 5, 2010

Como usuario de alguna distribución de GNU/Linux, probablemente usas clive (command line video extraction utility) para descargar videos de youtube, dailymotion, etc.

Para quienes nunca lo hayan usado, es tan simple como teclear desde consola clive seguido de la URL del video que queremos descargar, así de fácil.

La versión de clive que viene en Debian Lenny no puede descargar videos de youtube, al intentar descargar algún video aparece un error como el siguiente:

error: extraction url (&video_id) not found
=> 0 (0.0B), failed: 1, skipped: 0.
error: nothing to extract.

Aparentemente esto se debe a algunos cambios que hizo youtube en la forma de identificar los videos.

¿La solución?

Ya está en los backports una versión de clive que funciona con la nueva forma de identificación de videos que youtube implementó. Así que para instalar la versión de clive que viene en los backports primero hay que agregar el repositorio de backports a nuestro archivo /etc/apt/sources.list insertando la siguiente línea:

deb http://www.backports.org/debian lenny-backports main contrib non-free

despues hacemos sudo apt-get update y finalmente

sudo apt-get -t lenny-backports install clive

Y eso es todo.

Para ver la lista de los sitios de donde podemos descargar videos con clive  y en que formatos, tecleamos clive –hosts y obtenemos la salida siguiente:

youtube.com     flv|3gp|mp4|hq|hd
video.google.   flv|mp4
sevenload.com   flv
break.com       flv
liveleak.com    flv
evisor.tv       flv
dailymotion.com flv|spark-mini|vp6-hq|vp6-hd|vp6|h264
tv.cctv.com     flv
redtube.com     flv
vimeo.com       flv|hd
spiegel.de      flv|vp6_928|vp6_576|vp6_64|h264_1400
golem.de        flv|ipod|high
ehrensenf.de    flv
clipfish.de     flv
funnyhub.com    flv
myubo.com       flv

Note: Some videos may have limited number of formats available.

Agregar archivos a una imágen de disco

octubre 5, 2009

Quienes no sepan que es una imágen de disco pueden encontrar información al respecto en el siguiente enlace http://en.wikipedia.org/wiki/Disk_image.

A continuación voy a poner un ejemplo de cómo agregar y borrar archivos a una imágen de disco desde GNU/Linux.

Para este ejemplo, vamos a utilizar una imágen de disco de FreeDOS llamada balder10.img (se puede decargar de aquí: http://www.finnix.org/Balder); esta es una imágen de disco de 1.44Mb con formato DOS.

Primero debemos crear un directorio para montar la imágen de disco (en este caso creé un directorio llamado imagendisco en mi home).

mkdir /home/salomon/imagendisco

Ahora montamos la imágen de disco indicando el tipo de sistema de archivos (en este caso vfat porque es formato DOS) y que la montaremos con permisos de lectura y escritura (rw).

sudo mount -t vfat -o loop,rw,umask=0002 balder10.img /home/salomon/imagendisco

Si hacemos un ls al directorio /home/salomon/imagendisco veremos el contenido de la imágen de disco

append.exe    defrag.hlp    fdapm.com     keyb.exe      share.com
assign.com    deltree.com   fdconfig.sys  keyboard.sys  shrdrv86.exe
attrib.com    devload.com   fdisk.exe     keybrd2.sys   shsucdhd.exe
autoexec.bat  diskcomp.com  fdisk.ini     label.exe     shsucdx.com
cdrcache.sys  diskcopy.exe  fdiskpt.ini   lbacache.com  subst.exe
chkdsk.exe    diskcopy.ini  fdshield.com  loadcd.bat    sys.com
choice.exe    display.exe   fdxms286.sys  mem.exe       tickle.com
command.com   dosfsck.exe   find.com      mode.com      tree.com
comp.com      drvon.com     format.exe    more.exe      unzip.exe
country.sys   edit.exe      graph-hp.com  move.exe      xcdrom.sys
ctmouse.exe   edit.hlp      graphpin.com  nansi.sys     xcopy.exe
cwsdpmi.exe   edlin.exe     graph-ps.com  nlsfunc.exe   xdma.sys
debug.com     emm386.exe    himem.exe     pcisleep.com  zip.exe
defrag.exe    fc.exe        kernel.sys    replace.exe

supongamos que queremos agregar un archivo llamado leeme.txt, basta con copiar el archivo al directorio en donde montamos la imágen de disco

sudo cp leeme.txt /home/salomon/imagendisco

si ahora hacemos un ls vemos que el archivo ha sido agregado

append.exe    defrag.hlp    fdapm.com     keyb.exe      replace.exe
assign.com    deltree.com   fdconfig.sys  keyboard.sys  share.com
attrib.com    devload.com   fdisk.exe     keybrd2.sys   shrdrv86.exe
autoexec.bat  diskcomp.com  fdisk.ini     label.exe     shsucdhd.exe
cdrcache.sys  diskcopy.exe  fdiskpt.ini   lbacache.com  shsucdx.com
chkdsk.exe    diskcopy.ini  fdshield.com  leeme.txt subst.exe
choice.exe    display.exe   fdxms286.sys  loadcd.bat    sys.com
command.com   dosfsck.exe   find.com      mem.exe       tickle.com
comp.com      drvon.com     format.exe    mode.com      tree.com
country.sys   edit.exe      graph-hp.com  more.exe      unzip.exe
ctmouse.exe   edit.hlp      graphpin.com  move.exe      xcdrom.sys
cwsdpmi.exe   edlin.exe     graph-ps.com  nansi.sys     xcopy.exe
debug.com     emm386.exe    himem.exe     nlsfunc.exe   xdma.sys
defrag.exe    fc.exe        kernel.sys    pcisleep.com  zip.exe

Ahorsa sólo desmontamos la imágen de disco

sudo umount /home/salomon/imagendisco

y eso es todo.

El borrado de archivos de la imágen de disco una vez montada es igualmente simple, supongamos que quisieramos borrar el archivo unzip.exe, bastaría con hacer

sudo rm /home/salomon/imagendisco/unzip.exe

Podemos montar la imágen con permisos de sólo lectura si sólo queremos ver el contedido y no vamos a aregar ni borrar archivos de la misma.

sudo mount -t vfat -o loop,ro,umask=0222 balder10.img /home/salomon/imagendisco