Linux Operating Systems Fundamentals · Lesson 6

Configuring the GUI, Localization, and Printing

Display servers, desktop environments, accessibility, secure remote desktops, locales and character sets, time zones and clocks, and printing with CUPS.

  • linux
  • gui
  • wayland
  • x11
  • remote-desktop
  • locale
  • time
  • cups
  • lpic-1

Lesson purpose

Servers are usually run from the command line, but users work in graphical desktops, administrators often reach machines through remote desktops, and every system has to show dates, money, and text correctly for its location and send work to printers. This lesson explains the layers behind a Linux GUI (display server, compositor, window manager, desktop environment), accessibility settings, secure remote GUI access, localization with character sets and locales, time zones and clocks, and printing with CUPS.

Learning objectives

  • Describe how the display server, compositor, window manager, and desktop environment work together.
  • Compare X.Org (X11) and Wayland, find out which one a session uses, and apply basic troubleshooting steps.
  • Identify the standard components of a desktop environment and the defaults for GNOME, KDE Plasma, Cinnamon, MATE, and Xfce.
  • Configure accessibility options for users with vision, hearing, or motor impairments.
  • Choose and secure a remote GUI method: X11 forwarding, VNC, Xrdp, NX, or SPICE.
  • Explain character sets and locale variables, and change a locale with export or localectl.
  • Set the time zone and system time with date, hwclock, and timedatectl.
  • Manage printers and print queues with CUPS and the command-line print tools.

LPIC-1 exam focus

  • 106.1 Install and configure X11
  • 106.2 Graphical desktops
  • 106.3 Accessibility
  • 107.3 Localization and internationalization
  • 108.4 Manage printers and printing

1. The layers of a Linux GUI

A Linux GUI isn’t one program. It’s a stack of cooperating parts, and each part can be swapped out. Draw the stack on the board first, since the rest of the lesson refers back to it.

  • Desktop environment. The overall look and feel: panels, menus, file manager, settings, and so on. Examples are GNOME, KDE Plasma, and Xfce.
  • Window manager. Decides how windows are placed, sized, decorated, and overlapped. It talks to the display server for the user interface. Every desktop environment ships a default one, such as Mutter (GNOME), KWin (KDE), Muffin (Cinnamon), Marco (MATE), or Metacity.
  • Compositor. Combines the contents of many windows into the single image shown on the screen. The name comes from print shops, where a human compositor arranged type blocks in a frame before the printer inked them.
  • Display server. Carries requests between the user interface and the operating system (input devices, video hardware) using a display server protocol. That protocol can work across a network.

Check for understanding: If windows draw correctly but can’t be moved or resized, which layer do you suspect first? (The window manager.)

2. X11: the X.Org display server

  • History. The X Window System (“X”) dates from the 1980s. Linux first used XFree86. A 2004 license change moved most distributions to X.Org, which implements X version 11. That’s why you’ll see the names X, X11, X.Org, and X.org-X11 used interchangeably.

Configuration

  • Auto-detection. Modern X.Org detects the video card, monitor, keyboard, and mouse each time a session starts. It’s normal for no configuration file to exist at all.
  • /etc/X11/xorg.conf. The traditional single configuration file, in the original XFree86 format. It’s now rarely used.
  • /etc/X11/xorg.conf.d/. The current approach. Small files, one per device or setting, are read at startup and override auto-detection.
  • Generating a file by hand. If auto-detection fails, stop the GUI (for example sudo systemctl isolate multi-user.target or sudo telinit 3), run sudo Xorg -configure, edit the resulting xorg.conf.new, move it into place, and restart the GUI.
xorg.conf section Purpose
InputDevice Keyboard and mouse
Monitor Monitor settings
Modes Video modes
Device Video card
Screen Resolution and color depth
Module Modules to load
Files Paths to fonts, modules, and keyboard layouts
ServerFlags Global X server options
ServerLayout Ties input and output devices together into one session

Desktop settings dialogs cover almost everything most users need. Use man 5 xorg.conf for the details of the file format.

