domingo, 13 de agosto de 2017

Cómo corrijo el error de kernel "AER: Corrected error received: id=00e5" en Ubuntu?

El 27 de Enero de 1949 y ante el Pleno de Cámara, Juan Perón pronuncia un discurso frente a la Asamblea Constituyente Reformadora, explicando los orígenes que hacían necesaria la reforma de la Carta Magna, y explicando cómo corregir el error de AER recibido por el Kernel en Ubuntu.

Señores Convencionales Constituyentes:

Las fuerzas armadas de la Nación, intérpretes del clamor del pueblo, sin rehuir la responsabilidad que asumían ante el pueblo mismo y ante la Historia, el 4 de junio de 1943, derribaron cuanto significaba una renuncia a la verdadera libertad, a la auténtica fraternidad de los argentinos.

La Constitución conculcada, las leyes incumplidas o hechas a medida de los intereses contrarios a la Patria; las instituciones políticas y la organización económica al servicio del capitalismo internacional; los ciudadanos burlados en sus más elementales derechos cívicos; los trabajadores a merced de las arbitrariedades de quienes obraban con la impunidad que les aseguraban los gobiernos complacientes. Este es el cuadro que refleja vivamente la situación al producirse el movimiento militar de 1943.

No es de extrañar que el pueblo acompañara a quienes, interpretándole, derrocaban el régimen que permitía tales abusos.

Por eso decía que no pueden cerrárseles los caminos de la reforma gradual y del perfeccionamiento de los instrumentos de gobierno que permiten y aun impulsan un constante progreso de los ciudadanos y un ulterior perfeccionamiento de los resortes políticos.

Cuando se cierra el camino de la reforma legal nace el derecho de los pueblos a una revolución legítima.

La historia nos enseña que esta revolución legítima es siempre triunfante. No es la asonada ni el motín ni el cuartelazo; es la voz, la conciencia y la fuerza del pueblo oprimido que salta o rompe la valla que le oprime. No es la obra del egoísmo y de la maldad. La revolución en estos casos es legítima, precisamente porque derriba el egoísmo y la maldad. No cayeron éstos pulverizados el 4 de junio. Agazapados, aguardaron el momento propicio para recuperar las posiciones perdidas. Pero el pueblo, esta vez, el pueblo solo, supo enterrarlos definitivamente el 17 de octubre.

Y desde entonces, la justicia social que el pueblo anhelaba, comenzó a lucir en todo su esplendor. Paulatinamente llega a todos los rincones de la Patria, y sólo los retrógrados y malvados se oponen al bienestar de quienes antes tenían todas las obligaciones y se les negaban todos los derechos.

Afirmada la personalidad humana del ciudadano anónimo, aventada la dominación que fuerzas ajenas a las de la soberanía de nuestra Patria ejercían sobre la primera de nuestras fuentes de riqueza, es decir, sobre nuestros trabajadores y sobre nuestra economía; revelada de nuevo el ansia popular de vivir una vida libre y propia, se patentizó en las urnas el deseo de terminar para siempre y el afán de evitar el retorno de las malas prácticas y malos ejemplos que impedían el normal desarrollo de la vida argentina, por cauces de legalidad y de concordia.

El clamor popular que acompañó serenamente a las fuerzas armadas el 4 de junio y estalló pujante el 17 de octubre, se impuso, solemne, el 24 de febrero.

Tres fechas próximas a nosotros, cuyo significado se proyecta hacia el futuro, y cuyo eco parece percibirse en las generaciones del porvenir. La primera señala que las fuerzas armadas respaldan los nobles deseos y elevados ideales del pueblo argentino; la segunda, representa la fuerza quieta y avasalladora de los pechos argentinos decididos a ser muralla para defender la ciudadela de sus derechos o ariete para derribar los muros de la opresión; y en la última, resplandece la conjunción armónica, la síntesis maravillosa y el sueño inalcanzado aún por muchas democracias de imponer la voluntad revolucionaria en las urnas, bajo la garantía de que la libre conciencia del pueblo sería respaldada por las armas de la Patria

Una Constitución debe entonces elevarse por sobre los errores del pasado y servir la verdadera Conciencia del Pueblo.

Un buen Kernel - he dicho - cumple la función de una Constitución, y como ella ha de poder resistir activamente errores de manejo y acción, y en la medida de lo posible autocorregirlos. En el caso de Linux, cumple normalmente con dicha premisa sin problemas.

