miércoles, 26 de mayo de 2010

Mejorando un script con Zenity

El paquete Zenity viene incluido en los repositorios de las distros principales; permite mostrar cuadros de diálogo a partir de scripts de terminal.

Como creo que la manera más fácil de ver cómo se usa algo es a través de unos ejemplos, aquí hay algunos: En las siguientes páginas (en ingles) hay una recopilación de todos los posibles diálogos en zenity:
http://linux.byexamples.com/archives/259/a-complete-zenity-dialog-examples-1/
http://linux.byexamples.com/archives/259/a-complete-zenity-dialog-examples-2/

Tienen capturas usando cada una de las opciones y el comando correspondiente. Además, el siguiente extracto, con el comando zenity --help lista todas las posibilidades.

zenity --calendar Mostrar el diálogo del calendario
zenity --entry Mostrar el diálogo de entrada de texto
zenity --error Mostrar el diálogo de error
zenity --info Mostrar el diálogo de información
zenity --file-selection Mostrar el diálogo de selección de archivo
zenity --list Mostrar el diálogo de lista
zenity --notification Mostrar notificación
zenity --progress Mostrar el diálogo de indicación de progreso
zenity --question Mostrar el diálogo de pregunta: ¿Está seguro de que desea continuar?
zenity --warning Mostrar el diálogo de advertencia: ¿Está seguro de que desea continuar?
zenity --scale Mostrar el diálogo de escala: ajustar el valor de la escala
zenity --text-info Mostrar el diálogo de texto de información

Aplicaciones: Como podéis suponer, las aplicaciones son múltiples. Creo que prácticamente cualquier script que requiera algo de interactividad con el usuario puede mejorarse con esta herramienta para pedirle (o mostrarle) los datos a la persona que está enfrente de la pantalla. Creo que son dos las situaciones donde más útil puede ser conocer esta herramienta:

* Para preparar scripts para gente que le asuste la consola. Con un poco de esfuerzo se puede montar un script con apariencia de programa "muy trabajado" y con la misma funcionalidad (invocando por debajo a los programas oportunos, claro está).
* Para hacer que un script que corra a través del "demonio cron" ( "tareas programadas" - programa gnome-schedule ) se comunique con el usuario (mostrando mensajes de error o de estado).

El "demonio cron" es un proceso en segundo plano que ejecuta uno o varios programas en particular, en determinados momentos (por ejemplo, cada minuto, día, semana o mes); el usuario normal o el administrador del sistema, con permisos de root,  puede crear procesos de este tipo con el programa "tareas programadas" ( gnome-schedule).

Si lo usáis a través de cron (o, en general con gnome-schedule en modo root) es probable que necesitéis usar algo como lo siguiente:

su "nombre del usuario" -c 'DISPLAY=:0 zenity --info --text="vuestrotexto"'

