Ejercicios prácticos con Raspberry Pi

Tekst
Loe katkendit
Märgi loetuks
Kuidas lugeda raamatut pärast ostmist
Šrift:Väiksem АаSuurem Aa

3.16 Hacer una captura de pantalla
Problema

Desea capturar una imagen de la pantalla de Raspberry Pi y guardarla en un archivo.

Solución

Instale y utilice el software de captura de pantalla llamado scrot.

Observaciones

Para instalar scrot ejecute el siguiente comando desde el terminal:

$ sudo apt-get install scrot

La forma más sencilla de capturar una pantalla es simplemente introduciendo el comando scrot. Esto tomará inmediatamente una imagen de la pantalla principal y la guardará en un archivo llamado algo así como 2013-04-25-080116_1024x768_scrot.png dentro del directorio actual.

Alguna vez querrá una captura de pantalla para mostrar un menú que se abre o algo que generalmente desaparece. Para estas situaciones puede especificar un retraso antes de que se realice la captura usando la opción -d.

$ scrot -d 5

El retraso se especifica en segundos.

Si captura toda la pantalla, puede recortarla posteriormente con un software de edición de imágenes, como Gimp (Capítulo 4.12). Sin embargo, es más conveniente capturar directamente un área de la pantalla utilizando la opción -s.

Para utilizar esta opción, escriba este comando y arrastre el área de la pantalla que desea capturar con el ratón.

$ scrot -s

El nombre del archivo incluirá las dimensiones en píxeles de la imagen capturada.

Para saber más

El comando scrot tiene otras opciones para controlar cosas como utilizar múltiples pantallas y cambiar el formato del archivo guardado. Puede obtener más información sobre scrot escribiendo el siguiente comando:

$ man scrot

Para obtener más información sobre la instalación con apt-get véase el Capítulo 3.17.

3.17 Instalar un software con apt-get
Problema

Desea instalar un software utilizando la línea de comandos.

Solución

La herramienta más utilizada para instalar un software desde una sesión de terminal es apt-get.

El formato básico del comando que debe ejecutar como superusuario es:

$ sudo apt-get install <name of software>

Por ejemplo, para instalar el software del procesamiento de texto AbiWord, introduzca el comando:

$ sudo apt-get install abiword

Observaciones

El gestor de paquetes apt-get utiliza una lista de software disponible. Esta lista está incluida con la distribución del sistema operativo de Raspberry Pi que usted utiliza, pero es probable que esté desactualizada. Por lo tanto, si el software que intenta instalar es retornado por apt-get como not found (no encontrado), ejecute el siguiente comando para actualizar la lista:

$ sudo apt-get update

La lista y los paquetes de software para la instalación están todos en Internet, por lo que nada de esto funcionará si su Raspberry Pi no tiene conexión a Internet.


Si ve que al actualizar obtiene un error como E: Problem with MergeList /var/lib/dpkg/status, pruebe a ejecutar estos comandos: sudo rm /var/lib/dpkg/status sudo touch /var/lib/dpkg/status

El proceso de instalación puede tardar un poco porque los archivos se tienen que descargar e instalar. Algunas instalaciones también agregarán accesos directos en su escritorio o grupos de programas en su menú de inicio.

Puede buscar software para instalar con el comando apt-get search seguido por una cadena de búsqueda como abiword. Esto mostrará una lista de paquetes coincidentes que podría instalar.

Para saber más

Consulte el Capítulo 3.18 para eliminar programas que no necesita y así liberar espacio.

Consulte el Capítulo 3.21 para descargar el código fuente de GitHub.

3.18 Eliminar un software instalado con apt-get
Problema

Después de haber instalado una gran cantidad de programas con apt-get, desea eliminar algunos de ellos.

Solución

apt-get tiene una opción (remove) que eliminará paquetes, pero solo quitará los que se hayan instalado con apt-get install. Por ejemplo, si desea eliminar AbiWord, debería utilizar el comando:

$ sudo apt-get remove abiword

Observaciones

Eliminar un paquete como este no siempre lo elimina todo, ya que los paquetes a menudo tienen paquetes previos que también están instalados. Para eliminar estos puede utilizar la opción autoremove, como se muestra aquí:

$ sudo apt-get autoremove abiword

$ sudo apt-get clean

La opción apt-get clean limpiará un poco más los archivos de instalación de paquetes no utilizados.