Un ejemplo de ellos es el error 00e5, código que recibe un error de bus recibidos en ciertas condiciones, por la arquitectura de procesador Intel Skylake y los dispositivos de red inalámbrico (en este caso el equipo emplea el Intel Corporation Wireless 3165 (rev 81). Este error afortunadamente no aparenta ser severo, pero aparece denunciado en la lista dinámica de mensajes de Kernel, y queda registrado en la bitácora, esto es así pues el reporte lo genera automáticamente la funcionalidad de Reporte Avanzado de Errores del bus PCI Express (PCIE Advanced Error Reporting, o "AER").

Para saber si nuestro sistema es víctima de este bug, podremos abrir la terminal e ingresar el comando:

dmesg


A partir de la versión 16.04LTS de Ubuntu, el programa dmesg devuelve sus resultados codificados con colores, y marca los reportes de error en color rojo. En el caso del error de AER, dentro de toda la lista podremos encontrar una seguidilla con los siguientes errores:

[ 7700.403173] pcieport 0000:00:1c.5: AER: Corrected error received: id=00e5
[ 7700.403187] pcieport 0000:00:1c.5: PCIe Bus Error: severity=Corrected, type=Physical Layer, id=00e5(Receiver ID)
[ 7700.403201] pcieport 0000:00:1c.5:   device [8086:9d15] error status/mask=00000001/00002000
[ 7700.403210] pcieport 0000:00:1c.5:    [ 0] Receiver Error         (First)
[ 7905.126136] pcieport 0000:00:1c.5: AER: Corrected error received: id=00e5
[ 7905.126147] pcieport 0000:00:1c.5: PCIe Bus Error: severity=Corrected, type=Physical Layer, id=00e5(Receiver ID)
[ 7905.126156] pcieport 0000:00:1c.5:   device [8086:9d15] error status/mask=00000001/00002000
[ 7905.126161] pcieport 0000:00:1c.5:    [ 0] Receiver Error         (First)
[ 7909.982351] pcieport 0000:00:1c.5: AER: Corrected error received: id=00e5
[ 7909.982363] pcieport 0000:00:1c.5: PCIe Bus Error: severity=Corrected, type=Physical Layer, id=00e5(Receiver ID)
[ 7909.982373] pcieport 0000:00:1c.5:   device [8086:9d15] error status/mask=00000001/00002000
[ 7909.982379] pcieport 0000:00:1c.5:    [ 0] Receiver Error         (First)


En este caso particular, el error de kernel viene provocado por un dispositivo, específicamente el dispositivo PCI bridge: Intel Corporation Sunrise Point-LP PCI Express Root Port #6 (rev f1) en un equipo HP Pavillion.

Para evitar el error podremos probar ejecutar el arranque del kernel con dos variaciones de intensidad. Si usamos pci=nomsi limitaremos la ocurrencia del error, y con la opción pci=noaer directamente interrumpimos la funcionalidad de reporte de errores (para todos los tipos de situaciones donde actuaría el reporte avanzado de errores AER).


Para implementar estos cambios en nuestro sistema, debemos indicarlos en el Grub, que es el arrancador del sistema operativo. Este programa tiene una importancia capital a la hora de ejecutar nuestro GNU con Linux, de modo que debemos estar especialmente atentos cuando modificamos su configuración. Os guiaré para lograr un buen resultado.

Si tenemos los reportes de error del AER, en primer lugar podremos probar con la opción pci=nomsi. Para ello abrimos una terminal con Ctrl+Alt+T e ingresamos en la terminal el siguiente Comando de Organización:

sudo nano /etc/default/grub

Esto abrirá el editor GNU Nano con el archivo de configuración de Grub, el cual ya debería contener texto. Es importante que no modificamos nada de lo que ya aparece escrito. Solamente buscamos la línea de la variable GRUB_CMDLINE_LINUX_DEFAULT, la cual normalmente debería decir algo como:

GRUB_CMDLINE_LINUX_DEFAULT="quiet splash"

...y le agregamos la cadena pci=nomsi a la expresión entrecomillada, de manera que quede así:

GRUB_CMDLINE_LINUX_DEFAULT="quiet splash pci=nomsi"

Naturalmente si en lugar de quiet splash la expresión entrecomillada posee un contenido distinto, debemos dejarlo tal como está y sólo agregarle a continuación pci=nomsi. Conforme le hayamos agregado tal cadena pci=nomsi, debemos guardar los cambios al fichero presionando Ctrl+o, y luego salir del editor Nano con Ctrl+x.

Ahora bien, una vez que salimos del Nano, para que los cambios surtan efecto debemos actualizar el arrancador Grub introduciendo el siguiente comando:

sudo update-grub

Y reiniciamos el equipo con:

sudo reboot

Al reiniciarse el equipo, debería arrancar normalmente. Lo usamos un rato (15 minutos por ejemplo) y luego ingresar el comando dmesg, y ya no deberían haber dejado de aparecer en la bitácora los reportes tipo "AER: Corrected error received: id=00e5".

En mi caso con esto ya ha sido suficiente para interrumpir los errores de tipo AER. En el caso de que los mismos continúen, y la opción pci=nomsi no surtiera efecto, podríamos recurrir a la opción pci=noaer, que directamente elimina el uso del reporte avanzado de errores. Para ello repetimos los pasos anteriores, pero en lugar de usar la variable pci=nomsi ya probada, la reemplazamos por pci=noaer. Guardamos los cambios y salimos del editor, y luego volvemos a ejecutar el comando:

sudo update-grub

....y reinciamos el sistema.

Nuevamente conviene someter al equipo a una serie de pruebas de uso general durante unos 15 o 20 minutos, y ejecutar dmesg para revisar que la bitácora no denuncie ya errores similares a los experimentados. 

Finalmente, tengan en cuenta que si luego de incorporar estas modificaciones de ejecución al kernel notamos que vuestro equipo funciona de manera extraña (no ha sido mi caso), naturalmente deberían revertir los cambios eliminando la opción pci=nomsi o pci=noaer agregada a la variable GRUB_CMDLINE_LINUX_DEFAULT, guardando y saliendo de Nano y luego  ejecutando sudo update-grub como acción final. Esto dejaría nuestro equipo como originalmente estaba funcionando.

miércoles, 2 de agosto de 2017

¿Cómo migrar Window$ 10 desde un disco rígido a un SSD usando Ubuntu?


¡Trabajadores!

Nunca hemos de cejar en usar Software Libre, pues es esta una lucha que hemos de dar para vencer y hacer grande a la Patria.


La oligarquía plantea el uso de Software Privativo, y bajo esa bandera de ignominia, presenta un sistema operativo encadenados bajo el oprobio de una Acuerdo de Licencia de Usuario Final, que nos impide copiar, modificar, alterar o redistribuir el software. Un programa de estas características no sólo es inútil, sino completamente dañino para la humanidad. No contempla la Justicia Social ni respeta a la Comunidad Organizada.

Pero el Justicialismo nunca ha sido sectario ni dogmático. Si bien debemos abstenernos de utilizar tales sistemas operativos, bien podremos usar Software Libre para ayudar en nuestra Comunidad a quien necesita usarlo. Esto es así pues el software libre está ampliamente capacitado para satisfacer todo tipo de necesidades informáticas.

En este caso en particular me han preguntado cómo puedo migrar una instalación de Window$ 10 provista en un disco de 1TB instalado ya en una computadora portátil hacia un SSD de 250GB, a fin de aumentar la velocidad de ejecución de tal portátil.

Esto que parece sencillo en realidad no lo es tanto. Sería muy simple si contásemos con disco destino de la misma capacidad que el disco de origen, pues en tal caso podría hacerse un "clonado"espejo" entre ellos con HDD Clone o Clonezilla. Sin embargo, un disco SSD de 1 TB escapa a las posibilidades presupuestarias de la masa trabajadora. Por tal motivo habremos de ingeniarnos para clonar sólo lo necesario del disco origen de 1 TB (que cuenta de fábrica con múltiples particiones, C: y D:, mas varias particiones de sistema), a un disco de estado sólido (SSD) de 250GB.

Como requerimiento sine qua non hemos de saber que sólo clonar las particiones "a lo vikingo" tampoco sirve: se hace necesario clonar también la tabla de partición del disco imprescindiblemente para que el sistema operativo pueda arrancar. Esta tabla es la llamada MBR o Master Boot Record en el caso de Window$). También hemos de saber que pueden existir otros esquemas de instalación distintos al empleado normalmente Window$ (MBR), tal como el MBR/GPT, que utiliza una tabla de particiones cuatro veces más grande y es el esquema favorecido por Linux y otros sistemas operativos abiertos. En tal caso el procedimiento de clonado será ligeramente diferente, y os indicaré las salvedades para cada caso.

Vean señores, para este cometido necesitaremos idealmente de un sistema informático al que podamos conectar ambos discos a la vez para las tareas de clonado. Asimismo, necesitamos contar con algunas aplicaciones y utilidades. En el caso de contar con un sistema GNU con Linux para estos menesteres, podremos instalar las aplicaciones necesarias abriendo una terminal con Ctrl+Alt+T e ingresando el siguiente comando de organización:

