Displaying text and Graphics on Linux distributions such as Debian, Ubuntu, CentOS, Arch, Gentoo, RHEL and other Unix-like Operating Systems screen,
X Window System software is used to accomplish this task. The universal X client look and design is manipulated by desktop environments such as GNOME, Xfce and KDE, Window Manager i.e Tab Window Manager and Window maker.Modern Linux distros uses X.org version 11 that is
X11 as their main X protocol. X client and X server communicates through
X protocol. To be a successful System Administrator, you must understand X Window System architecture and its customary tools you will use to configure X.
In this guide, we are going to learn how to install and configure X11 on a Linux operating system.
Understanding X11 System Architecture
The drawing structure provided by X Window System on a display are two and three dimensional shapes and are divided into client and server which are required elements on the same computer by graphical desktop during installation. A web browser, terminal and even a game are considered as client component’s form of applications. The input devices such as keyboards, mice and touch-pads are controlled by X Window System. The following is the X11 Architecture.
With the help of X Window System, multiple X clients which are from different computers but on the same network can bring out requests to one remote X server. So any user or System Admin can have access to graphical application remotely whether they are available or unavailable on their local system.
The graphical login to any system is issued by a
display manager and the system can be a computer across a network or or a local computer. When the computer boots up, the display manger is initiated and it start an X server session for the validated users. The display manager also supervise X server making sure that it’s up and running. Display managers include SDDm, LightDm and GDM.
Any running X server has a
display name for identification and it look like this:
hostanme: is the name of the system displaying the application.
displaynumber: this refers to group of screens which are in use. It may be multiple screens in a workstation or single screen. A display number which start at 0 is assigned to each running X server session.
screennumber: its default number is 0 when single or many physical screens are set to display as one screen.
DISPLAY environment variable show the name of running X session.
$ echo $DISPLAY :0
According to the above output, we obtain the following;
- It shows that the X server running is on the local system.
- We see that after the colon is 0, meaning that the X server is the 1st.
- A screen number is not seen because only one logical screen is being used.
An application can be started by allocating the screen number to the
DISPLAY environment variable before launching that application. an example is as follows;
DISPLAY=:0.0 tmux &
The above command will start the
tmux application in the screen
0.0 rather than
0.1 when both screens are in use.
Configuring X Server on Linux
xdpyinfo command to display the running X server information in a Linux system;
$ xdpyinfo | head -n 100 name of display: :0 version number: 11.0 vendor string: The X.Org Foundation vendor release number: 12009000 X.Org version: 1.20.9 maximum request size: 16777212 bytes motion buffer size: 256 bitmap unit, bit order, padding: 32, LSBFirst, 32 image byte order: LSBFirst number of supported pixmap formats: 7 supported pixmap formats: depth 1, bits_per_pixel 1, scanline_pad 32 depth 4, bits_per_pixel 8, scanline_pad 32 depth 8, bits_per_pixel 8, scanline_pad 32 depth 15, bits_per_pixel 16, scanline_pad 32 depth 16, bits_per_pixel 16, scanline_pad 32 depth 24, bits_per_pixel 32, scanline_pad 32 depth 32, bits_per_pixel 32, scanline_pad 32 keycode range: minimum 8, maximum 255 focus: window 0x1a00007, revert to PointerRoot number of extensions: 28 BIG-REQUESTS Composite DAMAGE DOUBLE-BUFFER DPMS DRI2 GLX Generic Event Extension MIT-SCREEN-SAVER MIT-SHM Present RANDR RECORD RENDER SECURITY SHAPE SYNC VMWARE_CTRL X-Resource XC-MISC XFIXES XFree86-DGA XFree86-VidModeExtension XINERAMA XInputExtension XKEYBOARD XTEST XVideo default screen number: 0 number of screens: 1 screen #0: dimensions: 1111x706 pixels (294x187 millimeters) resolution: 96x96 dots per inch depths (7): 24, 1, 4, 8, 15, 16, 32 root window id: 0x3ac depth of root window: 24 planes number of colormaps: minimum 1, maximum 1 default colormap: 0x20 default number of colormap cells: 256 preallocated pixels: black 0, white 16777215 options: backing-store WHEN MAPPED, save-unders NO largest cursor: 64x64 current input event mask: 0x7a0057 KeyPressMask KeyReleaseMask ButtonPressMask EnterWindowMask PointerMotionMask StructureNotifyMask SubstructureNotifyMask SubstructureRedirectMask FocusChangeMask PropertyChangeMask number of visuals: 270 default visual id: 0x21 visual: visual id: 0x21 class: TrueColor depth: 24 planes available colormap entries: 256 per subfield red, green, blue masks: 0xff0000, 0xff00, 0xff significant bits in color specification: 8 bits visual: visual id: 0x22 class: DirectColor depth: 24 planes available colormap entries: 256 per subfield red, green, blue masks: 0xff0000, 0xff00, 0xff significant bits in color specification: 8 bits visual: visual id: 0x2a0 class: TrueColor depth: 24 planes available colormap entries: 256 per subfield red, green, blue masks: 0xff0000, 0xff00, 0xff significant bits in color specification: 8 bits visual: visual id: 0x2a1 class: TrueColor depth: 24 planes available colormap entries: 256 per subfield red, green, blue masks: 0xff0000, 0xff00, 0xff significant bits in color specification: 8 bits visual:
In the above output, we obtain the following information;
- The X server version i.e
version number: 11.0
- Display name i.e
name of display: :0
- The number of extensions in the X server i.e
number of extensions: 28, highlighted in red in the above output.
- The default screen number i.e
- Number of screens i.e
And many other relevant information from
The X server configurations file are located in /usr/share/X11/xorg.conf.d/ directory, we can list the contents of this directory with
ls -alh command;
$ ls -alh /usr/share/X11/xorg.conf.d/ total 28K drwxr-xr-x 2 root root 4.0K May 24 11:04 . drwxr-xr-x 5 root root 4.0K Dec 7 2020 .. -rw-r--r-- 1 root root 92 Oct 22 2019 10-amdgpu.conf -rw-r--r-- 1 root root 1.4K Apr 8 15:29 10-quirks.conf -rw-r--r-- 1 root root 92 Oct 22 2019 10-radeon.conf -rw-r--r-- 1 root root 1.4K Aug 13 2019 40-libinput.conf -rw-r--r-- 1 root root 3.4K Mar 11 2020 70-wacom.conf
In /etc/X11, we can find
xorg.conf file which is a user-specified. With
cat command we can look at the contents of this file;
$ cat /etc/X11/xorg.conf Section "ServerLayout" Identifier "X.org Configured" Screen 0 "Screen0" 0 0 InputDevice "Mouse0" "CorePointer" InputDevice "Keyboard0" "CoreKeyboard" EndSection Section "Files" ModulePath "/usr/lib/xorg/modules" FontPath "/usr/share/fonts/X11/misc" FontPath "/usr/share/fonts/X11/cyrillic" FontPath "/usr/share/fonts/X11/100dpi/:unscaled" FontPath "/usr/share/fonts/X11/75dpi/:unscaled" FontPath "/usr/share/fonts/X11/Type1" FontPath "/usr/share/fonts/X11/100dpi" FontPath "/usr/share/fonts/X11/75dpi" FontPath "built-ins" EndSection Section "Module" Load "glx" EndSection Section "InputDevice" Identifier "Keyboard0" Driver "kbd" EndSection Section "InputDevice" Identifier "Mouse0" Driver "mouse" Option "Protocol" "auto" Option "Device" "/dev/input/mice" Option "ZAxisMapping" "4 5 6 7" EndSection Section "Monitor" Identifier "Monitor0" VendorName "Monitor Vendor" ModelName "Monitor Model" EndSection Section "Device" ### Available Driver options are:- ### Values: <i>: integer, <f>: float, <bool>: "True"/"False", ### <string>: "String", <freq>: "<f> Hz/kHz/MHz", ### <percent>: "<f>%" ### [arg]: arg optional #Option "HWcursor" # [<bool>] #Option "Xinerama" # [<bool>] #Option "StaticXinerama" # <str> #Option "GuiLayout" # <str> #Option "AddDefaultMode" # [<bool>] #Option "RenderAccel" # [<bool>] #Option "DRI" # [<bool>] #Option "DirectPresents" # [<bool>] #Option "HWPresents" # [<bool>] #Option "RenderCheck" # [<bool>] Identifier "Card0" Driver "vmware" BusID "PCI:0:2:0" EndSection Section "Screen" Identifier "Screen0" Device "Card0" Monitor "Monitor0" SubSection "Display" Viewport 0 0 Depth 1 EndSubSection SubSection "Display" Viewport 0 0 Depth 4 EndSubSection SubSection "Display" Viewport 0 0 Depth 8 EndSubSection SubSection "Display" Viewport 0 0 Depth 15 EndSubSection SubSection "Display" Viewport 0 0 Depth 16 EndSubSection SubSection "Display" Viewport 0 0 Depth 24 EndSubSection EndSection
The X server undergoes self configuration when it is started at runtime. In the above output of
xorg.conf file we obtain the following sections;
ServerLayout: In this section, all inputs such as keyboards, mice and screens which are visible to the in interface are grouped;
Section "ServerLayout" Identifier "X.org Configured" Screen 0 "Screen0" 0 0 InputDevice "Mouse0" "CorePointer" InputDevice "Keyboard0" "CoreKeyboard" EndSection
InputDevice: This section is used in the configuration of mouse and keyboard.
Section "InputDevice" Identifier "Keyboard0" Driver "kbd" EndSection Section "InputDevice" Identifier "Mouse0" Driver "mouse" Option "Protocol" "auto" Option "Device" "/dev/input/mice" Option "ZAxisMapping" "4 5 6 7" EndSection
Monitor: This section shows where the monitor is connected and it describe how it is used.
Section "Monitor" Identifier "Monitor0" VendorName "Monitor Vendor" ModelName "Monitor Model" EndSection
Device: This is where the physical video card is described.
Section "Device" ### Available Driver options are:- ### Values: <i>: integer, <f>: float, <bool>: "True"/"False", ### <string>: "String", <freq>: "<f> Hz/kHz/MHz", ### <percent>: "<f>%" ### [arg]: arg optional #Option "HWcursor" # [<bool>] #Option "DirectPresents" # [<bool>] #Option "HWPresents" # [<bool>] #Option "RenderCheck" # [<bool>] Identifier "Card0" Driver "vmware" BusID "PCI:0:2:0" EndSection
Screen: This section combines Monitor and Device.
Section "Screen" Identifier "Screen0" Device "Card0" Monitor "Monitor0" SubSection "Display" Viewport 0 0 Depth 1 EndSubSection
In /usr/share/X11/xorg.conf.d directory, here we can find the keyboard configuration file called
40-libinput.conf but the name depends on your distribution, this file has a section for keyboard configuration;
Section "InputClass" Identifier "libinput keyboard catchall" MatchIsKeyboard "on" MatchDevicePath "/dev/input/event*" Driver "libinput" EndSection
You can change the above section in order to get keyboard of your choice.
Generaring Xorg Configuration File
You can create a permanent
/etc/X11/xorg.conf file even though after system startup, X creates its own configuration.
Run the following command first;
$ sudo Xorg -configure _XSERVTransSocketUNIXCreateListener: ...SocketCreateListener() failed _XSERVTransMakeAllCOTSServerListeners: server already running (EE) Fatal server error: (EE) Cannot establish any listening sockets - Make sure an X server isn't already running(EE) (EE) Please consult the The X.Org Foundation support at http://wiki.x.org for help. (EE) Please also check the log file at "/var/log/Xorg.0.log" for additional information. (EE) (EE) Server terminated with error (1). Closing log file.
We get an error that server already running. To avoid this error specify the
DISPLAY as follows;
$ sudo Xorg :1 -configure X.Org X Server 1.20.9 X Protocol Version 11, Revision 0 Build Operating System: Linux 4.15.0-140-generic x86_64 Ubuntu Current Operating System: Linux bett 5.4.0-73-generic #82-Ubuntu SMP Wed Apr 14 17:39:42 UTC 2021 x86_64 Kernel command line: BOOT_IMAGE=/boot/vmlinuz-5.4.0-73-generic root=UUID=03191270-7598-4535-8b9f-d79d4aacb321 ro quiet splash Build Date: 08 April 2021 12:29:22PM xorg-server 2:1.20.9-2ubuntu1.2~20.04.2 (For technical support please see http://www.ubuntu.com/support) Current version of pixman: 0.38.4 Before reporting problems, check http://wiki.x.org to make sure that you have the latest version. Markers: (--) probed, (**) from config file, (==) default setting, (++) from command line, (!!) notice, (II) informational, (WW) warning, (EE) error, (NI) not implemented, (??) unknown. (==) Log file: "/var/log/Xorg.1.log", Time: Tue Jun 8 08:49:57 2021 List of video drivers: amdgpu ati intel nouveau qxl radeon vmware modesetting fbdev vesa (++) Using config file: "/root/xorg.conf.new" (==) Using system config directory "/usr/share/X11/xorg.conf.d" Xorg detected your mouse at device /dev/input/mice. Please check your config if the mouse is still not operational, as by default Xorg tries to autodetect the protocol. Your xorg.conf file is /root/xorg.conf.new To test the server, run 'X -config /root/xorg.conf.new'
In the above output, the
xorg.conf.new file has been created in
/root directory. So you have to move this file to
/etc/X11 directory and rename it as
$ sudo mv /root/xorg.conf.new /etc/X11/xorg.conf
Managing Access to the X server
For X server access control, we use
xhost program to add users, hostnames for those who are allowed to make connections to X server. It is also used to delete them when they are no longer wanted.
xhost [[+-]name …]
+ sign: means access is granted to everyone, even if they aren’t on the list.
$ xhost + access control disabled, clients can connect from any host
-sign: means access is restricted to only those on the list.
$ xhost - access control enabled, only authorized clients can connect
+name: The given name is added to the list allowed to connect to the X server.
$ xhost +bett bett being added to access control list
-name: The given name is removed from the list of allowed to connect to the server.
$ xhost -bett bett being removed from access control list
xauth is X authority file utility. With this program, the authorization information used in connecting to the X server is displayed and edited.
xauth [ -f authfile ] [ -vqibn ] [ command arg … ]
Awareness of Wayland
The Wayland project which was started in 2010 is still under development and it is a new display protocol developed to replace X Window System. Currently, modern Linux Distros are using it as their main display server. Wayland has Gtk+ and Qt toolkit which provide rendering rather than server running between client and kernel in X Window System. For rendering to take place, Linux kernel make request through the Wayland protocol.
Wayland compositor receive the request from Wayland protocol which was forwarded by the kernel which then control window management, input and composition.
The applications that still uses X Window System there is
XWayland that handles them, this is a X server running within Wayland client and helps in rendering contents in client windows within X server.
WAYLAND_DISPLAY environment variable is used in Wayland protocol. We can use the following command to check the system if it is using Wayland;
$ echo $WAYLAND_DISPLAY wayland-0
The output above shows that the system display is running Wayland.
We are glad you have known how to how to install and configure X11 on Linux. Stay tuned for other LPIC 102 guides.