Para saber más

Consulte el Capítulo 3.17 para instalar paquetes mediante apt-get.

3.19 Instalar paquetes de Python con pip
Problema

Desea utilizar el gestor de paquetes pip para instalar las bibliotecas de Python.

Solución

Si tiene la última versión de Raspbian, pip ya estará instalado y lo podrá ejecutar desde la línea de comandos como se muestra en el siguiente ejemplo, tomado del Capítulo 8.2, donde se utiliza para instalar la biblioteca svgwrite de Python.

$ sudo pip install svgwrite

Si pip no está instalado en su sistema, puede instalarlo usando el comando:

$ sudo apt-get install python-pip

Observaciones

Aunque muchas bibliotecas de Python pueden instalarse usando apt-get (véase el Capítulo 3.17) algunas no pueden y deben usar pip.

Para saber más

Para instalar un software usando apt-get, véase el Capítulo 3.17.

3.20 Buscar archivos desde la línea de comandos
Problema

Desea descargar un archivo desde Internet sin necesidad de utilizar un navegador web.

Solución

Utilice el comando wget para obtener un archivo de Internet. Por ejemplo:

$ wget http://www.icrobotics.co.uk/wiki/images/c/c3/Pifm.tar.gz

--2013-06-07 07:35:01-- http://www.icrobotics.co.uk/wiki/images/c/c3/Pifm.tar.gz

Resolving www.icrobotics.co.uk (www.icrobotics.co.uk)... 155.198.3.147

Connecting to www.icrobotics.co.uk (www.icrobotics.co.uk)|155.198.3.147|

:80... connected.

HTTP request sent, awaiting response... 200 OK

Length: 5521400 (5.3M) [application/x-gzip]

Saving to: `Pifm.tar.gz'

100%[==================================================>] 5,521,400 601K/s

2013-06-07 07:35:11 (601 KB/s) - `Pifm.tar.gz' saved [5521400/5521400]

Si su URL contiene caracteres especiales, es buena idea escribirlo entre comillas dobles. Este ejemplo de URL es del Capítulo 4.11.

Observaciones

Encontrará instrucciones para instalar software que dependen del uso de wget. A menudo es más conveniente hacer esto desde la línea de comandos en lugar de usar un navegador, encontrar el archivo, descargarlo y luego copiarlo en el lugar que lo necesite.

El comando wget toma la URL para descargarla como argumento y la descarga en el directorio actual. Normalmente se utiliza para descargar un archivo de algún tipo, pero también descargará cualquier página web.

 

Para saber más

Para obtener más información sobre la instalación con apt-get, consulte el Capítulo 3.16. Para obtener más información sobre cómo seleccionar y utilizar un navegador, consulte el Capítulo 4.4.

3.21 Buscar códigos fuente con Git
Problema

A veces, las bibliotecas Python y otros softwares se suministran a través de una URL del repositorio Git. Tiene que ser capaz de buscarlas en Raspberry Pi.

Solución

Para usar códigos en los repositorios de Git necesita usar el comando git clone para descargar los archivos.

Observaciones

Por ejemplo, el siguiente comando descargará todos los ejemplos de código fuente de este libro:

$ git clone https://github.com/simonmonk/raspberrypi_cookbook_ed2.git

Para saber más

Aprende más sobre Git y el servicio de hosting GitHub.

Consulte también el Capítulo 3.17.

3.22 Ejecutar un programa o una secuencia de comandos al iniciar
Problema

Desea que un programa o una secuencia de comandos se inicie automáticamente cuando su Raspberry Pi arranque.

Solución

Modifique su archivo rc.local para ejecutar el programa que desea.

Edite el archivo /etc/rc.local utilizando el comando:

$ sudo nano /etc/rc.local

Agregue la siguiente línea después del primer bloque de líneas de comentario que comienza con #:

$ /usr/bin/python /home/pi/my_program.py &

Es importante incluir & al final de la línea de comandos para que se ejecute en segundo plano; de lo contrario su Raspberry Pi no arrancará.

Observaciones

Esta manera de autoejecutar un programa necesitará una edición muy cuidadosa de rc.local, o tendrá que parar su Raspberry Pi en el arranque.

Para saber más

Una forma más segura de autoejecutar un programa se detalla en el Capítulo 3.23.

3.23 Ejecutar un programa o secuencia de comandos como servicio
Problema