Troubleshooting X

  • ~/.xsession-errors. A text log in the user’s home directory that records what went wrong in the session. On systemd systems, journalctl --user -b often has the same messages.
  • xdpyinfo. Reports on the X server itself: screens, default settings, and protocol extensions.
  • xwininfo. Click a window to see its position, size, and other details. Under Wayland it hangs; press Ctrl+C to get out.
  • Ctrl+Alt+Backspace. Restarts the X server when that key combination is enabled (it often isn’t by default).

3. Wayland

Wayland is the modern replacement for X.Org. It’s designed to be simpler, more secure, and easier to maintain. Strictly speaking, Wayland is a protocol between a compositor and its clients. The term also covers the compositor, which in Wayland is the display server. GNOME and KDE Plasma run on Wayland by default on most current distributions.

  • Why it’s more secure. Under X11, any program can read the screen and the keystrokes of other programs. Wayland isolates each client.
  • Weston is the reference compositor. It’s simple, correct, and reliable, and it serves as a model for developers. It isn’t a full desktop.
  • Compositors are interchangeable. Desktops build their own: Mutter (GNOME) and KWin (KDE) are Wayland compositors. Standalone compositors include Sway and others.
  • XWayland runs older X11-only applications inside a Wayland session.

Which display server is this session using?

$ echo $XDG_SESSION_TYPE           # prints wayland or x11
$ echo $WAYLAND_DISPLAY            # blank usually means X11
$ loginctl                         # note the session number
$ loginctl show-session 2 -p Type
Type=wayland

The book uses the $WAYLAND_DISPLAY and loginctl checks. $XDG_SESSION_TYPE gives the same answer in one step.

Troubleshooting a Wayland problem

  1. Try the same desktop on X11. Many display managers offer a “GNOME on Xorg” or “Plasma (X11)” choice under the gear icon. If the problem goes away, Wayland is involved.
  2. Turn Wayland off in GDM if there’s no X11 choice. Edit /etc/gdm3/custom.conf (it’s /etc/gdm/custom.conf on Red Hat systems), uncomment WaylandEnable=false, and reboot.
  3. Check the graphics driver. Confirm on the vendor’s site that the card’s driver supports Wayland.
  4. Try the Weston compositor to rule out the desktop’s own compositor.

Some X11-era commands don’t work under Wayland. For example, gnome-shell --replace reports “Unsupported session type.”

4. Desktop environment components

These terms describe the parts every desktop environment provides, even when the names differ.

Component What it is
Desktop settings Programs for configuring the desktop’s behavior
Display manager The graphical login screen. It lets you pick a desktop environment before logging in and often shows a company logo or acceptable-use notice.
File manager Graphical tool for copying, moving, and browsing files
Icons Pictures that represent files or programs
Favorites bar Frequently used application icons (a dock)
Launcher Search for and start applications and files
Menus Lists of programs and files, often nested
Panels Thin bars along a screen edge holding the clock, notifications, and icons
System tray Area on a panel for log out, lock, sound, network, and power
Widgets Small info or utility programs (applets, desklets, screenlets, plasmoids)
Window manager Controls window placement, size, and appearance
Workspaces Multiple virtual desktops per user, switched with the mouse or keys

Display managers and graphical login

A display manager starts at boot and provides the graphical login. The generic X Display Manager (XDM) is configured in /etc/X11/xdm/xdm-config. Desktops usually ship their own:

  • GDM is the GNOME Display Manager.
  • SDDM is the Simple Desktop Display Manager, used by current KDE Plasma. KDM was its predecessor.
  • LightDM is a lightweight display manager used with Xfce, Cinnamon, and MATE.

The X Display Manager Control Protocol (XDMCP) lets a display manager offer logins to remote X terminals. It isn’t encrypted, so it’s normally disabled.

5. Common desktop environments

