viernes, 1 de agosto de 2014

Uso del terminal en Linux (I)

Lo primero... ¿qué es el terminal?

Al que venga de sistemas Windows le recordará a la antigua línea de comandos de MS-DOS, pero el terminal de Linux es mucho más. De hecho en Linux es posible hacer prácticamente cualquier cosa sin utilizar el modo gráfico, incluido navegar por internet o leer el correo electrónico, existen incluso algunos juegos diseñados para usar en modo texto.
Aunque lo más común es usarlo bajo un entorno gráfico como GNOME, KDE o Unity, hay que tener en cuenta que es posible utilizarlo por separado como prácticamente cualquier cosa en Linux.
El terminal gráfico es accesible de forma intuitiva desde los menús del sistema, en Ubuntu por ejemplo no hay más que pulsar la tecla de Windows o el botón de Ubuntu (que abre el Dash) y buscar la palabra "terminal".
En cuanto a los terminales en modo texto, hay disponibles 6 totalmente independientes entre sí, y también del entorno gráfico. Se accede a ellos mediante la combinación CTRL+ALT+Fx (donde x es el número de terminal, nombrados como tty1, tty2, etc, por ejemplo para acceder al tty1 se haría pulsando a la vez CTRL, ALT y F1).
Para abrir cada una de estas sesiones se debe introducir el nombre de usuario y la contraseña. Si queremos volver al modo gráfico tendremos que hacerlo con  CTRL+ALT+F7.

Si por cualquier cosa necesitamos cerrar la sesión gráfica (es necesario por ejemplo para instalar los drivers propietarios de la tarjeta) tendremos que decirle al terminal que queremos parar el servidor gráfico correspondiente. Esto se hace con la siguiente línea:

$ sudo /etc/init.d/gdm stop


Esta sólo sirve para el gestor gdm, el que incluye por defecto el escritorio GNOME. Sin embargo en Ubuntu el gestor de escritorio es lightdm, y en KDE es kdm, por lo que habría que cambiar gdm por el correspondiente en cada caso. Si en lugar de pararlo queremos arrancarlo habrá que cambiar stop por start, y si lo que queremos es reiniciarlo (útil si el escritorio se ha quedado colgado por cualquier motivo) se usaria con restart.

Habéis visto antes que he usado "sudo" para parar el gestor de escritorio. Significa "substitute user do" y se utiliza para poder ejecutar un comando como otro usuario. Generalmente este usuario suele ser el administrador, y es que para hacer cualquier operación de tipo administrativa en el sistema (de hecho para hacer cualquier operación fuera del directorio /home) es necesario tener privilegios de administrador. Para hacer esto se podría directamente abrir una sesión de administrador, con "sudo su" en Ubuntu o "su -" en otros sistemas. Te pedirá la contraseña y a partir de entonces aparecerá una almohadilla # en el prompt que indica que tenemos privilegios de administrador (habitualmente $ significa que somos un usuario normal y # que estamos como administrador).



No obstante si sólo necesitamos ejecutar un comando (por ejemplo instalar un programa con apt-get) puede resultar algo engorroso, por lo que es más cómodo usar simplemente la palabra sudo delante del comando, lo que equivale a decir al sistema que vamos a entrar como administrador. Ojo, es IMPRESCINDIBLE la contraseña de administrador para cualquier operación de instalación, desinstalación, cambios en la configuración o en cualquier archivo de cualquier carpeta que no esté dentro del directorio /home. Para instalar un programa en Ubuntu o Debian (o cualquier distribución derivada de estas, como Linux Mint) se haría de la siguiente manera:

$ sudo apt-get install nombredelprograma

En otros sistemas se utilizan otros comandos para la instalación y desinstalación, en Fedora "yum", en OpenSUSE sería "zypper", etc. pero de eso ya hablaré otro día.

miércoles, 30 de julio de 2014

Instalar Skype en Ubuntu


En Ubuntu hay ya incluido un programa de mensajería instantánea llamado Empathy, compatible no sólo con las cuentas de Hotmail o Windows Live, sino también con las de Yahoo! y Google entre otras.
No obstante, hay quien preferirá usar el programa oficial de Microsoft, que al tener una licencia privada no está incluido en los repositorios de Ubuntu.
Para instalar el programa hay varias formas. Una de las más simples es ir a la web de Skype y descargar el último archivo .deb.

