Mostrando entradas con la etiqueta bash. Mostrar todas las entradas
Mostrando entradas con la etiqueta bash. Mostrar todas las entradas

jueves, 2 de marzo de 2023

¿Cómo uso el intérprete tcsh en Ubuntu?

En reportaje cedido a la revista Panorama desde la legendaria casona de Puerta de Hierro, Juan Perón expone cómo instalar el intérprete tcsh en Ubuntu.

¡Señores! 

Nuestro Movimiento tiene la voluntad de Pacificar la Argentina. Esto lo hemos dicho siempre, y aquí personalmente se lo he dicho a todos quienes vienen a verme, que no han sido pocos. Hemos sido prudentes, y si la imposición de la voluntad popular no se ha producido antes, ha sido sólo por la mala intención de los contumaces quienes - sin el apoyo del Pueblo Argentino - se han sentado en el sillón de Rivadavia solo para hacer desaguisados.

En más de una ocasión esto podría haberse solucionado simplemente por arbitrio de la carta magna por la cual todos debemos regirnos, pero durante dieciocho años estos caballeros sólo se han ido a acostar temiendo "lo que podría pasar con Perón en la Argentina". Pues bien, resulta ahora que el toldo se les ha picado, y para parar el agua vienen a pedirle el cuero a este viejo. [guiña el ojo].

Nosotros de esto tenemos una pila alta como aquél fresno. Lo que nos cuidamos siempre es de la intención, no nos vayan a meter la mula.

Desde la época de los primeros autómatas, los sabios de oriente intentaron descubrir - sin encontrar solución tecnológica - alguna técnica por imperio de la cual fuese posible contextualizar o prever adecuadamente aquello que llamamos intención. Es ésta una condición de la voluntad humana, y sólo ha sido través de un aprendizaje que hemos podido imponernos en tal tesitura, meramente obrando por lógica deductiva. La forma más elevada que nos hemos dado para prever la intención no ha sido otra que la de consagrarnos en una organización social, a la que hemos munido de una Doctrina.

Esta doctrina opera como eje ordenador, que sirva al Pueblo para interpretar lo que él mismo quiere. El Conductor podrá así relanzarlo, con un sentido creador que expresa aquello de  que "mejor que decir, es hacer, mejor que prometer es realizar".

Esta máxima también se replica en el mundo de la política, y del software. 

Es sabido que en el uso de la máquina existe la posibilidad de generar un programa de análisis que - dentro de normas paramétricas constrictivas - interprete un mandato directo a cumplir, una orden. En Unix estos programas intérpretes de mandatos que operan a través de un enlace de terminal de cómputo reciben el nombre de Shell. Nosotros hemos hecho todo para que nuestros niños - que son los únicos privilegiados - los usen en sus consolas.

Sin embargo, suele ser desconocido que Ubuntu cuenta con un sucedáneo del la shell sh para sus tareas de conexión y ejecución básica: un modernizado y supermínimo dash. Sin embargo, este suele pasar desapercibido frente al portentoso intérprete nativo de GNU, el Bash. Se trata esta de una shell libre inspirada fuertemente en la antigua shell de Bourne, la cual - junto a  funcionalidades de la C Shell y la shell de Korn - tiene embutido en su interior un lenguaje de programación interpretado de relevancia.

Pues bien señores: los tontos ignoran la complejidad, los pragmatistas la sufren, algunos pueden evitarla, pero son los genios quienes la eliminan. Esto es patente en el caso de la burda C Shell, intérprete que un desaforado Bill Joy había escrito para su Distribución de Software en Berkeley. Ken Greer de la Universidad de Carnegie-Mellon la apreció peor escrita que el Facundo, y la remozó extendiendo sus lerdas funcionalidades, a la vez que depuraba el código como quien verdaderamente entiende la cosa. No tardó mucho en incorporarle el  autocompletado de ficheros y directorios  sensible a contexto del que alardeaba el mítico sistema operativo TENEX. Sobre esta base mejor asentada - a la que todos llamaron tcsh - Mike Ellis de la Fairchild Coporation le sumó un sustancial autocompletado de comandos.

Indudablemente que tcsh resultó más veloz y bastante más pequeño para hacer lo mismo. En particular gusto de este intérprete por su velocidad de ejecución remota en equipos de mínimo desempeño. Aunque he de advertir que si bien es mayormente compatible con Bash y otros posteriores, la realidad es que sus escasas diferencias lo tornan idiosincrático.

Afortunadamente, podremos instalar este intérprete de mandatos en Ubuntu, si nuestras necesidades y anhelos así lo estipulan. Es que en lo que hace a estas shell, ha de existir una justa gradación sin la cual la informática no tendría la flexibilidad que la hace grande, y por lo pronto podremos contar con múltiples si a nuestra máquina "le da el cuero". Y con tcsh cualquier enano es grande.

Ya conocemos cómo instalar un moderno intérprete de factura original, el Fish Shell, destinado a equipamiento moderno y sin respetar convencionalismo alguno. Para instalar tcsh hemos de seguir similares procedimientos. Simplemente abrimos un terminal con Ctrl+Alt+T e indicamos el siguiente comando de organización:

sudo apt install tcsh

Conforme ingresemos la contraseña de root, se hará realidad la instalación del nuevo viejo intérprete, sin molestar a los otros parroquianos que pudiéremos tener.

Para ejecutar un tcsh anidado, simplemente lo ejecutamos llamándolo por su nombre y apelativo:

tcsh

...lo que dará inicio a una sesión del shell anidada dentro del Bash, convirtiéndose en el brazo derecho del conductor. Tradicionalmente, el prompt de tcsh es un >, de esta manera:

host:~>


Esto puede ser adecuado para algunos. Para evitar esta llaneza, lo que recomiendo es configurar por única vez un fichero de configuración de usuario ~/.tcshrc. Para ello editamos tal fichero con:

nano ~/.tcshrc

Podremos entonces pegarle el contenido recomendado, guardamos y cerramos. 


Todo esto nos permitirá tener ya configurado las opciones necesarias para poder utilizarlo de forma efectiva en Ubuntu.

TCSh dispone de amplias similitudes al C Shell de Bill Joy, pero incorpora algunas funcionalidades embebidas en el mismo intérprete. Podremos consultar sobre estos comandos embebidos ingresando el comando builtins.

Por ejemplo de estos comandos incorporados tenemos a where, que a diferencia al which disponible en sistemas similares a Unix, informa las rutas de un alias determinado pero también las rutas de ejecución de un comando dado:

TCSh cuenta con una función incorporada de historial expansiva de la del C Shell. Los comandos ya introducidos se van incorporando a un stack que podremos revisar con Flecha Arriba y Flecha Abajo. Quien introduzca el comando history, apreciará el registro del stack de comandos previamente introducidos, numerados en sentido descendente y temporizados.

El funcionamiento del historial de comandos es similar al del viejo intérprete de TENEX:

!! Ejecuta el comando previamente ejecutado.
!n Ejecuta el comando número n del stack.
!-n Re-ejecuta el comando número n del stack.
!cadena Ejecuta el comando más recientemente ejecutado que comience con cadena
!?cadena corre el comando más recientemente ejecutado que contiene cadena

La funcionalidad de autocompletado se activa tecleando parcialmente un comando que deseemos, y autocompletándolo mediante la tecla Tab, o más tradicionalmente, con el uso de Ctrl+d. Esto tipeará automáticamente, o bien nos presentará en la terminal las opciones que podremos continuar solicitando.