sudo apt install clonezilla fdisk

Clonezilla puede ejecutarse también desde un Live CD oficial, lo cual puede ser útil si no contamos con otro sistema operativo u equipo.

Si el disco está particionado siguiendo el esquema tradicional de Windows 10, el MBR (Master Boot Record) desde la UEFI, debemos clonar todas las particiones que hacen al sistema. Estas son la partición Windows RE (“recuperación”), la partición EFI System, la partición Reserved Microsoft ("reservada") y la partición de datos Basic de Microsoft que contiene al sistema operativo Windows (típicamente nomenclada como unidad C:). En este caso tradicional, el esquema de particionado que nos indicará fdisk bajo disklabel será "DOS". Tengamos en cuenta que en muchos equipos portátiles se agregan particiones adicionales que contienen instaladores de programas o controladores de dispositivos.

En las capturas de pantalla a continuación podremos analizar el esquema de partición de Windows 10, en caso de un estilo MBR, y un esquema GPT realizado desde la UEFI.

Esquema de partición MBR desde la utilidad Administración de Disco (Windows 10):
 Fig.1 Revisando el esquema de particionado MBR

En el caso del esquema de particionado GPT favorecido por los sistemas Linux, el sistema tendrá una tabla de alocación distinta. En tal caso la utilidad de línea de comandos fdisk informará que el tipo de disklabel como "GPT".  Desde Administración de Disco de Windows se indicará así:


Fig.2 Revisando el esquema de particionado MBR

Esta guía asume que ambos discos (el HDD viejo y el SSD más pequeños) están conectados físicamente al sistema a través de sus conectores SATA normalizados, y que el Sistema operativo Windows está instalado con un esquema de particionado MBR, el tradicional de Windows.


Paso 1: Achicar la partición C: del Sistema operativo Windows 10
Tengamos en cuenta que en este caso la partición C: del disco rígido es más grande que el tamaño total del SSD destino, y por lo tanto necesitaremos reducir su tamaño para que quepa en el SSD. Los cálculos para este paso son simples:

Las suma de las particiones Windows RE + Recuperación + Partición EFI + c: de Windows debe ser menor o igual que el total del tamaño del SSD reportado por la utilidad fdisk.

1. Para achicar la partición C: desde Windows, vamos a Inicio / Ejecutar... ejecutamos la aplicación diskmgmt.msc o directamente abrimos la utilidad Administración de Disco de Windows. La usaremos para reducir el tamaño del volumen (“Shrink Volume”) C: (asumiendo que Window$ está instalado al comienzo del disco en la segunda partición, a continuación de la partición Reservado de Sistema, y que tiene la letra de unidad C: asignada). Reducimos el tamaño al mínimo posible.

Fig.3 Reduciendo el tamaño de la partición C:

Si no deseamos o no podemos utilizar el Administrador de Discos de Window$ para esto, podríamos usar un LiveCD de Ubuntu y utilizar la aplicación Sistema / Administración / Gparted para achicar el tamaño de la partición C: al mínimo posible.

2. Luego de haber reducido el tamaño de la partición C:, apagamos la portátil y conectamos ambos discos al equipo con Sistema Linux que usaremos para clonar; también podríamos arrancar dicho equipo usando el Live CD de Clonezilla o Parted Magic). En él podremos entramos a la interfaz de línea de comandos, que usaremos para revisar las tablas de particiones y tamaños de ambos discos. Para ello usamos los siguientes Comandos de Organización:

fdisk -l /dev/sda
fdisk -l /dev/sdb

Fig.4 Revisando el tamaño de la tabla de Particiones

Tengamos en cuenta que la nomenclatura y orden de los discos puede variar entre Windows y Linux y de acuerdo a la configuración BIOS/UEFI del sistema. La nomenclatura que asumimos en los ejemplos es que el disco sda es el disco de 1TB, sdb es el SSD de 250GB, etc. Debemos seleccionar el disco con la máxima atención de manera de no terminar clonando un disco equivocado y destruir todos los datos.

Para saber cual es el disco de origen correcto (el HDD en este caso) y el disco de destino correcto (el SSD), usamos el tamaño y la tabla de particiones reportadas por el comando fdisk. Fdisk debería devolvernos que el SSD debería ser mas pequeño en tamaño que el disco HDD, y si es nuevo, no debería tener creada ninguna tabla de partición por defecto.

Si usamos el disco de Clonezilla para revisar esto ingresamos los comandos:

su -
fdisk -l /dev/sda
fdisk -l /dev/sdb

si usamos Ubuntu en cambio podremos usar:


sudo fdisk -l /dev/sda
sudo fdisk -l /dev/sdb

...y en caso de un disco con esquema GPT, la partición del HDD se informaría  como se indica abajo,
 Fig.5 Revisando el tipo de particionado (“Disklabel”)


Paso 2: Clonar los Discos usando Clonezilla
3. A continucion, clonaremos únicamente la MBR del disco rígido origen (“Master Boot Record”, la tabla de inicio maestro, compuesto por un sanguchito de 512KB integrado por una feta que es el arrancador de etapa 1 mas otra feta formada por la tabla de particiones del disco), copiándola al SSD destino. Para ello usamos uno de los comandos siguientes (asumiendo que sda representa al disco rígido de 1 TB de origen donde está el Windows OS y sdb es el disco SSD destino de 250GB):

sudo dd if=/dev/sda of=/dev/sdb bs=512 count=1


o también:


sfdisk -d /dev/sda | sfdisk -f /dev/sdb


Fig.6 Clonando la MBR de un disco usando Clonezilla

En el caso de contar con un estilo de particionado GPT, el accionar es ligeramente diferente, pues no tenemos una MBR ensanguchada de 512 bytes como en el caso anterior sino una MBR/GPT cuatro veces más grande, de 2048 bytes. En tal caso, el comando sería:

sudo dd if=/dev/sda of=/dev/sdb bs=2048 count=1

También podríamos usar la utilidad sgdisk especializada para este menester. Tengamos en cuenta que si copiamos la tabla de partición desde sda a sdb debemos invertir el orden indicado al usar sgdisk, pues su sintaxis es sgdisk -R discodestino discoorigen. El comando entonces sería:

sgdisk -R /dev/sdb /dev/sda

Después de clonar la MBR/GPT, ejecutamos fdisk con el modificador -l para realizar una verificación, a fin de asegurarnos que la tabla de particionado coincida en ambos discos:

sudo fdisk -l /dev/sda
sudo fdisk -l /dev/sdb