( su = comando para que lo siguiente se use como root; sustituir: zenity --info --text="vuestrotexto"' , por la opción de zenity que se requiera ).

------------------------

Comparto con vosotros, como ejemplo de lo que se puede hacer con Zenity,  este "Script para apagar el pc de forma programada, con una barra deslizante de tiempo" que nos indica el tiempo que queda hasta que se apaga el pc.
Nos puede servir, por ejemplo para dejar encendido el pc por la noche durante un cierto tiempo y que luego se apague el solo. De todas formas una vez lanzado si a mitad del tiempo que falta para que se ejecute la orden de apagado, te arrepientes puedes darle a cancelar.
Información extraída desde: http://blog.deigote.com/2009/04/17/programmed-shutdown-pequeno-script-para-apagar-la-maquina/ o desde: http://deigote.com/scripts/x-programmed-shutdown

El script es:

#!/bin/bash
# Ask for time in minutes to sleep and after that poweroff the computer
# needs - zenity


minutes=`zenity --entry --title "Apagar el ordenador" --text "¿Dentro de cuántos minutos?" --entry-text "120" 2>&1` || exit
seconds=`expr $minutes "*" 60`


if [ $seconds != "" ] ; then
for i in `seq 1 $seconds` ; do
percentage=`expr $i "*" 100`
percentage=`expr $percentage "/" $seconds`
echo $percentage
sleep 1
done | zenity --title="Apagar el ordenador" --text="Esperando $minutes minutos" --progress --auto-close --auto-kill
sudo /sbin/poweroff

fi

-----------------
Para ejecutarlo, basta guardarlo en un directorio  y darle permisos de ejecución. Hay que tener permiso de root para ejecutar el mandato poweroff. En mi caso, tengo en el panel un lanzador precedido de gksudo, de tal manera que el script se lanza pidiendo primero la contraseña de root.

Otra solución es editar el archivo /etc/sudoers y añadir la linea:  usuario ALL=NOPASSWD: /sbin/poweroff al final del archivo /etc/sudoers para que el usuario "usuario" pueda ejecutar el comando poweroff sin que se le pida la contraseña de root.  De esta forma se puede ejecutar el script sin que pida la contraseña de root.

El archivo /etc/sudoers se puede editar:
--- Con el editor nano: con la siguiente linea en la terminal:
sudo nano /etc/sudoers
Una vez añadida la linea que se indica mas arriba se guardan los cambios en nano con: tecla F3, luego la tecla intro, y despues se cierra el editor nano con la tecla F2 .

--- Con gedit: para esto hay que seguir los siguientes pasos:
1- abrir Nautilus con permisos de root:  alt+f2      gksu nautilus
2- seleccionar el archivo /etc/sudoers y cambiar los permisos para que sean de lectura y escritura para root ( seleccionar el archivo->propiedades->permisos )
3- abrir con Gedit el archivo /etc/sudoers  y añadirle la línea indicada arriba
4- guardar los cambios  y cerrar el archivo
5- volver a cambiar los permisos del archivo para que sean de solo lectura para el usuario root y para el grupo root, y ninguno para otros.
6- cerrar Nautilus

-----------------------
El manual de Zenity ( en español ) se puede consultar aquí: http://library.gnome.org/users/zenity/stable/index.html.es

lunes, 17 de mayo de 2010

Configurar un PC para el uso por niños

Basándome en otros temas ya publicados voy a tratar de dar algunas ideas de como creo que se puede tener configurado un pc con una distribución Ubuntu-derivada, para que pueda ser usado por niños, pero administrado por los padres.

- Poner contraseña al grub: El gestor de arranque Grub  viene configurado de serie de forma que permite arrancar el Sistema en el “modo recovery” sin pedir la contraseña de root (administrador), con lo que tiene eso de inseguro, ya que una vez en el recovery mode puedes actuar como root sin que se te haya pedido ninguna contraseña, y también lo inseguro que desde la misma pantalla del menú del grub se puedan editar las líneas de arranque. Para evitar esto, tienes la posibilidad de proteger Grub con su propia contraseña, o con la misma de root:

1- poniendo una contraseña que evite la edición del propio menú
2- poniendo una contraseña que bloquee el acceso al modo recovery y/o a cualquiera de las otras líneas del menú
3- bloqueando totalmente el acceso, sin posibilidad de desbloquearlo con una contraseña, a alguna de las opciones del menú del grub.

Ver mas información en  http://hatteras-blog.blogspot.com.es/2008/12/poner-contrasena-al-menu-del-grub.html

Este apartado se refiere al Grub, no al nuevo Grub2

- Configurar un tipo de usuario para usuarios "especiales": el sistema debe estar configurado para que no se inicie de forma automática con ningún usuario, sino que se debe parar en la pantalla de acceso, y nuestros hijos pequeños no deberían saber la contraseña de ningún usuario.

Mas información en: http://hatteras-blog.blogspot.com.es/2010/04/usuarios-para-torpes-usuario-y-usuarios.html

- Hacer que un usuario no pueda usar una lista de programas: Si se quiere se puede crear un usuario  (con perfil de usuario: “usuario del escritorio” ) que no pueda ejecutar un programa concreto, o mejor aún una lista de varios programas, de forma que podemos tener un usuario administrador que usaremos nosotros y con el que podemos ejecutar todos los programas, y otro usuario que no podrá ejecutar la lista de programas que nosotros, como administradores, le hayamos decidido vetar. http://hatteras-blog.blogspot.com.es/2010/06/hacer-que-un-usuario-no-pueda-usar-una.html

Esto puede ser útil por ejemplo para evitar se pueda utilizar programas que hagan uso de la webcam.

- Navegación segura: filtrado de páginas no deseadas:

"Procon latte" es complemento de Firefox, que tiene función de un filtro de contenido para el navegador Firefox:
1- Puede filtrar cualquier clase de material indeseado (pornografía, apuestas, hacking, cracking, etc …), puede bloquear todo el tráfico, asegurando que solo se pueda acceder a las páginas web  deseadas (puestas en la “Lista Blanca” de páginas web): donde se permite el acceso sin restricciones (pe: google.*).
2- Incluye un filtro por palabras,para bloquear aquellas páginas que contengan determinadas palabras en su contenido, título, URL, o en los meta tags
3- Tanto la “lista blanca” de páginas web como el filtro por palabras es totalmente personalizable, pudiendo importar y/o exportar los datos para su uso en otros ordenadores.



Mas información en http://hatteras-blog.blogspot.com.es/2010/04/copia-de-seguridad-de-firefox.html

- Controlar el horario de uso de internet:

Para apagar la conexión a internet a través de wifi: ejecuta esto en la terminal: sudo ifconfig wlan0 down

Para encender la conexión internet a través de wifi: ejecuta sudo ifconfig wlan0 up

Para que estos comandos se ejecuten a la hora que queramos, sin necesidad de ejecutarlos manualmente, y sin que el usuario ( no administrador ) se de cuenta, ni pueda modificarlos: Estos comandos se pueden poner en el programa “Tareas programadas” ( /usr/bin/gnome-schedule ) para que se ejecuten a una determinada hora, y conseguir que solo se pueda tener acceso a internet a determinadas horas. Para ello hay que ejecutar Tareas programadas con permisos de root: sudo /usr/bin/gnome-schedule y crear una nueva “tarea que se lanza repetidamente” y poner los comandos indicados anteriormente, y la hora a la que queramos que se ejecuten.



Para un pc conectado a internet con conexión por cable en vez de por wifi , los comandos que hay que ejecutar en la terminal y que poner en el programa “Tareas programadas” serian: sudo ifconfig eth0 up para  abrir la conexión  y  sudo ifconfig eth0 down para cerrar la conexión.

Mas información en: http://hatteras-blog.blogspot.com.es/2010/03/controlar-el-tiempo-de-conexion-internet.html

- Controlar el horario de uso del pc:

Si queremos que el pc se apague a una hora determinada (por ejemplo en una hora en que no estemos nosotros delante ) se debe programar en tareas programadas en modo root para que  solo el administrador del sistema pueda cambiarlo: con la orden: sudo shutdown -P 1 (lógicamente si queremos dar mas tiempo cambiamos 1 por el número de minutos que queramos ).



Esto nos puede servir para “obligar” a nuestros hijos pequeños a dejar de usar el pc en una hora en que no estemos nosotros delante.. Una vez apagado el pc aunque lo vuelvan a encender no deberían poder volver a usarlo ya que el sistema debe estar configurado para que no se inicie de forma automática con ningún usuario, sino que se debe parar en la pantalla de acceso, y nuestros hijos pequeños no deberían saber la contraseña de ningún usuario.

Mas información en: http://hatteras-blog.blogspot.com.es/2010/04/apagado-programado-del-pc.html

- OpenOffice para niños: He encontrado esta versión de openoffice que puede ser interesante para los que teneis hijos pequeños: http://wiki.ooo4kids.org/index.php/Main_Page/es ; se puede descargar desde: http://wiki.ooo4kids.org/index.php/Download/es

Una vez bajado el paquete se descomprime y se copia la carpeta ooo4kids0.8 en por ejemplo /opt
Se añade la linea /opt/ooo4kids0.8/program/soffice al editor de menús, y ya podremos ejecutar la aplicación desde el menú de Aplicaciones.



- Juegos para niños:

Podemos instalar varios juegos educativos para niños, entre otros:
- junior-math y/o tuxmath (juego de matemáticas )
- junior-puzzle
- ktouch y/o tuxtype ( para aprender mecanografía )
- tuxpaint  ( programa de dibujo )
- gcompris y childsplay: ambos son una colección de juegos educativos para los más pequeños:
*aprendiendo como usar el ratón y el teclado
*aprendiendo  aritmética simple
*aprendiendo como leer un reloj análogo
*reconociendo letras después de escuchar sus nombres
*práctica de lectura
*juegos de memoria, rompecabezas, ...etc

- Evitar que entren en Facebook, Twitter, etc

Otra forma de bloquear páginas web:
No se requiere ningún programa externo ni ninguna aplicación (por lo que sirve sea cual sea tu navegador de internet ) , basta con abrir un terminal y escribir:  sudo gedit /etc/hosts
luego simplemente tienes que añadir 127.0.0.1, dejar un espacio y añadir el nombre de la página que quieres bloquear, con el siguiente formato: 127.0.0.1 nombredelapagina.***, por ejemplo
127.0.0.1 www.facebook.com
127.0.0.1 www-twitter.com

A partir de ese momento, cada vez que desde ese equipo se intente acceder a la página aparecerá un mensaje como si esta no existiese o estuviese caída.



Simple y fácil. Puedes crear tu propia lista de páginas “censuradas”

-----------------------

Otras recomendaciones:

- No usar un programa de mensajería instantánea que admita el uso de webcam. En este sentido recomiendo Pidgin.

- Colocar el pc en un lugar en el que podamos controlar directamente el uso que se hace de él. No colocarlo en el dormitorio del niño.

- Usar el pc junto con nuestro hijo para enseñarle que hacer y que no hacer con el pc. Disfrutar el tiempo con nuestros hijos.

-----------------------

También puede ser interesantes estas distros especialmente pensadas para niños:

Qimo: http://www.qimo4kids.com/

Edubuntu: http://www.edubuntu.org/

Aconsejo ver todas las entradas puestas en el la categoría "control parental".

——————————–

miércoles, 12 de mayo de 2010

Compartir archivos con Giver o Meiga, entre ordenadores en red localcon Ubuntu ( y derivadas )

Ambos programas sirven para compartir archivos entre dos o mas ordenadores con Ubuntu (o derivadas ) conectados entre si en una red local doméstica ( No para compartir archivos en una red con pcs con Ubuntu o derivadas, y Windows ) . Para compartir archivos entre varios pcs éstos programas tienen que estar instalados y ejecutados en todos los ordenadores de la red local. Los pcs de la red doméstica pueden, con estos programas, ser servidores y receptores de archivos a la vez. Con software como éstos nos evitamos tener que configurar los protocolos nfs o samba, que son bastante más complicados.

Giver:

Una vez que se ha instalado y ejecutado el programa en los pcs que queramos tener conectados para compartir archivos: la idea es poder hacer drag&drop de archivos y carpetas sobre el icono de un usuario que aparezca conectado y que le llega de forma casi instantánea una mensaje de que está recibiendo tal archivo, y si lo acepta, se descarga.





Para configurar Giver, en todos los pcs conectados,  hay que hacerlo haciendo clik con  el botón derecho del ratón sobre el icono que aparece en el panel: se abre una ventana como la siguiente:



Aunque se intente desde esta pantalla cambiar la opción de imagen con el botón "change photo" no se puede, por lo que para poner en Giver la imagen que queráis como icono de vuestro usuario: editar el archivo: /home/usuario/.config/giver/preferences
de forma similar a:

<giverprefs>
<PhotoType>local</PhotoType>

<PhotoLocation>/media/mi-disco/Imagenes/bart.jpg</PhotoLocation>
<UserName>Mint-PC-Portátil</UserName>
<ReceiveFileLocation>/home/usuario/Escritorio</ReceiveFileLocation>
</giverprefs>


cambiando lógicamente: /media/mi-disco/Imagenes/bart.jpg
por la dirección de la imagen que queráis poner como icono del usuario.

La configuración que tengamos en un pc se conserva para futuras sesiones, por lo que puede ser interesante añadir este programa a Sistema-Preferencias-Programas de inicio, para que se inicie automáticamente al inicio de la sesión en cada pc de la red doméstica.

Meiga: Desde http://meiga.igalia.com/ se puede descargar el paquete meiga.deb correspondiente, para instalarlo en todos los pcs y hay unas imágenes del programa.

Al ejecutar Meiga, en cada pc,  se inicia una aplicación donde pulsando el botón con el símbolo +) podemos indicar las carpetas (añadiéndolas de una en una ) de nuestro pc que queremos compartir, de manera que se creara un servidor web en nuestra máquina y de manera automática estas carpetas se encontraran accesibles en nuestro navegador de internet, desde la dirección:
http://nuestraIP:8001/nombre_de_la_carpeta_compartida