Desea que una secuencia de comandos o programa concreto se inicie automáticamente cada vez que se reinicie Raspberry Pi.

Solución

Debian Linux, en el que se basan la mayoría de las distribuciones de Raspberry Pi, utiliza un mecanismo basado en la dependencia para automatizar el funcionamiento de los comandos al inicio. Esto es un poco complicado de usar e implica crear un archivo de configuración para el script o programa que desea ejecutar en la carpeta llamada init.d.

Observaciones

El siguiente ejemplo muestra cómo ejecutar un script de Python en su directorio personal. El script podría hacer cualquier cosa, pero en este caso, ejecuta un servidor web de Python simple, que se describe más adelante en el Capítulo 7.18.

Los pasos involucrados en esto son:

1. Cree un script init.

2. Haga que init sea ejecutable.

3. Informe al sistema acerca del nuevo script init.

Primero, cree el script init. Debe crearlo en la carpeta /etc/init.d/. Se puede llamar como quiera, pero, en este ejemplo, lo llamará my_server.

Cree el archivo nuevo utilizando nano con el siguiente comando:

$ sudo nano /etc/init.d/my_server

Pegue el siguiente código en la ventana del editor y guarde el archivo:

### EMPIEZA LA INFO INIT

# Provides: my_server

# Required-Start: $remote_fs $syslog $network

# Required-Stop: $remote_fs $syslog $network

# Default-Start: 2 3 4 5

# Default-Stop: 0 1 6

# Short-Description: Simple Web Server

# Description: Simple Web Server

### ACABA LA INFO INIT

#! /bin/sh

# /etc/init.d/my_server

export HOME

case "$1" in

start)

echo "Starting My Server"

sudo /usr/bin/python /home/pi/myserver.py 2>&1 &

;;

stop)

echo "Stopping My Server"

PID=`ps auxwww | grep myserver.py | head -1 | awk '{print $2}'`

kill -9 $PID

;;

*)

echo "Usage: /etc/init.d/my_server {start|stop}"

exit 1

;;

esac

exit 0

Es bastante trabajo para automatizar la ejecución de un script, pero casi todo es código repetitivo. Para ejecutar uno diferente, modifique la ruta a través del script, cambiando las descripciones y el nombre del archivo Python que desea ejecutar.

El siguiente paso es hacer que este archivo sea ejecutable por el propietario, cosa que se hace con este comando:

$ sudo chmod +x /etc/init.d/my_server

Ahora que el programa está configurado como servicio, puede probar que todo está bien antes de configurarlo de inicio automático en el arranque usando el siguiente comando:

$ /etc/init.d/my_server start

Starting My Server

Bottle v0.11.4 server starting up (using WSGIRefServer())...

Listening on http://192.168.1.16:80/

Hit Ctrl-C to quit.

Por último, si se ejecuta correctamente, utilice el siguiente comando para que el sistema sea consciente del nuevo servicio que ha definido:

$ sudo update-rc.d my_server defaults

Para saber más

Para obtener un enfoque más sencillo sobre la ejecución automática de un programa, consulte el Capítulo 3.22. Para más información sobre cómo cambiar permisos de archivos y carpetas, consulte el Capítulo 3.13.

3.24 Ejecutar automáticamente un programa o una secuencia de comandos en intervalos regulares
Problema

Desea ejecutar una secuencia de comandos una vez al día o en intervalos regulares.

Solución

Utilice el comando crontab de Linux.

Para ello, Raspberry Pi necesita saber la hora y la fecha y, por lo tanto, necesita una conexión a la red o a un reloj en tiempo real. Consulte el Capítulo 12.14.

Observaciones

El comando crontab le permite programar eventos en intervalos regulares. Esto puede ser diario o por horas, e incluso puede definir patrones complicados para que tenga lugar en diferentes días de la semana. Esto puede ser útil para las tareas de copia de seguridad, que es posible que desee que se ejecuten en mitad de la noche.

Puede editar los eventos programados mediante el siguiente comando:

$ crontab -e

Si el script o el programa que desea ejecutar necesita ser ejecutado por un superusuario, prefije todos los comandos crontab con sudo (Capítulo 3.12).

La línea de comentarios indica el formato de una línea crontab. Los dígitos son, en orden, minuto, hora, día del mes, mes, día de la semana y el comando que desea ejecutar.