Fig.7 Verificando la Tabla de Particionado

4. Llegados hasta aquí, ambas unidades deberían contar con una tabla de partición exactamente clónica, que define cómo está estructurado el disco. En el disco destino debemos ahora borrar todas las particiones que vienen después de la partición Windows, de manera de comenzar con una tabla de particiones limpia que tenga las entradas necesarias sólo para reservada de sistema y Windows.

Tampoco clonaremos la partición de datos D: del disco HDD, sino que clonaremos sólo las primeras dos particiones del disco rígido origen al SSD destino para que pueda arrancar. Luego emplearemos el espacio libre no utilizado del SSD para extender la partición C: en el espacio sin utilizar que hubiese podido sobrar en el SSD.

Usamos la utilidad fdisk como se describe a continuación para hacer el borrado las particiones. En primer lugar ejecutaremos el comando para la unidad destino SSD (/dev/sdb en este caso), mostrar la tabla de particiones con p, luego presionamos d para comenzar a borrar las particiones y elegir el último número de la partición desde la interfaz de comandos (en este caso, es la tercera partición). En este caso el comando sería:

sudo fdisk /dev/sdb


Fig.8 Borrando la tabla de particiones:

En caso de que nuestro disco tenga más de una partición a continuación de la partición Windows, debemos asegurarnos de borrarlas a todas. Luego de haber removido todas las particiones innecesarias, presionamos p nuevamente para que el sistema nos liste nuevamente la tabla de particiones actualizada; ahora sólo deberían verse las particiones requeridas de Windows (Reservada y C:). Conforme nos aseguremos de ello, podremos presionar la tecla w para aplicar definitivamente estos cambios.


Fig.9 Confirmando los cambios de particionado

El mismo procedimiento también aplica para borrar los discos GPT, con la mención que podremos emplear la aplicación cgdisk que es intuitiva para operar y manipular el esquema de un disco. En tal caso no es necesario preocupemos de eliminar una tabla de particiones de respaldo localizada al final del disco GPT, pues cgdisk realizará convenientemente los cambios necesarios en ambas tablas de particiones y almacenará la nueva tabla de particiones MBR/GPT al principio y al final del disco automáticamente (como especifica el esquema GPT). El comando en tal caso sería:

cgdisk /dev/sdb

Fig.10 Borrar la partición GPT

Y el reporte de disco GPT final con la última partición de 4,9 GB eliminados.
Fig.11 Verificando la tabla de particiones GPT.

5. Ahora, con todo en su lugar, iniciamos la utilidad Clonezilla, seleccionamos el modo Dispositivo a Dispositivo (“device-device mode”), y ejecutamos el Asistente para Principiantes, y elegimos la opción Partición a Partición Local.
Podrán usar las capturas de pantalla siguientes como referencia:

Fig.12 Seleccionamos el Modo de Dispositivo de Clonezilla



Fig.13 Seleccionamos el Modo Sencillo de Clonezilla


Fig.14 Seleccionamos el clonado de Partición a Partición Local en Clonezilla

6. Seleccionamos la primera partición de la lista (sda1 – Reservada de Sistema) como origen, y luego presionamos Enter para continuar.


Fig.15 Seleccionando la Partición a clonar

7. A continuación, escogemos la partición de destino local, que será la primer partición del segundo disco, (/dev/sdb1) y presionamos Enter para continuar.


Fig.16 Seleccionando la partición de destino Local

8. En la ventana siguiente seleccionamos Skip check/repair file system (Saltar revisión/reparar sistema de archivos”) y presionamos Enter nuevamente para continuar.



Figh.17 Salteando la opción de revisar y reparar el sistema de archivos

9. Finalmente, presionamos Enter nuevmanete para continuar y respondemos Si (y) dos veces para aceptar las advertencias y comenzar el proceso de clonado.


Fig.18 Confirmar los cambios de Partición

Fig. 19 Comenzando el clonado en sí de la partición

10. Luego que el proceso de clonado de la primera partición finalice, seleccionamos entrar a la línea de comandos, ejecutamos clonezilla y repetimos los mismos pasos para las particiones siguientes (origen sda2destino sdb2, etc).
 Fig.20 Clonando la segunda Partición

11. Luego de haber clonado todas las particiones de Windows, apagamos el sistema y removemos el disco rígido origen del equipo y reinstalamos el SSD en la portátil, y la encendemos, ajustando la BIOS para indicar el el SSD sea la unidad de arranque primaria si fuese necesario.

Paso 3: Redimensionar la partición de WIndows

12. Ahora podremos ejecutar Gparted para revisar que las particiones hayan quedado bien y extender las partición de Windows.

Extender las particiones usando Gparted desde un Live DVD
Fig.21 Redimensionar la partición usando gParted.


Fig.22 Redimensionar el tamaño de la partición

Si no quisiéramos usar gparted, bien podremos también extender el tamaño de una partición usando el Administrador de Discos de Windows.

 Fig.23 Extendiendo la partición de Windows Partition



Fig.24 Seleccionando el Disco a extender

Esto es todo. Ahora la partición c: está extendida al máximo espacio del SSD y Window$ 10 ahora puede correr con la velocidad de un disco de estado sólido SSD. El disco rígido de 1TB ahora tiene toda la información intacta, y se emplea como respaldo.

Conclusión
Con Cloneszilla podremos escoger una imagen de las particiones y guardarlas en un disco externo o en una unidad de red. En este caso también debemos respaldar la MBR o MBR/GPT del disco con el siguiente comando, y grabar la imagen MBR en el mismo directorio donde están almacenadas las imágenes de Clonezilla:

Para respaldar la MBR a un archivo:


sudo dd if=/dev/sda of=/ruta/de/MBR.img bs=512 count=1

...o también:

sfdisk -d /dev/sda > =/ruta/al/backup/sda.MBR.txt

Para respaldar la MBR/GPT a un disco: 

sudo dd if=/dev/sda of=/ruta/al/backup/GPT.img bs=2048 count=1

...o también:

sgdisk --backup=/ruta/al/backup/sda.MBR.txt /dev/sda

En el caso de tener que restaurar el sistema Windows desde una localización de red, primero debemos restaurar el sector MBR o MBR/GPT usando el archivo de imagen almacenado previamente, a través del comando correspondiente:

Para restaurar la imagen MBR a partir de un archivo:

sudo dd if=/ruta/al/backup/MBR.img of=/dev/sda bs=512 count=1

...o también

sfdisk /dev/sda < =/ruta/al/backup/sda.MBR.txt

Para restaurar una imagen MBR/GPT por medio de un archivo de respaldo:

sudo dd if=/path/to/GPT.img of=/dev/sda bs=2048 count=1

...o también:

