ravn@imada.ou.dk
thidalgo@alboran.ualm.es
ls
incluído en la distribución Slackware de
linux permite color. (Slackware 2.0.2 y núcleo 1.1.54 de
Linux. Funciona también con agetty, o bien con mgetty_ps). Puede que los
colores por defecto no le gusten o que les haya cogido manía. Este documento
tiene como objetivo explicar el principio de funcionamiento y
configuración de colores usados por este comando.
Existen dos métodos:
setterm
que es válido para
una modificación rápida y simple de la configuración por defecto. Los manuales
y ayudas de este comando están escritos de forma farragosa y no intentaré de
ninguna manera traducirlos más claros ;-).
Las selecciones se realizan de la forma:
setterm -foreground black -background white -store
donde -store
significa que dicha configuración es grabada por
defecto en la consola activa. Sería necesario repetir esta operación para
cada consola virtual nueva, por lo que parece una buena idea colocar esta
línea en el .login
(en csh
o tcsh
) o en el .profile
(sh
, ksh
o bash
). En adelante sabrá tanto sobre el comando
setterm
como yo :-).
ANSI
del tipo:
ESC[<parámetros>m
donde ESC
es el carácter ASCII 27 y
<parámetros>m
es uno o varios números separados por puntos y
comas. Por ejemplo:
"\033[41;33;1m"
que da un aspecto amarillo sobre fondo rojo."\033[30;47m"
que da un aspecto blanco sobre fondo negro."\033[m"
que restablece el aspecto por defecto.\xxx
. Si no es el caso, inserte directamente un carácter de
escape en la cadena. En bash/vi
teclee Ctrl-V ESC
, y
bajo tcsh/emacs
teclee Ctrl-Q ESC.
Este es un script en C-shell que muestra en la consola el conjunto de combinaciones de colores:
#!/bin/csh
#
# Muestra los colores ANSI
#
set esc="\033["
foreach fore (30 31 32 33 34 35 36 37)
set line1="\*(dRfore " line2=" "
foreach back (40 41 42 43 44 45 46 47)
set line1="\*(dR{line1}\*(dR{esc}\*(dR{back};\*(dR{fore}m Normal \*(dR{esc}0m"
set line2="\*(dR{line2}\*(dR{esc}\*(dR{back};\*(dR{fore}1m \*(dR{back} Bold \*(dR{esc}0m"
end
echo "\*(dRline1\n\*(dRline2"
end
El número de colores foreground crece hacia la izquierda, y el número de
colores background sigue la misma norma. Si desea una intensidad alta
coloque 01
como primer parámetro. Ponga un punto y coma entre cada parámetro
y toda la secuencia de parámetros seguida.
Para una mayor facilidad a la hora de poder elegir el aspecto de colores para el comando ls se describen a continuación la correspondencia entre los números y los colores de las secuencias de escape.
Funciones Gráficas
Colores Primer Plano (Foreground) Colores de Fondo (Background)
30.....................Negro....................40
31.....................Rojo.....................41
32.....................Verde....................42
33.....................Amarillo.................43
34.....................Azul.....................44
35.....................Magenta..................45
36.....................Azul verdoso.............46
37.....................Blanco...................47
El comando ls
comienza por mirar la definición de asociaciones de
color en el fichero ~/.dir_colors
y si no existe usa el fichero
/etc/DIR_COLORS
. Dichos ficheros contienen entradas del tipo:
LINK 36;1 # enlace simbolico
FIFO 40;33 # pipeline
SOCK 41;01;35 # socket
BLK 41;33;01 # gestor en modo bloque
CHR 41;33;01 # gestor en modo caracter
EXEC 32;1 # ficheros ejecutables
.tar 01;31 # ficheros y archivos comprimidos
.tgz 01;31
.zip 01;31
.z 01;31
.Z 01;31
.gz 01;31
Las secuencias de escape dadas en parámetros aquí poseen exactamente la
misma sintaxis que para el comando setterm
. Modifique esto a su gusto y
verá el resultado ejecutando un ls
en /sbin
, /etc
o
/etc/dev
.
Con el fin de que el fichero /etc/DIR_COLORS
o ~/.dir_colors
sea tomado en cuenta es necesario añadir en /etc/profile
o
~/.profile
(sh/bash
) o /etc/csh.login
o
~/.login
(csh/tcsh
) la línea:
eval '/bin/dircolors'
ATENCIÓN: Esta línea debe ser colocada antes de cualquier definición de alias
para el comando ls. Este comando lee el fichero /etc/DIR_COLORS
o
~/.dir_colors
y une las variables de entorno LS_COLORS
y
LS_OPTIONS
así como los alias ls, dir, vdir, d
y v
.
Esto es realizado individualmente para cada consola virtual con la ayuda de la secuencia ANSI. (Esta información ha sido encontrada estudiando el código fuente del núcleo. No puedo decir que se trate de un estándar.)
ESC [8]
que especifica los valores por defecto de colores foreground
y
background
. La secuencia ANSI de recomposición de atributos,
ESC[m
, permite entonces tener en cuenta esos colores antes que el
blanco sobre fondo negro.
El método descrito aquí se ha supuesto para sistemas aislados, donde los
accesos se hacen sólo en la consola. Esto no funciona para logins
realizados desde terminales remotos, conexiones por módem o desde otras
máquinas, ya que no interpretarían las secuencias. La interpretación de
códigos ANSI es una propiedad de las consolas Linux y que sólo existe en
pocos programas de terminal.
Si se encuentra en un sistema aislado, un buen medio de tener en cuenta
los colores para cada consola es la de modificar el fichero
/etc/issue
, y ver el resultado generado. Generalmente (y en
particular en las distribuciones Slackware) este fichero es leído y
mostrado en cada inicialización del sistema. Así si su
/etc/rc.d/rc.S
contiene (alrededor de la línea 75):
# Inicializa /etc/issue y etc/motd para dar la version del nucleo usado
# ATENCION: los ficheros /etc/issue y /etc/motd son creados en cada inicio
# Ponga esto en comentario si desea personalizar para siempre todos
# estos ficheros.
echo "">/etc/issue
echo Bienvenido al mundo maravilloso de Linux \
'/bin/uname -a | /bin/cut -d\ -f3'.>>/etc/issue
echo >> /etc/issue
Coloque estas líneas en comentario o modifíquelas como sigue:
# Ponga esto en comentario si desea personalizar para siempre todos
# estos ficheros.
ESCAPE="<sustituir esto por un solo caracter de escape>"
echo "${ESCAPE}[H${ESCAPE}[37;44m${ESCAPE}[8]${ESCAPE}[2J">/etc/issue
Mi shell de arranque no entiende el \033
, debo especificar el código ASCII 27
en mi script como indiqué en el primer párrafo. La línea posee el aspecto:
ESCAPE="^[".
Este código tiene por objeto colocar el cursor al principio de la ventana, cambiar los colores, salvar la selección y borrar la pantalla. Dicha modificación solo tendrá efecto al reinicializar la máquina.
Si su máquina Linux no está aislada, puede que aparezcan diversos problemas en las conexiones con usuarios remotos. Esto es debido al hecho de que su terminal no interpreta las secuencias de escape ANSI.
Debe entonces ajustar a nivel de usuario:
if ["\*(dRTERM"="console"]; then
echo "\033[37;44m\033[8]"
fi
o bien,
if ("\*(dRTERM"=="console") then
echo "\033[37;44m\033[8]"
endif
Si se desea que la modificación afecte a todos los usuarios del sistema,
basta tan sólo con que el root
modifique los ficheros
/etc/profile
o /etc/csh.login
. (Reitero una vez más que
si el shell no puede interpretar los \0xx
, en particular el
código \033
, basta con sustituir este ultimo por "ESC
".
Esta versión bajo copyright (c)1995 es propiedad de Pierre Vassellerie.
Como todo documento HOWTO
N del T: COMOs, este documento puede ser reproducido y distribuido en su integridad o en parte, por cualquier medio físico. A pesar de todo queda sujeto a las condiciones siguientes:
Pueden ser acordadas excepciones a estas reglas con fines educativos; escriba al autor y pregunte. Estas restricciones tiene como único objetivo proteger a los autores y su trabajo. Toda aportación educativa a este documento será valorada positivamente.
Este documento ha sido traducido por Tomás Hidalgo Salvador para el grupo de usuarios de Linux INSFLUG coordinado por Francisco José Montilla.
Dicha traducción se encuentra amparada por los mismos derechos expresados en la sección copyright .
Tomás Hidalgo Salvador, thidalgo@alboran.ualm.es
El INSFLUG forma parte del grupo internacional Linux Documentation Project, encargándose de las traducciones al castellano de los Howtos (Comos), así como la producción de documentos originales en aquellos casos en los que no existe análogo en inglés.
En el INSFLUG se orienta preferentemente a la traducción de documentos
breves, como los COMOs y PUFs (Preguntas de
Uso Frecuente, las FAQs. :)
), etc.
Diríjase a la sede del INSFLUG para más información al respecto.
En la sede del INSFLUG encontrará siempre las últimas versiones
de las traducciones:
www.insflug.org
. Asegúrese de comprobar cuál es la última versión
disponible en el Insflug antes de bajar un documento de un servidor réplica.
Se proporciona también una lista de los servidores réplica (mirror) del Insflug más cercanos a Vd., e información relativa a otros recursos en castellano.
Francisco José Montilla,
pacopepe@insflug.org
.