Un paseo por 9front

Introducción

Estaba pensando en hacer un segundo capítulo de Comandos útiles y aplicaciones en 9front cuando he pensado que igual era mejor hacer un largo paseo por cosas que se pueden hacer en 9front. De lo más básico a las cosas más complejas que vaya aprendiendo...

... es decir, que este es el primer capítulo de un paseo que no se cómo de lejos me va a llevar.

Apaga el ordenador de forma ordenada

El primer comando que hay que aprender al adentrarse en Plan 9 o sus derivados es

fshalt

Este comando para los fileservers y hace un apagado ordenado de la máquina.

rc

rc es el intérprete de comandos de Plan 9 y derivados. Originalmente se desarrolló para UNIX y se portó a Plan 9.

rc no tiene un histórico como tienen bash, zsh o esas otras cosas modernas, pero si tiene algunas funcionalidades interesantes. Lo primero es saber que puedes añadir cosas a la configuración de rc editando el fichero $home/lib/profile. Por ejemplo añadiendo la siguiente función:

fn term%{ $* }

para poder seleccionar una línea completa haciendo doble click al final de la misma y, desde el menú contextual del botón 2 del ratón, darle a Send.

Algunos comandos en rc

Si bien algunos comandos son iguales en 9front que en GNU/Linux, hay unos cuantos que son diferentes y hay ausencias importantes. Hay que tener en cuenta que todo el código fuente de 9front son muchas, muchas líneas menos que el código fuente del navegador Firefox, y esto afecta también a comandos que si bien son iguales que en otros UNIX y similares, no aceptan los mismos parámetros.

  • cp -r -> No existe esa opción. El sustituto es mkdir /destino/ && dircp /origen/ /destino/
  • ^C (Ctrl+c) -> Botón Supr o DEL
  • ~ -> $home
  • find -> du -a | grep texto
  • ip a -> cat /net/ndb
  • kill pid -> echo stop > /proc/pid/ctl
  • man -k -> lookman

/env

En el directorio /env se encuentran variables de entorno de la consola. Este "directorio" contiene una serie de "ficheros" que se llaman igual que las variables de entorno y que contienen el valor de las mismas. Así estos dos comandos devuelven el mismo resultado:

cat /env/pid
echo $pid

Ambos nos devuelven el identificador de la consola actual. ¡¡¡Con lo que /env es diferente para cada terminal que abramos!!! Realmente /env no es un directorio real con ficheros reales dentro. Es un interface por medio del cual el sistema nos permite acceder a cierta información dándonos la sensación de que estamos leyendo ficheros. Pasa algo parecido con /proc.

rio

rio es el sistemas de ventanas de Plan 9. Más concretamente, rio convierte ficheros de texto en pixels e interpreta los comandos introducidos mediante los periféricos de entrada y los convierte a texto a su vez. Así, por ejemplo, si haces un cat /dev/mouse en un terminal y mueves el ratón sobre él verás como la posición del cursor es escrita en el fichero.

Para usar rio es necesario tener un ratón con 3 botones. Los botones son referidos en la documentación como 1, 2 y 3 (de izquierda a derecha).

El botón 1 es principalmente para seleccionar y posicionarnos en la pantalla. El botón 3 nos muestra un menú con diferentes opciones:

New
Resize
Move
Delete
Hide

además de una lista de las ventanas que hayamos ocultado. Creo que es muy obvio para qué sirve cada comando.

No, en rio no hay un menú de aplicaciones como en otros sistemas de ventanas de NIX. El botón 3* sirve para manejar las ventanas que tenemos abiertas.

El botón 2 nos muestra un menú con opciones para manejar texto y ejecutar operaciones sobre él, tales como cut, snarf, paste, send o plumb.

¿Snarf? En Plan 9 no existe el comando copy, en su lugar está snarf que hace algo parecido. Copia el texto seleccionado a memoria.

Para moverte por el terminal arriba y abajo puedes usar tanto los cursores pulsando a la vez el botón de Mayúsculas o mediante los botones 1 y 3 haciendo click en la barra de desplazamiento que hay a la izquierda del terminal.

Comandos con el ratón en rio

Click con el botón 1 selecciona texto.

Doble click con el botón 1 selecciona la palabra que hay bajo el cursos, salvo que estemos al final de una línea. En ese caso selecciona toda la línea.

Manteniendo pulsado el botón 1 si hacemos Click con el botón 2 corta el texto seleccionado.

Manteniendo pulsado el botón 1 si hacemos Click con el botón 3 pega el texto cortado anteriormente.

