Användaren för in data och signaler till X genom ett tangentbord och ett pekdon. Vanligtvis är pekdonet en mus med tre knappar. Kommunikationen från X till användaren sker genom bildskärmen. En uppsättning av ett tangentbord och en mus som kontrollerar en eller flera bildskärmar kallas för en display. Om det finns fler än en bildskärm i en display, så behöver skärmarna inte visa samma bild, men de styrs som sagt av samma tangentbord och mus. De flesta displayer har dock bara en bildskärm, som i figur 4.5.
X-klienter har inte tillgång till displayen direkt, utan all kommunikation går via X-servern, ett så kallat systemprogram som kör på den dator displayen är kopplad till. Servern avläser signaler från tangentbord och mus och förmedlar dem till klienterna, och på begäran från klienterna ritar servern fönster och annan grafik på bildskärmen via grafikkortet.
X tillåter att man har flera displayer kopplade till en och samma dator. Man måste i så fall köra en separat X-server för varje display. Då varje display kräver sitt eget tangentbord och sin egen mus är det ovanligt att datorer har mer än en display. Men liksom en enda terminal kan tjäna som flera virtuella terminaler som man växlar mellan genom att trycka Ctrl och Alt samt någon av tangenterna F1 till F6, kan man också ha flera virtuella displayer som man växlar mellan genom att trycka Ctrl och Alt samt någon av tangenterna F7, F8 osv. Det krävs mycket minne för att datorn ska kunna hantera flera virtuella displayer. Den första displayen på den lokala datorn heter :0 (dvs ett kolon följt av siffran noll). Den andra displayen heter :1, den tredje :2 osv. Återigen bör vi poängtera att man oftast bara har en display per dator, och att den heter :0. Om mer än en bildskärm är kopplad till samma display, så skiljer man på de olika skärmarna genom att ange en punkt och skärmens nummer efter diplayens namn. Den första skärmen har nummer noll, den andra har nummer ett osv. Den andra bildskärmen på tredje displayen heter alltså :2.1. Om man utelämnar bildskärmens nummer, och skriver tex :2, så förutsätts det att man menar bildskärm nummer noll. Om man vill referera till en display som finns på en annan dator än den lokala, så anger man bara datorns namn eller IP-nummer före kolonet, tex fasolt:0 eller fasolt.turangalila.se:2.1 eller 192.168.1.1:0.0.
För att starta en X-server på (den virtuella) displayen :1 ska man från en virtuell terminal ge kommandot startx - :1 eller tex X -indirect localhost :1 -bpp 16.
X är ett nätverksbaserat fönstersystem. Klienterna kan köra på en annan dator än den som servern kör på och som bildskärmen är kopplad till. Under X kan man köra några klienter lokalt (dvs på den dator man sitter vid och som servern kör på), och andra klienter på flera andra datorer om man så vill. Klienterna utnyttjar då datorkraft från de andra datorerna, medan själva bilden som klienterna visar upp skickas till den egna bildskärmen. Kommunikationen mellan klienterna och servern går över nätverket, i ett slags språk (kallat för X-protokollet) som är oberoende av datorarkitektur och operativsystem. Så det har ingen betydelse vilken slags dator klienterna kör på; en X-klient på tex en Sun-dator kan visa sin bild på en Linuxdator och vice versa. Användaren behöver inte vara medveten om att vissa program kör på en avlägsen dator, man kan inte se någon skillnad jämfört med om de kör lokalt. Inte heller behöver programmen ''vara medvetna om'' att deras bild visas på en annan dator. Därför kan det sägas att X är integrerat med nätverket på ett genomskinligt sätt.
I figur 4.6 sitter jag vid datorn fafner. Jag kör en X-klient lokalt (fönster A). Dessutom kör jag ett X-program på fasolt, och detta program har instruerats att visa sin bild på displayen fafner:0 (fönster B). Vilken användare som helst på vilken dator som helst på nätverket, inklusive Internet, kan starta en X-klient på min display ifall jag tillåter det. Omfattande säkerhetsanordningar finns dock inbyggda i X för att skydda användare från obehöriga intrång.
Det enklaste och i särklass bästa sättet
att köra X över nätverket är att
från den dator man sitter vid
(låt oss anta att den heter fafner)
logga in på
den andra datorn (vi antar att den heter fasolt)
med programmet ssh.
Därefter kan man starta X-klienter på fasolt,
och bilden hamnar automatiskt på displayen på fafner.$ ssh fasolt -l kobjer
kobjer@fasolt's password:
Last login: Thu Feb 12 00:01:36 1998 from fafner.turangali
Linux fasolt 2.0.31 #1 Sat Nov 1 15:52:35 CET 1997 i586 unknown
$ xclock &
[1] 12636
$Så enkelt var det att logga in som användaren kobjer på
fasolt och starta X-klienten xclock.
Programmet ssh finns inte installerat på
alla datorer, så ibland fungerar inte metoden ovan.
Då tvingas man logga in på fasolt med telnet eller
rlogin. Man bör vara medveten om att
dessa program skickar all information i klartext
över nätverket, så det är lätt för inkräktare att
avlyssna kommunikationen.
I motsats till ssh gör inte telnet och rlogin
automatiskt två nödvändiga inställningar.
Den ena av dessa
inställningar är att fasolt ska instrueras att visa
sin bild på displayen fafner:0.
Detta kan man göra genom att ge kommandot
export DISPLAY=fafner:0 på fasolt
eller genom att använda standardflaggan -display fafner:0
varje gång en X-klient startas på fasolt.
Den andra inställningen är att användaren kobjer på
fasolt måste känna till en hemlig kod för
displayen fafner:0 för att få tillgång till den.
Vi kan ta reda på hur den hemliga koden
ser ut genom att på fafner
ge kommandot xauth list fafner:0.
Efter att ha loggat in på fasolt med telnet
använder vi xauth igen för att överlämna koden till
fasolt:$ xauth list fafner:0
fafner.turangalila.se:0 MIT-MAGIC-COOKIE-1 5f3c426a0e2335427a6f6e3641616761
$ telnet fasolt
fasolt login: kobjer
Lösenord:
Linux fasolt 2.0.31 #1 Sat Nov 1 15:52:35 CET 1997 i586 unknown
$ xauth add fafner:0 . 5f3c426a0e2335427a6f6e3641616761
$ xclock -display fafner:0 &
[1] 12646
$Genom att ta hjälp av X-klippbufferten
slipper man skriva av koden ''för hand''.
Så här går det om man inte för över den hemliga koden:$ rlogin fasolt -l kobjer
Lösenord:
Linux fasolt 2.0.31 #1 Sat Nov 1 15:52:35 CET 1997 i586 unknown
$ xclock -display fafner:0
Xlib: connection to "fafner:0.0" refused by server
Xlib: Invalid MIT-MAGIC-COOKIE-1 key
Error: Can't open display: fafner:0
$
Den hemliga koden lagras i en fil med namnet .Xauthority i ens hemkatalog. I lokala nätverk brukar hemkatalogen vara densamma oberoende av vilken dator man loggar in på, och i så fall slipper man föra över den hemliga koden - den är ju då redan tillgänglig på de andra datorerna.
På datorer som inte heller kan hantera hemliga koder återstår bara den sämsta metoden, nämligen xhost. Den kan bara användas ifall säkerhet inte spelar någon som helst roll. Om jag på fafner ger kommandot xhost +fasolt, så får alla användare på fasolt tillgång till min display. Då kan jag logga in på fasolt och starta mina X-klienter. Därefter bör jag från fafner ge kommandot xhost -fasolt så att inga fler X-klienter kan komma åt min display från fasolt. (Ibland krävs också att man skapar en .rhosts-fil, se man rhosts. Detta är ungefär detsamma som att rulla ut röda mattan för hackers.) Kommandot xhost + ger hela nätverket obegränsad tillgång till den egna displayen, något som dock inte rekommenderas...