También contaremos con la necesaria funcionalidad de Control de Trabajos, requerida en un ambiente multi-tarea. Como es sabido, esta nos permite operar en dos planos: normalmente los programas corren en primer plano, pero podremos ejecutar comandos directamente en segundo plano agregando & al final del comando. Por ejemplo podíamos enviar a top y al editor GNU Nano a que quede en ejecución en segundo plano:

top & ;
nano &

Naturalmente, muchos programas puede "suspenderse" y enviarlos a segundo plano durante su tiempo de ejecución, a través de la combinación Ctrl+z.

En cualquier momento podremos consultar el stack de trabajos:

jobs

[1]  - Suspended (signal)            top
[2]  + Suspended (tty output)    nano

Ahora podremos pasar a primer plano el programa del stack que queramos con fg (o mandarlo a segundo plano con bg). En este ejemplo, si quisiéramos pasar a primer plano el nano, podremos indicar:

fg 2

(Nota: Durante la ejecución de las versiones más modernas de Nano puede enviárselas a segundo plano mediante Ctrl+t, Ctrl+z).

Vean señores, tcsh cuenta con algunas diferencias sintácticas en su lenguaje interpretado con respecto al omnipresente Bash, y notablemnte carece de funciones. Pero fuera de ello, es bastante parecido y adaptable. Es posible conocer mas sobre las idiosincrasias de tcsh con respecto a Bash aquí.

Asignar tcsh como terminal por defecto

Existen varias maneras de asignar directamente a tcsh como intérprete. Una forma directa es arrancar el emulador de terminal corriendo tal intérprete. Por ejemplo::

mate-terminal -x tcsh

Sin embargo, en estos casos la más lógica suele ser asignar un perfil al emulador de terminal. En el caso de mate-terminal o gnome-terminal, esto puede realizarse desde la solapa Título y orden, tildando la opción Ejecutar una orden personalizada en vez de mi intérprete, e indicando en su campo /bin/tcsh. Podremos así guardar el perfil para utilizarlo por defecto.

Ambas soluciones permiten dejar a Bash como el intérprete, por cualquier motivo y son las que recomiendo.

En ciertos casos, y tras asegurar que tcsh opera adecuadamente, podríamos queuer directamente asignar como shell de usuario a tcsh en lugar de Bash. Esto sólo debe realizarse si estamos absolutamente aborrecidos de Bash, y no tiene mucho otro sentido.

En primer lugar debemos consultar qué shells están instaladas en nuestro sistema, mediante el comando:

cat /etc/shells

...y este podría devolvernos algo como:

# /etc/shells: valid login shells
/bin/sh
/bin/bash
/usr/bin/bash
/bin/rbash
/usr/bin/rbash
/bin/dash
/usr/bin/dash
/usr/bin/tmux
/usr/bin/sh
/usr/bin/fish
/bin/tcsh
/usr/bin/tcsh

(Nota: En negro se indican las shells incluidas por defecto, en rojo aquellas agregadas posteriormente a pedido).

Luego utilizamos el comando chsh ("cambiar shell de inicio"). En este caso si quisiéramos cambiar la shell por defecto del usuario de /bin/bash debemos ordenar:

chsh $USER

Tras ingresar contraseña, indicamos la ruta del shell deseado (ya sea /bin/tcsh o cualquier otra). Los cambios surtirán efecto tras reiniciar el sistema.

martes, 5 de julio de 2022

¿Cómo instalo y uso el intérprete de comandos Fish en Ubuntu?

En su discurso con motivo de la Fiesta del Pejerrey de 1947, Juan Perón retorna a Junín y expone sobre las bondades del fish, el intérprete de comandos avanzado de Ubuntu.

¡Trabajadores!

Desde los tiempos inmemoriales sabe el Hombre que obtendrá, con el sudor de su frente, los frutos que Dios le ha regalado en la naturaleza. Pero son pocos los que pueden multiplicar tal fruto como hizo Cristo con los peces. Esto motiva que, para que un trabajo sea verdadero, debe multiplicarse el esfuerzo en pescar.

Yo no enseño a pescar, eso lo hacen ustedes. (aplausos). Lo que yo doy son peces. ¡Y qué gordos que han picado!

La organización del trabajo es lo que nos ha dado lo que tenemos, y nos lo dará siempre que lo sepamos defender. Los derechos adquiridos que ha otorgado el Justicialismo emanan de una acción de Justicia que es comprendida por todos: la Justicia Social.

Pues bien señores, sabemos que en los sistemas GNU con Linux la dirección parte del hacker, que obrará indefectiblemente por iniciativa de Justicia Social. Quien en su nombre sirve a una empresa, lo es solo de nombre. Por ello, para que el trabajo se realice, hemos de ingresar órdenes en un intérprete de comandos, que recibe el nombre de shell.

En los Unix de los tiempos de Matusalén, el intérprete de base era el Sh, capaz de operar ya de forma interactiva, pero también como englobador de comandos en ficheros, a los que podemos llamar guiones. De este - diremos - trilobite, surgieron otros más interesantes y poderosos, como el C Shell, o la shell de Bourne. Cada uno de estos pescados presentaba más aletas, y otras características para nadar. En el mar, el pez grande se morfa al chico, y por ello fue que surgió uno que por entonces se estableció como el más pesado e inteligente, el Korn Shell, que hasta tentáculos tiene. Miren si habrá sido de ballena, que de él se inspiraron - en la época del GNU - para combinar un nuevo Bourne nacido de nuevo ("Bash"). Sería este el intérprete de comandos que viene por defecto en la mayoría de las distribuciones modernas de Linux.

El el que más me gusta porque va bien en su salsa, se lo empaniza, se lo sirve en cazuelitas: es compatible con todo lo que se ha hecho, pues está concienzudamente armado para retrocompatibilidad con programas antiguos y terminales teletipo.

Pero a veces conviene pescarse algo nuevo. Tanta arqueología es útil y tiene su lugar,  pero no siempre implica lo mejor en agilidad en el mar. Mas de uno habrá percibido que el día de hoy las terminales cuentan ya con muchos colores, y no solamente caracteres de tipo ASCII, sino también hasta emojis, como los que uso para hacer la ✌️. De esta evolución, nació el intérprete Fish Shell.

Se trata de un intérprete de comandos orientado a maximizar la amigabilidad interactiva con el usuario, y no tanto en mantener compatibilidad con otros intérpretes más corrientes tales como el Bash que viene por defecto en Ubuntu. De esta manera Incluye muchas funcionalidades que se no encuentran en otros intérpretes modernos, incluyendo el uso avanzado de caracteres UFT-8 y emojis, que simplifican la experiencia de uso en gran medida. 

Por otra parte, su sintaxis difiere un poco de la que utilizan otros intérpretes, lo que hay que tener en cuenta. Asimismo, fish abandona la compatibilidad con antiguas terminales teletipo.

Para instarlo abrimos una terminal con Ctrl+Alt+t e ingresamos el siguiente comando de organización:

sudo apt update
sudo apt install fish xsel git

Podremos ejecutarlo "a mano" para probarlo, para ello lo llamamos con:

fish


Ante un mensaje de bienvenida en el idioma de Braden, nos encontraremos un prompt básico de Fish, que guardará este estilo:

usuario@maquina ~>

Para salir del intérprete podremos ingresar exit, y volveremos al Bash o cualquier intérprete de comandos que estuviésemos utilizando por defecto.