Web de Skype

La versión que tendremos que descargar es la de Ubuntu 12.04 (multiarch) que es compatible tanto con sistemas de 32 como de 64 bits.

Una vez tengamos el archivo descargado abrimos el Terminal, nos colocamos en el directorio donde se haya descargado el archivo (normalmente Descargas) y lo instalamos con el comando dpkg:

$ cd Descargas
$ sudo dpkg -i skype*.deb (poniendo el asterisco nos ahorramos escribir toda la numeración y funciona para todas las versiones)

Después de este paso lo normal es que nos dé un error, debido a que nos faltan algunas dependencias (en especial en las versiones de 64 bits de Ubuntu, ya que Skype sólo está disponible para sistemas de 32 y necesita las librerías "multiarch"). Esto es fácil solucionarlo mediante la siguiente linea:

$ sudo apt-get -f install

Que nos instalará todas las dependencias necesarias para que el programa funcione.

Otra forma de instalar Skype es mediante el uso del PPA (archivo de paquetes personal). De esta forma no sólo podemos instalar el programa directamente con APT sino que además las actualizaciones son automáticas.
Para añadir el PPA correspondiente sólo hay que abrir el terminal y escribir:

$ sudo sh -c "echo 'deb http://archive.canonical.com/ubuntu/ trusty partner' >> /etc/apt/sources.list.d/skype.list"

Esta línea crea un archivo skype.list en nuestra carpeta de repositorios que incluye el correspondiente a nuestra versión de Ubuntu. Si en lugar de trusty es natty o saucy por ejemplo, sólo habría que cambiar esa palabra por la correspondiente a nuestra versión.

Una vez hayamos añadido el repositorio, tenemos que actualizar la lista con sudo apt-get update, e instalar con apt:

$ sudo apt-get update
$ sudo apt-get install skype

Esto nos instalará Skype junto a todas sus dependencias, y quedará listo para usarse inmediatamente. Una vez instalado (de cualquiera de las 2 formas) para encontrarlo sólo hay que pinchar en el botón de Ubuntu o pulsar la tecla de Windows y luego escribir "skype" en el cuadro de búsqueda:


jueves, 22 de mayo de 2014

Bug del cliente de Spotify para Linux en Debian Wheezy (problema de dependencias con las librerías GLIBC)

Hace unos días apareció una nueva actualización del cliente de Spotify para Linux. Aunque en Ubuntu parece funcionar sin problemas, en la versión estable de Debian (Wheezy) al intentar arrancar no puede debido a un problema de dependencias con las librerías GLIBC a las que no puede acceder por ser una versión superior a la disponible en los repositorios stable.