La línea que comienza por un # es solo una línea de comentarios para recordarle el formato de una línea crontab.

Si hay un * en la posición del dígito, significa every (cada); si hay un número en su lugar, la secuencia de comandos solo se ejecutará en ese minuto/hora/día del mes.

Por lo tanto, para ejecutarlo cada día a la 1 de la madrugada: Figura 3.7.


Figura 3.7. Editar crontab.

Utilizando solamente un solo dígito puede especificar los intervalos para ejecutar el script solo los días laborables, por ejemplo:

0 1 * * 1-5 /home/pi/myscript.sh

Si su script necesita ejecutarse desde un directorio en particular, puede usar un punto y coma (;) para separar varios comandos como se muestra aquí:

0 1 * * * cd /home/pi; python mypythoncode.py

Para saber más

Puede ver la documentación completa de crontab introduciendo este comando:

$ man crontab

3.25 Encontrar cosas
Problema

Desea encontrar un archivo que sabe que está en alguna parte del sistema.

Solución

Utilice el comando de Linux find.

Observaciones

Comenzando con un directorio especificado en el comando, el comando find buscará y, si encuentra el archivo, mostrará su ubicación. Por ejemplo:

$ find /home/pi -name gemgem.py

/home/pi/python_games/gemgem.py

Puede iniciar la búsqueda más arriba del árbol, incluso en la raíz de todo el sistema de archivos (/). Esto hará que la búsqueda tarde mucho más, y también producirá mensajes de error. Puede redirigir estos mensajes de error añadiendo 2>/dev/null al final de la línea.

Para buscar el archivo en todo el sistema de archivos utilice el siguiente comando:

$ find / -name gemgem.py 2>/dev/null

/home/pi/python_games/gemgem.py

Puede también usar comodines con find, como se muestra aquí:

$ find /home/pi -name match*

/home/pi/python_games/match4.wav

/home/pi/python_games/match2.wav

/home/pi/python_games/match1.wav

/home/pi/python_games/match3.wav

/home/pi/python_games/match0.wav

/home/pi/python_games/match5.wav

Para saber más

El comando find tiene otras funciones avanzadas para la búsqueda. Para ver la documentación completa de find use este comando:

$ man find

3.26 Utilizar el historial de la línea de comandos
Problema

Quiere ser capaz de repetir comandos en la línea de comandos sin tener que escribirlos de nuevo.

Solución

Utilice las teclas (arriba y abajo) para seleccionar comandos anteriores desde el historial de comandos y el comando history con grep para encontrar comandos antiguos.

Observaciones

Puede acceder al comando anterior que ejecutó pulsando la tecla de la flecha hacia arriba. Al pulsarla de nuevo le llevará al comando anterior, y así sucesivamente. Si se pasa el comando que desea, la flecha hacia abajo lo llevará de nuevo en la otra dirección.

Si desea cancelar sin ejecutar el comando, utilice Ctrl-C.

 

Con el tiempo, su historial de comandos crecerá demasiado como para encontrar un comando que usó hará siglos. Para encontrarlo hacia atrás, use el comando history.

$ history

1 sudo nano /etc/init.d/my_server

2 sudo chmod +x /etc/init.d/my_server

3 /etc/init.d/my_server start

4 cp /media/4954-5EF7/sales_log/server.py myserver.py

5 /etc/init.d/my_server start

6 sudo apt-get update

7 sudo apt-get install bottle

8 sudo apt-get install python-bottle

Esto muestra todo el historial de comandos y es probable que tenga demasiadas entradas para encontrar la que desea. Para remediarlo, puede canalizar el comando history con el comando grep, el cual solo mostrará resultados que coincidan con una cadena de búsqueda. Así, por ejemplo, para encontrar todos los comandos apt-get (Capítulo 3.17) que ha emitido, puede usar la línea:

$ history | grep apt-get

6 sudo apt-get update

7 sudo apt-get install bottle

8 sudo apt-get install python-bottle

55 history | grep apt-get

Cada elemento del historial tiene un número junto a él. Así que si encuentra la línea que buscaba, puede ejecutarla usando ! seguido del número del historial como se muestra aquí:

$ !6

sudo apt-get update

Hit http://mirrordirector.raspbian.org wheezy InRelease

Hit http://mirrordirector.raspbian.org wheezy/main armhf Packages Hit

http://mirrordirector.raspbian.org wheezy/contrib armhf Packages

.....