Atajos de teclado en rio

Ctrl-u — Borra desde el cursor hasta el inicio de la línea.

Ctrl-w — Borra la palabra detrás del cursor.

Ctrl-h — Borra un caracter detrás del cursor.

Ctrl-a — Mueve el cursor al inicio de la línea.

Ctrl-e — Mueve el cursor al final de la línea.

Ctrl-b — Mueve el cursor a la posición inmediatamente posterior al prompt.

Todo son archivos de texto

Como todo en Plan 9 y derivados es un archivo de texto, las consolas y los programas en ejecución también son archivos de texto. Así, en /dev/wsys tenemos numeradas todas las ventanas que tenemos abiertas. Dentro de cada una el fichero label nos dice el nombre del programa, el fichero wctl nos da información de la posición en la pantalla, etc.

Con el comando label podemos modificar la etiqueta de la consola actual. Es una forma de tenerlo más ordenado y fácilmente identificable en la lista de ventanas.

ns es un comando que nos muestra información del namespace del proceso.

También podemos acceder directamente a los ficheros de texto de la consola actual consultando en /dev/text, el cual es diferente para consola... igual que /env.

Correo electrónico

Configuración

Primero debemos guardar en factotum los datos de conexión al servidor IMAP y al SMTP

auth/factotum -g 'proto=pass server=imap.server.com service=imap user=username !password=YOURPASSWORD'
auth/factotum -g 'proto=pass server=smtp.server.com service=smtp user=username !password=YOURPASSWORD'

Lo siguiente es hacer una primera conexión de prueba que dará un error de certificado

upas/fs -f /imaps/disroot.org/user

El error de certificado dice que ejecutemos lo siguiente:

echo 'x509 sha256=XXXXXXXX' >>/sys/lib/tls/mail

Y ya podemos volver a lanzar el comando anterior, que tardará bastante tiempo. Dejamos que termine.

Una vez ha finalizado podemos ejecutar lo siguiente:

upas/fs -f /imaps/imap.server.com/username
echo 'open /imaps/imap.server.com/username/Inbox Inbox' >/mail/fs/ctl

Y entrar en acme y mediante el comando Mail ya nos cargará la lista de correos de la carpeta.

Configuración de correo saliente

Modificamos el fichero /mail/lib/remotemail con la siguiente configuración:

#!/bin/rc
shift
sender=username@server.com
shift
addr=tcp!smtp.server.com!587
shift
fd={/bin/upas/aliasmail -f $sender}
switch($fd){
case *.*
  ;
case *
  fd=smtp.server.com
}
exec /bin/upas/smtp -u username -a -h $fd $addr $sender $*

Copiamos el fichero /mail/lib/rewrite.gateway como /mail/lib/rewrite y reemplazamos YOURDOMAIN.COM por server.com

Editamos el fichero /mail/box/${user}/headers con el siguiente contenido (ojo, es importante que haya una línea en blanco al final del documento

From: My Name García <username@server.com>

El siguiente paso es añadir el certificado a factotum, para ello ejecutamos:

echo hello | mail -s test myuser@server.com

lo que deberá generar un error en /sys/log/smtp. Copiamos el sha y ejecutamos:

echo 'x509 sha256=XXXXXXXX' >>/sys/lib/tls/smtp

Ahora desde acme podemos hacer una prueba de envío de correo.

Aplicaciones

  • stats es una aplicación de monitorización de la actividad del ordenador. Puedes consultar todas las opciones en el manual
  • mothra es un buen navegador web. Olvidate de JavaScript. ¿JavaScript, quién dijo JavaScript?
  • vol una aplicación para tener el control del volúmen en Shithub
  • niv es una aplicación para descargar vídeos de Youtube a local y poder reproducirlos luego. En el readme del repositorio viene información de la aplicación que hace falta para reproducir el vídeo y cómo realizar la descarga. Punto negativo: no se puede, o no se, dar a la pausa o a los controles de reproducción del vídeo
  • page es un visor de documentos. Sirve para abrir pdfs o para visualizar las páginas de man mediante la instrucción man -t man | page -w

Documentación que nunca está de más tener presente

Un documento fundamental es la Introducción a Plan 9 de Francisco J. Ballesteros.

Enlaces a vídeos de Youtube sobre Plan 9 y 9front

Sin estos vídeos no habría sido posible adentrarme en tanto detalle en 9front...

Why is Plan9 like this? An introduction to Namespaces Goofing around with Plan 9 from Bell Labs A quick intro to C programming, for Plan 9 and 9front