GNOME Shell KDE Plasma Cinnamon MATE Xfce
Origin Late 1990s; GNOME 3 “Shell” in 2011 1996; renamed Plasma in 2009 2011 fork of GNOME 3 by Linux Mint 2011 continuation of GNOME 2 1996; lightweight
Display manager GDM SDDM LightDM LightDM LightDM
File manager Files (formerly Nautilus) Dolphin Nemo Caja Thunar
Window manager Mutter KWin Muffin Marco Xfwm
Panel layout One top panel One bottom panel One bottom panel Top and bottom panels One panel (top on Xubuntu)
Widgets Extensions Plasmoids Spices Panel applets Panel plugins
  • GNOME Shell. The default on Ubuntu, Fedora, and Red Hat-family systems. It uses an Activities overview with search and a Dash (favorites). GNOME Classic gives a traditional GNOME 2-style layout.
  • KDE Plasma. A traditional layout with the Application menu and system tray on a bottom panel. It’s highly customizable, can show folders on the desktop, and is friendly for new users.
  • Cinnamon. Also a traditional layout. Spices add applets, desklets, themes, and extensions.
  • MATE (pronounced “mah-tay”). Familiar to GNOME 2 users. Right-click a panel and choose Add to Panel to add applets.
  • Xfce. Uses few resources and is a good fit for older hardware.

Distributions may adjust a desktop’s defaults. For example, CentOS hides the GNOME Dash until you click Activities, while Ubuntu shows it all the time.

Installing another desktop

$ sudo dnf groupinstall "Cinnamon Desktop"          # Fedora / Red Hat family
$ sudo apt install tasksel
$ sudo tasksel install ubuntu-mate-desktop          # Ubuntu

After installing, reboot or log out, then choose the new desktop from the display manager’s gear icon before logging in.

6. Accessibility

Accessibility settings let every user work with the desktop, whatever their vision, hearing, or motor abilities. Each desktop names its control panel differently: Universal Access, Accessibility, or Assistive Technologies. Search the desktop for those terms. GNOME also offers an accessibility menu on the top panel.

Vision

Setting What it does
Cursor blinking Changes the blink rate so the cursor is easier to find
Cursor size Enlarges the pointer
High contrast Brightens windows and buttons and darkens edges, text, and the cursor
Large text Increases font size
Screen reader Reads the screen aloud, for example Orca or Emacspeak
Sound (toggle) keys Beeps when Caps Lock or Num Lock changes
Zoom Magnifies the whole screen or part of it
  • Braille. The brltty daemon gives console (text-mode) access through a refreshable braille display. Orca can also drive braille displays.
  • Hearing. Visual alerts flash a window or the whole screen instead of playing an alert sound.

Hands and fingers

Setting What it does
Bounce keys Ignores rapid accidental repeats of the same key
Slow keys A key must be held for a set time before it counts
Sticky keys Modifier keys (Ctrl, Shift, Alt) stay pressed until the next key
Repeat keys Adjusts the delay and rate of key repeat
Screen keyboard An on-screen keyboard used with a mouse or other pointer
Mouse keys The numeric keypad moves the pointer
Double-click delay Allows more time between the two clicks
Hover click Clicks when the pointer rests on an item
Simulated secondary click Holding the primary button produces a right-click
Gestures Mouse or keyboard combinations trigger actions

Many of these options came from AccessX, a name you’ll still see in settings (for example, “Typing Assist (AccessX)”). Its Enable by Keyboard option lets a user turn accessibility features on or off with keystrokes.

Teaching point: Accessibility isn’t an edge case. Set up these options when you provision a workstation for a user who needs them.

7. Remote GUI with X11

X11 is a client/server system. Usually both run on the same machine, but a program running on a remote computer can display its windows on your local X server. Remember the reversal: in X terminology the server is where the display is (your machine), and the client is the program (on the remote machine).

Direct X11 connection (unencrypted, legacy)

Suppose you’re sitting at local and want to run a graphical program on remote:

local$  xhost +remote                  # allow remote to draw on local's display
local$  ssh user@remote
remote$ export DISPLAY=local:0.0       # send remote's X output to local
remote$ xclock &                       # window appears on local
local$  xhost -remote                  # revoke permission when finished

The book’s step-by-step version mixes up the two host names. The logic is: run xhost + on the machine that displays, and set DISPLAY on the machine that runs the program.

  • X11 uses TCP ports 6000–6063 (6000 plus the display number), which the firewall must allow.
  • xhost permissions last only for the current session. xauth manages longer-lived authorization entries.
  • Security: This traffic, including keystrokes, isn’t encrypted, and xhost +host trusts every user on that host. Treat this method as legacy and use SSH forwarding instead.