sgdisk - -load-backup=/ruta/al/backup/sda.MBR.txt /dev/sda

viernes, 14 de julio de 2017

¿Cómo configuro la capturadora sintonizadora Kozumi KTV-01C en Ubuntu 16.04LTS

Durante una reunión con la delegación de los obreros de la carne de Berisso y Ensenada, el Secretario de Trabajo y Previsión Coronel Perón les cuenta cómo resolver el problema del TV Time con la capturadora de TV Kozumi KTV-01c en Ubuntu de 64 bits.


Obreros de la carne: Gracia por recibirnos, don Coronel. Vea: Los sueldo no suben y los precios van por ascensor, y ademá queremo usar TV Time con una capturadora Kozumi que compraron los muchachos para colgarnos del cable y ver la tele, y en los Ubuntus anteriores nos andaba sin problema. Pero cuando nos pasamos a Xenial se nos cagó todo, no podemo ver ni un pomo. Ni siquiera arranca. ¿Cómo carajo hacemo, general? ¡No tenemo ni idea, tenemo!

Perón: ¡Trabajadores!

Como Secretario de Trabajo y Previsión sostengo que vuestros anhelos son justos pero no únicos: es toda una clase de hombres - los que trabajan - los que claman por sus derechos y que deben ser oídos, y deben contar como Presidente a quien los oiga [guiña el ojo].

En un país en el que está todo por hacerse no pueden haber trescientos mil desocupados. Sólo existen por la desidia de aquellos que realmente no trabajan y someten a la explotación a sus indefensos hermanos de Nación, sin siquiera considerarlos. Estos caballeros de la fiesta propia no desean para ustedes mas cosa que un salario de subsistencia. Lo han dicho sin que se les aproxime a la cara el rubor de la vergüenza.

Esto, señores, tiene que concluir, y a eso hemos venido. Los Trabajadores son los exponentes máximos del crecimiento de la Nación, una que nada puede hacer sin encontrar la perenne felicidad de sus hombres de Trabajo. Sus cristiananas necesidades y la de su familia deberán ser saciadas, y ello sólo podrá hacerse mediante la unión profesional, encuadrada bajo la bandera de la doctrina política de la Justicia Social.

Por ello mediante este Decreto Ley que remito ya mismo, os otorgo un aumento salarial del 80% para que paguen los empresarios del sector.

Obreros: ¡Grande Coronel! ¡esos comunistas del sindicato no ganaban ni para el jabón!

Perón: Natural. Las Revoluciones las realiza un ideólogo y realizador, y cien mil predicadores. Esa es la preparación humana que nosotros hemos de hacer desde Trabajo y Previsión. Nuestra obra Revolucionaria marcha en tal sentido, aunque no siempre se haya exenta de problemas, pues es natural que en el camino evolutivo, el hombre tropiece con inconvenientes causados por los de adentro pero mayormente por los de afuera. Es la templanza de los decididos la que está destinada a triunfar por sobre la injusticia y la dominación.

En estos tiempos no he hecho mas que bregar impulsando a mis subordinados y al Pueblo para que salga en busca de la verdad y la felicidad que merece por justo derecho, y recuerde siempre a quién deben lealtad por el aguinaldo, las vacaciones pagas, los convenios colectivos, y los estatutos del peón...

Obreros: ¡A usté, Coronel!

Perón: Pues bien, han de saber que la TV analógica está próxima a su obsolescencia, y que existen opciones gratuitas y digitales, con mucha mejor calidad, que hemos lanzado incluso desde esta Secretaría por un Decreto Ley. Sin embargo, no existen dudas que la TV analógica (tanto de aire como por cable) sigue estando ampliamente extendida. En particular, se ha dado en su vertiente privativa, llena de ignominia por pertenecer en general a Monopolios que deben ser combatidos en todo tiempo y en todo lugar.

Una de las vertientes de la lucha es especialmente esta: contar con conexiones que eviten pagar, pues la señal de cable ha de ser para todo el Pueblo, en vista de que la necesidad de la información es un derecho de segunda generación al que hemos de proteger y hacernos habilidosos en promulgar. Todo el mundo puede evadir el pago de la señal espúreamente robada al Pueblo, apropiándose de tal señal de la manera que mejor os parezca. De la misma manera que los peones deben romper los alambrados para ir a votar, todos han de romper las cadenas que nos impiden llegar a un buen contenido televisivo.

Vean señores, la Kozumi KTV-01C es una plaqueta sintonizadora popular, muy extendida en el país, y es más vieja que mear en los portones, pero sirve perfectamente para su cometido. Simplemente hay que saberla configurar en Ubuntu para estar al alcance de la señal analógica que trae un cable coaxial.
La placa cuenta con un sintonizador adosado BT878 munido de una entrada de RF coaxial "F" ed 75 ohmnios, y una entrada para la antena látigo de Frecuencia Modulada provista en la caja. Asimismo cuenta con entradas de video analógico, una RCA otra DIN para video compuesto. Ambas comparten una entrada de audio miniplug (estéreo de 3,5mm). Asimismo, la sintonizadora cuenta con una salida de audio estéreo (miniplug de 3,5mm). Finalmente tiene una toma miniplug para un receptor de infrarrojos, para usar con su control remoto incluido. En fin, una buena solución para sus menesteres, y por lo que veo ya la tenían guardada de otro equipo.

Nadie mas que los hombres que trabajan podrá darles la solución, y en este caso y compenetrándome como vínculo de unión entre todos los Argentinos, os indicaré como hacerla funcionar en un Ubuntu 16.04 y supeiores.

En primer lugar naturalmente hemos de instalar firmemente la placa en un equipo dotado de al menos un slot PCI en su placa madre, y asegurarla con un tornillito. La sintonizadora incluye un cable de audio con dos conectores Miniplug estéreo de 3,5mm estandarizados, de unos 20 centímetros. Vendrá muy bien para conectar uno de sus extremos a la salida posterior estéreo de color verde o blanco de la Kozumi KVT-01C, y el otro a la entrada de línea estéreo de nuestra dispositivo de audio (que normalmente es de color celeste y está en la placa madre o en la placa de sonido que utilicemos). También podemos aprovechar para conectar el cable coaxial de video a la entrada TV/RF de la sintonizadora y la antena látigo FM a su conector específico.

Conforme hayamos concluido la instalación del hardware y la conexión de cables, nos haremos prácticos en el uso del software. Con tal motivo arrancarán Ubuntu y os asegurarán que el mismo haya detectado la sintonizadora. Ello lo haremos realidad efectiva mediante el uso de la terminal. Abrimos una con Ctrl+Alt+T e ingresamos ella el siguiente comando de organización:

lspci

