Personalizando el terminal.

Por Juan José Gómez Navarro, Ontureño ;)
10 de abril de 2006
No entiendes realmente algo hasta que no eres capaz de explicárselo a tu abuela.
A. Einstein.
Disponible también en pdf.
Índice.
- 1. Introducción
2. El prompt
3. Los colores de ls- 3.1. Selección de Colores
3.2. Tipos de archivo
3.3. Fijando la configuración
4. Eterm: un ejemplo de terminal personalizable
- 4.1. Generalidades
4.2. Algunas opciones útiles
4.3. Los temas
5. El sistema de colores RGB
- 5.1. Uso de colores
5.2. Numeración hexadecimal
5.3. Colores predefinidos
- 3.1. Selección de Colores
- 1. Introducción
Una de las características que más me gustan de Linux es la posibilidad real de trabajar en una consola de comandos. Es cierto que Windows también tiene una, llamada Símbolo del Sistema. Antaño era una herramienta importante, cuando MS-DOS y todo aquello, pero hoy día ya no sirve para casi nada, su uso está limitado a frikis y gurús. Realmente no se puede trabajar de ordinario con ella, sale más rentable ir directamente a usar el ratón.
En Linux esto no es así, tenemos una consola útil y eficiente, que sirve para realizar cualquier acción de manera rápida y precisa, con multitud de comandos y aplicaciones para ejecutar en ella. De hecho, en algunas tareas de administración es imprescindible usarla y, debido a la gran cantidad de distribuciones disponibles, usarla es una de las mejores formas de estandarizar linux. Uno puede, no obstante, usar ventanas y ratones, no hay problema. Lo grande es que uno pueda elegir, ese es el espíritu de Linux, ese es el espíritu del software libre.
Como yo, mucha gente trabaja habitualmete con la consola la mayor parte del tiempo. Personalizar la consola sirve para hacer más agradable y eficiente el contacto con el sistema. En este articulillo contaré cómo he conseguido el terminal (Con terminal me refiero a una consola abierta en un entorno gráfico. Consola, a secas, se refiere normalmente a las consolas a las que podemos acceder mediante la combinación de teclas Ctrl+alt+F1...F6) que a mı me gusta.
Básicamente se compone de tres elementos bastante diferentes:
El prompt: altamente personalizable, puede contener cierta información bastante útil.
Los colores del comando ls: el comando con mucho más usado en una consola. Veremos lo conveniente de tenerlo bien configurado
El terminal propiamente dicho: podemos instalar diferentes emuladores de la consola para el entorno gráfico con algunas mejoras visuales interesantes.
- 2. El prompt
Realmente no voy a decir gran cosa sobre este. Todo lo que voy a contar ya lo han hecho mejor que yo ZX80 y shicefgo en sendos artículos. Simplemente haré un resumen del resumen para que el artículo quede un poco autocontenido. Pero si uno quiere conocimientos, debe acudir a la fuente.
La forma del prompt está contenida en la variable de entrono PS1. Si ejecutamos en el terminal
PS1="hola"
observaremos que el prompt pasa a ser esta palabra. No es gran cosa, la verdad. Lo interesante en cuanto a esto es que podemos utilizar la salida de algunos comandos como prompt. Si ponemos
PS1="$(date)"
obtendremos la fecha como prompt. Podríamos usar incluso algo como
PS1="$(ls)"
lo cual no nos lleva a ningún lado, pero sólo es otro ejemplo.
Además de esto, podemos utilizar órdenes especiales para mostrar información útil. Si ponemos
PS1="\h"
obtendremos como prompt el nombre de localhost.
Análogamente pasa con \u para el nombre de usuario o \w para el direcotorio actual.
Tema interesante es colorear el prompt. El problema con esto es que la forma de hacerlo es sorprendentemente complicada. Si queremos un prompt en el que simplemente esté la palabra ((Hola)) escrita en letra verde sobre fondo negro, tendremos que poner nada menos que
PS1="\e[32;40mHola\e[0m"
Como véis, es un tanto complicado. Os remito al artículo de ZX80 para terminar de ver esto en detalle, no voy a repetir lo que está hecho.
- 3. Los colores de ls
Navegando entre directorios, uno usa contínuamente el comando ls, que muestra el contenido de una carpeta. Una de las posibilidades de este comando es que escriba con un color en particular cada tipo de archivo, de manera que sea más fácil localizar a simple vista un archivo o subdirectorio que estés buscando. Esto es tremenadamente útil para agilizar la navegación, hasta el punto en que con la costumbre uno se mueve más rápido tecleando que con un navegador gráfico tipo konqueror.
- 3.1. Selección de Colores
Para poner los colores que queramos debemos usar el comando dircolors.
Si queremos saber qué colores hay actualmente definidos para que los use ls, tenemos que teclear
dircolors -p
que imprime en pantalla (-p es de print) la base de datos con esta información. Los colores se definen para según el tipo de archivo (por ejemplo, podemos querer que los directorios los ponga en azul, o los enlaces en verde) o por la extensión (Cuando digo extensión xxx, simplemente me refiero a que su nombre termina en .xxx) , por ejemplo, que los que tienen nombre terminado en .pdf se coloreen en rojo. Lo que queremos es poder modificar esta base de datos. Ésta está definida, normalmente, en el archivo /etc/DIR COLORS (con mayúsculas). El fichero tiene la sintáxis
TIPO ARCHIVO #4tipo letra ; #color letra ; #color fondo
donde los códigos de los n´umeros de los colores son
Color negro rojo verde amarillo azul magenta cyan blanco #letra 30 31 32 33 34 35 36 37 #fondo 40 41 42 43 44 45 46 47
mientras que el tipo de letra es:
Tipo de letra normal bold underscore blink reverse concealed
# 00 01 04 05 07 08
- 3.2. Tipos de archivo
Los tipos de archivo más comues que podemos seleccionar para colorear son:
EXEC: son los que tienen permisos de ejecución.
DIR: los directorios
LINK: los enlaces simbólicos
BLK: dispositivos de bloques
.ext: archivos con extensión ext, la que sea
Así, si queremos que muestre los directorios en color azul sobre fondo amarillo con letra negrita, escribimos
DIR 01;34;43
Los archivos normales con cierta extensión también se pueden colorear. Si por ejemplo queremos que los archivos de mp3 se muestren en color azul claro, tendremos que añaadir la línea
.mp3 00;36
Observa que no es necesario añadir el color de fondo si queremos que sea transparente (tome el fondo del terminal).
- 3.3. Fijando la configuración
Supongamos que ya hemos creado a nuestro gusto el archivo DIR COLORS. Normalmente no basta con eso para que los cambios surtan efecto. Para que tome la nueva configuración, tenemos que ejecutar en consola el comando:
eval ‘dircolors -b /etc/DIR COLORS‘
Que lo que hace es decirle a ls que tome la nueva base de datos para los colores. Esto habrá que hacerlo cada vez que abramos una consola, lo que es un poco pesado. Para evitar eso, se añade esta línea al archivo /.bashrc. Con esto, cada vez que abramos sesión en una consola se ejecuta el comando y de esa forma cargamos automáticamente la configuración de dircolors: ya podemos navegar de forma mucho más cómoda y visual.
- 4. Eterm: un ejemplo de terminal personalizable
Aquí aprenderemos a usar el programa Eterm para tener un terminal a nuestro gusto. Hay otros programas, como aterm. Cual usar es cuestión de gustos, como siempre.
- 4.1. Generalidades.
Eterm es un emulador de la consola de comandos. Si no sabes lo que significa esto, piensa en la típica terminal que puedes abrir en kde o gnome. Esta terminal es un programa, konsole de Kde y gnome-terminal de Gnome. Pues bien, Eterm es otro emulador como estos, que se instala como cualquier otro software, normalmente con el gestor de paquetes de tu distro o descargándolo de la página oficial.
Si ya tenemos konsole o gnome-terminal, ¿Por qué usar Eterm?. Yo personalmente utilizo Eterm por varios motivos:
i) no tiene dependencias con kde o gnome, lo que resulta ideal si usas entornos gráficos ligeritos como fluxbox, xcfe4,...
ii) es áltamente personalizable.
iii) es muy ligerito: si tienes problemas con la potencia de tu ordenador es ideal.
iv) dispone de temas, que ayudan a personalizarlo de forma sencilla descargando esquemas de color de internet.
v) permite transparencias y tintados sin consumir todos los recursos en renderizar imágenes
Para cargar Eterm se utiliza el comando Eterm (con mayúscula), que admite una serie de parámetros y de opciones. Por ejemplo, el siguiente comando
Eterm -t BlueSteel --trans --tint blue --buttonbar=off -f white
--shade 30 % -g 100x25+200+250
abre un terminal como el que se muestra en la figura 1. En lo que sigue, explicaré un poco los comandos utilizados.