X11 forwarding over SSH (the classroom standard)

remote# grep X11Forwarding /etc/ssh/sshd_config
X11Forwarding yes
local$  ssh -X user@remote
remote$ ip addr show                    # confirm you're on the remote host
remote$ gnome-system-monitor &          # displays locally, runs remotely
remote$ exit
  • The remote SSH server must have X11Forwarding yes in /etc/ssh/sshd_config. Restart sshd after changing it.
  • ssh -X tunnels X11 through the encrypted SSH session and sets DISPLAY automatically.
  • ssh -Y (“trusted” X11) is less safe, not more. It lifts X security restrictions and gives the remote host full access to your display. Avoid it unless you fully trust the remote system.

8. Remote desktop software

Remote desktop packages use a client/server model to deliver a whole desktop, with no forwarding setup needed.

VNC (Virtual Network Computing)

  • Protocol. Remote Frame Buffer (RFB). The client sends mouse and keyboard events, and the server sends back screen frames. RealVNC, the company formed by the original developers, holds the VNC trademark.
  • Ports. 5900 + display number (display 1 is port 5901). Java or HTML5 browser access uses 5800 + display number.
  • Authentication. The client first enters a VNC password (separate from Linux accounts), and then logs in to Linux at the display manager.
  • Persistent vs. static desktops. A persistent desktop stays exactly as you left it. A static desktop starts fresh each time.
  • TigerVNC. A common Linux implementation. The server package is tigervnc-server (managed with vncserver and vncconfig) and the client is tigervnc (vncviewer).
$ vncviewer server.example.com:1
$ ssh -L 5901:localhost:5901 user@server.example.com   # tunnel first...
$ vncviewer localhost:1                                 # ...then connect locally
  • Strengths: flexible, supports multiple users, can run on demand, and offers both desktop types.
  • Weaknesses: it only carries screen, keyboard, and mouse (no file transfer, audio, or printing). Traffic is unencrypted by default, and the VNC password is stored weakly on the server.
  • Classroom convention: Always tunnel VNC through SSH, and open only port 22 in the firewall, not 5900-series ports.
  • Run these commands from a terminal emulator inside the GUI. They won’t work from a text-mode console.

Xrdp

  • A Linux server for Microsoft’s Remote Desktop Protocol (RDP), TCP port 3389. Clients include Windows Remote Desktop Connection, rdesktop, FreeRDP, and Remmina.
  • It uses Xorg or Xvnc on the back end to host the session.
  • The package xrdp may not be in the default repositories. Install it, then run systemctl enable --now xrdp, and open 3389 in the firewall.
  • Strengths: TLS encryption, familiar to Windows users, can reconnect to an existing session (persistent), and supports audio and client drive mapping.
  • Configuration is in /etc/xrdp/xrdp.ini. The security_layer setting has three values:
    • negotiate (default) uses the strongest method the client supports. On public networks this can drop to weak standard RDP security.
    • tls requires TLS. Also set ssl_protocols to allow only TLS 1.2 or later; older TLS versions don’t meet standards such as PCI.
    • rdp uses standard RDP security, which is vulnerable to man-in-the-middle attacks. Avoid it.

NX

  • Created by NoMachine around 2001. Version 3.5’s core was open source (GPL). Version 4 and later are proprietary.
  • Open-source descendants include X2Go and FreeNX.
  • Strengths: it compresses and caches X11 data, so it’s fast even over slow or high-latency links (faster than VNC). It tunnels over SSH by default, so traffic is encrypted, and many users can share one port.

SPICE

  • Simple Protocol for Independent Computing Environments. Qumranet built it in 2007, and Red Hat bought Qumranet and open-sourced it in 2008.
  • Designed for remote access to virtual machines, especially KVM, alongside VNC.
  • Features include multiple client connections, near-local speed, low CPU use on the host, high-quality video streaming, and live migration (the connection survives when the VM moves to another host).
  • Security: optional TLS encryption, with authentication through SASL (which supports methods such as Kerberos).
  • Clients: remote-viewer and GNOME Boxes. Xspice acts as both an X server and a SPICE server.
