jueves, 9 de junio de 2016

Configuracion personalizada de Unity

Ha transcurrido mucho tiempo desde que trabajé en esto. Finalmente encontré tiempo para publicarlo.

Estuve trabajando para implementar una estación de trabajo estandarizada, para una organización grande. Se quiere establecer un escritorio consistente, que el usuario no pueda cambiar o borrar iconos de la barra o del escritorio.Estas reglas draconianas vienen impuestas por la realidad de la organización. Una gran cantidad de puestos de trabajo, dispersos en múltiples edificios. Poco personal para dar soporte y mucha resistencia al cambio por parte de los usuarios.

Me vi en la necesidad de investigar más en el funcionamiento interno de Unity, el escritorio de Ubuntu presentado en la versión 10.10. Decidimos que en cada inicio de sesión fijaríamos ciertos iconos en la barra. La solución fue correr en el inicio un script, que invocando a gsettings fijara el escritorio acorde a lo pedido.

La mayoría de los usuarios tienen poca o nula familiaridad con escritorios usuales en Linux. Se decide configurar el escritorio similar al de Windows 2000/XP, que les es familiar. Habrá un icono "Mi Computadora", "Papelera" y "Entorno de Red".  Para encontrar que propiedades teníamos que alterar tuvimos que investigar un buen rato, para encontrar artículos o discusiones como esta. Para hacer visibles los iconos mencionados podemos ejecutar lo que sigue desde linea de comando o un script:

        gsettings set org.gnome.nautilus.desktop home-icon-visible true 
        gsettings set org.gnome.nautilus.desktop computer-icon-visible true 
        gsettings set org.gnome.nautilus.desktop trash-icon-visible true 
        gsettings set org.gnome.nautilus.desktop network-icon-visible true

Adicionalmente los iconos tendrán nombres familiares a los usuarios. Resolvemos esto con gsettings:

gsettings set org.gnome.nautilus.desktop home­icon­name "Mis Archivos"
gsettings set org.gnome.nautilus.desktop computer­icon­name "Computadora $(hostname ­s)"
gsettings set org.gnome.nautilus.desktop trash­icon­name  "Papelera"
gsettings set org.gnome.nautilus.desktop network­icon­name "Red Local"

También queremos mostrar iconos en el escritorio:

gsettings set org.gnome.desktop.background show­desktop­icons true

Y para terminar queremos fijar en el launcher los iconos de las aplicaciones mas usuales. En nuestro caso, un cliente de correo, navegador, procesador de texto y planilla de calculo.

gsettings set com.canonical.Unity.Launcher favorites
        ['libreoffice­writer.desktop', 'libreoffice­calc.desktop', 'firefox.desktop', 'thunderbird.desktop']

Para que esta configuración se corra cada vez que el usuario es necesario que esto corra en un script en el inicio de sesion. El script debe estar en el directorio /etc/X11/Xsession.d . El Archivo debe tener nombre S99script, podría ser un symlink a un archivo en otro directorio.

viernes, 27 de mayo de 2016

Desbordado ...

No hablo de ningún curso de agua, quiero informar que no abandoné el blog. Espero a la brevedad estar publicando varios articulo. Tengo varios en el tintero, que no he terminado de escribir o pulir.

Estoy haciendo un curso de introducción a IPV6, en el campus virtual de LACNIC. Con bastante trabajo y poco tiempo para escribir en el blog.

Más noticias a la brevedad ... "Stay tuned".

lunes, 25 de abril de 2016

Whatsapp sin Google Play

A un compañero de trabajo le traen un celular para "desbloquear". Y quiere instalar en el celular whatsapp, pero no configurarle una cuenta de google play.  He instalado en dispositivos móviles de mi trabajo varias aplicaciones a partir del paquete, pero son desarrollos a medida para la empresa.

Buscando encontré un enlace del desarrollador para descargarlo. Lo instalamos y quedó pronto.

¿Otras aplicaciones?

Amazon permite descargar directamente kindle. No encontré como bajar directamente acrobat reader. Sitios como softonic ofrecen descargas para dispositivos android, pero no me inspiran confianza. En APKMirror hay muchos paquetes para bajar, no conozco el sitio como para recomendarlo.

Al menos con dispositivos android se aplica el supuesto de que son dispositivos de uso personal, hay aplicaciones de dispositivos mobiles donde no interesa configurar una cuenta google o estar instalando aplicaciones frecuentemente. No encontré nada para esta situación.

lunes, 21 de marzo de 2016

getline y getdelim: alternativas a gets o fgets

Quiero leer archivos de texto linea a linea, desconozco el largo de la linea. Esto es útil tenerlo encapsulado en una función para procesar archivos de log u otros archivos con lineas de largo variable, usuales en sistemas que intercambian información mediante archivos de texto.

La función gets(3), deprecada por largo tiempo, no es una buena opción. Si la linea es mas larga que el buffer, esta función permite leer mas allá del final del buffer que recibe como parámetro. Esto se explotado para romper la seguridad de una computadora, en ataques de desbordamiento de buffers

La función fgets(3), es un remplazo "seguro" de gets. Esta función lee hasta que el buffer se llene o encuentre el fin de linea. Si la linea es más larga que el buffer, va a ser necesario otra lectura. Y no tenemos certeza de saber si la función terminó por llegar al final de la linea o por que se llenó el buffer.

Buscando mejores alternativas encontré las funciones de biblioteca getline(3) y getdelim(3). Originalmente ambas funciones eran extensiones del proyecto GNU a la glibc. Fueron integradas al standard POSIX a partir de la revisión POSIX.1-2008. Reciben como parámetros un puntero a un buffer, puntero al tamaño inicial del mismo y un puntero FILE al archivo que se quiere leer. Adicionalmente getdelim recibe un carácter que se utilizará como fin de lectura (en vez de '\n'). Si el buffer no resulta suficiente para completar la lectura, la función lo agranda llamando a realloc(3), actualizando el valor del tamaño del mismo.

Estas funciones son una buena opción para leer archivos con lineas de largo variable o desconocido. Incluso, con algo de cuidado, se pueden leer archivos creados en otros sistemas operativos (Windows/MS-DOS). En la manpage hay un ejemplo de uso.