Por ejemplo: en el ordenador 1 podemos compartir la carpeta común1, y acceder a ella desde el ordenador 2, ( con ip 192.168.0.12 ) desde: http://192.168.0.12:8001/común1 apareciendo en el navegador de internet una imagen similar a la siguiente, desde la que podremos acceder a los archivos de la carpeta común1 del pc 1



O en el ordenador 2 podemos compartir la carpeta común2, y acceder a ella desde el ordenador 1, (con ip 192.168.0.14 ) desde: http://192.168.0.14:8001/común2 . Ambos pcs pueden hacer a la vez de servidores, y de receptores.

Si no sabes cual es tu ip en internet ejecuta el siguiente comando desde consola:
$ sudo ifconfig

El comando ifconfig no nos da la dirección IP real. La mayoría tenemos un router en casa, conectado a internet. El ifconfig nos dará solamente la dirección IP dentro de nuestra red. Para saber la dirección IP real, puedes ir a http://whatismyip.com/ y ahi en primera plana te aparece tu dirección IP real.

También se pueden ir añadiendo, de una en una, las carpetas que queremos compartir desde Nautilus: seleccionamos la carpeta -> menú contextual con el botón derecho del ratón->Scripts->Compartir en Meiga.

Lamentablemente la configuración que tengamos en un pc no se conserva para futuras sesiones, por lo que cada vez que usemos este programa tendremos que añadir las carpetas que queramos compartir, en el pc que deba hacer de servidor.

