Färger på Linux-terminaler

Thorbjørn Ravn Andersen, ravn@dit.ou.dk Svensk översättning av Björn Lindblom bluesboy@linux.nu, November -98 v1.4, 7 August 1997

De flesta Linux-distributioner har ett ’ls’ kommando för att lista innehållet i en katalog och presentera det på ett visuellt bättre sätt genom att använda färger - att konfigurera det på ett bra sätt, är dock inte alltid så lätt. Det här dokumentet förklarar de olika aspekterna och metoderna för att ändra inställningarna genom att konfigurera existerande mjukvara, och ange platser för alternativ mjukvara som vanligtvis inte inkluderas i Slackware eller Redhat och som kan användas i de flesta versioner av Unix. HTML-versionen finns också tillgänglig på min egen

hemsida på <http://www.mip.ou.dk/~ravn/colour-ls>.

Innehåll

1 Introduktion 1

2 Snabbstart för de otåliga 2

3 Har jag allt jag behöver? 2

4 Vilka färger finns det att välja på? 3

5 Hur man konfigurerar färger med ls 3

6 Hur man ändrar standardfärgerna vit-på-svart i textläge 4

6.1 Xterm . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4

6.2 Virtuell konsol. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4

6.2.1 /etc/issue . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5

6.2.2 /etc/profile eller .profile . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5

6.2.3 /etc/login or .login . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5

6.3 ”Remote login” . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5

7 Mjukvara 6

1 Introduktion

På senare år har färgsatta displayer blivit mycket vanliga, och användare har börjat utveckla den här möjligheten med hjälp av program som ger färger för att på detta sätt få en visuell effekt på t.ex. reserverade ord i programmeringsspråk, eller direkt påminnelse om felstavade ord.

Eftersom konsolen i Linux stöder färger, modifierades GNU:s ls-kommando snabbt för att visa färger och detta inkluderades i Slackware fr.o.m version 2.0. Förbättrade versioner av dessa patchar har nu blivit standard i GNU:s distributioner av ls, och numer bör detta finnas i alla nya versioner av Linux.

Den här texten är en uppdatering av det ursprungliga dokumentet, och inkluderar information om xterminaler och hur man ”patchar” kärnan.

Informationen i det här dokumentet har kontrollerats mot Redhat - utgåva 4.1 och kompilerades ursprungligen med hjälp av version 2.0.2 av Slackware med kärna 1.1.54. Informationen om ”patchning” av kärnan gjordes på en maskin med Slackware 2.2.0 och kärnan 1.2.13, med tcsh som standard-skal, och har senare kollats mot en 2.0.27-kärna. Om du använder någon annan konfiguration, eller annan Unix-version, skulle jag uppskatta att du hör av dig med upplysning om ditt operativsystem och version, och om stöd för färger till ls- kommandot finns som standard.

2 Snabbstart för de otåliga

Om du har en ny distribution av Linux, gör följande förändringar till dessa filer i din hemkatalog. De fungerar efter nästa inloggning.

     ~/.bashrc:
         alias ls="ls --color"
     ~/.cshrc:
         alias ls 'ls --color'

Klart!

Du kanske också vill göra en “eval `dircolors $HOME/.colourrc`”, för att få dina egna färger. Den här filen skapas med “dircolors -p >$HOME/.colourrc” och är bra kommenterad så att det är lätt att veta hur man själv kan ändra i filen.

3 Har jag allt jag behöver?

Först av allt måste du känna till om du har en version avls som kan utföra färgsättning på ett riktigt sätt. Testa det här kommandot i en Linux text-konsol (funkar även i xterm):

     % ls --color

(% är prompten i ditt skal) Om du får ett felmeddelande som indikerar att ls inte känner till växeln, behöver du installera en nyare version av GNU:s filtillbehörs-paket. Om du inte har en lämplig uppgraderings- version tillhanda, hämta hem den senaste versionen från din Linux-sida och installera.

Om du inte får ett felmeddelande, har du ett ls som förstår kommandot. Oturligt nog var programmen som medföljde tidiga versioner av Slackware buggiga.ls som medföljer Redhat 4.1, är version 3.13 och den är bra.

     % ls --version
     ls - GNU fileutils-3.13