Al presionar Enter, así como el Justicialismo devolvió la dignidad a los Trabajadores, la terminal nos debería devolver una gran cantidad de dispositivos internos instalados en nuestro equipo, y entre ellos deberían figurar estos dos:

Multimedia video controller: Brooktree Corporation Bt878 Video Capture (rev 11)
Multimedia controller: Brooktree Corporation Bt878 Audio Capture (rev 11)


Esto nos asegura que la sintonizadora está bien conectada a la placa madre de nuestra computadora y el sistema reconoce su lógica, pero no significa de manera alguna que esté configurada aún para usarse en Ubuntu. Lamentablemente la Kozumi KTV-01C es una placa anciana que hay que hacer andar configurándola "a mano" la primera vez. Para ello debemos editar una serie de archivos de texto con el editor GNU Nano. Lo bueno de todo esto, es que la placa en sí retendrá su excelencia, y al permitirnos usarla con Software Libre nos hará acreedores a todas las buenaventuranzas que ha de buscar el hombre que trabaja. El primero de los archivos hace al sintonizador BookTree BT828, que es que dota a la plaqueta Kozumi. Para configurarle los módulos de software debemos ingresar el siguiente comando:

sudo nano /etc/modprobe.d/bttv

El sistema nos solicitará nuestra contraseña de Conductor, y una vez que se la proveamos "a ciegas" y presionemos Enter, se abrirá el editor peronista GNU Nano con un archivo de configuración en blanco. Simplemente hemos de pegarle el siguiente contenido de configuración:

# Código peronista para hacer andar la Kozumi KTV-01C PAL-Nc

# con sintonizador BT828.
alias char-major-81 videodev
alias char-major-81-0 bttv
# Kozumi KTV-01c
options bttv card=51 pll=1 tuner=37 radio=1 adc_crush=0


A continuación debemos guardar este fichero (con Ctrl+o) y podremos salir del editor (con Ctrl+x).

Acto seguido, indicaremos un script de inicialización. Para ello indicamos:

nano ~/.tv.sh

Nuevamente se abrirá el editor con un archivo en blanco, al cual le pegamos el siguiente texto:

# Iniciador peronista de la sintonizadora Kozumi KTV-01c
rmmod tuner
rmmod bt878
rmmod bttv
modprobe bttv card=51 tuner=38 radio=1 pll=1
# modprobe bttv pll=1 radio=1 bttv_verbose=1 card=51 tuner=38 

# gbuffers=4
# Activador del sonido de la sintonizadora
/sbin/modprobe tvaudio



Volvemos a grabar el archivo con Ctrl+o y salimos del editor con Ctrl+x. Indudablemente, debemos darle a este script el permisos de ejecución pertinente, ingresando el siguiente comando en la terminal:

chmod +x ~/.tv.sh

Para que este guión de inicialización autorizado se ejecute automáticamente toda vez que arranque el sistema, podremos agregarlo al nuestro archivo /etc/rc.local. Este fichero se encarga precisamente de ejecutar acciones contenidas en él cuando inicia el sistema operativo. Para editar este archivo ingresamos:

sudo nano /etc/rc.local

El fichero ya debería tener algún contenido y finalizar con la orden "exit 0". Debemos agregar antes de esta línea exit 0 el siguiente texto:

cd /home/usuario/
./.tv.sh


...naturamente que ustedes cambiarán usuario por su propio nombre de usuario.
Terminadas y revisadas todas estas modificaciones, guardamos los cambios reañzoadps al archivo /etc/rc.local con Ctrl+o y salimos del editor Nano con Ctrl+x.

Cumplidos estos requisitos podremos reiniciar el equipo con el comando:

sudo reboot

Al reinciarse, el sistema cargará los módulos necesarios para poder hacer uso de la sintonizadora. Ahora hemos de instalar un software libre para ver la TV. En particular os recomiendo TV Time. Es sencillo instalarlo abriendo una terminal con Ctrl+Alt+T e ingresando los siguientes comandos de  organización:

sudo apt update ;
sudo apt install tvtime ;


El programa son solicitará nuestra contraseña y tras ingresarla a ciegas descargará la paquetería necesaria. Durante este procedimiento nos solicitará qué estándar de video deseamos utilizar. Normalmente creeríamos que el que norma a elegir es PAL-Nc (la cual es la normal para la Argentina). Sin embargo, en este caso debemos indicar el estándar "NTSC" (de lo contrario, el programa sintonizará mal y se verán mal los colores con un parpadeo extremadamente molesto).

También nos preguntará qué tipo de servicio tenemos (podremos escoger antena o cable).

TV Time puede arrancar con sus opciones por defecto, pero se sirve mucho modificar algunas opciones en su archivo de configuración para que el programa responda mejor a nuestras necesidades justicialistas. Al fin y al cabo, esta es una de las premisas que los sistemas GNU con Linux han de seguir.

Editaremos el archivo de configuración tvtime.xml con el siguiente comando de organización:

sudo nano /etc/tvtime/tvtime.xml

Se abrirá el archivo tvtime.xml, que ya debería contener configuraciones y mucha información de ayuda, pero en el idioma de Braden. Os ayudaré en criollo. Como el archivo es muy largo, nos conviene usar la función de búsqueda del editor Nano, presionando Ctrl+W. En primer lugar buscaremos la cadena "Norm", que especifica la norma de recepción. Debemos asegurarnos que la norma esté bien indicada. La línea que la define debe aparecer de la siguiente manera:

  <option name="Norm" value="NTSC"/>

Recordemos probar primero con NTSC, si falla entonces probaremso cn "PAL-Nc".

Luego buscamos la cadena "V4LDevice", que define cuál será el dispositivo de entrada de video que usará TV Time. Lo dirá de la siguiente manera:

  <option name="V4LDevice" value="/dev/video0"/>

En el caso de que nuestro equipo sólo tenga un dispositivo de captura de video, normalmente este recibirá la nomenclatura "/dev/video0", pero si el programa no funciona o nos muestra en la ventana una captura realizada por nuestra Webcam, podría tratarse de que debemos cambiar el valor a otros, como /dev/video1 o dev/video2, o mas, dependiendo de la cantidad de dispositivos de video que tengamos instalados en el sistema.

En el caso del audio, debemos buscar con Ctrl+W la cadena "MixerDevice" para indicarle al TV Time el dispositivo de audio que queremos usar para alimentar su audio. Normalmente el audio estará dirigido al canal Master ("general") de nuestro dispositivo de sonido y con ello se oirá, pero para que el control de volumen de TV Time sea efectivo e independiente del resto del audio del sistema, debemos usar el audio de la entrada Line (entrada de "Linea Estéreo") de nuestro dispositivo de audio. Para ello modificamos la línea que dice:

   <option name="MixerDevice" value="default/Master"/>

