LPIC-1 Tema 106.1: introducción a X11

Siguiente entrega sobre la serie de artículos sobre las certificaciones LPIC-1, comenzando ya el bloque temático 106, es decir, el referente a las interfaces de usuario y escritorios. Concretamente, este tema 106.1 está centrado en la instalación y algunas cosas esenciales sobre el servidor gráfico X.

Los candidatos deben tener las competencias básicas para poder instalar y configurar un servidor gráfico X, comprender su arquitectura, saber comprender y modificar su fichero de configuración, comprender componentes de los entornos de escritorio, gestores de ventanas, así como algunos conocimientos sobre el moderno Wayland.

Servidor X-Window System

X-Window arquitectura

El servidor gráfico X-Window o simplemente X o X11, es un protocolo que sigue un modelo cliente-servidor, donde el servidor X provee de lo necesario a los clientes (aplicaciones gráficas). Por ejemplo, si usas GIMP para dibujar, éste le «pedirá» al servidor X que dibuje lo que quiera que estés haciendo en pantalla, que se atienda a las peticiones de un dispositivo de entrada (ratón, teclado,…), etc.

Una peculiaridad de X es que puede gestionar incluso clientes que se encuentren en una máquina remota. Es decir, un cliente podría hacer uso de un servidor X remoto a pesar de que el cliente no cuente con X local.

Wayland

Actualmente han surgido alternativas al viejo y complejo X, como es el caso de Wayland. Este tipo de proyectos pretenden traer una simplicidad mayor y adaptarse a los nuevos requerimientos de los entornos gráficos modernos.

Componentes básicos de X.org

Debes conocer lo básico sobre la arquitectura de este servidor gráfico o, al menos, sus componentes:

  • X11: protocolo de conexión.
  • xlib: biblioteca del lado del cliente para gestionar las ventanas y usada por kits como Qt y GTK+.
  • XCB: es una API de bajo nivel sobre la que se apoya xlib.
  • X.org: implementación del lado del servidor de este sistema gráfico.
  • XRender: extensión para soportar primitivas de dibujo con anti-aliasing, gradientes, etc. Es usado por apps 2D.
  • XSHM: extensión para el despliegue de bitmap rápido de forma local.
  • Xv: extensión para aceleración de vídeo por hardware.
  • GLX: extensión para OpenGL y la integración de esta API gráfica en X.
  • Ximera: extensión para soporte multimonitor.
  • XRandR: extensión para poder ajustar modos gráficos (resolución, etc.), sin tener que reiniciar el servidor gráfico.
  • DDX y DIX: subsistemas para interactuar con los clientes y el hardware.
  • Glamour: sustituto de DDX para aceleración 2D.
  • UXA: sucesor de EXA, y es Unified Memory Acceleration Architecture.
  • Otras: también existen otras partes y sistemas, pero no tan importantes.

En futuros artículos explicaré la compleja pila gráfica de Linux, que da para un largo artículo…

Ficheros y comandos que debes conocer

Existen algunos ficheros y comandos básicos que deberías conocer. Entre ellos destacan:

  • DIPSLAY: variable de entorno usada por X. Esta variable es hostname:D.S, donde hostname es el nombre de la máquina donde está corriendo el servidor X (si se omite se toma localhost por defecto), D es un número que indica la pantalla conectada al equipo (normalmente es 0 si solo hay una o puede variarse si hay multimonitor), y S es otro número de pantalla actual si hubiera varias. Por ejemplo, podría ser localhost:0.0.
  • Xorg (la X va en mayúscula): es un comando con el que puedes controlar ciertas funciones de X, así como crear un fichero de configuración nuevo. Por ejemplo:
#Crear un fichero de configuración xorg.conf nuevo (debes detener el gestor)
Ctrl+Alt+F1
/etc/init.d/gdm stop || /etc/init.d/gdm3 stop || /etc/init.d/kdm stop || /etc/init.d/xdm stop || /etc/init.d/lightdm stop
cd /etc/X11/
Xorg -configure
reboot

