Lär dig Linux 101: Installera och konfigurera X11

Konfigurationsfilen för X Window

I X:s tidiga dagar innebar konfigurering av en bildskärm att man måste ha omfattande kunskaper om bildskärmens kapacitet och kunna uttrycka information om inte bara upplösning, utan även horisontella och vertikala synkroniseringsvärden, färgdjup och så vidare. Sedan VESA (Video Electronics Standards Association) och DDC-protokollen (Display Data Channel), som gör det möjligt för en bildskärm att kommunicera dessa möjligheter till ett grafikkort och därmed till en dator, har konfigurationen blivit mycket mer automatisk. Detta är bra eftersom vi nu förväntar oss att kunna ta med oss vår bärbara dator var som helst och bara koppla in en tillgänglig extern bildskärm eller projektor.

Konfigureringen av musen, styrbollen eller tangentbordet har också blivit mer automatisk. I allmänhet är det bara att koppla in enheten, ofta via en USB-anslutning, och så fungerar den.

Som med det mesta i Linux finns det dock en underliggande konfigurationsmekanism som du kan använda. Faktum är att Xorg-implementationen av X får konfigurationsinformation från flera källor. Den huvudsakliga konfigurationsfilen är xorg.conf, tillsammans med filer som inkluderas från katalogen xorg.conf.d. Dessa finns vanligtvis i /etc/X11. Ytterligare konfiguration kan komma från kommandoradsalternativ, miljövariabler, automatisk identifiering och fallback-defaults.

Konfigurationsfilen xorg.conf och filerna i katalogen xorg.conf.d är organiserade i sektioner som kan anges i valfri ordning. Det allmänna sektionsformatet visas i Listing 1.

Listing 1. Sektionslayout i xorg.conf

 Section "SectionName" SectionEntry ... EndSection

Visa merVisa mer ikon