-------------------------

Si queremos crear una red local entre pcs con linux, de forma que podamos explorar desde cualquiera de ellos los directorios de los otros pcs: Crear una red local entre varios pcs con Ubuntu o derivadas con el protocolo sftp y Nautilus
———————————

martes, 4 de mayo de 2010

Controlar los paquetes que se instalan/desinstalan

Podemos llevar un control bastante exhaustivo de los paquetes que instalamos en el sistema, tanto si lo hacemos con el programa gráfico Synaptic, como si usamos la terminal, bien sea con apt-get o con aptitude.

Paquetes instalados/desinstalados con Synaptic ( o con apt-get ): En el directorio /root/.synaptic/log/ se crean archivos con el formato fecha.numero.log ( es decir, por ejemplo /root/.synaptic/log/2009-06-24.195504.log ) con información sobre los paquetes instalados y/o desinstalados con synaptic en dicha fecha

Un ejemplo del contenido de un archivo de este tipo es:

Commit Log for Wed Jun 24 19:55:04 2009
Installed the following packages:
evolution-documentation-es (2.26.1-0ubuntu2)
gimp-help-common (2.4.1-1)

gimp-help-en (2.4.1-1)
gimp-help-es (2.4.1-1)
gnome-user-guide (2.26.0+svn20090323ubuntu5)
gnome-user-guide-es (2.26.0+svn20090323ubuntu5)
language-pack-es (1:9.04+20090413)
language-pack-es-base (1:9.04+20090413)