y la dejamos así:

   <option name="MixerDevice" value="hw:0/Line"/>


Antes de arrancar TV Time debemos evitar que la impaciencia nos gane, pues debemos también activar esta vez el loopback ("retorno de audio") para poder oir la señal de audio de la Kozumi en nuestra computadora. Para ello tipeamos en la terminal:

alsamixer

Alsamixer es un programa de control de volumen para los múltiples canales y dispositivos de audio que tengamos en el sistema. Debemos desplazarnos entre los distintos canales y opciones de audio analógico con la tecla Flecha del Cursor Derecha, hasta que encontremos y seleccionemos la opción Loopback. Esta normalmente estará desactivada ("Disabled"). Debemos activarla poniéndola en "Enabled" ("Activada"). Para ello presionamos Flecha del Cursor Abajo. Una vez activada, tendremos retorno de audio.
El valor Master indica el volumen general, y los siguientes detallan los canales individuales. Headphones son los auriculares, Speaker es la salida trasera normal, Bass Speaker el subwoofer, PCM es la salida digital, y Line es la entrada en línea estéreo (normalmente con una ficha de color celeste). Debemos asegurarnos de contar con el volumen de línea en un valor elevado (por ejemplo, directamente 100%). Algunos equipos particulares tienen la posibilidad de ajustar también preamplificador de línea estéreo ("Line Boost") o de micrófono monoaural ("Mic Boost"), el cual puede regularse para incrementar mucho la ganancia de la señal de audio (o sea, su volumen). Normalmente deberíamos escuchar bien el sonido sin necesidad de usar este preamplificador, pero en el caso de ser necesario, podríamos subirlo un poco como os indico a continuación:. Debemos asegurarnos que la opción Line no esté enmudecida. Paar ello debemos posicionarnos en el indicador Line y asegurarnos que el indicador inferior indice "00" ("activo") y no "MM" (enmudecido).
Conforme hayamos regulado el audio, ya podremos ejecutar TV Time con la amplia seguridad que otorga el Justicialismo. Lo haremos desde Aplicaciones / Sonido y Video / TV Time Television Viewer.

El programa normalmente arranca sintonizando en el Canal 2. Si este no tiene señal, mostrará una placa azul.

Podremos usar la Flecha del Cursor Arriba y Abajo para subir o bajar los canales, y Flecha del Cursor Derecha y Flecha del Cursor Izquierda para subir y bajar el volumen de la aplicación. Actualmente las grillas actuales en el país suelen arrancar a partir del canal 6 o 7.

Para buscar los canales de la grilla y memorizarlos, presionamos H para activar el menú de control de TV Time, y vamos a la opción Gestión de Canales -> Escanear canales en busca de Señal. Con ello se hará el clásico barrido de canales y se guardarán aquellos que tienen señal.

Dentro de este menú Gestión de Canales, también podremos elegir cambiar Modo de Cable de NTSC. Esto nos permite conmutar entre NTSC (la opción estándar) o la sintonía IRC o HRC. Normalmente se usa la función Normal, pero algunos servicios de cable requieren elegir IRC para sintonizar algunos canales superiores en la grilla.

Naturalmente que la TV Analógica no presenta la estabilidad ni el color de la digital. Pero TV Time presenta opciones de control genéricas adecuada para corregir la imagen. Presionando H y eligiendo Ajustes de Imagen, podremos ajustar el nivel de Brillo, Contraste, Saturación y Enfoque (en NTSC esta variable cambia el tono cromático). Podremos almacenar los valores establecidos para cada canal individual, o guardar los ajustes para todos los canales a la vez. también podremos cargar los valores globales por defecto (resetea los niveles a 50%).

Por medio de la tecla s podremos realizar una captura de pantalla, que se almacenará en la carpeta de usuario. Presionando la tecla f podremos acceder a la pantalla completa, y por medio de la tecla h -> Opciones de Salida podremos ajustar cómo la pantalla se representa, entre ellas son útiles las Capturas de pantalla silenciosas (para que no sobreimprima texto sobre la imagen avisándonos) y la función "Siempre Visible" para poder tener la ventana de TV analógica siempre a mano en el escritorio.

Por medio de la tecla e, podremos escoger el modo de audio, entre estéreo, mono y SAP (para escoger entre distintos idiomas de audio).

Normalmente la señal analógica sufre de interferencias y ruido, fantasmas de imagen, y otros inconvenientes inherente a su condición. Esto se debe también a la topología de la emisión analógica, en la cual no se emiten cuadros completos, sino sólo las líneas pares e impares de los mismos, alternadamente. Esto se llama "entrelazado", y genera un efecto de empalizada vertical, que se reproduce 30 cuadros por segundo. Esto permitía transmitir imagen en movimiento con la mitad del ancho de banda normal, pero impide gran poder resolutivo, pues este se reduce a la mitad también. En TV Time podremos activar ciertos filtros de postprocesado para mejorar la apariencia de la imagen y corregir estos problemas. Con h -> Procesamiento de video -> Configurador del desentrelazador tendremos varias posibilidades, con distinto consumo de CPU. La más compleja será Motion Adaptative Advanced Detection ("Adaptable al Movimiento, detección avanzada").
Si elegimos el suo de la opción de resolución completa, no ofrecerá corrección alguna. También tendremos la posibilidad de reducir la resolución a la mitad, con lo cual disminuirá la calidad gráfica pero también la interferencia, a la mitad.

Esta es capaz de corregir el efecto empalizada y gran parte del ruido, junto con imágenes fantasmas. También podremos usar dos desentrelazadores progresivos (de campo superior o campo inferior), que hace uso de las líneas pares o impares para corregir la imagen.
Han de saber que la TV analógica realmente usa el estándar PAL-Nc, pero al menos con la Kozumi KTV-01C y en TV Time, toma esa norma como "NTSC". También podemos querer saber que su resolución de conversión es de 720x575 líneas verticales a 60 cuadros por segundo.


Naturalmente, la TDA ofrece amplísimas ventajas sobre el sistema de cable convencional: su sonido digital y la resolución es mucho mas alta. En Ubuntu, en tanto, podremos tener activos ambos sistemas a la vez, y comparar la calidad sin problema alguno.
Obreros: ¡Perfecto Coronel! ¿Y como hacemo para escuchar la radio con la Kozumi?

Perón: Indudablemente que hasta no hace mucho tiempo estaba disponible el excelente Gnomeradio, un sintonizador peronista muy sencillo y adecuado. Sin embargo, la progresiva e inevitable desaparición de las radios FM y su reemplazo por servicios telemáticos en los EE.UU. y Europa ha tornado estas radios obsoletas allí, por lo cual que tal programa dejó de desarrollarse. Afortunadamente contamos con cómodos programas que pueden reemplazarlo a través de la Terminal. Para ello abrimos una con Ctrl+Alt+T e instalaremos FM Tools:

