  I colori sui terminali Linux
  Thorbjrn Ravn Andersen, ravn@dit.ou.dk
  $Date: 1996/04/27 16:56:15 $

  La maggior parte delle distribuzioni Linux hanno un comando 'ls' che
  permette l'uso dei colori, e spesso  preferibile avere colori diversi
  da quelli di default, anche se pu risultare un compito non banale.
  Questo documento spiega i vari aspetti del problema, i metodi per mod
  ificare i colori cambiando la configurazione del software esistente,
  ed indica del software alternativo non incluso nella Slackware.  La
  versione in HTML  disponibile anche da: il mio sorgente
  <http://www.dit.ou.dk/~ravn/colour-ls>.

  1.  Introduzione

  La maggior parte delle distribuzioni Linux hanno un comando 'ls' che
  permette l'uso dei colori, e spesso  preferibile avere colori diversi
  da quelli di default, anche se pu risultare un compito non banale.
  Questo documento spiega i vari aspetti del problema, i metodi per
  modificare i colori cambiando la configurazione del software
  esistente, ed indica del software alternativo non incluso nella
  Slackware.

  Questa versione  stata modificata in modo sostanziale rispetto al
  documento iniziale, e comprende anche informazioni sugli xterm e su
  come apportare alcune modifiche al kernel.

  Le informazioni contenute qui sono state compilate in origine con la
  versione 2.0.2 della Slackware, e con il kernel 1.1.54. Le
  informazioni sulle modifiche del kernel sono state prese dalla
  slackware 2.2.0 con il kernel 1.2.13 e tcsh come shell di default.

  2.  Colori tra cui si pu scegliere

  Questo shell script (grazie a tutti quelli che mi hanno mandato
  versioni per bash) mostra tutte le combinazioni standard di colori
  sulla console corrente. Se non appare nessun colore, la console non
  permette l'uso della selezione di colori ANSI.

       #!/bin/bash
       # Mostra i colori ANSI
       #
       esc="\033["
       echo -e "\t  40\t   41\t   42\t    43\t      44       45\t46\t 47"
       for fore in 30 31 32 33 34 35 36 37; do
         line1="$fore  "
         line2="    "
         for back in 40 41 42 43 44 45 46 47; do
           line1="${line1}${esc}${back};${fore}m Normal  ${esc}0m"
           line2="${line2}${esc}${back};${fore};1m Bold    ${esc}0m"
         done
         echo -e "$line1\n$line2"
       done

  Il colore del primo piano viene elencato a sinistra, e il colore di
  sfondo nella casella. Se volete caratteri pi evidenti aggiungete un
  "1" ai parametri; ad esempio blu su bianco sar "30;40;1". La sequenza
  completa di selezione ANSI  cos

  ESC [ 3 0 ; 4 0 ; 1 m

  Nota: Allo stato attuale lo sfondo non pu essere del tipo evidente,
  quindi non potete avere il giallo (marrone evidente) tranne che per il
  primo piano. E' una limitazione dovuta all'hardware.

  3.  Configurazione dei colori su ls

  La configurazione standard della Slackware crea la variabile di
  ambiente LS_COLORS dal file

  $HOME/.dir_colors

  come standard di sistema di riserva. Il file LS_COLORS  una cosa del
  genere:

       LS_COLORS=:no=00:fi=00:di=01:ln=01;36:*.xbm=01;35:*.xpm=01;35:*.tif=01;35:..

  Se volete una configurazione diversa da quella standard, copiate il
  file /etc/DIR_COLORS in

  $HOME/.dir_colors

  I colori tra cui scegliere si possono vedere con lo script riportato
  sopra.  Usate

         eval `dircolors -t` # configura le variabili di colore

  per ricalcolare LS_COLORS con tcsh. Per i dettagli guardate
  dircolors(1).

  Nota: se usate 'ls' di una versione della Slackware precedente alla
  2.2, dovreste aggiornarla. E' bacata.

  4.  Configurazione di un default diverso da bianco+nero.

  Dovrete dire al codice del driver del terminale che vi serve un altro
  default. Non c' un modo standard per farlo, ma nel caso di Linux
  potete usare il programma setterm.

  "setterm" usa le informazioni nel database del terminale per impostare
  gli attributi. Le selezioni vengono fatte cos:

       setterm -foreground black -background white -store

  dove lo "-store" rende la selezione fatta default anche per la console
  corrente. Questo metodo richiede che il terminale corrente (la
  variabile d'ambiente TERM) sia "abbastanza ben" descritta nel database
  di termcap. Se siete sfortunati, ecco i dettagli pi macabri:

  4.1.  Xterm

  Usate uno di questi comandi:

       xterm -fg white -bg blue4
       color_xterm -fg white -bg blue4

  dove 'color_xterm' rende possibile l'uso di 'ls'. Questa particolare
  scelta somiglia ai colori usati su un SGI.

  4.2.  La console virtuale

  Potete modificare il kernel una volta per tutte, fornendo anche un
  default di avvio per le console virtuali con una sequenza di escape.
  Vi consiglio fortemente la patch per il kernel se ne avete compilato
  uno da soli.

  Il file di sorgente del kernel 
  /usr/src/linux/drivers/char/console.c; dovete modificare intorno alla
  linea 1800, cambiando

               def_color       = 0x07;   /* bianco */
               ulcolor         = 0x0f;   /* bianco evidente */
               halfcolor       = 0x08;   /* grigio */

  come pi appropriato. Io uso bianco su blu con

               def_color       = 0x17;   /* bianco */
               ulcolor         = 0x1f;   /* bianco evidente */
               halfcolor       = 0x18;   /* grigio */

  I numeri sono i codici di attributo usati dalla scheda video: la cifra
  pi significativa (l' "1" nei colori)  lo sfondo; la cifra meno
  significativa  il primo piano. 0 = nero, 1 = blu, 2 = verde, 3 =
  cyan, 4 = rosso, 5 = rosa, 6 = marrone/giallo, 7 = bianco.
  Aggiungeteci 8 per avete colori pi luminosi. Notate che, nella
  maggior parte dei casi, uno sfondo luminoso == caratteri che
  lampeggiano e sfondo opaco. (From sjlam1@mda023.cc.monash.edu.au).

  Potete anche fornire un nuovo default di avvio per una console
  virtuale, sulla base dello schermo con la sequenza ANSI non standard
  (che si trova ricercando nei sorgenti del kernel)

               ESC [ 8 ]

  che imposta come default i colori di sfondo e di primo piano correnti.
  Poi, la stringa degli Attributi di Reset (ESC [ m) imposta questi
  colori al posto del bianco su nero.

  In realt dovrete visualizzare questa stringa sulla console ogni volta
  che riavviate il sistema. A seconda di come usate la vostra macchina
  Linux, potete fare in diversi modi:

  4.2.1.  /etc/issue

  Qui  dove viene mostrato il "Benvenuti in Linux xx.yy" nella
  Slackware, ed  una buona scelta per macchine stand-alone (e
  probabilmente  da evitare come la peste per gli utenti che si
  collegano con rlogin). Questo file viene creato da /etc/rc.d/rc.S
  all'avvio, e dovreste modificare (circa alla linea 75)

         echo ""> /etc/issue
         echo Benvenuti su Linux `/bin/uname -a | /bin/cut -d\  -f3`. >>
       /etc/issue

  to

         ESCAPE="<sostituire con un singolo carattere di escape>"
         echo "${ESCAPE}[H${ESCAPE}[37;44m${ESCAPE}[8]${ESCAPE}[2J"> /etc/issue
         echo Welcome to Linux `/bin/uname -a | /bin/cut -d\  -f3`. >> /etc/issue

  Questo codice porter il cursore in alto a sinistra, imposter il
  colore (qui  bianco su blu), salver questa scelta e ripulir il
  resto dello schermo. Le modifiche hanno effetto dopo il riavviamento
  seguente.  Ricordate di inserire il carattere di escape _letterale_
  nel file con C-q in emacs o con control-v in vi, dato che
  apparentemente la sh usata per l'esecuzione di questo script non
  capisce la sintassi /033.

  4.2.2.  /etc/profile or .profile

         if [ "$TERM" = "console" ]; then
             echo "\033[37;44m\033[8]" #
       # or use setterm.
             setterm -foreground white -background blue -store
         fi

  4.2.3.  /etc/login or .login

         if ( "$TERM" == "console" ) then
           echo "\033[37;44m\033[8]"
       # or use setterm.
             setterm -foreground white -background blue -store
         endif

  4.3.  Login remoto

  Dovreste poter usare il programma setterm come  stato mostrato sopra.
  Di nuovo, questo richiede che la macchina remota sappia abbastanza
  cose sul vostro terminale, e che l'emulatore di terminale che fornisce
  il login supporti il colore.

  Se trovate una combinazione che funziona, vorrei averla qui.

  5.  Software

  Tutte le informazioni che sono descritte qui assumono che abbiate
  un'installazione Slackware.  Se avete qualcos'altro (come ad esempio
  una Sun con X o cose del genere) potete prendervi e compilarvi il
  software da soli.

  La versione a colori di 'xterm'  basata sul sorgente standard di
  xterm con una patch disponibile su qualsiasi sito X11R6.

       ftp://ftp.denet.dk/pub/X11/contrib/utilities/color-xterm-R6pl5-patch.gz

  Guardate la doumentazione se usate una versione di X pi vecchia.
  Nota: Io non ci ho provato!

  prep.mit.edu o da uno dei numerosi mirror. Avete bisogno del pacchetto
  e di una patch.

       ftp://ftp.denet.dk/pub/gnu/fileutils-3.12.tar.gz
       ftp://ftp.funet.fi/pub/Linux/sunsite/utils/file/color-ls-3.12.0.3.patch.gz

  Io stesso ho compilato con successo color-ls su Solaris, SunOS e Irix.
  Notate che la patch ha bisogno di una versione recente del programma
  di patch (puntatori al sorgente?) e sar una cosa facilissima fare
  untar e patch su un sistema Linux e poi spostare il sorgente.

  Apprezzerei del feedback su questo testo. Il mio indirizzo e-mail 
  ravn@dit.ou.dk <mailto:ravn@dit.ou.dk>

  ---

  Thorbjrn Ravn Andersen

  Traduzione italiana di Eugenia Franzoni - eugenia@stud.unipg.it