Xorg med alternativet -configure. Kommandot Xorg är egentligen en symbolisk länk från kommandot X som vanligtvis ligger i /usr/bin. Du måste köra kommandot Xorg som root och se till att ingen X-server körs. Ett sätt att göra detta är att redigera din GRUB2-stanza för att starta upp i fleranvändarläge utan X. Traditionellt sett är detta runlevel 3. Redigera helt enkelt det startmenyinlägg som du vill starta upp och lägg till en 3 i slutet av linjen `linux boot/vmlinuz…’ som illustreras i figur 2.

Figur 2. Uppstart i fleranvändarläge utan X

Om du använder systemd kan du använda systemd.unit=multi-user.target istället för 3.

Xorg -configure laddar tillgängliga enhetsdrivrutiner och prover för hårdvara. Det fungerar på många system, men har problem på vissa system enligt man-sidan. Fedora-dokumentationen rekommenderar att du använder displayen :1 istället för standarddisplayen :0, så du kan prova Xorg :1 -configure om vanlig Xorg -configure inte fungerar.

En exempelfil som genereras med den här metoden på mitt openSUSE Tumbleweed-system visas i Listing 2.

Listing 2. Exempel xorg.conf

Antagen att din bildskärm stöder DDC, vilket de flesta moderna bildskärmar gör, kan du använda kommandot xrandr för att fråga efter dess kapacitet. Listing 4 visar drm-informationen för en bärbar dator med en ansluten skärm och motsvarande utdata från xrandr.

Listing 4. Användning av xrandr för att bestämma bildskärmens kapacitet

XkbVariant definierar vilka varianter av de två layouterna som ska användas. När det gäller us-layouten används dess standardvariant. I fallet med sk-layouten används dess qwerty-variant. Alternativet XkbOptions anger att användare kan växla mellan layouter med hjälp av CapsLock-tangenten.

Lista 5. Uppdatering av tangentbordskonfigurationen

localectl. localectl status visar dock att dessa ändringar plockades upp när systemet startades om, vilket visas i Listing 6.

Listing 6. Visar tangentbordsstatus med localectl

Displayhanterare kan delas in i tre allmänna kategorier.

  1. Tiling window managers delar upp skärmen i rutor och skriver varje ruta separat från andra. Prestandan är i allmänhet god.
  2. Stacking window mangers staplar enskilda fönster på skärmen i en lista som kallas Z-ordning. När ett nytt fönster får fokus placeras det överst i Z-ordningen och alla lägre fönster ritas om. Detta kan vara långsamt, särskilt vid mindre ändringar, men flera optimeringar har utvecklats.
  3. Compositing window managers är vanligtvis staplings window managers som behåller en buffert för varje fönster och sedan kombinerar dem till en enda buffert för visning utan att behöva rita om varje enskilt fönster och sedan skriva över det med det nästa högre i Z-ordningen. Detta möjliggör också effekter som transparens.

Figur 3 visar ett exempel på I3 tiling window manager. Du börjar med ett tomt skrivbord och skapar sedan ett fönster, till exempel ett terminalfönster. Detta upptar hela skärmen. Du kan sedan öppna ett annat fönster som delar det ursprungliga kaklet i två. Om du sedan öppnar ytterligare ett fönster delas skärmen upp i tre kakelplattor. Du kan välja att skapa nya kakelrutor horisontellt eller vertikalt. I det här exemplet valde jag att dela den ursprungliga mittersta brickan med sudoku-spelet vertikalt för att skapa ytterligare ett litet terminalfönster. Sedan delade jag det horisontellt för att lägga till ett xlcock-fönster.

Figur 3. Fönsterhanteraren I3 tiling window manager

Du kan vanligtvis flytta fönster mellan virtuella skrivbord, vilket är till stor hjälp om du har flera stora fönster öppna.

Du kan öppna listan över tillgängliga program som en meny över skärmens ovankant och välja program genom långsam horisontell bläddring eller snabbare genom att skriva en del av eller hela namnet, till exempel ”xclock”.

I motsats till fönsterhanterare med kakelformat kan du med staplade fönsterhanterare ha fönster av alla storlekar som stöds av skärmen, inklusive fönster som kan överlappa skärmens kant. Figur 4 är ett exempel på Openbox stacking window manager som visar fyra överlappande fönster och menyn som gör att du kan öppna nya program.

Figur 4. Openbox staplande fönsterhanterare

Basiska staplande fönsterhanterare fungerar enligt principen att alla fönster på skärmen ritas om när fönstret med fokus ändras eller flyttas, stängs eller ändras i storlek. Detta kan resultera i flera omskrivningar av olika delar av skärmen när hela Z-ordningen bearbetas. Algoritmer kan användas för att minimera mängden onödiga omskrivningar.

En förbättring av den grundläggande staplingsidén är en compositing window manager. En sådan fönsterhanterare håller en buffert av innehållet i varje fönster och sammanfogar eller kompositerar dessa till ett enda fönster. Endast de uppdaterade delarna behöver sedan skrivas till bildskärmskortets buffert. Compiz är ett exempel på en komponerande fönsterhanterare, medan skrivbordsmiljöer som KDE och GNOME också använder komponerande fönsterhanterare.

En skrivbordsmiljö ger i allmänhet en fullfjädrad användarupplevelse, inklusive saker som en grafisk inloggningshälsning, grafiska systemmenyer, en bricka för att visa widgetar som t.ex. tid på dygnet, ikoner för öppna program, och så vidare. En uppsättning integrerade program ger vanligtvis en enhetlig upplevelse för användaren. De flesta fönsterhanterare är mycket lättare än en fullständig skrivbordsmiljö.

Figur 5 illustrerar begreppet transparens i en sammansatt fönsterhanterare eller skrivbordsmiljö. Håll ner vänster musknapp (knapp 1) på terminalfönstrets titellista när du förbereder dig för att flytta det. Displayen ändras för att visa vilka fönster som finns under det aktuella området. Detta kan hjälpa dig att flytta ett fönster från att ligga ovanpå ett annat när du vill att båda ska vara synliga.

Figur 5. Transparens med KDE Plasma desktop

Figur 6 illustrerar GNOME 3.28 på Fedora. Genom att klicka på knappen Aktiviteter uppe till vänster på den här skärmen öppnas en ikoniserad lista över favoriter på den vänstra sidan av skärmen och visar en uppsättning pågående program som små fönster. Du kan klicka på en favorit, klicka på ett litet fönster eller använda sökrutan högst upp på skärmen för att söka efter ett program. I just det här exemplet har jag klickat på dag och tid i den övre listen för att öppna en widget som visar vissa meddelanden, t.ex. tillgängliga uppdateringar eller senast utförda kommando, samt ytterligare information om datum och tid. Ikonerna uppe till höger ger tillgång till funktioner som högtalarvolym, nätverksinställningar, tillgänglighetsalternativ och alternativ för avstängning, utloggning eller omstart.

Figur 6. Fedora GNOME-aktiviteter och widgets

Jag nämnde att skrivbordsmiljöer ofta innehåller integrerade program som hjälper dig att hantera olika aspekter av skrivbordet eller systemet. Figur 7 visar inställningsdialogrutan Fedora GNOME 3.28 som är öppen vid bildskärmsinställningarna. Exemplet är från en bärbar dator med en extern Viewsonic-skärm. Vanliga val i det här fallet är att sammanfoga de två skärmarna till en enda bildskärm eller att spegla innehållet på den ena skärmen till den andra. I det här fallet väljer vi att sammanfoga de två skärmarna med den inbyggda skärmen logiskt till höger om den externa skärmen.

Figur 7. Dialogrutan Fedora GNOME Screen Settings

Som du kan ändra skärmupplösningen i filen xorg.conf kan du också säga åt kompositorn att skala fönstret till antingen 100 % eller 200 %. Tillgänglig skalning kan bero på bildskärmens storlek samt det särskilda skrivbordet du använder. Jag har också en UHD-skärm (4K) och ögon som inte kan läsa den mycket lilla ursprungliga textupplösningen. Så på den monitorn använder jag ofta en skalningsfaktor på 200 %.

Bemärk att ändringar som görs med hjälp av GNOME-inställningarna inte uppdaterar xorg.conf. Istället sparas dessa inställningar i filen .config/monitors.xml i din hemkatalog. GNOME upprätthåller även andra inställningar för bildskärmar och tangentbord i databasen dconf som du också hittar under din hemkatalog. Genom att ha dessa inställningar i din hemkatalog gäller de bara dig. Andra användare kan ha andra inställningar.

Om du har flera skrivbordsmiljöer eller fönsterhanterare installerade kanske du undrar hur du väljer mellan dem. Du kan starta upp i fleranvändarläget som beskrivs tidigare i den här handledningen och sedan köra ett kommando som startx för att starta X med lämplig manager. Om du har en skrivbordsmiljö som GNOME som tillhandahåller en hälsningsfönster, kommer du förmodligen att ha ett inställningsalternativ på skärmen för hälsningsfönster. Figur 8 visar de valmöjligheter som är installerade på mitt Fedora 28-system.

Figur 8. Fedora GNOME 3 hälsningsskärm med WM-val

Hantera åtkomst till X-servern och visa program på distans

Sedan tidigare har du sett exempel på X som körs på en skrivbordsdator med en, eller kanske två, bildskärmar. En X-server behandlar en enda bildskärm som en samling bildskärmar som delar en gemensam uppsättning inmatningsenheter.

Så den bärbara dator som visas i figur 7 har en bildskärm, även om den har den inbyggda bildskärmen och en extern bildskärm. I det här exemplet fungerar de två bildskärmarna som om de vore sammanfogade. Detta ger en enda logisk skärm som gör att fönster kan flyttas mellan monitorer, eller till och med delas upp mellan dem. System med flera användare har vanligtvis flera skärmar så du behöver ett sätt att beskriva dem.

X använder ett tredelat namn för skärmar av formen hostname:displaynumber.screennumber där hostname är datorns värddatornamn, displaynumber är ett nummer som börjar vid 0 och som beskriver den särskilda skärmen, och screennumber gäller om två eller flera skärmar behandlas som separata skärmar i stället för som en enda logisk skärm. Både hostname och screennumber kan utelämnas, så den vanligaste display-notationen du kommer att se är :0. Du kan se din nuvarande inställning i miljövariabeln DISPLAY som visas i Listing 7.

Listing 7. Miljövariabeln DISPLAY

ian@attic5-u18:~$ echo $DISPLAY:0

Visa merVisa mer ikon

DISPLAY kan vilken användare som helst skriva utdata på skärmen, men X har vissa begränsningar för åtkomstkontroll. Jag kommer att visa dig tre sätt att ansluta till en X-server.

  1. Använd ssh med X forwarding
  2. Använd Xauthority och xauth
  3. Använd värd- eller användarkontroll med xhost

Det säkraste sättet att använda X på en annan bildskärm är att använda X forwarding (ibland kallad tunnling). Detta måste vara aktiverat på SSH-servern som du ansluter till med raden X11Forwarding yes i konfigurationsfilen /etc/ssh/sshd_config. Du måste också aktivera det på klienten genom att ange alternativet -X (det är stort X) i ditt ssh-kommando. Listing 8 jämför vad som händer om jag använder su - jane för att byta till användaren jane på mitt system och sedan använder ssh -X jane@localhost. I båda fallen försöker jag köra kommandot xclock för att visa en liten klocka på min skärm.

Lista 8. X forwarding

DISPLAY inställd på localhost:10.0. Sshd-servern skapar i själva verket en X-server åt dig på målsystemet. Du vill inte att detta ska störa eventuella riktiga X-servrar på systemet. Konfigurationsfilen, /etc/ssh/sshd_config, innehåller därför en rad X11DisplayOffset 10 för att ange startoffset (från 0) för X-servrar över ssh. Standardvärdet är 10, vilket vanligtvis är tillräckligt för en arbetsstation med en enda användare, men kan behöva ökas i ett system med flera användare. En andra ssh-anslutning till servern skulle tilldelas display 11 och så vidare.

Den andra metoden för att göra det möjligt för andra att ansluta till en X-server är Xauthority-metoden. Xauthority-filen innehåller auktoriseringsinformation som används när du ansluter till en X-server. Miljövariabeln XAUTHORITY anger namnet på den fil som för närvarande används, antingen en systemgenererad fil som /run/user/1000/gdm/Xauthority på mitt Ubuntu 18-system eller din egen .Xauthority-fil.

Använd kommandot xauth för att lista, extrahera eller lägga in nya auktoriteter. använd alternativet -f för att ange en annan Xauthority-fil än den i din XAUTHORITY miljövariabel. Du kan ange xauth-kommandon på kommandoraden, eller starta det och använda kommandona inifrån programmet. Listing 9 visar några exempel och extraherar min auktorisering för display :0 till en fil som heter auth-ian.

Listing 9. Extraktion av behörighetsinformation med hjälp av xauth

XAUTHORITY. Användaren jane kan sedan visa program på min skärm.

Lista 10. Sammanfogning av behörighetsinformation med hjälp av xauth

xhost. På en arbetsstation kan du mycket väl använda detta för att kunna öppna grafiska program medan du kör som en annan användare. Kommandot xhost utan alternativ visar den aktuella åtkomstkontrollistan. Använd alternativet + med ett namn för att tillåta ytterligare system eller användare. Listing 11 visar hur man lägger till användaren john på mitt lokala system i åtkomstkontrollistan och visar sedan att användaren john öppnar det grafiska programmet xclock.

Listing 11. Användning av xhost för att aktivera en enda lokal användare

xhost +local: som visas i Listing 12. Observera kolonet (:) i slutet av local.

Lista 12. Användning av xhost för att aktivera alla lokala användare utan nätverk

– i stället för + för att ta bort poster som du har aktiverat. Se xhost man- eller infosidorna för ytterligare alternativ.

För säkerhetens skull bör du använda SSH-tunnling eller eventuellt en annan lösning som Virtual Network Computing (VNC) i stället för xauth eller xhost. VNC ligger utanför den här handledningen men ger bättre prestanda än SSH-tunnling.

När det går fel

Med så många möjliga källor till X-konfigurationsinformation måste du veta var du ska leta efter logginformation. Fel som rör din individuella X-session kan finnas i .xsession-errors eller möjligen .xsession-errors-:0 i din hemkatalog. Suffixet :0 är för fel på displayen :0.

Den huvudsakliga X-loggen finns i /var/log. Namnet är vanligtvis /var/log/Xorg.0.log, där 0 är ditt visningsnummer. Numret kommer att vara annorlunda om du inte använder display :0.

Wayland, en ny fönsterhanterare för kompositering

Nyligen har en ny displayserver och ett nytt protokoll för kompositering som kallas Wayland utvecklats. I denna modell tillämpningar, skapa sitt fönsterinnehåll själva i en buffert utanför skärmen. Kompositören och servern är integrerade. Avsikten med Wayland är att tillhandahålla en enklare och effektivare lösning än X. Wayland återanvänder mestadels befintliga drivrutiner och infrastruktur vilket gör projektet möjligt.

I motsats till X har Wayland inte en nätverksgenomskinlig konstruktion. Andra lösningar som VNC kan användas om fjärrfönstervisning behövs.

Weston är en referenskompositör som implementerar Wayland. GNOME, KDE, Enlightenment och flera andra fönsterhanterare har nu stöd för Wayland. Verktygssatser som Qt 5 och GTK+ har också stöd för Wayland. I skrivande stund (december 2018) levereras både Fedora och Ubuntu med Wayland som standardskärmserver.

Xorg-servern innehåller nu XWayland som gör det möjligt för befintliga X-applikationer att köras med en Wayland-kompositor.

De flesta nuvarande implementationer har fortfarande ett val att köra antingen X eller Wayland för varje session. Se figur 7 för ett exempel på hur GMS-meddelandet låter dig välja sessionstyp. På Fedora är standardinställningen att köra GNOME på Wayland.

Du kan också kontrollera vid körning utan att behöva logga in. Om du kör Wayland kommer miljövariabeln WAYLAND_DISPLAY att vara inställd. På system som använder systemd kan du använda kommandot loginctl för att bestämma ditt inloggningssessionsnummer och sedan använda det igen för att bestämma din sessionstyp. Listning 13 visar dessa verktyg, först på ett Fedora 28-system som använder Wayland och sedan på ett Ubuntu 18-system som kör Xorg.

Listning 13. Bestämma om du använder X eller Wayland

Lämna ett svar

Din e-postadress kommer inte publiceras.