spotify: /lib/x86_64-linux-gnu/libc.so.6: version `GLIBC_2.14' not found (required by spotify)
spotify: /lib/x86_64-linux-gnu/libc.so.6: version `GLIBC_2.14' not found (required by /opt/spotify/spotify-client/Data/libcef.so)
spotify: /lib/x86_64-linux-gnu/libc.so.6: version `GLIBC_2.15' not found (required by /opt/spotify/spotify-client/Data/libcef.so)


Solucionar el problema es fácil aunque no es intuitivo.
En primer lugar hay que editar el archivo /etc/apt/sources.list donde se encuentran los repositorios y añadir los de "jessie":

deb http://ftp.de.debian.org/debian jessie main contrib non-free 

Luego hay que editar /etc/apt/preferences y añadir estas líneas para dar preferencia al repositorio estable y así no tener que actualizar todo el sistema:

Package: *
Pin: release a=testing
Pin-Priority: 10

Package: *
Pin: release a=stable
Pin-Priority: 900


Se actualiza la lista de repositorios con sudo apt-get update y por último se instalan las librerías glibc6 de la siguiente manera:

sudo apt-get install -t testing libc6-dev

Y aquí tenéis el nuevo Spotify para Linux funcionando ya perfectamente:


sábado, 17 de mayo de 2014

Compilar Wine 1.7 en Debian Wheezy (64 bits)

Uno de los problemas de usar Debian en su rama estable es que no tenemos acceso a los últimos repositorios, y por ello, tampoco a las últimas versiones de algunos programas. En la mayoría no suele tener importancia, pero en el caso de Wine, el programa que sirve para dar compatibilidad a juegos y programas de Windows, es mucha la diferencia entre la versión incluida (Wine 1.4) y la actual (Wine 1.7)

Como compilar Wine directamente en Debian puede dar muchos problemas de dependencias, ya que mezcla librerías de 32 y 64 bits (sobre todo si se usa la versión de 64 bits de Debian), lo mejor es crear un entorno nativo en 32 bits.

En primer lugar tenemos que instalar el paquete debootstrap:

# aptitude install debootstrap

Creamos un directorio para nuestro sistema de archivos "enjaulado", lo podemos llamar por ejemplo "temp":

# mkdir temp
# cd temp

Dentro de este directorio "temp" usamos debootstrap de la siguiente manera:

# debootstrap --arch i386 wheezy $HOME/temp http://ftp.us.debian.org/debian/

Con esto se creará un árbol de directorios completo dentro del nuestro (habrá que esperar un rato a que se descarguen los archivos). Nuestra nueva carpeta quedaría así:


Montamos el directorio /proc y copiamos el archivo resolv.conf de nuestro Debian en el nuevo árbol:

# mount -o bind /proc proc
# cp /etc/resolv.conf etc/resolv.conf

Ya estamos listos para entrar en nuestro sistema de archivos como chroot:

# cd ..
# chroot temp

Una vez dentro del nuevo sistema de archivos creamos nuestro usuario de cuenta "/home":

# aptitude update
# aptitude install locales sudo vim
# echo 'export LC_ALL="C"'>>/etc/bash.bashrc
# echo 'export LANG="C"'>>/etc/bash.bashrc
# echo '127.0.0.1 localhost localhost' >> /etc/hosts
# source /etc/bash.bashrc
# adduser manu
# usermod -g sudo manu
# echo 'Defaults !tty_tickets' >> /etc/sudoers
# su manu
# cd ~/

Ojo que tendremos que cambiar "localhost" por el nombre de nuestro ordenador y "manu" por nuestro nombre de usuario. En la linea de adduser nos pedirá nuestros datos y password, al ser un sistema "virtual" podemos poner cualquiera, ya que sólo los usaremos dentro del chroot.

Ya estamos dentro de nuestra cuenta de usuario y dentro del directorio /home/usuario de nuestro nuevo árbol. Creamos otro nuevo directorio para guardar el código fuente de nuestro wine. Lo llamamos por ejemplo wine17:

$ mkdir wine17
$ cd wine17

Descargamos ahora el código fuente de Wine 1.7, por ejemplo desde aquí:

$ wget http://sourceforge.net/projects/wine/files/Source/wine-1.7.18.tar.bz2

Instalamos antes de nada las dependencias necesarias:

$ sudo apt-get install libx11-dev:i386 libfreetype6-dev:i386 libxcursor-dev:i386 libxi-dev:i386 libxxf86vm-dev:i386 libxrandr-dev:i386 libxinerama-dev:i386 libxcomposite-dev:i386 libglu-dev:i386 libosmesa-dev:i386 libglu-dev:i386 libosmesa-dev:i386 libdbus-1-dev:i386 libgnutls-dev:i386 libncurses-dev:i386 libsane-dev:i386 libv4l-dev:i386 libgphoto2-2-dev:i386 liblcms-dev:i386 libgstreamer-plugins-base0.10-dev:i386 libcapi20-dev:i386 libcups2-dev:i386 libfontconfig-dev:i386 libgsm1-dev:i386 libtiff-dev:i386 libpng-dev:i386 libjpeg-dev:i386 libmpg123-dev:i386 libopenal-dev:i386 libldap-dev:i386 libxrender-dev:i386 libxml2-dev:i386 libxslt-dev:i386 libhal-dev:i386 gettext:i386 prelink:i386 bzip2:i386 bison:i386 flex:i386 oss4-dev:i386 checkinstall:i386 ocl-icd-libopencl1:i386 opencl-headers:i386 libasound2-dev:i386 build-essential liblcms2-dev

Descomprimimos el tar y cambiamos al directorio del código descomprimido:

$ tar -xvf wine-1.7.18.tar.bz2
$ cd wine-1.7.18

Ejecutamos el archivo de configuración y compilamos de la manera habitual (cambiar el 4 de j4 por el número de núcleos de nuestro procesador, si es por ejemplo de 2 núcleos se pondría j2)

$ ./configure
$ make -j4

Una vez se haya compilado con éxito (aparecerá el mensaje "Wine build complete.", y tardará un buen rato dependiendo de la velocidad de nuestro procesador) usamos checkinstall para crear un archivo de extensión .deb listo para instalar.

$ sudo checkinstall --install=no

Nos hará varias preguntas, podemos darle a Intro simplemente, ya que funciona bien con las opciones por defecto.

Después de que termine este paso (que también tardará un poco, paciencia...) tendremos nuestro archivo .deb listo para instalar.

Por seguridad lo mejor que podemos hacer ahora es ir a la carpeta donde lo hemos creado y copiarlo en un sitio más accesible, por ejemplo en nuestra carpeta personal.




Para instalar las dependencias de 32 bits de Wine necesitamos salir del chroot. Esto se puede hacer usando el comando exit hasta llegar a la sesión principal, aunque para asegurarse de verdad lo mejor es cerrar la ventana del terminal y abrir una nueva. Las dependencias las instalamos de la siguiente manera:

# dpkg --add-architecture i386
# apt-get update
# apt-get install ia32-libs

Por último, sólo nos queda posicionarnos en el directorio donde hayamos colocado el archivo .deb (en mi caso en la carpeta personal) e instalar normalmente con dpkg:

# cd /home/usuario
# dpkg -i wine_1.7.18-1_i386.deb

jueves, 27 de marzo de 2014

Programar en Linux - GCC y el 'Hola Mundo'

Una de las ventajas del software libre, y en particular, de GNU/Linux, es la facilidad para modificar el código de los programas o incluso para crear los tuyos propios.
Para programar hacen falta básicamente dos cosas:
- Un editor de texto (importante que sea texto plano, sin formato).
- Un compilador del lenguaje que deseemos utilizar en el programa. Compilar es traducir nuestro texto a un archivo de lenguaje binario (ceros y unos) que es ejecutable por el ordenador.
En Linux hay infinidad de editores de texto, está por ejemplo vim, que pese a su gran potencia, es también algo complicado de utilizar para usuarios noveles. También están gedit o kate, que son los editores de texto que incluyen los proyectos GNOME y KDE respectivamente. Estos dos necesitan de un entorno gráfico para ser utilizados. Si no tenemos entorno gráfico (o queremos usar el terminal), y queremos un editor fácil de utilizar podemos optar por nano.
En el caso de los compiladores lo más fácil es instalar GCC (GNU Compiler Collection), que incluye los compiladores para los lenguajes más utilizados (C, C++, Java, Pascal, etc.)
En Ubuntu todo lo necesario para programar está incluido en el paquete build-essential. Si no está ya instalado lo podemos hacer con el siguiente comando en un terminal:
  •  sudo apt-get install build-essential
Ya tenemos todo lo necesario. Ahora vamos a hacer nuestro primer programa en C.
¿Cómo? Fácil, lo primero abrimos el editor de texto que más nos guste. Lo primero al hacer un programa es saber qué queremos que haga, cuáles son las entradas (datos por teclado, movimientos de ratón o cualquier otra cosa) y cuáles las salidas (un resultado en pantalla o por impresora, por ejemplo).
En este programa sólo vamos a tener una salida por pantalla, el mensaje "Hola mundo", por lo que sólo necesitaremos una instrucción que realice esto.
En C estas instrucciones son en realidad funciones, declaradas en archivos de cabecera o "headers". En concreto la función que "imprime" datos en pantalla se llama 'printf' y está declarada en el archivo de cabecera "stdio.h" (que significa standard input/output, o sea, incluye las funciones estándar de entrada y salida).
Empecemos...
Como he dicho la función 'printf' está incluída en stdio.h, por lo que lo primero que tenemos que hacer es incluirla en nuestro programa mediante una llamada con una directiva de preprocesador. Esto que suena tan rimbombante no quiere decir más que esta instrucción será leída en una primera pasada del compilador, antes de la compilación propiamente dicha. Estas directivas siempre llevan el símbolo # delante, y son válidas para todas las funciones que declaremos dentro del programa.
El preprocesador se puede utilizar también para la creación de constantes que sabemos que nunca van a cambiar durante el programa, y que dejan el código mucho más claro y limpio. Por ejemplo, con #define PI 3.1416 tendríamos disponible la constante PI para usar en cualquier lugar de nuestro código.
En nuestro caso necesitamos una directiva para incluir la función 'printf' que está en el archivo de cabecera 'stdio.h'. Esto en C sería así:
    • #include <stdio.h>
Ojo a los signos mayor y menor. Significan que la cabecera stdio.h se encuentra en el lugar estándar de los archivos de cabecera. Si queremos usar un archivo de cabecera creado por nosotros deberíamos introducir todo el camino hasta el archivo entre comillas, por ejemplo:
    •  #include "/home/manu/micabecera.h"
Hemos dicho que en C las instrucciones son en realidad funciones. Estas funciones tienen parámetros de entrada y de salida. La función imprescindible en cualquier programa en C es la función main. En ANSI C (el lenguaje C estándar) es común que la función main devuelva un número entero. Que la función devuelva un número no significa necesariamente que este aparezca en pantalla. La convención más utilizada es que devuelva un 0 si el programa ha sido compilado correctamente sin errores y cualquier otro número, un 1 por ejemplo, si ha habido fallos. Nuestra función main sería la siguiente:

    • int main () {
    • }
Ese int significa que la función devuelve un entero, que como hemos visto sirve como forma de controlar si el código es correcto. Los paréntesis representan los parámetros de entrada, que como la función main no tiene lo dejamos en blanco. En la función printf veremos que sí hay parámetros dentro del paréntesis, en este caso la frase que queremos que aparezca, nuestro "Hola mundo".
Esta función main es la primera que siempre será ejecutada en nuestro programa independientemente del orden en que la coloquemos. Dentro de las llaves tenemos que ir colocando una detrás de otra las instrucciones que queremos que ejecute nuestro programa, siempre separadas por un punto y coma. Hay funciones ya declaradas en los archivos de cabecera, como nuestro printf, y también otras que podemos crear nosotros, ya sea en el mismo archivo de código o en otro archivo de cabecera. En nuestro caso es muy fácil, la función ya está declarada en la cabecera stdio.h y sólo hay que pasar como parámetro de printf el texto que queremos que aparezca en pantalla:
    • printf("Hola mundo\n");
El \n es una secuencia de escape (hay varias y todas comienzan con la barra invertida) que significa retorno de carro, o sea, que al escribir el mensaje pasa a la linea siguiente.
El programa está prácticamente terminado, sólo tenemos que incluir la instrucción que devuelva el entero 0 al concluir el programa. Como main está declarado como entero (en realidad es un dato de tipo int, que es un entero de longitud 32 bits, pero eso ya lo veremos más adelante) es necesario que devuelta un número, sino es posible que nos dé un error:
    • return 0;
El programa completo quedaría pues de la siguiente manera:

Guardamos ahora nuestro programa con la extensión .c, por ejemplo "holamundo.c"
Ya tenemos el texto, ahora queda compilar. Utilizamos para ello el programa gcc de la siguiente manera
    • gcc holamundo.c -o holamundo
El parámetro -o sirve para elegir el nombre del archivo ejecutable, si no lo especificamos el ejecutable resultante será siempre 'a.out'
Y bueno, ya lo único que quedaría sería ejecutar el programa. Linux sólo conoce la ruta de los programas que estén especificados en la variable PATH, por lo que aunque este se encuentre en el mismo directorio no se ejecutará a menos que la especifiquemos. Para abreviar, en Linux la ruta hacia el directorio actual se representa con un punto. Para ejecutar nuestro programa si este se encuentra situado en el mismo directorio donde nos encontramos, hay que hacerlo así:
    • ./holamundo
Si estuviese en otro lugar lógicamente habría que indicar la ruta correspondiente.
Y voilà, ya tenemos nuestro mensajito en pantalla. Al final tampoco fue tan dificil, ¿o sí?...

lunes, 22 de abril de 2013

Resultados del E.G.M.


Hoy han salido los resultados de la primera oleada del Estudio General de Medios. Radio Nacional pierde casi 600.000 oyentes, mientras que la SER alcanza casi los 5 millones (obviamente muchos de ellos "herencia recibida" de RNE). 
"Hoy por Hoy" suma 240.000 oyentes, reforzando el liderazgo en las mañanas con 3.097.000. Francino y Roberto Sánchez llevan a "La Ventana", el programa vespertino de la SER, a cifras record superando el millón de oyentes, mientras que "La tarde" de Yolanda Flores, programa que sustituye a "Asuntos Propios" de Toni Garrido baja a una cifra bastante discreta: 152.000 oyentes, un 54,5% menos que con Garrido.
"Julia en la Onda" por su parte también obtiene buenos resultados con casi 600.000. En las mañanas "Herrera en la Onda" se pone en segunda posición, y la COPE se coloca en tercer lugar con "La mañana" de Buruaga y Javi Nieves. RNE también se pega el batacazo en este tramo con Manolo H.H. colocándose en cuarto lugar.

domingo, 21 de abril de 2013

Ubuntu 13.04 "Raring Ringtail"


Parece que fue hace nada que estábamos hablando de la inminente salida de Quantal Quetzal, y ya tenemos una nueva versión de Ubuntu a punto de salir del horno.
El próximo 25 de abril está previsto el lanzamiento de la versión final de Raring Ringtail, la 13.04, con la numeración correspondiente al año y mes de salida, como es habitual.
Esta vez no hay grandes novedades, al menos a simple vista. En Raring se han centrado más en mejorar pequeñas cosas pero a su vez útiles.
El núcleo de Linux pasa de la versión 3.5 a la 3.8, lanzada el pasado mes de febrero, mejorando como siempre el rendimiento y la compatibilidad con nuevos dispositivos.
El escritorio Unity pasa a la versión 7, que incluye novedades interesantes.
Entre ellas tenemos un buscador mejorado, que ahora detecta los errores al teclear, ahorrándonos tiempo en las búsquedas.


Otra novedad es la inclusión de un nuevo menú en la barra de tareas, representado por el icono de una nube, para todo lo relacionado con Ubuntu One, incluida la posibilidad de activar o desactivar la sincronización.


El "window snap", característica que permite ajustar el tamaño de la ventana llevándola hacia un extremo, ha sido mejorado, y ahora en lugar de un marco naranja veremos una animación de la ventana aumentando o disminuyendo de tamaño.

Al llevar la ventana al extremo superior, se maximiza al igual que ocurre
en el Aero Snap de Windows 7.
En la configuración de las "Cuentas en línea" ahora tenemos interruptores para cada aplicación por separado. Esto es útil por ejemplo en el caso de que queramos activar la búsqueda de imágenes dentro de Picasa pero no importar los contactos de Google a Empathy.


A la hora de apagar el equipo también se ha añadido una nueva ventana y botones con dibujos para apagar y reiniciar. Esto último es un cambio estético más que funcional.


Otro cambio estético han sido los nuevos iconos para la carpeta personal, el centro de software y las actualizaciones, con un símbolo parecido a una A, que puede que sea de "Aplicación" aunque no estoy muy seguro de lo que representa.
Para terminar, ha desaparecido la opción de comprar música a través de Rhythmbox, y ahora deberemos hacerlo obligatoriamente a través de la web de Ubuntu One. Por otra parte, Gwibber, el cliente para redes sociales ha sido sustituido por Friends, que integra las redes sociales en el Dash de Unity en lugar de hacerlo a través de una aplicación aparte, pudiendo acceder directamente a nuestros mensajes de Twitter o a las fotos de Facebook desde el escritorio (para ello es necesario anteriormente haber activado las cuentas correspondientes en "Cuentas en línea").
Aunque la nueva versión aparecerá el próximo jueves, ya se puede disfrutar de las nuevas características descargando la versión "Daily" de esta dirección:
http://cdimage.ubuntu.com/daily-live/current/ o a través del terminal tecleando
sudo update-manager -d en el caso en el que ya estemos utilizando las versiones Precise o Quantal.