Vean señores, el uso básico de fish es - por generalidad - similar a Bash u otros de su especie. Para su configuración básica, Fish utiliza el fichero ~/.config/fish/config.fish. (Introduciendo dicho código contaremos con un mensaje de bienvenida en castellano.

Autocompletado

En la medida que comencemos a introducir comandos de operación, Fish nos sugerirá nombres y autocompletará los comandos al vuelo. Para terminar de escribirlos se presiona flecha izquierda de cursor (también se puede utilizar la tecla Tab para completar un comando semiescrito, como en Bash). Y  naturalmente le damos entrada con Enter.

Por defecto Fish utilizará colores que incluso te indicarán la validez de la entrada sugerida (marcando en rojo si es inválido.


Al presionar la tecla Tab dos veces, nos deplegará una lista coloreada con opciones, la cual podrás elegir utilizando las flechas del cursor. Con esto podremos nadar en los directorios como pez en el agua.

La más de las veces, Fish contará con este completado de comandos con explicaciones. Por ejemplo, si estamos utilizando la orden apt get install y presionamos Tab, Fish nos presentará la lista de paquetes con un resumen del mismo (situación que se replica con la mayoría de los comandos Unix estándar, espejador de código fuente git, y servidores Web). Trabajar así es un placer que no es esfuerzo...

Programación con Fish

Al igual que Bash y Korn Shell, Fish cuenta también con un lenguaje de guionado que guarda grandes similitudes, pero no es 100% similar a estos dos. Afortunadamente es posible aprender más sobre las diferencias del mismo en este Tutorial de Fish.

Con este podremos dar rienda suelta a la Comunidad Organizada.

Indudablemente la shell Fish no es demasiado compatible con otros intérpretes desde el punto de la programación estricta, mas es altamente configurable, por lo que podrán instalar temas y plugins paquetizados con el proyecto Oh My Fish!.

Instalación

Es posible instalar Oh My Fish! (y su tema “Default” ¡con "pescados" en el prompt!) ingresando el la terminal el siguiente comando:

curl -L https://get.oh-my.fish | fish

El instalador abandonará la sesión de intérprete, tras lo cual será necesario volver a ingresar. Conforme lo hayamos hecho, podremos listar todos los paquetes de plugins y temas disponibles del proyecto Oh My Fish!. Esto se efectúa con:

omf list

Asimismo podremos listar únicamente los temas mediante la orden:

omf theme

Podrán consultar todos los temas posibles aquí. No todas los themes están libres de errores, pero es posible probar unas lindas que no presentan conflicto alguno:

default   boxfish     bira      coffeeandcode
gentoo    godfather   harleen   mokou
neolambda nelsonjchen scorphish edan
fisk      zish

Por ejemplo, para instala un tema (por ejemplo bira), hemos de recurrir a:

omf install bira


Ciertos temas requieren algunas modificaciones al fichero que configura el prompt del intérprete, que es ~/.config/fish/functions/fish_prompt.fish. En caso de presentarse conflictos, omf nos lo informará, y podremos tilizar la orden omf doctor para superarlos (usualmente nos solicita ingresar el comando rm ~/.config/fish/functions/fish_prompt.fish para corregir las variantes existentes entre tema y tema).
 
Pues bien, si deseamos desinstalar un componente (como un tema instalado) habremos de utilizar:

omf remove bira

Para recibir ayuda del Oh My Fish! utilizaremos:

omf --help

Si deseamos desinstalar Oh My Fish! debemos emplear:

omf destroy

…con lo cual Fish retornará a su configuración por defecto, o bien podrán eliminar a mano su carpeta de configuración mediante:

rm ~/.config/fish/functions/fish_prompt.fish ;
rm -r ~/.local/share/omf

Convertir a Fish en la shell por defecto

Es posible asignar manualmente la Fish Shell a un perfil de terminal. En el caso del emulador de Terminal de Mate, es posible crear un perfil y en la solapa Título y Orden tildar la opción Ejecutar una orden personalizada en vez de mi intérprete. De esta manera, en el campo Orden personalizada podremos y asignarle una tal como

env TERM=xterm-256color /usr/bin/fish

...lo que asignará un terminal tipo xterm con 256 colores que inicie el intérprete Fish.

No bien hemos descubierto que Fish resulta del agrado de las masas, será posible utilizarlo siempre en Ubuntu (o sea, convertirlo en la shell por defecto en lugar de Bash) podremos cambiarlo haciendo uso del comando chsh, de la siguiente manera:

chsh -s /usr/bin/fish

Para que surta efecto, habremos de reinciar la sesión en Ubuntu.

Naturalmente, podremos volver nuevamente al intérprete por defecto de Ubuntu: Bash. Para ello debemos utilizar una ruta distinta, en este caso:

chsh -s /bin/bash

jueves, 31 de diciembre de 2020

¿Cómo creo trabajos y los administro en la terminal de Linux?

Trabajadores!

Como Conductor del Movimiento Nacional Justicialista, he dedicado este año que termina a atresar todas nuestras Organizaciones. En ello he estado acompañado por el más fiel de los corazones: el del Pueblo Argentino.

Hemos acuñado un lema que remoza un viejo cuño, y nos orienta en la labor que hemos de realizar para Grandeza de la Nación. Este lema ha sido: "Gobernar es Crear Trabajo". 

Responde a los inalienables Derechos que han alcanzan al hombre que trabaja. Hemos creado ochocientos mil puestos de trabajo bajo la esfera de dignificación que nuestro Pueblo clama y merece. Los trabajadores argentinos son la finalidad de todos mis desvelos, pero son también la causa objetiva de mi propia felicidad.

Un sistema de cómputo no dpuede sustraerse de esta realidad cardinal. Podemos decir señores, que para conducir un sistema similar a UNIX, debemos crear trabajo.

Esto es así pues GNU con Linux responde como sistema operativo multiusuario, pero también multitarea. Puede encargarse de realizar múltiples acciones, destinando a ello la potencia de su Unidad Central de Proceso, compartida entre todos sus obreros. Toda acción de cómputo que se lleve a cabo en un sistema multiusuario debe realizarse de una sola manera: ¡en Comunidad y con Organización!

Para conducir esta organización del trabajo, se hace imprescindible contar en nuestro sistema con un comando específico que nos ayuda a planificar, llamado jobs.

Conviene conocer en detalle sus particularidades ya que - como todo en la vida - el apelativo de la acción depende de quién la realiza. Nuestro sistema operativo cuenta con un núcleo Conductor, que es un Coronel y al que ustedes llamarán Kernel. Este llevará a cabo los llamados Procesos, con grupos de Tareas. [tose]. En tanto, nuestros obreros descamisados, que operan como usuarios de cómputo, contarán con los anhelados Trabajos o Jobs.

Estos trabajos pueden consistir en tres variantes: tanto la ejecución de un comando único, o de varios comandos encadenados por medio de caños o pipes, o bien la ejecución de un programa interactivo.

Pues bien señores, en particular en una terminal de Linux, bien podremos desactivar o activar todo trabajo o programa activo, mediante el uso de la combinación de teclas Ctrl+z. Al escoger este proceder, se detendrá la ejecución del trabajo, y se lo enviará a un segundo plano ("background" o "bg"), reservándole memoria al mismo, toda vez que se nos presenta nuevamente el intérprete de comandos.

Por ejemplo, si estamos usando el editor GNU Nano, y presionamos Ctrl+z, el trabajo de GNU Nano se detendrá y el sistema nos devolverá al intérprete de comandos con un mensaje similar al siguiente:

Use «fg» para volver a nano.
[1]+  Detenido            nano

Para recuperar en nuestra terminal el trabajo detenido que se encuentra en el segundo plano, debemos traerlo al frente ("fg" o "foreground"). Esto se hace con el comando fg. Se presentará el trabajo anterior en la terminal tal como lo habíamos dejado.

Si ejecutamos varios programas interactivos y los abandonamos, podríamos encontrarnos con múltiples trabajos detenidos en el segundo plano. En dicho caso, cada uno de ellos recibirá un identificador en la llamada "cola de trabajos".

La cola de trabajos es precisamente eso: una lista o tabla donde podremos observar y gestionar el número de orden de los trabajos en segundo plano. Podremos verla mediante el comando:

jobs

...a lo cual el sistema nos debería devolver la cola de trabajos que tenemos detenidos en segundo plano en nuestro sistema:

[1]   Detenido                nano
[2]-  Detenido                top

Se presentará en esta cola de trabajos el status de los mismos, y entre corchetes, en orden de detención. Si fuese necesario tener un poco más de detalles, podremos recurrir a la forma más larga y explícita de la cola de trabajos usando  jobs -l, que nos proporcionará también el identificador de trabajo y el motivo de la detención.

[1]5950 Detenido (por una señal) nano
[2]5951 Detenido (por una señal) top

Si queremos traer un trabajo a primer plano y contamos con múltiples trabajos detenidos en el segundo plano, se hará necesario especificar cuál es el que queremos traer al primer plano mediante el número de orden de detención. Por ejemplo, si quisiéramos traer top a primer plano usaríamos:

fg %2

Para eliminar los programas, se suele usar la combinación Ctrl+c. Esto detiene el programa y lo elimina de la cola de trabajos.

Indudablemente que este es un momento importante distinguir un hecho importante. Si en lugar de emplear fg para traer un trabajo al primer plano, abrimos nuevamente el mismo programa por segunda vez (en este caso podría ser Nano), no recuperaremos el primero que ya teníamos en memoria, sino que estaremos cargando una nueva instancia "desde cero" e independiente del mismo, la cual se presentará en la terminal.

El trabajador debe tener derecho a la mejora de sus aptitudes profesionales. Mejorar su conocimiento lleva un tiempo, pero le permitirá lograr mejores resultados en menor tiempo a futuro. Esto es determinante pues todo tiempo ahorrado, es tiempo ganado. La eficiencia es un factor que no se puede soslayar en ningún momento. Es útil saber, por lo tanto, que podríamos directamente colocar un trabajo en la cola de trabajos a la hora de ejecutar su comando. Para ello simplemente le agregamos el sufijo &

Por ejemplo:

xeyes &

xeyes se activará y comenzará su acción típica, mostrar un par de ojos que siguen el cursor del escritorio gráfico, independientemente de la terminal del intérprete de comandos. Si en esta situación ingresamos el comando jobs podríamos recibir:

[1]    Detenido    nano
[2]-   Detenido    mocp
[3]+   Ejecutando  xeyes &


Como vemos, el sufijo & permite hacer que el programa continúe en ejecución. Esto es diferente a la detención y pase a segundo plano con Ctrl+z.

Si usamos el comando fg %3 para activar en la terminal el programa xeyes, simplemente se nos informará con la terminal detenida. Si usamos ahora Ctrl+z, enviará a xeyes al segundo plano y detendrá su ejecución (podremos ver que los ojos están permanecen fijos en la última posición antes de detenerse la ejecución del programa). Y en la cola de trabajos, veremos que xeyes está "Detenido".

Si quisiéramos eliminar de memoria y de la cola de trabajos uno de nuestros trabajos (ya sea que esté detenido o en ejecución), podremos hacerlo mediante el comando kill % seguido del número de orden de trabajo.En este ejemplo, podríamos querer cerrar xeyes con:

kill %3

En otros casos el ejemplo contrario podría ser lo procedente. ¿Que sucede si ejecutamos en segundo plano xeyes (con xeyes &), y lo queremos continuar utilizándolo, pero quitándolo de la cola de trabajos?.

Para ello se utiliza el comando disown. Este desacopla el último programa en ejecución de la terminal. Si tenemos varios programas en la cola de trabajos, los indicamos con:

disown  %número de orden

Otros modificadores nos ayudarán en condiciones complejas. Por ejemplo, si usamos disown -a desacoplaremos todos los trabajos, en tanto que si usamos disown -r desacoplaremos todos los trabajos en ejecución.

Debemos tener en cuenta que si abandonamos nuestra terminal con trabajos en ejecución, los mismos se detendrán y se perderán. En ciertos casos, sobre todo en el caso de abandonar terminales remotas, debemos enviarle una señal SIGHUP ("colgar"), con el prefijo modificador -h.

Para ello usamos

disown -h

...para desacoplar todos los trabajos de la cola, o bien especificamos alguno con:

disown -h %número de orden

Esto provocará que al abandonar la terminal remota con el comando exit no se interrumpa la ejecución de los comandos remotos que dejamos en ella.

Tengamos también en cuenta que en lugar de disown (dependiente del intérprete de comandos Bash que dota  Ubuntu, bien podríamos utilizar el comando nohup para especificar que la señal de sistema SIGHUP ("colgar") sea ignorada por cualquier comando de Linux o UNIX por cualquier motivo (con independencia del  intérprete de comandos utilizado). Esto puede ser útil para otros entornos distintos a GNU con Linux o Ubuntu.

En consecuencia, trabajadores, sabemos que ciertos paradigmas informáticos podrían intentar confluirse en la noción de formar un esclavo de consumo.

Quien quiera liberarse sabe bien lo que tiene que hacer: combatir al capital. Los sistemas UNIX y similares a él - aunados a doctrinas de software justo, libre, y soberano - permiten operar cómputo de forma completa y comunitariamente organizada, sin depender de obsolescencias programadas o softwares "cortados a cuchillo".

lunes, 9 de mayo de 2016

¿Cómo puedo ver el clima en la Terminal en Ubuntu?

En 1974, reunido en la Sede Central de la CGT, Juan Perón expone sobre cómo distinguir los nuevos climas, y sobre cómo hacer que los mismos se muestren en la Terminal de Ubuntu gracias a Bash-Weather.

(...)
Indudablemente que en Movimientos como el Peronista, de una amplitud tan grande, y de un proceso cuantitativo tan numeroso, tiene que haber de todo en lo que a ideologías se refiere. Yo siempre he manejado el Movimiento Peronista con la mas grande tolerancia en ese sentido porque creo que los que se afilian y viven dentro de un Movimiento multitudinario como es el Movimiento Peronista, deben de tener la absoluta libertad para pensar, para sentir y para obrar en beneficio de ese propio movimiento.
Es indudable que en todos los Movimiento revolucionarios existen tres clases de enfoques. El de los apresurados, que creen que todo anda despacio y que no se hace nada porque no se rompen cosas ni se mata gente. El otro sector está formado por los retardatarios, esos que no quieren que se haga nada, y entonces hacen todo lo posible para que esa revolución no se realice. Entre esos dos extremos perniciosos existe uno que es del equilibrio, y que conforma la acción de una política que es el Arte de hacer lo posible, no ir mas allá ni quedarse más acá, pero hacer lo posible en beneficio de las Masas, que son las que mas merecen y por las cuales hemos de trabajar todos los argentinos.

En el encadenamiento internacional, también existen enfoques diferentes en aras de la integración universal. En este momento serían el Imperialismo Yanqui, el Imperialismo Soviético, o un Tercer Mundo. Si esa integración universal la realizara cualquiera de los imperialismo, la harían en su provecho, no en el provecho de los demás. Solamente la conformación de un Tercer Mundo podría ser una garantía para que la humanidad pudiese disfrutar un mundo mejor en el futuro, pero para eso ese Tercer Mundo tiene que organizarse y fortalecerse.

Hace ya casi treinta años nosotros desde aquí lanzamos la famosa Tercera Posición. Que entonces cayó aparentemente en el vacío porque había terminado la Guerra Mundial y no estaba el horno para bollos. Se rieron de nosotros. Pero han pasado 27 años desde entonces y hoy, dos terceras partes del mundo puja por estar en esa Tercera Posición.

Estos son, compañeros, los Grandes Problemas. Los pequeños problemas políticos en los cuales hemos estado empeñados hasta ahora entre los argentinos - frente a estas acechanzas del futuro inmediato - qué importancia pueden tener... Son asuntos pequeños y gallináceos que andan a ras del suelo, cuando ya es necesario pensar en grande, para el mundo, dentro del cual nosotros realizaremos nuestro destino o sucumbiremos en la misma adversidad que sucumban los demás.

Hoy es necesario pensar de otra manera. ya no se puede pensar con la pequeñez de los tiempos cuando todos querían disfrutar y ninguno quería comprometer su destino y su felicidad futura para asociarla a la de los demás. Hoy eso es indispensable, porque en un mundo que no se realice no habrá país que pueda hacerlo. Y dentro de esos países que no se realicen no habrá individuo que pueda lograrlo.

Trabajar hoy por la felicidad del hermano vecino es trabajar también por la felicidad de todos los demás.

Y en el caso del software indudablemente hemos de perseguir las mismas premisas. Por ejemplo, no serán pocos los casos en los cuales necesitamos contar en nuestra Terminal con una aplicación que nos permita, de manera Libre, conocer el clima que impera en nuestro entorno o en otro.

Las soluciones en este aspecto tienen que ser - también - compartidas. Por ello podremos contar con Bash-Weather, un guión de programación que se basa en el servicio telemático abierto y licenciado bajo GPLv3 de OpenWeatherMap.org. Dicho servicio consiste en una red abierta de proveedores de datos climáticos (a través de máquinas sensoras computadas especiales).
Estos aparatos cuentan con conexión a internet, y pueden adquirirse por hobbistas o pueden armarse utilizando hardware libre (Raspberry Pi y Aduino son peronistas y populares). Aquellos voluntarios que dispongan de un equipo de medición del tiempo munido de software libre pueden asociarlo a dicho servicio para proveer de datos confiables y cercanos a otros usuarios que carezcan de tales equipos.

En nuestro caso, deseamos poder acceder a dichos datos para beneficio de Bash-Weather, el indicador de clima en tiempo real. Para ello requeriremos contar con una API Key, o clave de aplicación. Lograrla es simple: únicamente necesitamos una dirección de correo electrónico para dar de alta un Usuario de la aplicación OpenWeatherMap.org.

Para crear un usuario nos damos de alta en la web oficial. Una vez allí el proceso de creación de un usuario es el típico de todas estas aplicaciones: debemos registrar un nombre de usuario y una dirección de correo electrónica válida asociada al servicio. También debemos ingresar una contraseña para el servicio, y aceptar los Términos del servicio).
Opcionalmente podremos indicar para qué motivo queremos utilizar la API, si es que tenemos una compañía o deseamos hacer uso comercial de la misma.
Tras ello, el sistema nos proveerá la "API Key" requerida para el uso del servicio de colectado de datos climatológicos. La API Key consta de una extensión de 32 caracteres.

Tomamos nota de la misma (o la copiamos en algún lado).

Una vez provistos de la API Key, podremos instalar la aplicación en nuestro sistema GNU con Linux. Para ello abrimos una Terminal con Ctrl+Alt+T e ingresamos el siguiente bloque de Comandos de Organización:

sudo apt-get upgrade ;
sudo apt-get install ncurses-bin git bc curl grep ;
cd ~ ;
git clone https://github.com/szantaii/bash-weather.git ;
mv bash-weather/ .bash-weather/ ;
cd ~/.bash-weather/ ;


Para que la aplicación funcione adecuadamente debo indicar mi API Key en el archivo openweathermap.key de la aplicación, o hacerlo en la línea de comandos a la hora de ejecutar el archivo. En este caso lo haremos modificando el archivo con el editor peronista GNU Nano con el siguiente comando:

nano ~/.bash-weather/openweathermap.key

...y al final del archivo le agrego la API Key que nos fue provista:

# Add your OpenWeatherMap API key below (http://openweathermap.org/appid)
0123apikey456quemedio7890laweb12


Luego guardamos el archivo con Ctrl+o y salimos del editor Nano con Ctrl+x.

Acto seguido le otorgo permisos de ejecución a los scripts del programa:

cd ~/.bash-weather/
chmod +x bash-weather.sh


luego inicio la aplicación:

./bash-weather.sh


...o

bash bash-weather.sh

Si no ingresamos nada más, el sistema intentará emplear nuestra dirección IP de nuestra conexión a internet para identificar nuestra localización geográfica específica, y en base a ello, tras unos segundos, nos mostrará los datos correspondientes a nuestra ciudad.
Mediante la tecla c podremos saber la temperatura en unidades anglosajonas, y mediante la tecla q saldremos del programa.

A pesar de su sencillez, este guión de programación ofrece ciertos comandos adicionales, útiles para para especificar la ciudad, el país, y otros aspectos. Los comandos permitidos con bash-weather son:

-k  Permite especificarle la API Key desde la línea de comandos, si no la hubiésemos incluido en el archivo openweathermap.key
-h  Nos muestra una pantalla de ayuda.
-t "nombre de ciudad"  Configura manualmente la ciudad a buscar.
-c código_pais  Configura manualmente el país en base al código de dos letras (Argentina es AR).
-f  Muestra colores en el programa

Utilizando dichos comandos, podríamos configurar bash-weather para que nos muestre los datos para la ciudad de buenos aires.

./bash-weather.sh -t "Buenos Aires" -c AR -f 




También sería sencillo crear un nuevo guión propio llamado "clima" que nos simplifique todas estas opciones. Para ello creamos un archivo llamado clima.sh con Nano:


nano ~/clima

y le pegamos el siguiente contenido:

#!/bin/bash
# Permite ver
bash /home/usuario/.bash-weather/bash-weather.sh -t "Buenos Aires" -c AR -f



Luego de reemplazar usuario con nuestro nombre de usuario, guardamos y cerramos el fichero (con Ctrl+O y Ctrl+x), y luego le otorgamos los permisos pertinentes para su libre ejecución con:

cd ~
chmod +x ~/clima

Desde ahora, cada vez que necesitemos conocer el clima en nuestra Terminal, podremos abrir una y saberlo con:


./clima



miércoles, 9 de septiembre de 2015

¿Cómo puedo ejecutar programas en OpenWRT?

¡Trabajadores!

Como verdaderos apóstoles, hemos de instalar software libre en todos los dispositivos que tengamos a mano. Solo así nos aseguraremos de transitar la real senda de la Liberación.

He comentado ya del caso del router TP Link WR491ND y de su firmware de control alternativo y abierto OpenWRT. Gracias a el nuestro router dejará de ser un dispositivo bobo, y pasará a convertirse en un verdadero router peronista capaz de correr otras aplicaciones. OpenWRT es un firmware abierto, pensado para controlar enrutadores. Como tal, es un sistema operativo que convierte a nuestro router en una computadora de pequeñas dimensiones y potencia reducida, pero programable para conducir efectivamente una serie de tareas.

Por medio de OpenWRT y un router compatible, podremos crear un servidor de archivos, servidores pequeños de correo de status, controlar en horarios determinados dispositivos electrónicos a través de interfaces seriales, USB, o Ethernet.

Con un poco de dificultad, se pueden programar entonces dispositivos controlados a partir del router, como por ejemplo, aspersores que trabajen a horario, unidades de medición del clima que lean las condiciones de temperatura y humedad y la transmitan por internet, podremos controlar cámaras de seguridad, relays que enciendan luces, abran o cierren portones eléctricos, enciendan bombas o motores eléctricos, o con más software libre podremos convertir nuestro router en un dispositivo de transmisión de medios (fotos, audio e incluso video) para operar dentro de la red local, y muchso etcéteras

Sin embargo, no necesitamos tanta dificultad, aún así podremos desarrollar nuestras propias "aplicaciones caseras" por medio de código Ash. Dicho código comprende comandos y condicionales, de manera de poder realizar ciertas acciones útiles, con poco ingenio y habilidad.

Es importante si bien los guiones los almacenaremos dentro del directorio /root del router, los mismos han de concentrarse en operar dentro del directorio /tmp/ del router, ya que el mismo es la memoria RAM volátil. Esto es así pues los routers disponen de muy poco espacio físico (un chip EEPROM de 4 megabytes, y raramente más).

Para disponer nuestros scripts, crearemos dentro del router un directorio a tal efecto:

mkdir /root/scripts/
Por ejemplo, si nuestro proveedor nos da IP dinámica y quisiéramos saber cuáles nuestra dirección IP de salida actual para montar un servidor de juego o por cualquier motivo, podríamos crear un script que lo haga.

Para ello, hemos de utilizar siempre el básico editor Vi. Se trata de un editor mínimo incorporado dentro del router. Para editar texto debemos llamarlo con vi nombredelarchivo.

En este caso podriamos hacer:

vi /root/scripts/decimelaip

Presionamos i para entrar al modo edición, y le pegamos el siguiente código peronista:

#!/bin/sh
# Scropt decimelaip Informa la IP de salida.
rm -f /tmp/log/ipactual.log
wget -q http://ipecho.net/plain -O /tmp/log/ipactual.log
echo La direccion IP actual de salida a internet es:
echo '' >> /tmp/log/ipactual.log
cat /tmp/log/ipactual.log


Para guardar el archivo y abandonar el editor, debemos presionar Esc y escribir :wq seguido de Enter.

Ahora podremos darle permisos de ejecución con:

chmod +x /root/scripts/decimelaip

y ejecutarlo con:

sh ~/scripts/decimelaip
 
También podríamos configurar un script que revise por medio de un ping a google.com, para saber si hay conexión WAN (al cablemódem), y si no la encuentra, que reinicie el router. Este microprograma puede ser útil para una tarea de administración remota.

Para ello editaríamos el archivo:

vi /root/scripts/pingreset

Activamos el modo de edición con i y le pegamos el siguiente código:

#!/bin/sh
# Programa para probar la conexion o resetear.
if ping -c 1 google.com > /dev/null ; then
echo "Todo OK, el cliente funciona y no necesita reiniciarse"
pingfail=0
else
 pingfail=$(($pingfail+1))
echo $pingfail " ping fracasados"
if [ $pingfail -gt 10 ];
then
echo "mas de 10 ping a google fracasados. RESETEANDO EL ROUTER!!"
reboot
fi
fi


Luego guardamos y salimos con Esc +:wq, y le damos permisos de ejecución con:

chmod +x /root/scripts/pingreset

Podremos ejecutarlo con:

sh ~/scripts/pingreset

Un script que conviene tener en el directorio root de nuestro router es uno que active o desactive la red wifi. Para ello editamos:

vi ~/wifionoff

Se abrirá el editor Vi con el archivo en blanco. Presionamos i y le insertamos el siguiente código:

#!/bin/sh
# Crea un archivo con el registro de estado del Wifi (on u off)
# Si el wifi está on lo apaga, si está off lo enciende.

STATEFILE="/tmp/wifionoff.state"
 
if [ $# -eq 1 ]; then
  case $1 in
    "up"|"on")
      STATE=off
      ;;
    "down"|"off")
      STATE=on
      ;;
  esac
else
  if [ ! -e ${STATEFILE} ]; then
    STATE=on
  else
    . ${STATEFILE}
  fi
fi
if [ -z ${STATE} ]; then
  STATE=on
fi
 
if [ ${STATE} == "on" ]; then
  /sbin/wifi down
  STATE=off
else
  /sbin/wifi up
  STATE=on
fi
 
echo "STATE=${STATE}" > ${STATEFILE}


Una vez realizado esto, podremos darle permiso con:

chmod +x /root/wifionoff

Con este archivo creado, podremos ahora apagar o encender el wifi con dicho comando (siempre que estemos conectados por cable, claro está).

En vista de dicho archivo y si por algún motivo necesitásemos reiniciar solamente la red inalámbrica, pero queremos hacerlo estando conectados por wifi, podremos crear un script a tal efecto.

Para ello ingresamos

vi /root/scripts/resetearwifi

Y le pegamos el siguiente código:

#!/bin/sh
#Programa para resetear el wifi estando conectado por wifi
# requiere script wifionoff en /root/
cd /root/
./wifionoff && ./wifionoff


Lo guardamos y salimos con Esc + :wq, y le asignamos permisos de escritura con chmod + /root/scripts/resetearwifi.

En el caso de necesitar scripts puros para encender o apagar el wifi (por ejemplo, para utilizarlos a través de una orden cronometrada Cron, y activar o desactivar el wifi en determinadas horas del día), podremos utilizar Vi para incorporar dos archivos:

Un archivo /root/script/wifion que contenga el siguiente código:

#!/bin/sh
# Enciende la WLAN (sin detener el dispositivo de emision radio0)
wifi up


...y un archivo /root/script/wifioff que contenga el siguiente código:


#!/bin/sh
# Apaga la WLAN (sin detener el dispositivo de emision radio0)
wifi down



Es siempre útil contar con un script que nos presente el status del router. Para ello podremos crear con Vi un archivo /root/status e insertarle el código:

#!/bin/sh
# Programa que devuelve datos de estado del router
date
uptime
echo Detalle de las Conexiones del router
ifconfig
echo Direcciones IP cedidas por DHCP
cat /tmp/dhcp.leases
rm -f /tmp/log/ipactual.log
wget -q http://ipecho.net/plain -O /tmp/log/ipactual.log
echo '' >> /tmp/log/ipactual.log
echo La dirección IP actual de salida a internet es:
cat /tmp/log/ipactual.log


Guardamos el archivo con Esc + :wq y le damos permisos de ejecución con chmod +x /root/status.

Para ejecutarlo, podremos utilizar el comando ./status o sh /root/status.

Podremos crear otro programa de información aún mas detallado con facilidad. Por ejemplo, podríamos escribir un guion llamado /root/scripts/info con el siguiente contenido:

#scripts para detalles
echo INFORMACION DEL ROUTER - presione q para salir > /tmp/log/info
echo Dispositivo >> /tmp/log/info
cat /tmp/sysinfo/model >> /tmp/log/info
cat /proc/version >> /tmp/log/info
uname -mnrs >> /tmp/log/info
cd /tmp/
rm -f /tmp/log/ipactual.log
wget -q http://ipecho.net/plain -O /tmp/log/ipactual.log
echo '' >> /tmp/log/ipactual.log
echo La IP actual de salida a Internet es >> /tmp/log/info
cat /tmp/log/ipactual.log >> /tmp/log/info
echo INFORMACION DE LA CPU DEL ROUTER >> /tmp/log/info
cat /proc/cpuinfo >> /tmp/log/info

echo '' >> /tmp/log/info
echo ESTADO DE LA MEMORIA >> /tmp/log/info
cat /proc/meminfo >> /tmp/log/info

echo '' >> /tmp/log/info
echo MODULOS CARGADOS EN MEMORIA >> /tmp/log/info
cat /proc/modules >> /tmp/log/info

echo '' >> /tmp/log/info
echo DMESG DEL ROUTER >> /tmp/log/info
dmesg >> /tmp/log/info

echo '' >> /tmp/log/info
echo LOG INTERNO DEL APARATO >> /tmp/log/info
logread >> /tmp/log/info

echo '' >> /tmp/log/info
echo Generando archivo nuevo en tmp/log/info
cat /tmp/log/info | less
# Comentar para que no elimine el archivo al terminal el proceso:
rm /tmp/log/info


Con ello, al darle permisos de ejecución y ejecutar el script, nos devolverá una gran cantidad de información de status, en un paginador con le cual podremos movernos usando las flechas del cursor.
Para cerrar el paginador, debemos presionar q.

Red de invitados
En mi residencia de Puerta de Hierro dispongo de un único router que utilizo para mis quehaceres, pero en ocasiones debo montar el wifi para que mis invitados puedan utilizar sus dispositivos móviles. Es verdad que existen configuraciones específicas para el tema que nos aislan la red wifi de la red local, pero en mi caso no lo considero necesario de momento, por lo que simplemente dispongo una red wifi con una clave simple, diferente a la utilizada regularmente.

En tal caso, podremos preveer dos scripts que cambien la configuración de la red, y la activen. Cada uno de ellos depende de distintos archivos de parámetros generales.

En OpenWRT la red inalámbrica se configura a través del archivo /etc/config/wireless, el cual delimita las opciones de la red wifi, entre ellas el nombre de red (ssid) y la contraseña (key).

Para el funcionamiento adecuado crearé dos archivos de configuración. En el archivo /etc/config/wireless.normal indicaremos nuestros datos normales de la red, incluyendo su nombre de red y su contraseña. Por ejemplo, indicaré:

# configuracion de la red Wifi normal
config wifi-device 'radio0'
    option type 'mac80211'
    option hwmode '11ng'
    option path 'platform/ath9k'
    option disabled '0'
    option country 'AR'
    option txpower '20'
    option htmode 'HT40'
    option channel 'auto'

config wifi-iface
    option device 'radio0'
    option network 'lan'
    option mode 'ap'
    option ssid 'Wifi de Peron'
    option key 'eStA cLabe nO lA Bas A DeScUBrIr nI LoCO'
    option encryption 'psk2+ccmp'


En tanto, en el archivo /etc/config/wireless.invitado pondremos los datos que corresponderán a la red temporal para invitados:

# configuracion del Wifi para invitados
config wifi-device 'radio0'
    option type 'mac80211'
    option hwmode '11ng'
    option path 'platform/ath9k'
    option disabled '0'
    option country 'AR'
    option txpower '20'
    option htmode 'HT40'
    option channel 'auto'

config wifi-iface
    option device 'radio0'
    option network 'lan'
    option mode 'ap'
    option ssid 'Puerta de Hierro - Invitados'
    option key 'vivaperon'
    option encryption 'psk2+ccmp'
# Activarlo con el programa /root/scripts/confwifiinvitado
# Para volver a la wifi normal usar /root/scripts/wifinormal


Estos archivos de configuración no requieren permisos de ejecución.

Para poder activar la red Wifi de invitados o la red Wifi normal, debemos crear dos scripts y darles permisos de ejecución que las den de alta. En el archivo /root/scripts/confwifiinvitado ingresamos el siguiente código:

#!/bin/sh
#activa wifi invitado siguiendo el archivo /etc/config/wireless.invitado
cd /root
wifi down
rm -f /etc/config/wireless
cp /etc/config/wireless.invitado /etc/config/wireless
wifi up
echo Se activo la wifi de invitado!

Luego en el archivo /root/scripts/confwifinormal, le incorporamos el siguiente código:

#!/bin/sh
#activa wifi normal segun archivo /etc/config/wireless.normal
cd /root
wifi down
rm -f /etc/config/wireless
cp /etc/config/wireless.normal /etc/config/wireless
wifi up
echo Se reestablecio la wifi normal...


Tras editar ambos scripts, les otorgamos sus necesaarios permisos de ejecución con:

chmod +x /root/scripts/confwifiinvitado /root/scritps/confwifinormal:

Ahora, si ejecutamos el script confwifiinvitado, la red se llamara "Puerta de Hierro - Invitados" y la contraseña será "vivaperon". Y si ejecutamos confwifinormal, la red se llamará "Red de Peron" y la contraseña será la dificultosa "eStA cLabe nO lA Bas A DeScUBrIr nI LoCO".

viernes, 12 de septiembre de 2014

¿Cómo sintonizo radios online desde la Terminal en Ubuntu?

¡Trabajadores!

He explicado que la Radio es fundamental, por facilidad de acceso y por multiplicidad de medios, para la propalación de la Doctrina del Justicialismo. En ello hemos sido claros y constantes.

Yo mismo he divulgado mi mensaje a las ondas hertzianas desde mi Escritorio, a través de la LRA, Radio Nacional. Esto es porque la cadena de transmisión así lo permite desde un punto de vista técnico, y la comodidad lo hace realidad desde la funcionalidad.

Si esto es factible de hacerse en Ubuntu, mucho más sencillo será entonces recibir dichas ondas de radio en nuestro Escritorio. Ya he explicado numerosas veces como hacerlo, por ejemplo, con RadioTray.


Indudablemente la Interfaz de Línea de Comandos permite comandar todo tipeando las órdenes que necesitemos de forma local, y también de manera remota. Por ello favorezco su uso siempre que sea posible, en cuenta de que la misma nos permitirá la agilidad que todo Conductor requiere para el Movimiento.

¿Pero qué sucede si queremos recibir streaming de audio desde nuestra Consola Terminal?

Han de saber que los legendarios reproductores mplayer o VLC son capaces de ejecutarse en la consola y de sintonizar una emisora sin demasiado trámite. Pero a veces los mismos no representan la opción más práctica: existirán situaciones donde podría ser necesario sintonizar otras radios rápidamente, o donde no querramos tener un programa activo que nos moleste. O bien puede suceder que ni siquiera guardemos en nuestra mente la irrecordable dirección URL de la emisora a sintonizar.

En todo ello ha pensado el descamisado Gabriel Artigue, para que podamos afrontar toda esta problemática con un script sencillo y una interfaz a la que ha maquinado usando el potente generador Dialog. Este script al que me he dado la libertad de llamar pradio por Perón Radio, no involucra instalar más programa que el VLC, al cual empleará como motor de sintonía.

Normalmente el VLC ya viene instalado en la mayoría de las distribuciones, pero si así no lo fuese, lo podremos cargar en nuestro sistema abriendo una Terminal con Ctrl+Alt+T e ingresando el siguiente Comando de Organización:

sudo apt-get install vlc

Acto seguido, editamos el archivo del script. Lo podremos hacer con el editor peronista GNU Nano en nuestra carpeta de Usuario:

nano ~/pradio.sh

Se abrirá Nano con un archivo en blanco llamado pradio.sh. Simplemente copiamos y pegamos dentro del Nano el código fuente de Perón Radio:

#!/bin/bash
# Original: radio.sh, de Gabriel Artigue
# Traducido y alterado como pradio (Perón radio)
# para no confundir con el paquete radio, y modificar estaciones.

: ${DIALOG=dialog}
: ${DIALOG_REPRODUCIR=0}
: ${DIALOG_CANCELAR=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 "Perón Radio" "$@" \
        --menu "Elija una emisora:" 20 50 17 \
        "1" "LRA AM870 Radio Nacional" \
        "2" "Radio de las Madres" \
        "3" "AM Concepto" \
        "4" "FM Del Plata" \
        "5"  "Radio Nacional Rock" \
        "6"  "BBC" \
        "7"  "Beethoven Radio" \
        "8"  "Cadena Ser" \
        "9"  "Cope" \
        "10"  "CX6 Clásica" \
        "11"  "ProFM Clasica" \
        "12"  "Radio 5" \
        "13"  "Radio France Classical" \
        "14" "Radio France Internationale" \
        "15" "M80" \
        "16" "Radio Pais" \
        "17" "Radio Reloj" \
        "18" "Radio Sport" \
        "19" "RDP" \
        "20" "Radio Cadena ECO AM1220" \
        "21" "RNE Clásica" \
        "22" "Vocea Basarabiei" \
        "23" "RAI Italia" \
        "24" "Golden Radio Italia" \
        "25" "Italia Radio Salemi" \
        "26" "R101 Anni '80" \
        "27" "Gammagioiosa Golden Hits" \
        "28" "Virgin Rock 70" \
        "29" "Radyo Metropol Turkey" \
        "30" "KNBA - A Signal of Change" \
        "31" "VOA News Now" \
        "32" "KUHF Houston Texas" \
        "33" "WGN Chicago Illinois" \
        "34" "RTÉ Radio 1 Ireland" \
        "35" "Shannonside FM Longford Ireland" \
        "36" "Radio El Mundo" \
        "37" "Voice of Russia - English" \
        "38" "Vostok FM - Moscow" \
        "39" "NHK en Español" \
        "40" "Prima Radio Napoli" \
        "41" "La Zurda - Uruguay" \
        "42" "Big B Radio - Asian Music" 2> $tempfile

retval=$?

case $retval in
$DIALOG_REPRODUCIR)
clear
echo Procediendo a cargar la emisora elegida...
echo De no reproducir el audio vuelva a ejecutar Perón Radio
echo y elija otra emisora o seleccione Cancel para detener la radio.

case `cat $tempfile` in
1) station="http://www.alsolnet.com/stream/sc_rad1/listen.pls";;
2) station="http://200.68.81.65:8000/am530";;
3) station="http://190.220.149.204:1267";;
4) station="http://69.4.236.136:7920/listen.pls";;
5) station="http://www.alsolnet.com/stream/sc_rad39/listen.pls";;
6) station="http://www.bbc.co.uk/radio/listen/live/r1_aaclca.pls";;
7) station="http://yp.shoutcast.com/sbin/tunein-station.pls?id=99179295";;
8) station="http://playerservices.streamtheworld.com/pls/CADENASER.pls";;
9) station="http://www.listenlive.eu/cadenacope.m3u";;
10) station="http://yp.shoutcast.com/sbin/tunein-station.pls?id=103397";;
11) station="http://stream.profm.ro:8082/clasic.mp3.m3u";;
12) station="http://radio5.rtve.stream.flumotion.com/rtve/radio5.mp3.m3u";;
13) station="http://players.creacast.com/creacast/accent4/playlist.pls";;
14) station="http://www.tv-radio.com/station/france_inter_mp3/france_inter_mp3-128k.m3u";;
15) station="http://194.169.201.177:8085/liveM80.mp3";;
16) station="http://www.efluw.net:3131/listen.pls?sid=1";;
17) station="http://media.enet.cu/radioreloj";;
18) station="http://69.4.236.136:7914/";;
19) station="mms://195.245.168.21/rdpi";;
20) station="http://200.108.115.38:2123/listen.pls";;
21) station="http://radioclasica.rtve.stream.flumotion.com/rtve/radioclasica.mp3.m3u";;
22) station="http://yp.shoutcast.com/sbin/tunein-station.pls?id=1658540";;
23) station="http://www.listenlive.eu/rai8.m3u";;
24) station="http://www.goldenradio.it/listen.m3u";;
25) station="http://players.fluidstream.net/easy4trafic.pls";;
26) station="http://players.creacast.com/creacast/r101_thema1/playlist.pls";;
27) station="http://www.gammagioiosa.net/goldenhits.m3u";;
28) station="http://shoutcast.unitedradio.it:1119/listen.pls";;
29) station="http://radyometropol.radyolarburada.com:5544/listen.pls";;
30) station="http://pubint.ic.llnwd.net/stream/pubint_knba";;
31) station="http://www.voanews.com/wm/live/newsnow.asx";;
32) station="http://129.7.48.199/KUHF-HD1-128K.m3u";;
33) station="http://provisioning.streamtheworld.com/pls/WGNAM.pls";;
34) station="http://www.listenlive.eu/rte1.m3u";;
35) station="http://radiokerry.mp3.miisolutions.net:8050/radiokerry/shannonside_128kMP3_website.m3u";;
36) station="http://radiostream.elmundoradio.com:8332/;stream/1";;
37) station="http://engserver.streamr.ru:8020/eng.m3u";;
38) station="http://www.listenlive.eu/vostockfm.m3u";;
39) station="http://www3.nhk.or.jp/rj/podcast/mp3/spanish.mp3";;
40) station="http://www.kemoniastreaming2.net:8010/";;
41) station="http://usa2.fastcast4u.com:3470/listen.pls";;
42) station="http://50.7.173.162:8089/listen.pls";;
esac
;;