VNC Xrdp NX (X2Go) SPICE
Protocol / port RFB, 5900+n RDP, 3389 NX over SSH, 22 SPICE
Encrypted by default No; tunnel through SSH Yes, TLS Yes, SSH Optional TLS
Best fit General remote desktops Windows clients Slow or high-latency links VM consoles

9. Localization: character sets

Localization adapts a system to a place: its language and characters, number and currency formats, and dates and times. A character set maps stored numbers to characters.

Character set Key facts
ASCII 7 bits, 128 characters. Covers English only.
ISO-8859 Fifteen 8-bit standards (ISO-8859-1 to -15), each for a group of languages, such as -1 for Western European
Unicode One code point for every character in every language in use (code points need up to 21 bits, stored in 3 bytes)
UTF-8 Encodes Unicode in 1 to 4 bytes. ASCII characters stay 1 byte, so ASCII text is already valid UTF-8. It’s the standard on Linux.
UTF-16 Encodes Unicode in 2 or 4 bytes. Used internally by Windows and Java.

The book says UTF-8 uses 1 byte and UTF-16 uses 2. Those are their minimum unit sizes. Both are variable-length, which is how they can represent every Unicode character.

iconv converts a file from one character set to another:

$ iconv -f ISO-8859-1 -t UTF-8 old.txt -o new.txt
$ iconv -l | less                   # list known encodings

10. Locales and locale variables

A locale combines a language, a country, and a character set, written as language_COUNTRY.charset. For example, en_US.UTF-8 is United States English in UTF-8, and en_GB.UTF-8 is British English.

$ locale
LANG=en_US.UTF-8
LC_CTYPE="en_US.UTF-8"
LC_NUMERIC="en_US.UTF-8"
LC_TIME="en_US.UTF-8"
LC_COLLATE="en_US.UTF-8"
LC_MONETARY="en_US.UTF-8"
LC_MESSAGES="en_US.UTF-8"
...
LC_ALL=
Variable Controls
LC_CTYPE Character classification and case (which bytes are letters)
LC_NUMERIC Number format (decimal point, thousands separator)
LC_TIME Date and time format
LC_COLLATE Sort order
LC_MONETARY Currency format
LC_MESSAGES Language of program messages
LC_PAPER, LC_NAME, LC_ADDRESS, LC_TELEPHONE, LC_MEASUREMENT, LC_IDENTIFICATION Paper size, name, address, and phone formats, units, and locale metadata

Precedence: LC_ALL overrides every LC_* variable. A specific LC_* variable overrides LANG. LANG is the default for anything not set.

$ locale -ck LC_MONETARY            # show the individual settings in a category
$ locale -a                         # locales installed on this system
$ LC_ALL=C sort names.txt           # one command with plain byte-order sorting

Teaching point: Setting LC_ALL=C (or POSIX) in scripts gives predictable sorting and English messages no matter who runs the script. Collation is a common reason that sort output differs between users.

Setting the locale

The installer sets the locale from the language you pick during installation. To change it afterward:

$ export LC_MONETARY=en_GB.UTF-8            # one category, this session
$ export LANG=en_GB.UTF-8                   # all categories, this session
$ export LC_ALL=en_GB.UTF-8                 # some systems need this as well
  • An export lasts only for the current session. To make it personal and permanent, add it to ~/.bashrc (or ~/.profile).
  • System-wide on systemd systems, use localectl:
$ localectl
   System Locale: LANG=en_US.UTF-8
       VC Keymap: us
      X11 Layout: us
$ localectl list-locales
$ sudo localectl set-locale LANG=en_GB.UTF-8
$ sudo localectl set-keymap uk

localectl also shows and sets the console keymap (VC Keymap) and the X11 keyboard layout. The book’s example omits sudo, but changing the system locale requires administrator privileges.

11. Time zones