Om du kör kommandot “ls -- color” på en textbaserad konsol i Linux, skall det ge färgsättning som standard på ditt system, och du kan nu bestämma dig för om du vill ändra på någonting.

Om du kör kommandot i xterm, kanske du inte får någon färgsättning. Som med ls i sig själv, stöder inte xterm-programmet färger för program som körs i xterm-fönster - senare versioner av xterm stöder dock färger. Om ditt xterm inte stöder färger, bör du ladda hem en nyare version - se beskrivning i slutet av det här dokumentet. Under tiden kan du växla till textläge och fortsätta därifrån.

4 Vilka färger finns det att välja på?

Det här skriptet (tack till alla som sänt mig bash-versioner) visar standard uppsättning på färgkombinationer i konsolen. Om inga färger syns, stöder inte konsolen ANSI-färgval.

     #!/bin/bash
     # Visa ANSI-färger.
     #
     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

Förgrundsfärgens nummer listas till vänster och bakgrundsfärgen i rutan. Om du vill ha fetstil, lägger du till ”1” till parametrarna, så klarblå på vit bakgrund blir ”37;44;1”. Hela ANSI-sekvensen blir då

ESC [ 3 7 ; 4 4 ; 1 m

Observera: Bakgrunden kan inte vara i fetstil, så du kan inte ha gul (bold brown) som något annat än förgrund. Detta är en hårdvaru-begränsning.

Färgerna är:
        0 - svart    4 - blå            3# är förgrunden
        1 - röd      5 - magenta        4# är bakgrunden
        2 - grön     6 - cyan
        3 - gul      7 - vit            ;1 är fetstil

5 Hur man konfigurerar färger med ls

Om du vill modifiera standarduppsättningen av färger till ls, behöver du en personlig kopia i din hemkatalog, som du får med kommandot:

      cd ; dircolors -p > .coloursrc

Efter att ha modifierat denna välkommenterade fil, behöver du få den läst till omgivningssträngen LS COLORS. Detta görs vanligtvis med:

     eval `dircolors .colourrc`

Du måste lägga till den här raden i din .bashrc/ .cshrc/ .tcshrc (beroende på vilket skal du kör), för att det skall laddas vid inloggningen. Se manual-sidan för dircolors(1) för detaljer.

6 Hur man ändrar standardfärgerna vit-på-svart i textläge

Du behöver ”tala om för” koden till terminalen att du vill ha en annan default. Det finns inget standardiserat sätt att göra detta på, men i Linux har du setterm-programmet.

”setterm” använder sig av information från terminalens databas för att sätta attributen. Valet görs som

     setterm -foreground black -background white -store

där ”-store”, förutom att ändra färgen gör den nya inställningen till default för nuvarande konsol. Det behövs då att den nuvarande konsolen (TERM enviroment-variabeln) beskrivs ”bra nog” i termcap:s databas. Om setterm av någon anledning inte fungerar - här kommer några alternativ:

6.1 Xterm

En av dessa xterms bör finnas tillgänglig och åtminstone en av dem bör stöda färger.

     xterm -fg white -bg blue4
     color_xterm -fg white -bg blue4
     color-xterm -fg white -bg blue4
     nxterm -fg white -bg blue4

där ’color xterm’ stöder färgversionen av ’ls’. Detta speciella val liknar färgerna som används på en SGI.

6.2 Virtuell konsol.

Du kan modifiera kärnan en gång för alla, likväl som att använda en ”run-time default” för den virtuella konsolen med en escape-sekvens. Jag rekommenderar att modifiera kärnan om du tidigare har kompilerat din egen kärna.

Källfilen till kärnan är /usr/src/linux/drivers/char/console.c på rad 1940, där du skall ändra:

             def_color       = 0x07;   /* white */
             ulcolor         = 0x0f;   /* bold white */
             halfcolor       = 0x08;   /* grey */

Jag använder blå på vit med:

             def_color       = 0x17;   /* white */
             ulcolor         = 0x1f;   /* bold white */
             halfcolor       = 0x18;   /* grey */

Siffrorna är attributkoderna angivna hexadecimalt och som används av grafik-kortet: viktigaste siffran (1:an i exemplet ovan) är bakgrunden - den minst signifikativa är förgrunden. 0 = svart, 1 = blå, 2 = grön, 3 = cyan, 4 = röd, 5 = lila, 6 = brun/gul, 7 = vit. Lägg till 8 för att få ”skarpa” färger. Lägg märke till att, för det mesta, en ljus bakgrund == blinkande bokstäver, dovt färgad bakgrund. (Från sjlam1@mda023.cc.monash.edu.au

<mailto:sjlam1@mda023.cc.monash.edu.au>).

Du kan också fixa så att du kör en viss display på valfri konsol, med en ickestandard-ANSI-sekvens (som du kan hitta om du tittar i koden till kärnan):

             ESC [ 8 ]

som gör att du får standardfärger på för- och bakgrund. Reset Attributes”-strängen (ESC [ m) väljer dessa färger istället för vita bokstäver på svart bakgrund.

Du är tvungen att ”eka” den här strängen till konsolen varje gång du startar om. Beroende på vad du använder din Linux-burk till, kan många olika platser vara lämpliga.

6.2.1 /etc/issue

Det är här som ”Welcome to Linux xx.yy” visas i Slackware, och det här är en bra plats för fristående utrustning (och blir troligtvis en pest för användare som loggar in med telnet). Den här filen skapas vid uppstart (slackware i /etc/rc.d/rc:s - Redhat i /etc/rc.d/rc.local), och du kan modifiera filen med raderna

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

till

       ESCAPE="<Ersätt med ett escape-tecken här>"
       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

Den här koden lägger prompten längst upp till vänster på skärmen, byter skärmfärgen (här vit text på blå bakgrund), sparar det här valet och rensar skärmen från allt övrigt. Modifieringen börjar fungera efter nästa uppstart. Kom ihåg att sätta in escape-tecknet i filen med C-q i Emacs eller Ctrl-v i vi, eftersom skalet som exekverar skriptet inte förstår /033 syntaxen.

6.2.2 /etc/profile eller .profile

       if [ "$TERM" = "console" ]; then
           echo "\033[37;44m\033[8]" #
     # eller använd 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]"
     # eller använd setterm.
           setterm -foreground white -background blue -store
       endif

6.3 ”Remote login”

Du bör kunna använda setterm-programmet som visas här ovan. Åter igen, det här kräver att fjärrmaskinen känner till din terminal, och att terminalemulatorn som sköter inloggningen stöder färg. Enligt min erfarenhet är den bästa vt100-emulatorn som finns tillgänglig för olika plattformar:

• MS-DOS: MS-Kermit (gratis, inte en Microsoft-produkt)

• Windows 95/NT: Kermit/95 (shareware)

• OS/2: Kermit/95 (shareware).Lägg dock märke till att standard-telnet förstår färger och kan modifieras lokalt.

Se <http://www.columbia.edu/kermit/> för detaljer om Kermit.

7 Mjukvara

All information här ovan förutsätter en GNU/Linux-installation. Om du har någon annan (som t.ex. en Sun-maskin som kör X), får du hämta hem och kompilera mjukvaran själv.

”Färgversionen” av xterm baseras på standard-xterm-kod med patchar tillgängliga på alla X11R6-siter. Xterm som distribueras med R6.3 skall enligt ryktet innehålla stöd för färger, men jag har inte testat den versionen.

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

Se dokumentation om du använder en äldre version av X. Obs: Jag har själv inte testat den här.

’ls’ finns i filtillbehörspaketet i GNU och finns att hämta hem från prep.ai.mit.edu eller på en av mirrorsiterna. Ta hem åtminstone version 3.13.

     ftp://ftp.denet.dk/pub/gnu/fileutils-3.XX.tar.gz

Jag har själv lyckats kompilera color-ls på Solaris, SunOS och Irix.

Jag tar gärna emot feedback på den här texten. Min epost-adress är ravn@dit.ou.dk <mailto:ravn@dit.ou.

dk>

–

Thorbjørn Ravn Andersen