Figura 1: Ejemplo del programa Eterm funcionando. Además, se muestra el prompt que uso, sacado del manual de shicefgo. Se aprecian los directorios en azul, los archivos comprimidos en rojo, etc...
- 4.2. Algunas opciones útiles.
Como ya has visto, el comando que invoca este terminal es Eterm. Los opciones que uso son:
–trans: sirve para decirle a Eterm que establezca como fondo una imagen transparente (es una pseoduo transparencia, es decir, que no se ve lo que hay detrás de la ventana. Lo que es en realidad hace es poner como fondo del terminal el trozo de imagen que corresponde al fragmento de fondo que está tapando). Si no le dices nada toma una imagen aleatoria de una serie de imágenes que contiene por defecto.
–tint: es para modificar la imagen que tengamos como fondo, de manera que se vea como si estuviéramos mirando a través de un cristal tintado. Hay que indicarle exactamente que color queremos que se vea a través.
–buttonbar=off: sirve para eliminar la barra de botones. Esto simplifica la ventana, no tienes el menú Eterm. Este no es muy útil realmente, a no ser que lo diseñes tu mismo a tu gusto con las indicaciones que
daré cuando hable de temas.
-f: es para indicar la fuente que queremos usar. El modificador white sirve para decirle que la fuente sea blanca (ver capítulo dedicado a RGB). Esto aumenta el contraste. Hombre, no solo se trata de que sea estético, sino que no nos quedemos ciegos en el intento.
–shade 30 %: como su propio nombre indica, sirve para sombrear la imagen. Es particularmente útil cuando usamos transparencias, para aumentar el contraste y no quedarnos ciegos.
-g 100x25+200+250: es la geometría de la ventana. Esto es importante,sobre todo si no usamos bordes. Sirve para decirle a Eterm que tamaño y en que posición se ha de colocar cuando sea invocado. En este caso,
se coloca con la esquina superior izquierda en la coordenada (200, 250), y el tamaño 100 × 25.
Con estos modificadores ya tenemos la ventana que he puesto en la figura 1, pero está claro que hay mucho más. Algunos que creo que son interesantes son:
-h: un poquito de ayuda adicional. Nunca viene mal.
-scrollbar=on/off: pone y quita la barra de desplazamiento.
–scrollbar-width: la anchura de la barra.
–scrollbar-type: hay 3 tipos diferentes de barras, a saber motif, xterm, next.
–anim: sirve para poner como fondo una serie de imágenes que van cambiando. Es una pijadita, pero bueno. Se usa como diciendo el número de segundos entre imágenes y la lista de imágenes a usar.
–borderless: se usa para quitar el marco de la ventana del entorno gráfico de turno. Si lo usas tienes que tener en cuenta que no podrás redimensionar
ni mover la ventana luego, por lo que el comando geometry es
importante usarlo bien.
–no-input: evita que se pueda escribir en el terminal. La idea de esto es usarlo para registrar los eventos del sistema
–exec: haces que cuando se abra Eterm, lo haga arrancando un programa desde el terminal. Nuevamente útil para usar el terminal como bitácora.
–viewport-mode: se le indica una imagen del tamaño del tapiz y a través de la ventana Eterm podemos ver la imagen como si estuviera detrás del fondo y la ventana de la consola fuera un agujero por donde mirarla.
Un poco difícil de explicar.
–icon: el icono que se puestra en la barra de herramientas
-P: selecciona una imagen para poner como fondo de Eterm. Obviamente incompatible con transparencias.
-t: esto es importante, le dice a Eterm que use un tema específico. De esto va el siguiente apartado.
- 4.3. Los temas.
Lo bueno que tiene Eterm es la posibilidad de usar temas. Esto es bueno no sólo porque nos permite usar prediseños descargados de internet, sino porque todas las opciones que he estado describiendo antes se pueden añadir al tema, y con sólo invocarlo ya tendremos las opciones que nos gusten (ten en cuenta que para que nos quede como queremos, puede que tengamos que añadir muchas opciones, lo que haría un comando enorme y difícil de recordar o manejar. Con los temas esto se ((empotra)) en el tema y nos alivia de decir las opciones en la línea de comandos)
Los temas se encuentran por defecto en la carpeta /.Eterm/themes. De hecho, es inevitable usar los temas. Si no le dices el que quieres, tomará por defecto el user.cfg que está en esta misma carpeta (los temas tienen todos esta extensión). Para instalar un tema, lo bajamos comprimido de la página oficial y lo descomprimimos en la carpeta anterior. Luego, para usarlo, usamos el comando
Eterm -t el tema que queramos
El archivo del tema está estructurado en módulos llamados contextos, que están delimitados entre las palabras begin y end. El primer contexto es color. En éste se definen algunos colores importantes, como foreground, background o cursor, que son los colores de la fuente, el fondo y el cursor respectivamente (ver capítulo sobre selección de colores rgb al final). El siguiente, también importante es attributes. En él podemos poner las opciones que queramos que tenga Eterm por defecto, como la geometría, el que sea transparente o elegir el fondo...