#Más información
man Xorg
  • startx: comando para arrancar la sesión gráfica desde el modo texto.
  • /etc/X11/: aquí encuentras la configuración de X. Aquí es donde debe estar el fichero de configuración principal si lo has generado previamente, es decir, xorg.conf.
  • ~/.xsession-errors: es un fichero de log (registro) usado por X para registrar allí todos los errores que se producen relacionados con el sistema gráfico. Es interesante comprobarlo para ver qué está ocurriendo en caso de problemas.
  • xhost: es un comando para el control del acceso al servidor X. Por ejemplo:
#Permitir acceso a todos los usuarios
xhost +

#Permitir acceso solo a Isaac
xhost +Isaac

#Restringir el acceso a Israel
xhost -Israel

#Ayuda
man xhost
xhost -help
  • xauth: comando usado para editar y mostrar la información sobre las autorizaciones de las conexiones al servidor X. Por ejemplo:
#Listar entradas
xauth list
xauth list $DISPLAY

#Agregar una entrada
xauth add iandatux/unix:  MIT-MAGIC-COOKIE-1 4d22408a71a55b41ccd1657d377923ae

#Eliminar una acceso cuando ya no se necesite
xauth remove $DISPLAY

#Manual
man xauth

xorg.conf

Debes saber que xorg.conf se divide en secciones acotadas entre Section y EndSection. Cada una de ellas para controlar algún parámetro o componente. Entre las más destacadas se encuentran:

  • Module: para cargar módulos necesarios.
  • InputDevice: configuración de dispositivos de entrada, como teclados, joysticks, ratones, tabletas digitales, etc. Habrá tantas secciones como dispositivos tengamos.
  • Monitor: sección para configurar las opciones del monitor, como la frecuencia de refresco, resolución, etc.
  • Device: sección dedicada a algunos drivers.
  • Screen: se encarga de informar al servidor gráfico de los monitores y GPUs en uso.
  • ServerLayout: aquí puedes configurar uno o varios monitores y GPUs.
  • Files: aquí se detallan las fuentes y tablas de colores RGB.
  • ServerFlags: indicadores generales o globales para X.
  • Otras: existen más.

Un ejemplo de xorg.conf real sería el siguiente:

Cuidado con lo que tocas si no sabes lo que estás haciendo…

################################################################################
# Filename:      /etc/X11/xorg.conf
# Purpose:       config file for xserver
# Bug-Reports:   see http://grml.org/bugs/
# See also:
#   /usr/share/doc/xserver-xorg/   and
#   http://wiki.x.org/wiki/Home    and
#   http://ftp.x.org/pub/X11R7.0/doc/html/index.html for information on Xorg
# Refer to the xorg.conf man page and to
# http://ftp.x.org/pub/X11R7.0/doc/html/xorg.conf.5.html
# for details about the format of this file.
#
# If you would like this file to be automatically reconfigured by debian,
# run the following command:
#   sudo dpkg-reconfigure -phigh xserver-xorg
################################################################################

Section "ServerLayout"
        Identifier     "XServer Configured"
        Screen      0  "Screen0" 0 0
        InputDevice    "Keyboard0"  "CoreKeyboard"
        InputDevice    "USB Mouse"  "CorePointer"
        # InputDevice    "PS/2 Mouse" "CorePointer"
EndSection

Section "ServerFlags"
        Option "AllowMouseOpenFail"  "true"  # allows the server to start up even if the mouse does not work
        Option "DontVTSwitch"        "false" # allow switching between virtual terminal
        # Option "DontZoom"            "true"  # disable <Crtl><Alt><KP_+>/<KP_-> (resolution switching)
EndSection

Section "Files"
#        RgbPath      "/usr/X11R6/lib/X11/rgb"
#        ModulePath   "/usr/X11R6/lib/modules"
# More information:  http://ftp.x.org/pub/X11R7.0/doc/html/fonts.html
        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     "/usr/X11R6/lib/X11/fonts/misc:unscaled"
        FontPath     "/usr/X11R6/lib/X11/fonts/misc"
        FontPath     "/usr/X11R6/lib/X11/fonts/75dpi:unscaled"
        FontPath     "/usr/X11R6/lib/X11/fonts/75dpi"
        FontPath     "/usr/X11R6/lib/X11/fonts/100dpi:unscaled"
        FontPath     "/usr/X11R6/lib/X11/fonts/100dpi"