sudo apt update
sudo apt install fmtools dialog

Conforme se instale la paquetería, podremos hacer un escaneo de las frecuencias FM, a fin de instruirnos del espacio radioeléctrico de la frecuencia modulada. Para que nuestro sistema haga un escaneo desde los 78 megaciclos hasta los 108 megaciclos en saltos progresivos de 0,10 megaciclos, podríamos ingresar:

fmscan -s 87 -e 108 -i 0.1 -q > fmencontradas.conf

Esto nos generará un archivo llamado fmencontradas.conf con las emisoras que cuentan con más del 50% de potencia (serán naturalmente las que se escuchen mejor). Luego podremos ver el contenido de tal archivo con:

cat fmencontradas.conf

...el sistema nos devolverá su contenido, por ejemplo:


87.90: 50.0% 
88.30: 50.0%
88.50: 50.0%
89.10: 45.0%
...etc, etc.

Ahora bien, para sintonizar una de ellas  podremos encender el receptor y sintonizarlo. Para ello ingresamos:

fm on

Con esto debería salir el sonido. Para ingresar una radio indicamos su frecuencia de dial, por ejemplo:

fm 104.3

...con ello ya estaremos escuchando la radio en tal frecuencia. Una vez que la radio se inicie, podremos cerrar la terminal, lo cual es ideal para trabajar con la programación de nuestra FM favorita de fondo. Si quisiéramos apagar la radio, ingresamos en una terminal el siguiente Comando de Organización:

fm off

Ahora bien, si bien esto es práctico, también podremos usar Dialog para generar un pequeño programa con las FM memorizadas. Por ejemplo, aprovechando la búsqueda en el área en la que habitamos, podríamos ingresar:

nano ~/pradio.sh

y pegarle el siguiente contenido:

#!/bin/bash
# pradio.sh

# Copyleft Ubuntu Peronista
# para sintonizar radios fm, y modificar estaciones.

: ${DIALOG=dialog}
: ${DIALOG_SINTONIZAR=0}
: ${DIALOG_APAGAR=1}
: ${DIALOG_HELP=2}
: ${DIALOG_EXTRA=3}
: ${DIALOG_ITEM_HELP=4}
: ${DIALOG_ESC=255}

tempfile=`tempfile 2>/dev/null` || tempfile=/tmp/test$$
trap "rm -f $tempfile" 0 1 2 5 15


$DIALOG --clear --title "SINTONIZADOR DE RADIO FM PERONISTA" "$@" \
        --menu "Elija una emisora:" 20 50 17 \
        "1" "87.9 Radio UBA" \
        "2" "88.3 FM Latinos" \
        "3" "88.5" \
        "4" "89.1 FM Malena" \
        "5"  "89.3 Radio Gráfica" \
        "6"  "89.6" \
        "7"  "89.9 Radio con Vos" \
        "8"  "90.3 FM Delta" \
        "9"  "91.1 Radio Si" \
        "10"  "91.5 Radio Sol" \
        "11"  "92.1 Radio Red" \
        "12"  "92.6" \
        "13"  "92.9" \
        "14" "93.3 FM BitBox" \
        "15" "93.7" \
        "16" "93.9 Radio Palermo" \
        "17" "94.3 Radio Disney" \
        "18" "95.1 Metro" \
        "19" "95.5 FM Concepto" \
        "20" "95.9 FM Rock & Pop" \
        "21" "96.3 Radio Ciudades" \
        "22" "96.7 Nacional Clásica" \
        "23" "97.1 Radio Provincia" \
        "24" "97.5 Vale FM" \
        "25" "97.8 Retro FM" \
        "26" "98.3 Mega FM" \
        "27" "98.7 Nacional Folklórica" \
        "28" "99.1 Cadena 3" \
        "29" "99.9 La Cien" \
        "30" "100.3 La Colifata" \
        "31" "100.7 Radio Blue" \
        "32" "101.1 Radio Latina FM" \
        "33" "101.5 Radio POP" \
        "34" "102.3 FM Aspen" \
        "35" "103.6" \
        "36" "103.7" \
        "37" "103.8 FM OndaSur" \
        "38" "104.3 RQP LRL322" \
        "39" "105.5 FM Hit" \
        "40" "106.7 FM Millenium" 2> $tempfile

retval=$?

case $retval in
$DIALOG_SINTONIZAR)
clear
echo Sintonizando la emisora elegida...
echo De no reproducir active el canal Loopback en Alsamixer
echo y elija otra emisora o seleccione Cancel para detener la radio.

case `cat $tempfile` in
1) station='87.90';;
2) station='88.30';;
3) station='88.50';;
4) station='89.10';;
5) station='89.30';;
6) station='89.60';;
7) station='89.90';;
8) station='90.30';;
9) station='91.10';;
10) station='91.50';;
11) station='92.10';;
12) station='92.60';;
13) station='92.90';;
14) station='93.30';;
15) station='93.70';;
16) station='93.90';;
17) station='94.30';;
18) station='95.10';;
19) station='95.50';;
20) station='95.90';;
21) station='96.30';;
22) station='96.70';;
23) station='97.10';;
24) station='97.50';;
25) station='97.80';;
26) station='98.30';;
27) station='98.70';;
28) station='99.10';;
29) station='99.90';;
30) station='100.30';;
31) station='100.70';;
32) station='101.10';;
33) station='101.50';;
34) station='102.30';;
35) station='103.60';;
36) station='103.70';;
37) station='103.80';;
38) station='104.30';;
39) station='105.50';;
40) station='106.70';;
esac
;;

$DIALOG_APAGAR)
     fm off
     clear
echo Cerrando Perón Radio y deteniendo reproducción.
     exit 0;;

esac

fm on
exec >/dev/null 2>&1
fm $station &!
exec >/dev/tty

exec pradio.sh
clear


Luego, le otorgamos permisos de ejecución con:

chmod +x ~/pradio.sh

Naturalmente, una vez completados estos pasos, podremos ejecutarlo con:

./pradio.sh


El uso del programa es tan simple que no requiere explicación, lo que lo hace ideal para su implementación masiva en oficinas. Con una barata plaqueta PCI Kozumi por equipo y una instalación coaxial que sirve de antena múltiple FM para cada estación de trabajo, se ha mejorado el desempeño laboral de dicho estudio contable en un 250%, la felicidad de las trabajadoras se ha visto incrementada en un 1000%, a la vez que se disminuye el consumo de ancho de banda en un 500%, y se produce el efecto de artera piña de enano al Capital monopólico telemático!