Lær Linux 101: Installer og konfigurer X11

Konfigurationsfilen til X Window

I X’s tidlige dage betød konfigurering af en skærm, at man skulle have omfattende viden om skærmens muligheder og kunne udtrykke oplysninger om ikke blot opløsning, men også horisontale og vertikale synkroniseringsværdier, farvedybde osv. Siden fremkomsten af Video Electronics Standards Association (VESA) og Display Data Channel (DDC)-protokollerne, der gør det muligt for en skærm at kommunikere disse muligheder til et grafikkort og dermed til en computer, er konfigurationen blevet meget mere automatisk. Det er heldigt, da vi nu forventer at kunne tage vores bærbare computer med overalt og blot tilslutte en tilgængelig ekstern skærm eller projektor.

Konfigurationen af musen, trackball’en eller tastaturet er også blevet mere automatisk. Generelt skal du bare tilslutte enheden, ofte via en USB-forbindelse, og så virker den.

Som med de fleste ting i Linux er der imidlertid en underliggende konfigurationsmekanisme, som du kan bruge. Faktisk henter Xorg-implementeringen af X konfigurationsoplysninger fra flere kilder. Den vigtigste konfigurationsfil er xorg.conf sammen med filer, der er inkluderet fra mappen xorg.conf.d. Disse er normalt placeret i /etc/X11. Yderligere konfiguration kan komme fra kommandolinjeindstillinger, miljøvariabler, auto-detektion og fallback-defaults.

Konfigurationsfilen xorg.conf og filerne i mappen xorg.conf.d er organiseret i sektioner, som kan angives i vilkårlig rækkefølge. Det generelle sektionsformat er vist i liste 1.

Liste 1. Afsnitlayout i xorg.conf

 Section "SectionName" SectionEntry ... EndSection

Vis mereVis mere ikon