Linux keeps time as UTC internally and displays it in the local time zone, which is an offset from Coordinated Universal Time. Getting this right matters for logs, scheduled jobs, and servers that span regions.

  • Time zone data lives in /usr/share/zoneinfo/, organized by region, for example America/Chicago or US/Central.
  • /etc/localtime is the system’s time zone setting on all modern distributions. It’s a symbolic link to a binary file in /usr/share/zoneinfo.
  • /etc/timezone (Debian family) is a text file that contains the zone name, such as America/Chicago. The book calls both files binary; only /etc/localtime is binary.
$ date                                             # zone abbreviation appears before the year
Thu Sep 24 14:30:00 CDT 2026
$ tzselect                                         # interactive: find your zone name
$ sudo mv /etc/localtime /etc/localtime.bak
$ sudo ln -s /usr/share/zoneinfo/America/Chicago /etc/localtime
$ TZ=Europe/London date                            # one command in another zone
$ export TZ=Asia/Tokyo                             # this session only

Classroom convention: On systemd systems, use sudo timedatectl set-timezone America/Chicago. It updates the link correctly. Linking the file by hand is the method to know for the exam and for non-systemd systems.

12. Setting the time and date

  • Hardware clock (RTC). The clock in the BIOS/UEFI firmware. It keeps time while the system is off.
  • System clock. The kernel’s clock, used while Linux is running. At boot it’s set from the RTC.

hwclock

$ sudo hwclock                # show the hardware clock
$ sudo hwclock --systohc      # copy the system time to the hardware clock
$ sudo hwclock --hctosys      # copy the hardware clock to the system time

date

$ date +"%A, %B %d %Y"         # Thursday, September 24 2026
$ date +%F                     # 2026-09-24
$ date +"%Y-%m-%d_%H%M%S"      # timestamp for file names
$ sudo date 092414302026.00    # set: MMDDhhmm[[CC]YY][.ss]
Sequence Meaning Sequence Meaning
%a / %A Weekday, short / full %H / %I Hour, 24 h / 12 h
%b / %B Month name, short / full %M / %S Minute / second
%d / %e Day of month, zero- / space-padded %p AM or PM
%m Month number %T hh:mm:ss
%y / %Y Year, 2 / 4 digits %F YYYY-MM-DD
%j Day of year %s Seconds since 1970-01-01 UTC (epoch)
%u / %w Weekday number (1=Mon) / (0=Sun) %Z / %z Zone name / +hhmm offset

The full list is in man date.

timedatectl (systemd)

$ timedatectl
               Local time: Thu 2026-09-24 14:30:20 CDT
           Universal time: Thu 2026-09-24 19:30:20 UTC
                 RTC time: Thu 2026-09-24 19:30:19
                Time zone: America/Chicago (CDT, -0500)
System clock synchronized: yes
              NTP service: active
          RTC in local TZ: no
$ sudo timedatectl set-time "2026-09-24 14:45:00"
$ sudo timedatectl set-timezone America/Chicago
$ sudo timedatectl set-ntp true
  • It shows local time, UTC, the hardware clock (RTC), the zone, and NTP status all at once.
  • NTP caution: When network time synchronization is active, you can’t set the time by hand, and set-time fails. Turn it off with set-ntp false if you really need to set the time manually. Keeping the RTC in UTC (RTC in local TZ: no) is the recommended setting.

13. Printing with CUPS

The Common Unix Printing System (CUPS) gives every application one way to print to any local or network printer.

  • How it works: Applications send jobs (typically PostScript or PDF) to a print queue. CUPS filters the job with drivers (Ghostscript for many printers) into the printer’s language and sends it on.
  • Print queues: A queue can represent one printer with one set of options (duplex, color, orientation). Several queues can point to one printer, and one queue can feed several printers.
  • Configuration: /etc/cups/ holds files such as cupsd.conf and printers.conf. The service is cups (systemctl status cups).
  • Web interface: http://localhost:631/ lets you add, modify, and remove printers and check jobs. Administrative tasks prompt for an account in the lpadmin (or sys/wheel) group.
  • Network printing: IPP (Internet Printing Protocol, port 631), SMB (Windows shares), LPD, and others. Many current printers also work driverless through IPP Everywhere or AirPrint.

CUPS commands