# True type and type1 fonts are also handled via xftlib, see /etc/X11/XftConfig!
        FontPath     "/usr/X11R6/lib/X11/fonts/Type1"
        FontPath     "/usr/share/fonts/ttf/western"
        FontPath     "/usr/share/fonts/ttf/decoratives"
        FontPath     "/usr/share/fonts/truetype/ttf-bitstream-vera"
        FontPath     "/usr/share/fonts/latex-ttf-fonts"
        FontPath     "/var/lib/defoma/x-ttcidfont-conf.d/dirs/TrueType"
EndSection

# Modules - see /usr/lib/xorg/modules/fonts and /usr/lib/xorg/modules/extensions
Section "Module"
        Load  "dbe"       # double buffer extension
        Load  "dri"       # direct rendering
        Load  "glx"       # 3D layer
        Load  "extmod"    # some commonly used server extensions (e.g. shape extension)
        Load  "record"    # recording extension
        Load  "evdev"     # generic input handling driver on Linux
        # Load  "bitmap"    # bitmap fonts
        # Load  "ddc"       # ddc probing of monitor
        # Load  "freetype"  # font rendering
        # Load  "GLcore"    # render OpenGL in software
        # Load  "i2c"       # I2C bus
        # Load  "int10"     # initialize graphics cards via int10 call to the BIOS
        # Load  "speedo"    # font module
        # Load  "type1"     # font module
        # Load  "v4l"       # Video for Linux
        # Load  "vbe"       # Vesa BIOS Extension
# Valid entries - see /usr/lib/xorg/modules/[extensions/]
# afb bitmap cfb cfb16 cfb24 cfb32 cw damage dbe ddc dri drm extmod fb
# fbdevhw freetype GLcore glx i2c int10 int10 layer mfb pcidata rac ramdac
# record scanpci shadow shadowfb type1 vbe vgahw xaa xf1bpp xf24_32bpp xf4bpp
# xf8_16bpp xf8_32bpp xtrap
EndSection

# If you'd like to switch the positions of your capslock and control keys, use:
# Option "XkbOptions" "ctrl:swapcaps"
# Or if you just want both to be control, use:
# Option "XkbOptions" "ctrl:nocaps"
# More information: http://ftp.x.org/pub/X11R7.0/doc/html/XKB-Config.html
Section "InputDevice"
        Identifier  "Keyboard0"
        Option      "CoreKeyboard"
        Driver      "kbd"
        #Option      "XkbRules"   "xfree86"
        Option      "XkbRules"   "xorg"
        Option      "XkbModel"   "pc105"
        Option      "XkbLayout"  "us"
        #Option      "XkbVariant" "nodeadkeys"
        #Option      "XkbOptions" "ctrl:swapcaps,grp:alt_shift_toggle,grp_led:scroll,compose:menu"
EndSection

# More information: http://ftp.x.org/pub/X11R6.9.0/doc/html/mouse.html

Section "InputDevice"
        Identifier      "USB Mouse"
        Driver          "mouse"
        Option          "Device"                "/dev/input/mice"
        Option          "Protocol"              "auto"
        Option          "ZAxisMapping"          "4 5"
        Option          "Buttons"               "5"
        Option          "SendCoreEvents"        "true"
EndSection


Section "InputDevice"
        Identifier  "PS/2 Mouse"
        Driver      "mouse"
        Option      "Device" "/dev/input/mice"
        # Option      "Device" "/dev/psaux"
        Option      "Protocol" "PS/2"
        Option      "Emulate3Buttons" "true"
        Option      "Emulate3Timeout" "70"
        Option      "SendCoreEvents"  "true"
EndSection


# Example for a Elo touchscreen:
# Section "InputDevice"
#     Identifier  "touchscreen"
#     Driver "elographics"
#     Option "Device" "/dev/ttyS0"
#     Option "SendCoreEvents" "true"
#     Option "MinX" "4070"
#     Option "MaxX" "0"
#     Option "MinY" "36"
#     Option "MaxY" "3960"
#     Option "ScreenNo" "1"
#     Option "BaudRate" "9600"
#     Option "StopBits" "1"
#     Option "DataBits" "8"
#     Option "Parity" "None"
#     Option "Vmin" "10"
#     Option "Vtime" "1"
#     Option "FlowControl" "None"
#     Option "PortraitMode" "Portrait"
#     Option "PortraitMode" "PortraitCCW"
#     Option "SwapXY" "true"
#     Option "UntouchDelay" "3"
#     Option "ReportDelay" "1"
# EndSection