language-pack-gnome-es (1:9.04+20090413)
language-pack-gnome-es-base (1:9.04+20090413)
language-support-translations-es (1:9.04+20090401)
language-support-writing-es (1:8.10+20080725)
myspell-es (1.10-6ubuntu1)
openoffice.org-help-es (1:3.0.1-9ubuntu2)

openoffice.org-l10n-es (1:3.0.1-9ubuntu2)
thunderbird-locale-es-ar (1:2.0.0.14+1-0ubuntu2)
thunderbird-locale-es-es (1:2.0.0.14+1-0ubuntu2)
wspanish (1.0.22)


A partir de la información contenida en dicho archivo con la lista_de_paquetes que se han desinstalado, se puede volver a instalarlos desde una terminal con la orden: sudo apt-get  install lista_de_paquetes

Desde:  Synaptic -> configuración -> preferencias -> pestaña archivos -> -- conservar archivo histórico completo , o -- borrar archivos del histórico anteriores a xx dias se puede configurar la cantidad de archivos del tipo .log que se crearan en dicha carpeta /root/.synaptic/log/



Los archivos de dicha carpeta también se pueden leer desde: Synaptic ->Archivo ->Histórico



--------------------

Paquetes instalados/desinstalados con Aptitude: Al ejecutar aptitude para instalar y/o desinstalar paquetes, se crea un archivo de registro de dichos programas en /var/log/aptitude ( o aptitude.gz).