Command Action
cupsenable / cupsdisable Start or stop the printer (it can keep accepting jobs while disabled)
cupsaccept / cupsreject Start or stop the queue accepting new jobs
cancel Cancel a job, or cancel -a for all of them
lpstat -p -d Printer status and the default printer
lpadmin Add or configure printers from the command line

Legacy BSD commands (still supported)

Command Action
lpr Submit a job
lpq Show a queue and its jobs
lprm Remove a job
lpc Control queues (status, start, stop)
$ lpq -P Office_Laser
Office_Laser is ready
no entries
$ lpr -P Office_Laser report.txt
$ lpq -P Office_Laser
Office_Laser is ready and printing
Rank    Owner   Job     File(s)       Total Size
active  nick    1       report.txt    1024 bytes
$ lprm -P Office_Laser 1

Distinction to stress: Reject means the queue won’t accept new jobs. Disable means jobs keep queuing but nothing prints. Use disable while you fix a paper jam, and reject while you retire a printer.

Classroom application

  1. Map the stack. On a lab desktop, identify the display manager, desktop environment, window manager, and display server (echo $XDG_SESSION_TYPE, loginctl show-session <n> -p Type).
  2. Switch display servers. Log in once with Wayland and once with X11 (Xorg). Run xwininfo in each and explain the difference.
  3. Accessibility audit. Turn on and test high contrast, zoom, sticky keys, slow keys, and the on-screen keyboard. Describe which user each setting helps.
  4. Secure remote GUI. Confirm X11Forwarding yes on a lab server, run a GUI app with ssh -X, and explain why ssh -Y and xhost + are avoided. Optionally, reach a TigerVNC session through an SSH tunnel.
  5. Locale experiments. Compare locale, then LANG=en_GB.UTF-8 date and LC_ALL=C sort against the default. Convert a Latin-1 file with iconv.
  6. Time zones. Use TZ= to show the current time in three cities, then set the system zone with timedatectl set-timezone and confirm where /etc/localtime points with readlink -f.
  7. Print queue drill. Create a PDF (print-to-file) queue in the CUPS web interface, then submit, list, cancel, reject, and accept jobs from the command line.

Common misconceptions

  • “Wayland is just a newer X server.” Wayland is a different protocol in which the compositor is the display server. X11 apps run under it through XWayland.
  • “ssh -Y is the secure option.” Trusted forwarding lifts X security restrictions. ssh -X is the safer choice.
  • “The X server runs on the remote machine.” In X terminology the server is where the display is, and the client is the program.
  • “VNC is encrypted.” It isn’t by default. Tunnel it through SSH.
  • “UTF-8 is always one byte per character.” UTF-8 uses 1 to 4 bytes. Only the ASCII range uses 1 byte.
  • “LANG overrides everything.” LC_ALL overrides both LANG and the individual LC_* variables.
  • “Edit /etc/localtime with a text editor.” It’s a binary zoneinfo file, usually a symbolic link. Relink it or use timedatectl set-timezone.
  • “Disabling a printer stops new jobs.” Disable stops printing. Reject stops new jobs from being queued.

Lesson summary

  • The GUI is layered: display server (X.Org or Wayland) → compositor → window manager → desktop environment. Wayland is now the default, and XWayland covers older X11 apps.
  • Desktops share common parts (display manager, file manager, panels, tray, widgets). Know the default components of GNOME, KDE Plasma, Cinnamon, MATE, and Xfce.
  • Accessibility settings support users with vision, hearing, and motor needs. Find them under Universal Access or Accessibility.
  • Remote GUIs must be secured: use ssh -X for single applications, VNC tunneled through SSH, Xrdp with TLS, NX/X2Go over SSH, and SPICE for VM consoles.
  • Localization comes from locale variables: LANG, LC_*, and LC_ALL (highest precedence). Change them with export or localectl. UTF-8 is the standard character set.
  • Time: set the zone by linking /etc/localtime or with timedatectl set-timezone, and manage clocks with date, hwclock, and timedatectl, keeping NTP in mind.
  • Printing: CUPS queues and filters jobs. Manage it at localhost:631 or with lpr, lpq, lprm, cancel, cupsenable/cupsdisable, and cupsaccept/cupsreject.

The next lesson is Administering the System.