Xorg med indstillingen -configure. Kommandoen Xorg er faktisk et symbolsk link fra kommandoen X, der normalt ligger i /usr/bin. Du skal køre Xorg-kommandoen som root og sikre dig, at der ikke kører nogen X-server. En måde at gøre dette på er at redigere din GRUB2-stanza til at starte op i flerbrugertilstand uden X. Traditionelt er dette runlevel 3. Du skal blot redigere den opstartsmenu-post, som du ønsker at starte op, og tilføje en 3til slutningen af linjen `linux boot/vmlinuz…’ som illustreret i figur 2.

Figur 2. Opstart i flerbrugertilstand uden X

Hvis du bruger systemd, kan du bruge systemd.unit=multi-user.target i stedet for 3.

Xorg -configure indlæser tilgængelige enhedsdrivere og prober for hardware. Det virker på mange systemer, men har problemer på nogle systemer ifølge man-siden. Fedora-dokumentationen anbefaler at bruge :1-displayet i stedet for standarddisplayet :0, så du kan prøve Xorg :1 -configure, hvis almindeligt Xorg -configure ikke virker.

En prøvefil genereret ved hjælp af denne metode på mit openSUSE Tumbleweed-system er vist i Listing 2.

Listing 2. Eksempel xorg.conf

Såfremt din skærm understøtter DDC, hvilket de fleste moderne skærme gør, kan du bruge kommandoen xrandr til at forespørge om dens muligheder. Listing 4 viser drm-oplysningerne for en notebook med en tilsluttet skærm og det tilsvarende output fra xrandr.

Listing 4. Brug af xrandr til at bestemme skærmkapaciteter

XkbVariant definerer, hvilke varianter af de to layouts der skal bruges. I tilfælde af us-layoutet anvendes dets standardvariant. I tilfælde af sk-layoutet anvendes dets qwerty-variant. Indstillingen XkbOptions angiver, at brugerne kan skifte mellem layouts ved hjælp af CapsLock-tasten.

Liste 5. Opdatering af tastaturkonfigurationen

localectl. localectl status viser imidlertid, at disse ændringer blev hentet, da systemet blev genstartet, som vist i Listing 6.

Listing 6. Visning af tastaturstatus ved hjælp af localectl

Display managers falder ind i tre generelle kategorier.

  1. Tiling window managers opdeler skærmen i fliser og skriver hver flise separat fra andre. Ydelsen er generelt god.
  2. Stacking window managers stabler de enkelte vinduer på skærmen i en liste kendt som en Z-orden. Når et nyt vindue får fokus, placeres det øverst i Z-ordenen, og alle lavere vinduer tegnes på ny. Dette kan være langsomt, især ved mindre ændringer, men der er udviklet flere optimeringer.
  3. Sammensatte window managers er normalt stacking window managers, der beholder en buffer for hvert vindue og derefter kombinerer dem i en enkelt buffer til visning uden at skulle tegne hvert enkelt vindue på ny og derefter overskrive det med det næste højere vindue i Z-ordenen. Dette giver også mulighed for effekter som f.eks. gennemsigtighed.

Figur 3 viser et eksempel på I3 tiling window manager. Du starter med et tomt skrivebord og opretter derefter et vindue, f.eks. et terminalvindue. Dette optager hele skærmen. Derefter kan du åbne et andet vindue, som deler den oprindelige flise op i to. Hvis du derefter åbner endnu et, opdeles skærmen i tre fliser. Du kan vælge at oprette nye fliser horisontalt eller vertikalt. I dette eksempel valgte jeg at dele den oprindelige midterste flise, der indeholder sudoku-spillet, lodret for at skabe endnu et lille terminalvindue. Derefter delte jeg det horisontalt for at tilføje et xlcock-vindue.

Figur 3. I3-vindueshåndteringen med fliser

Du kan normalt flytte vinduer mellem virtuelle skriveborde, hvilket er en stor hjælp, hvis du har flere store vinduer åbne.

Du kan åbne listen over tilgængelige programmer som en menu hen over toppen af skærmen og vælge programmer ved langsom vandret rulning eller hurtigere ved at skrive en del af eller hele navnet, f.eks. ‘xclock’.

I modsætning til tiling window managers giver stacking window managers dig mulighed for at have vinduer af enhver størrelse, der understøttes af din skærm, herunder vinduer, der kan overlappe kanten af skærmen. Figur 4 er et eksempel på Openbox stacking window manager, der viser fire overlappende vinduer og den menu, der gør det muligt at åbne nye programmer.

Figur 4. Openbox stacking window manager

Basiske stacking window managers fungerer efter princippet om at tegne alle vinduer på skærmen på ny, når vinduet med fokus ændres eller flyttes, lukkes eller ændres i størrelse. Dette kan resultere i flere omskrivninger af forskellige områder af skærmen, da hele Z-ordenen behandles. Algoritmer kan bruges til at minimere mængden af unødvendige omskrivninger.

En forbedring af den grundlæggende idé om stabling er en compositing window manager. En sådan window manager opbevarer en buffer med indholdet af hvert enkelt vindue og samler eller sammensætter disse til et enkelt vindue. Kun de opdaterede dele behøver derefter at blive skrevet til skærmkortbufferen. Compiz er et eksempel på en compositing window manager, mens skrivebordsmiljøer som KDE og GNOME også anvender compositing window managers.

Et skrivebordsmiljø giver generelt en fuldt udstyret brugeroplevelse, herunder ting som f.eks. en grafisk login-hilsen, grafiske systemmenuer, en bakke til visning af widgets som f.eks. klokkeslæt, ikoner for åbne programmer og så videre. En pakke af integrerede programmer giver normalt en ensartet oplevelse for brugeren. De fleste window managers er langt mere lette end et komplet skrivebordsmiljø.

Figur 5 illustrerer begrebet gennemsigtighed i en compositing window manager eller et skrivebordsmiljø. Hold venstre museknap (knap 1) på titellinjen i terminalvinduet nede, når du forbereder dig på at flytte det. Displayet ændres for at vise, hvilke vinduer der er under det pågældende område. Dette kan hjælpe dig med at flytte et vindue fra at være oven på et andet vindue, når du gerne vil have begge vinduer synlige.

Figur 5. Gennemsigtighed med KDE Plasma-skrivebordet

Figur 6 illustrerer GNOME 3.28 på Fedora. Hvis man klikker på knappen Aktiviteter øverst til venstre på denne skærm, åbnes en ikoniseret liste over favoritter i venstre side af skærmen og viser en række kørende programmer som små vinduer. Du kan klikke på en favorit, klikke på et lille vindue eller bruge søgefeltet øverst på skærmen til at søge efter et program. I dette særlige eksempel har jeg klikket på dagen og klokken i den øverste bjælke for at åbne en widget, der viser nogle meddelelser, f.eks. tilgængelige opdateringer eller senest udførte kommando, samt yderligere oplysninger om dato og klokkeslæt. Ikonerne øverst til højre giver adgang til funktioner som f.eks. højttalervolumen, netværksindstillinger, tilgængelighedsindstillinger og muligheder for nedlukning, logout eller genstart.

Figur 6. Fedora GNOME-aktiviteter og widgets

Jeg nævnte, at skrivebordsmiljøer ofte indeholder integrerede programmer, der hjælper dig med at administrere forskellige aspekter af skrivebordet eller systemet. Figur 7 viser Fedora GNOME 3.28-indstillingsdialogboksen, der er åben ved skærmindstillingerne. Dette eksempel er fra en bærbar computer med en ekstern Viewsonic-skærm. Almindelige valgmuligheder i dette tilfælde er at samle de to skærme som en enkelt skærm eller at spejle indholdet af den ene skærm på den anden. I dette tilfælde vælger vi at samle de to skærme med den indbyggede skærm logisk set til højre for den eksterne skærm.

Figur 7. Dialogboksen Fedora GNOME-skærmindstillinger

Som du kan ændre skærmopløsningen i filen xorg.conf, kan du også fortælle compositoren, at den skalere vinduet til enten 100 % eller 200 %. Den tilgængelige skalering kan afhænge af skærmstørrelsen samt det særlige skrivebord, du bruger. Jeg har også en UHD-skærm (4K) og øjne, der ikke kan læse den meget lille native tekstopløsning. Så på den skærm bruger jeg ofte en skaleringsfaktor på 200 %.

Bemærk, at ændringer, der foretages ved hjælp af GNOME-indstillingerne, ikke opdaterer xorg.conf. I stedet gemmes disse indstillinger i filen .config/monitors.xml i din hjemmemappe. GNOME vedligeholder også andre skærm- og tastaturindstillinger i databasen dconf, som du også kan finde under din hjemmemappe. Ved at have disse indstillinger i din hjemmemappe gælder de kun for dig. Andre brugere kan have andre indstillinger.

Hvis du har flere skrivebordsmiljøer eller window managers installeret, undrer du dig måske over, hvordan du vælger mellem dem. Du kan starte op i flerbrugertilstand som beskrevet tidligere i denne vejledning og derefter køre en kommando som startx for at starte X med den relevante manager. Hvis du har et skrivebordsmiljø som GNOME, der giver dig en velkomstskærm, vil du sandsynligvis have et valg af indstillinger på skærmen for velkomstskærmen. Figur 8 viser de valgmuligheder, der er installeret på mit Fedora 28-system.

Figur 8. Fedora GNOME 3-hilsen med WM-valg

Adgang til X-serveren og fjernvisning af programmer

Så vidt du har set eksempler på X, der kører på en skrivebordscomputer med en eller måske to skærme. En X-server behandler en enkelt skærm som en samling af skærme, der deler et fælles sæt af inddataenheder.

Så den bærbare computer, der er vist i figur 7, har én skærm, selv om den har den indbyggede skærm og en ekstern skærm. I dette eksempel fungerer de to skærme som om de var samlet. Dette giver en enkelt logisk skærm, som gør det muligt at flytte vinduer mellem skærme eller endda dele dem op på tværs af dem. Systemer med flere brugere har normalt flere skærme, så du har brug for en måde at beskrive dem på.

X bruger et navn i tre dele til skærme af formen hostname:displaynumber.screennumber, hvor hostname er computerens værtsnavn, displaynumber er et tal, der starter ved 0, som beskriver den pågældende skærm, og screennumber gælder, hvis to eller flere skærme behandles som separate skærme i stedet for som en enkelt logisk skærm. Både hostname og screennumber kan udelades, så den mest almindelige display-notation, som du vil se, er :0. Du kan se din aktuelle indstilling i miljøvariablen DISPLAY som vist i Listing 7.

Listing 7. Miljøvariablen DISPLAY

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

Vis mereVis mere ikon

DISPLAY, vil enhver bruger kunne skrive output på din skærm, men X har nogle begrænsninger for adgangskontrol. Jeg vil vise dig tre måder at oprette forbindelse til en X-server på.

  1. Brug ssh med X forwarding
  2. Brug Xauthority og xauth
  3. Brug værts- eller brugerkontrol med xhost

Den mest sikre måde at bruge X på en anden skærm på er at bruge X forwarding (nogle gange kaldet tunneling). Dette skal være aktiveret på den SSH-server, som du opretter forbindelse til, med linjen X11Forwarding yes i konfigurationsfilen /etc/ssh/sshd_config. Du skal også aktivere det på klienten ved at angive indstillingen -X (det er et stort X) i din ssh-kommando. I Listing 8 sammenlignes det, der sker, hvis jeg bruger su - jane til at skifte til brugeren jane på mit system og derefter bruger ssh -X jane@localhost. I begge tilfælde forsøger jeg at køre kommandoen xclock for at få vist et lille ur på min skærm.

Liste 8. X forwarding

DISPLAY-variablen indstillet til localhost:10.0. sshd-serveren opretter effektivt en X-server for dig på målsystemet. Du ønsker ikke, at dette skal forstyrre eventuelle rigtige X-servere på systemet. Så konfigurationsfilen, /etc/ssh/sshd_config, indeholder en linje X11DisplayOffset 10 for at angive startoffset (fra 0) for X-servere over ssh. Standardværdien er 10, hvilket normalt er rigeligt for en enkeltbrugerarbejdsstation, men det kan være nødvendigt at øge den i et system med flere brugere. En anden ssh-forbindelse til serveren vil få tildelt display 11 og så videre.

Den anden metode til at give andre mulighed for at oprette forbindelse til en X-server er Xauthority-metoden. Xauthority-filen indeholder autorisationsoplysninger, der bruges, når du opretter forbindelse til en X-server. Miljøvariablen XAUTHORITY angiver navnet på den fil, der er i brug i øjeblikket, enten en systemgenereret fil som f.eks. /run/user/1000/gdm/Xauthority på mit Ubuntu 18-system eller din egen .Xauthority-fil.

Brug kommandoen xauth til at liste, udtrække eller flette nye autoriteter ind. Brug indstillingen -f til at angive en anden Xauthority-fil end den i din XAUTHORITY-miljøvariabel. Du kan angive xauth-kommandoer på kommandolinjen eller starte det og bruge kommandoerne inde fra programmet. Listing 9 viser nogle eksempler og udtrækker min autorisation til display :0 til en fil med navnet auth-ian.

Listing 9. Udtrækning af autorisationsoplysninger ved hjælp af xauth

XAUTHORITY. Bruger jane kan derefter vise programmer på min skærm.

Listing 10. Sammenlægning af autoritetsoplysninger ved hjælp af xauth

xhost. På en arbejdsstation kan du godt bruge den til at give dig mulighed for at åbne grafiske programmer, mens du kører som en anden bruger. Kommandoen xhost uden indstillinger viser den aktuelle adgangskontrolliste. Brug +-indstillingen med et navn for at tillade yderligere systemer eller brugere. Listing 11 viser, hvordan du tilføjer brugeren john på mit lokale system til adgangskontrollisten, og viser derefter, at brugeren john åbner det grafiske xclock-program.

Listing 11. Brug af xhost til at aktivere en enkelt lokal bruger

xhost +local: som vist i Listing 12. Bemærk kolonet (:) i slutningen af local.

Liste 12. Brug af xhost til at aktivere alle lokale brugere uden netværksadgang

– i stedet for + for at fjerne poster, som du har aktiveret. Se xhost man- eller infosiderne for yderligere muligheder.

For sikkerhedens skyld bør du bruge SSH-tunneling eller muligvis en anden løsning som f.eks. Virtual Network Computing (VNC) i stedet for xauth eller xhost. VNC ligger uden for rammerne af denne vejledning, men giver bedre ydeevne end SSH-tunneling.

Når tingene går galt

Med så mange mulige kilder til X-konfigurationsoplysninger skal du vide, hvor du skal lede efter logoplysninger. Fejl i forbindelse med din individuelle X-session kan være placeret i .xsession-errors eller muligvis .xsession-errors-:0 i din hjemmemappe. Endelsen :0 er for fejl på displayet :0.

Den primære X-log findes i /var/log. Navnet er normalt /var/log/Xorg.0.log, hvor 0 er dit skærmnummer. Nummeret vil være anderledes, hvis du ikke bruger display :0.

Wayland, en ny compositing window manager

For nylig er der blevet udviklet en ny displayserver og compositing-protokol kaldet Wayland. I denne model skaber applikationer, deres vinduesindhold selv i en buffer uden for skærmen. Compositor og server er integreret. Hensigten med Wayland er at levere en enklere og mere effektiv løsning end X. Wayland genbruger for det meste eksisterende drivere og infrastruktur, hvilket gør projektet muligt.

I modsætning til X har Wayland ikke et netværkstransparent design. Andre løsninger såsom VNC kan anvendes, hvis der er behov for fjernvisning af vinduer på afstand.

Weston er en referencekompositor, der implementerer Wayland. GNOME, KDE, Enlightenment og flere andre window managers understøtter nu Wayland. Værktøjssæt som Qt 5 og GTK+ understøtter også Wayland. I skrivende stund (december 2018) leveres både Fedora og Ubuntu med Wayland som standardskærmsserver.

Xorg-serveren indeholder nu XWayland, som gør det muligt for eksisterende X-programmer at køre med en Wayland-kompositor.

De fleste nuværende implementationer har stadig et valg mellem at køre enten X eller Wayland for hver session. Se figur 7 for at se et eksempel på, hvordan GMS-hilsen giver dig mulighed for at vælge en sessionstype. På Fedora er standardindstillingen at køre GNOME på Wayland.

Du kan også kontrollere på køretid uden at skulle logge ind. Hvis du kører Wayland, vil miljøvariablen WAYLAND_DISPLAY blive sat. På systemer, der bruger systemd, kan du bruge kommandoen loginctl til at bestemme dit login-sessionsnummer og derefter bruge den igen til at bestemme din sessionstype. Liste 13 viser disse værktøjer, først på et Fedora 28-system, der bruger Wayland, og derefter på et Ubuntu 18-system, der kører Xorg.

Liste 13. Afgørelse af, om du bruger X eller Wayland

Skriv et svar

Din e-mailadresse vil ikke blive publiceret.