$DIALOG_CANCELAR)
     pkill vlc
     clear
echo Cerrando Perón Radio y reproducción detenida.
     exit 0;;

esac

pkill vlc
exec >/dev/null 2>&1
vlc -Idummy $station &!
exec >/dev/tty

exec pradio.sh
clear

Una vez que hayamos pegado el contenido, lo guardamos con Ctrl+o y salimos de Nano con Ctrl+x.

Para que funcione adecuadamente, habremos de asignarle a este archivo un  permiso de ejecución. Lo haremos con:

sudo chmod +x pradio.sh

...y ahora simplemente nos quedará el script armado para cuando queramos ejecutarlo. En Linux los scripts pueden darse inicio fácilmente anteponiendo punto barra ("./") delante del nombre del script. El comando tomaría entonces la  forma siguiente:

./pradio.sh

Al lanzarse Perón Radio, sin burocracia alguna nos mostrará una lista con las opciones de sintonía. Al elegir una con las flechas del cursor y presionar el botón Ok, se saldrá del script y se cargará el stream sin más trámite que mostrarnos una notificación.

El programa es bien sencillo: no nos permitirá modificar el volumen (para ello debemos usar el comando alsamixer u algún otro software libre de control de audio). Tampoco nos mostrará ningún logotipo, banner publicitario, ni noticias molestas a las que son adeptas las radios.

Si quisiéramos cesar la reproducción de la emisora, debemos ejecutar nuevamente el script y esta vez elegir el botón Cancel (podremos hacerlo presionando Tab o la Flecha de Cursor Derecho y luego seleccionarlo con Enter.
La obvia y sencilla programación que ha aplicado Gabriel Artigue nos permite  alterar nuestras emisoras preferidas simplemente agregándolas con el formato indicado en el archivo, o reemplazar alguna de las existentes reprogramando el código existente (sin alterar las comillas, tildes y demás).

El programa corre en cualquier consola de texto, aunque claramente prefiere las de las terminales color.