Section "Monitor"
        Identifier   "Monitor0"
#       ModelName    "Old Monitor (no DDC)"
        Option       "DPMS"      "true"
#       HorizSync    28.0 - 78.0 # Warning: This may fry very old Monitors
#       HorizSync    28.0 - 96.0 # Warning: This may fry old Monitors
        HorizSync    31.0 - 61.0
#       VertRefresh  50.0 - 76.0 # Very conservative. May flicker.
#       VertRefresh  50.0 - 60.0 # Extreme conservative. Will flicker. TFT default.
        VertRefresh  50.0 - 90.0
# Need more information?
#  http://xtiming.sourceforge.net/cgi-bin/xtiming.pl
#  http://en.tldp.org/HOWTO/XFree86-Video-Timings-HOWTO/
EndSection

Section "Device"
        ### Available Driver options are:
        ## sw_cursor is needed for some ati and radeon cards
        # Option     "sw_cursor"
        # Option     "hw_cursor"
        # Option     "NoAccel"
        # Option     "ShowCache"
        # Option     "ShadowFB"
        # Option     "UseFBDev"
        # Option     "Rotate"
        ## xorg + nvidia:
        # Option "RenderAccel" "true"
        # Option "AllowGLXWithComposite" "true"
        Identifier  "Card0"
        Driver      "vesa"
        VendorName  "All"
        BoardName   "All"
        ## Workaround for drivers which send output to wrong device:
        # Option "MonitorLayout" "LVDS, AUTO"
        # Option "MonitorLayout" "LVDS, CRT"
        # Option "MonitorLayout" "NONE, STV"
        # Option "MonitorLayout" "LVDS"
        ## Specify BusID:
        # BusID       "PCI:1:0:0"
EndSection

Section "Screen"
        Identifier "Screen0"
        Device     "Card0"
        Monitor    "Monitor0"
        DefaultColorDepth 16
        SubSection "Display"
                Depth     1
                Modes "1024x768" "800x600" "640x480"  "1600x1200" "1280x1024" "1280x960"
        EndSubSection
        SubSection "Display"
                Depth     4
                Modes "1024x768" "800x600" "640x480"  "1600x1200" "1280x1024" "1280x960"
        EndSubSection
        SubSection "Display"
                Depth     8
                Modes "1024x768" "800x600" "640x480"  "1600x1200" "1280x1024" "1280x960"
        EndSubSection
        SubSection "Display"
                Depth     15
                Modes "1024x768" "800x600" "640x480"  "1600x1200" "1280x1024" "1280x960"
        EndSubSection
        SubSection "Display"
                Depth     16
                Modes "1024x768" "800x600" "640x480"  "1600x1200" "1280x1024" "1280x960"
        EndSubSection
        SubSection "Display"
                Depth     24
                Modes "1024x768" "800x600" "640x480"  "1600x1200" "1280x1024" "1280x960"
        EndSubSection
        SubSection "Display"
                Depth     32
                Modes "1024x768" "800x600" "640x480"  "1600x1200" "1280x1024" "1280x960"
        EndSubSection
EndSection

# Make sure you have the relevant Debian packages on your system
# to be able to use DRI (libgl1-mesa-dri for example)
Section "DRI"
        Mode 0666
EndSection

#Section "Extensions"
#    Option "Composite" "Enable"
#EndSection

## END OF FILE #################################################################

Isaac

Apasionado de la computación y la tecnología en general. Siempre intentando desaprender para apreHender.

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

A %d blogueros les gusta esto:

Si continuas utilizando este sitio aceptas el uso de cookies. más información

Los ajustes de cookies de esta web están configurados para "permitir cookies" y así ofrecerte la mejor experiencia de navegación posible. Si sigues utilizando esta web sin cambiar tus ajustes de cookies o haces clic en "Aceptar" estarás dando tu consentimiento a esto.

Cerrar