Figura 2: Una pijadita para Frikis: una ventanita informándonos de las incidencias de hardware en nuestro sistema. No puedes ser linuxero serio si no tienes ;-). Se obtiene con el comando:
Eterm --borderless --buttonbar=off --trans --shade 4 % -f green -g 80x25+500+600 --scrollbar=off
Lo que nos garantiza un terminal totalmente invisible con letras verdes para que resalten más (y le dé un rollo Matrix). Para que contenga la información que nos interesa, usaremos el comando tail, concretamente tail -f -n 20 /var/log/messages lo que muestra las últimas líneas del archivo log del kernel y queda esperando a que ((ocurra algo)). Hay programas que hacen todo esto de forma más sencilla y probablemente eficiente, concretamente RootTail, pero como estamos con Eterm, he ahí la forma de hacerlo con esta herramienta.
Un punto importante es el tamaño de las fuentes. A mí me parece que son demasiado pequeñas por defecto. Aunque uno puede elegir el tamaño en el menú, el tamaño máximo no es muy grande. Podemos mejorar esto editando el archivo del tema, en el contexto attributes ponemos
- font default 5
font proportional 0
font 0 5x7
font 1 6x10
font 2 fixed
font 3 8x13
font 4 9x15
font 5 10x20
Con esto, hemos definido el tamaño de fuente 5, suficientemente grande, y además le hemos dicho que la use por defecto.
El resto de contextos son para construir los menús. Construir tu propio menú es una tarea bastante complicada y no voy a explicarla, entre otras cosas porque no sé hacerlo ni creo que sea importante saber hacerlo. Precisamente lo bueno de los temas es poder descargarte algunos prediseñados, no hacerlos tú.
- 5. El sistema de colores RGB
Hasta ahora hemos usado dos formas diferentes de definir colores: una para los del prompt y otra para los colores de ls. Vamos a ver una tercera, mucho más estándard y utilizada. Tanto que bien merece un apartado para ella sola.
Todos los sistemas electrónicos que emiten luz en color están basados en el modelo de color rgb. El ojo humano sólo es capar de reconocer tres colores básicos, rojo verde y azul (Red, Green y Blue, de ahí RGB), el resto de colores se forman por una combinación de estos tres. De esta forma, cualquier aparato electrónico que emita luz, como una televisión, un proyector, una pantalla de ordenador, o la PSP, ha de jugar mezclando estos tres ingredientes para conseguir el tono deseado (puedes comprobar esto mirando fíjamente y muy de cerca la televisión. Te darás cuenta que la imagen está formada por una multitud de puntitos de color rojo verde y azul).
A la hora de definir un nuevo color, se ha de dar la cantidad de cada uno de los tonos básicos que lo componen. Ésta se da con un número entre 0 (el mínimo) y 255 (el máximo) para cada color (se podría haber escogido cualquier otra escala, una escala entre 0 y 1, por ejemplo. Se escogió ésta porque un número entre 0 y 255 puede ser descrito mediante exáctamente un byte de información). Por ejemplo, (255,0,0) quiere decir que ponemos el máximo rojo, nada de verde y nada de azul, el resultado será color rojo. Si ponemos (0,120,120), que es un poco de verde y un poco de azul, el resultado será un tono de turquesa. Además no sólo importa la proporción relativa, sino la cantidad. Un (255,0,0) será un rojo muy claro mientras que un (50,0,0) es un rojo oscuro. El negro es 0 0 0 y el blanco es (255,255,255). Es importante hacer notar que el orden es importante, el primer número es para el rojo, el segundo para verde y el último para el azul.
Como curiosidad, fíjate que el número de colores diferentes disponibles con este sistema es de ((sólo)) 2563 = 224. O lo que es lo mismo, necesitamos 24 bits para espicificar unívocamente el color deseado entre todos los posibles.
- 5.1. Uso de colores
La nomenclatura que he usado arriba es la que me he inventado, bastante intuitiva, creo. En la práctica, los colores se pueden definir de diferentes maneras. Por ejemplo en Eterm, si queremos usar un color especificado por
nosotros, la nomenclatura es:
rgb:xx/yy/zz
que significa xx cantida de rojo, y así sucesivamente. Ésta es la misma forma de hacerlo también para Fluxbox. Por otro lado, el gestor de ventanas pawm o el código HTML, por poner otros ejemplos, usan la nomenclatura:
#xxyyzz
y su significado resulta bastante obvio. Puede que haya otras formas de usarlo, la casuística nos dirá lo que hacer en cada ocasión. Tenemos un pequeño problema, he dicho que cada pareja de valores es para un color, pero ¿qué pasa si quiero una cantidad de color mayor que 99?. No puedo usar rgb:145/23/65, eso no funcionará. La forma de representar números mayores a 99 mediante dos dígitos es usando numeración hexadecimal.
- 5.2. Numeración hexadecimal
Primero explicaré lo que es la numeración decimal (En lo que sigue, los números los llamo con su nombre, como ocho o cien, mientras que a los símbolos que lo representan los pondré con cifras, como 8 o 100. Esto lo hago así para separar el concepto del número cien de su símbolo matemático, que son cosas diferentes.). Si tenemos que denotar un número igual o menor a nueve, le asignamos un símbolo, como 4 ó 7. Si queremos un número mayor, entonces ponemos un 1 a la izquierda del primer número y seguimos contando como si nada; esto nos permite contar hasta diecinueve. Para seguir, ponemos un 2 en la cifra de las decenas y seguimos contando. Esto se ve muy bien como funciona en los cuentakilómetros y realmente es conocido por todos.
Algo menos conocida es la numeración binaria. En ésta sólo disponemos de dos símbolos, el 0 y el 1. Mediante un dígito sólo podemos llegar a uno, para llegar al dos, ponemos un 1 a la izquierda de la primera cifra, exáctamente igual que la numeración decimal. De esta forma obtenemos el 10, que es el dos en binario(Hay un famoso chiste con esto: (Hay 10 tipos de personas, las que saben binario y las que no). Para seguir vamos añadiendo unos a la izquierda de la última cifra y podemos contar hasta infinito, dos veces si queremos ;-).
número símbolo decimal símbolo binario cero 0 0 uno 1 1 dos 2 10 tres 3 11 cuatro 4 100
En general, puedo establecer un sistema de numeración con n símbolos. Este índice se denomina base. Así, el binario es base dos o el decimal base diez. Uno puede contar en cualquier base, la utilización de uno u otro sistema depende del propósito. El sistema decimal, con mucho el más utilizado, sólo se usa por una razón: tenemos diez dedos en las manos. Si crees que contar con los dedos no es suficiente razón para usar este sistema, te invito a que sumes 4+4 en un sistema base seis (el resultado es 12). Análogamente, hay una buena razón para usar el binario en el contexto informático: los sistemas electrónicos digitales trabajan con señales de voltaje, es fácil detectar la presencia o no de potencial eléctrico, pero no es tan fácil decir exáctamente cuánto hay. El sistema binario elimina ruido.
Un sistema de numeración con una base grande tiene la ventaja de que es más compacto, los números ocupan menos caracteres, pero la desventaja de que complica la codificación introduciendo más símbolos.
Ahora estamos en condiciones de entender lo que es el hexadecimal: un sistema de numeración en base 16. Como necesitamos 16 símbolos, y los informáticos andan algo cortos de imaginación, se usan letras. Los símbolos para denotar los números entre el cero y el quince son:
- 0 1 2 3 4 5 6 7 8 9 a b c d e f
De esta manera, el dieciséis será 10, por ejemplo. Con esta base, un número habitualmente de tres cifras, como el doscientos cintuenta y cinco, pasa a denotarse con ff. Ya tenemos la forma de denotar números mayores a 99 con dos dígitos, como queríamos.
- 5.3. Colores predefinidos
Los linuxeros tenemos por (¿sana?) costumbre complicarnos la existencia, pero hasta cierto punto. Usar algo como rgb:ff/ff/ff para definir el blanco es un poco artificioso, pero si queremos un bonito tono morado, a ver quién es el guapo que se pone a sacar el hexadecimal que corresponde al código numérico rgb del color.
Por suerte, tenemos una base de datos con un montón de colores predefinidos. Para consultarla, basta con mirar la página man de colors:
- man colors
Ésta nos informa de los colores que hay predefinidos y listos para usar. Así, si queremos un terminal con color de fuente dorado, vamos a esta página, buscamos (En las páginas man se busca tecleando /palabra a buscar) golden y miramos la gama de colores relacionados con ese nombre. Esta base de datos puede ser visualizada de otra forma, se trata del archivo (al menos en mi distro, no puede estar muy lejos de ahí en genereal) /usr/X11R6/lib/X11/rgb.txt. En este archivo se indica el nombre del color y el conjunto de tres números (en base decimal) que corresponden a sus
componentes en en rgb. Algo como dark green 0 100 0.
En resumidas cuentas, si queremos fuente verde en un terminal Eterm, usaremos algo como
Eterm -f darkgreen
Fíjate en que se omite el espacio que separa el nombre del color.
- Referencias
* Artículo de shicefgo sobre cómo construyó su prompt. Recomiendo su lectura, pues cuenta muchas otras generalidades de Linux bastante básicas pero muchas veces olvidadas: Ampliando explicaciones sobre el prompt que a mí me gusta.
* Artículo de Buho con una recopilación de aplicaciones interesantes para usar desde consola: Linux sin ventanucos.
* Artículo de ZX80 básico para aprender a modificar el prompt. Trata en bastante detalle el tema de los colores: Personalizando la Shell.
* Página oficial de Eterm
* Página sobre el modelo RGB en Wikipedia.
Año 2006
Por Ontureño
|