Un ejemplo de lo que aparece en dicho archivo es:

Aptitude 0.4.11.11: informe de registro
mar, abr 13 2010 21:43:45 +0200


IMPORTANTE: este registro sólo muestra las acciones que se pretenden
realizar. Puede que no se completen algunas acciones por fallos de dpkg.


Se instalarán 0 paquetes y se eliminarán 2.
Se usará 5648kB de espacio en disco
==========================================
[ELIMINA, NO USADO] python-sexy
[RETIENE, DEPENDENCIAS] chromium-browser-inspector
[RETIENE, DEPENDENCIAS] chromium-codecs-ffmpeg
[RETIENE] chromium-browser

[RETIENE] chromium-browser-l10n
[RETIENE] gufw
[RETIENE] ifupdown
[RETIENE] libnss3-1d
[ELIMINA] emesene

========================================
Registro completado.


A partir de la información contenida en dicho archivo con la lista_de_paquetes que se han desinstalado, se puede volver a instalarlos desde una terminal con la orden: sudo aptitude install lista_de_paquetes

Recordad: No usar aptitude en Guadalinex. En serio aptitude da bastantes problemas en Guadalinex, el motivo....los metapaquetes propios de la distribución. Usar bien Synaptic o apt-get para instalar/desinstalar paquetes en Guadalinex. En otras distros ( en Mint , en la actualidad uso Mint 8 ) parece que no hay ese problema.

-------------------

Para obtener una lista de los paquetes instalados que tenemos en nuestro pc:  procederemos ejecutar lo siguiente en una Terminal:
$ dpkg --get-selections | grep -v deinstall > ubuntu-files
Esto nos genera en /usuario/home un archivo llamado ubuntu-files, el cual contiene la lista que deseamos.

– Si quisieramos reinstalar todos estos paquetes en nuestro pc, o en otros, bastará con  ejecutar:
$ sudo apt-get update
$ sudo apt-get dist-upgrade
$ sudo dpkg --set-selections < ubuntu-files

$ sudo dselect install

--------------------------------