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.
ÍNDICE:
Servidor X-Window System
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.
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 #################################################################