1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462
|
I colori sui terminali Linux
Thorbjrn Ravn Andersen, ravn@dit.ou.dk
v1.4, 7 August 1997
La maggior parte delle distribuzioni Linux hanno un comando 'ls' per
elencare il contenuto di una directory, l'output del quale pu essere
migliorato e reso pi chiaro usando colori diversi. Ma configurare
questa possibilit secondo il proprio gusto pu risultare un compito
non banale. Questo documento spiega i vari aspetti del problema, i
metodi per modificare i colori cambiando la configurazione del soft
ware esistente, ed indica del software alternativo non incluso nella
Slackware o nella RedHat, che possa essere usato sulla maggior parte
delle versioni di Unix. La versione in HTML disponibile anche su
<http://www.mip.ou.dk/~ravn/colour-ls>.
1. Introduzione
Negli ultimi anni i monitor a colori sono diventati molto comuni, e
gli utenti stanno cominciando ad usare programmi che usano il colore
per dare una risposta visiva veloce ad esempio delle parole riservate
nei linguaggi di programmazione o per il controllo immediato delle
parole con errori di ortografia.
Dato che la console di testo di Linux permette l'uso dei colori, l'ls
originale della GNU stato prontamente modificato per restituire
informazioni a colori, ed stato incluso nella Slackware intorno alla
versione 2.0. Nella distribuzione standard GNU sono state incluse
queste modifiche migliorandole, e a questo punto dovrebbero fare parte
di tutte le distribuzioni di Linux.
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 testate sulla RedHat 4.1, e
in origine sono state compilate con la versione 2.0.2 della Slackware
e 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, e testate in seguito con un kernel 2.0.27. Se le
usate su un'altra configurazione, o un'altra versione di Unix, mi
farebbe piacere che mi inviaste la vostra configurazione, il sistema
operativo che usate e la sua versione, e se i colori sono disponibili
come standard.
2. Inizio veloce per gli impazienti
Se avete una distribuzione di Linux nuova, apportate queste modifiche
ai file indicati nella vostra home directory. Hanno effetto dopo il
login successivo.
~/.bashrc:
alias ls="ls --color"
~/.cshrc:
alias ls 'ls --color'
Ecco fatto!
Potete anche fare ``eval `dircolors $HOME/.colourrc`'', per avere i
vostri colori personali. Questo file viene creato con dircolors -p
>$HOME/.colourrc'' ed ben commentato per poter essere modificato in
seguito.
3. Ma ce l'ho?
Per prima cosa dovete controllare se avete una versione di ls che sa
come usare i colori in modo corretto. Provate questo comando su una
console di testo di Linux (funziona anche un xterm):
% ls --color
(il % il prompt della shell): Se vi d un messaggio di errore che
dice che ls non capisce l'opzione dovete installare una versione pi
recente del pacchetto fileutils della GNU. Se non avete il pacchetto
di aggiornamento per la vostra distribuzione, prendete i sorgenti dal
mirror GNU pi vicino e installate direttamente da quelli.
Se non vi d un messaggio di errore, avete una versione di ls che
capisce il comando. Sfortunatamente, alcune delle versioni pi vecchie
incluse nella Slackware (e forse altre) erano bacate. L'ls compreso
nella Redhat 4.1 la versione 3.13 che a posto.
% ls --version
ls - GNU fileutils-3.13
Se date il comando ``ls -- color'' su una console di testo di Linux
l'output dovrebbe venire colorato a seconda dei default del sistema, e
potete decidere se volete cambiare qualcosa. Se l'avete dato in un
xterm potete avere visto un qualche cambiamento dei colori oppure no.
Come lo stesso ls, il programma originale per gli xterm non permetteva
l'uso dei colori dai programmi al suo interno, ma le versioni pi
recenti lo fanno. Se la versione che avete non supporta i colori
dovreste cercarne una pi recente come descritto alla fine di questo
documento. Nel frattempo passate ad una console di testo e continuate
da l.
4. Tra quali colori 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 -n " _ _ _ _ _40 _ _ _ 41_ _ _ _42 _ _ _ 43"
echo "_ _ _ 44_ _ _ _45 _ _ _ 46_ _ _ _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 "37;44;1". La sequenza
completa di selezione ANSI cos
ESC [ 3 7 ; 4 4 ; 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.
5. Configurazione dei colori su ls
I colori sono:
0 - nero 4 - blu 3# foreground
1 - rosso 5 - magenta 4# background
2 - verde 6 - ciano
3 - giallo 7 - bianco ;1 grassetto
Se volete modificare le impostazioni standard di ls, vi serve una
copia personale nella vostra home directory, che potete avere con il
comando
cd ; dircolors -p > .coloursrc
Dopo aver modificato questo file, che molto ben commentato, lo
dovete inserire nella variabile d'ambiente LS_COLORS, che di solito si
fa usando
eval `dircolors .colourrc`
Per avviare questo comando ad ogni login dovete metterlo nel vostro
.bashrc/.cshrc/.tcshrc (a seconda della shell che usate). Consultate
la pagina man di dircolors(1) per i dettagli.
6. Modifica della modalit di testo predefinita (bianco su sfondo
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" oltre alla vera modifica pone come default anche per
la console corrente la selezione fatta. Questo metodo richiede che il
terminale corrente (la variabile d'ambiente TERM) sia "abbastanza ben"
descritta nel database di termcap. Se setterm per qualche ragione non
funziona, ecco alcune alternative:
6.1. Xterm
Almeno uno di questi xterm dovrebbe essere disponibile, ed almeno uno
di essi permette l'uso dei colori.
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.
6.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 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 1940, 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 espressi
in esadecimale: la cifra pi significativa (l' "1" nei colori di
esempio qui sopra) 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. (Da
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:
6.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 telnet). Questo file viene creato all'avvio (su
Slackware in /etc/rc.d/rc.S, su Redhat in /etc/rc.d/rc.local), e
dovreste modificare le linee simili a questa:
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.
6.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
6.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
6.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. Per la mia esperienza le migliori
emulazioni di vt100 disponibili al momento per altri tipi di
piattaforma sono:
MS-DOS: MS-Kermit (un prodotto free, non della Microsoft)
Windows 95/NT: Kermit/95 (shareware)
OS/2: Kermit/95 (shareware). Notate per che il telnet
standard riconosce i colori e pu essere configurato localmente.
Per dettagli su Kermit vedere <http://www.columbia.edu/kermit/>.
Se trovate una combinazione che funziona, vorrei averla qui.
7. Software
Tutte le informazioni che sono descritte qui assumono che abbiate
un'installazione GNU/Linux. 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. Si dice che
l'xterm distribuito con la R6.3 abbia il supporto dei colori nativo,
ma io non l'ho ancora provato.
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!
`ls' nel pacchetto di utilit per file della GNU, disponibile da
prep.mit.edu o da uno dei numerosi mirror. Avete bisogno del
pacchetto; prendete almeno la versione 3.13.
ftp://ftp.denet.dk/pub/gnu/fileutils-3.XX.tar.gz
Io stesso ho compilato con successo color-ls su Solaris, SunOS e Irix.
Apprezzerei del feedback su questo testo. Il mio indirizzo e-mail
ravn@dit.ou.dk
--
Thorbjrn Ravn Andersen
Traduzione italiana di Eugenia Franzoni - eugenia@stud.unipg.it
|