#4sysadmins

Inicio » LPIC-1 Capítulo 6

LPIC-1 Capítulo 6

EN ESTE CAPÍTULO SE ABARCAN LOS SIGUIENTES OBJETIVOS DEL EXAMEN:

  • 106.1: Instalar y configurar X11 (2)
  • 106.2: Configurar un administrador de pantalla (1)
  • 106.3: Accesibilidad (1)
  • 107.3: Localización e internacionalización (3)
  • 108.1: Mantener la hora del sistema (3)
  • 108.4: Administrar impresoras e impresión (2)

 

 

Configurar el sistema de ventanas X, localización e impresión

Sobre X Windows System

“Parte de la siguiente información está extraída de https://www.freebsd.org/doc/es_ES.ISO8859-1/books/handbook/x11-wm.html

En Linux la principal GUI se denomina sistema de ventanas X o “X Windows System” (X para abreviar). Fue diseñado desde el principio pensando en redes y adoptó un modelo cliente-servidor. X Windows System es independiente del protocolo y de la red, por lo que existen muchas posibles configuraciones para ejecutar el modelo cliente-servidor en diferentes equipos conectados a una red. El servidor es responsable de manejar la pantalla, la entrada de datos a través del teclado, el ratón, etc. Cada aplicación X (como una XTerm, Firefox, Gedit, etc…) es un cliente. Para un sistema local el servidor y cliente se ejecutarán en la misma máquina, no obstante la gran ventaja radica si por ejemplo tenemos un servidor potente en la oficina o casa que haga de cliente (es decir ejecutará las aplicaciones que vayamos a utilizar) mientras son administradas y accedidas desde distintos servidores X como pueden ser el resto de ordenadores personales de la familia o compañeros de trabajo.

Importante: Recuerde que el servidor X es la máquina con el monitor y el teclado, mientras que los clientes X son los programas que muestran las ventanas (las propias aplicaciones).

X no impone la manera en la que deben de gestionarse las ventanas (cómo moverlas con el ratón, cómo deben ser las barras de título en cada ventana, si tienen o no botón de cierre, etc…) sino que delega esta responsabilidad en una aplicación llamada gestor de ventanas (Mutter, Kwin, Muffin, compiz, fluxbox, Window Maker, etc…) que nos ofrecerá un aspecto diferente en función de cual usemos.

Nota: Algunos entornos de escritorio como KDE, GNOME y Cinnamon tienen sus propios gestores de ventanas integrados con el escritorio. Mutter, Kwin y Muffin serán los gestores de ventanas actuales para GNOME, KDE y Cinnamon respectivamente.

Además de los entornos de escritorio (que veremos en breves) y sus gestores de ventanas, es importante conocer el papel del gestor de pantalla X (Session Manager o X Display Manager) y los gestores de archivos (File Manager).

  • El gestor de pantalla X es una parte opcional del sistema X Window que se usa para la gestión de sesiones. XDM dispone de un interfaz gráfica para elegir a qué pantalla se quiere conectar y pedir la información de autentificación como el nombre de usuario y le contraseña. Esto quiere decir que se encarga de las entradas al sistema en la pantalla a la que está conectado y arranca el gestor de sesiones para que lo utilice el usuario (normalmente un gestor de ventanas X). Al finalizar sesión XDM envía la señal de que el usuario ha terminado y que se le debería desconectar de la pantalla. En este punto XDM puede mostrar las pantallas de entrada al sistema y de selección de pantalla para que el siguiente usuario intente acceder al sistema.

Nota: Veremos mas sobre los gestores de pantalla en la sección “Configurar servidores XDMCP” de este mismo capítulo.

  • El gestor de archivos proporciona un punto de acceso integrado a los archivos y aplicaciones. Mediante un gestor de archivos podremos crear, mostrar, gestionar y personalizar las carpetas y documentos, además de permitirnos navegar por el sistema de archivos. Existen multitud de gestores de archivos para GNU/Linux por ejemplo:
    • Dolphin: Administrador de archivos por defecto en KDE. Cuenta con una interfaz fácil de usar.
    • Nautilus: Gestor de archivos por defecto en GNOME, Nautilus tiene una interfaz intuitiva y se puede ampliar mediante plugins.
    • Thunar: Es el administrador de archivos por defecto en el escritorio Xfce. Su objetivo es mantenerse simple ofreciendo únicamente las funciones básicas. No tiene soporte para el uso de pestañas pero cuenta con una barra lateral izquierda para acceder rápidamente a los lugares comunes
    • Nemo: Es el gestor de archivos por defecto en el entorno de escritorio Cinnamon. Es un fork de Nautilus pero ofrece algunas ventajas extras.
    • Double Commander: Ofrece dos interfaces, GTK y Qt. GTK combina bien con GNOME, mientras que Qt se adapta mejor en KDE. Viene con un estilo de doble panel e incluye un gran número de opciones de configuración.
    • Midnight Commander: Es un popular administrador de archivos de doble panel para la terminal, basado en la biblioteca ncurses.

Entornos de escritorio

Un entorno de escritorio puede ser cualquier cosa que vaya desde un simple gestor de ventanas hasta una completa suite de aplicaciones de escritorio como KDE o GNOME, en la que se integra su propio gestor de ventanas, gestor de archivos y multitud de utilidades y aplicaciones que hacen la vida mas fácil al usuario del sistema.

Los principales entornos de escritorios son:

  • GNOME: Es un entorno de escritorio amigable que permite a los usuarios una configuración fácil de sus sistemas gracias a su panel con el que poder iniciar las aplicaciones y mostrar su estado, el escritorio y un conjunto de herramientas y aplicaciones de escritorio estándar. La manera más fácil de arrancar GNOME es con GDM, el gestor de pantalla de GNOME, que se instala con el escritorio GNOME al ser parte del mismo, aunque venga desactivado por omisión. Podremos activarlo añadiendo gdm_enable=”YES” a /etc/rc.conf. Tras reiniciar, GNOME arrancará automáticamente al acceder al sistema; no es necesario configurar nada más.
  • KDE: Es un entorno de escritorio contemporáneo y fácil de usar el cual ofrece al usuario un bonito escritorio y transparente en red, un sistema de ayuda integrado que facilita un acceso adecuado, un gran número de útiles aplicaciones como su famoso navegador web Konqueror, menús y barras de herramientas estándares, teclas programables, esquemas de color, etc
  • XFce: Es un entorno de escritorio basado en el toolkit GTK utilizado por GNOME pero es mucho más ligero y está pensado para aquellos que quieran un escritorio sencillo, eficiente y fácil de utlizar y configurar. XFce ofrece interesantes características como su fácil configuración utilizando el ratón (con arrastrar y soltar), menú y accesos directos a aplicaciones, gestor de ventanas integrado, rápido, ligero y eficiente (ideal para máquinas viejas o con escasos recursos.
  • Cinnamon: Es un fork (derivación) de Gnome Shell, basado en Gnome 3. Tiene una apariencia minimalista pero bastante bonita y la funcionalidad de Gnome 2 mezclada con algunas cosas de Gnome 3 como el área de aplicaciones y escritorios ya bien conocida en Gnome Shell. La distribución con la que fue desarrollada fue Linux Mint la cual está bastante orientada al usuario Novel y proveniente de otros sistemas como Mac o Windows

 

Servidores X

Principales servidores X

  • XFree86: Servidor X dominante hasta 2004, la mayoría de los sistemas modernos ejecutan XFree86 4.x o X.org-X11. Con algunas tarjetas antiguas es posible que tenga que recurrir a este servidor X e incluso a versiones anteriores a la 4.x
  • X.org-X11: Es el servidor incluido en las distribuciones mas modernas, se basa en XFree86, ambos son virtualmente idénticos en la mayoría de los aspectos importantes. Una diferencia significativa es el nombre del archivo de configuración y la ubicación de las fuentes.

Nota: Tanto XFree86 4.x como X.org-X11 admiten una arquitectura modular de controladores, lo que significa que puede hacerse con un módulo de controladores específicos para su tarjeta y usarlo con cambios mínimos en su configuración de X. Si tienes problemas con los controladores estándar de vídeo de X, puede descargar de la página del fabricante aquellos que sean para su modelo de gráfica y tengan soporte para Linux.En ocasiones son estrictamente necesarios como por ejemplo para funciones de aceleración 3D en tarjetas modernas. Quizás tenga que reinstalar los controladores de fabricantes como Nvidia o ATI cuando actualice su kernel.

  • Accelerated-X: Es un servidor comercial que sirve como alternativa a los de código libre mencionados anteriormente. Su base de controladores son independientes y las herramientas y los archivos de configuración son completamente diferente a los de XFree86 y X.org-X11.

Herramientas, configuración y opciones del servidor X

En ocasiones tendrá que recurrir a los archivos de configuración del servidor X para modificar ciertos aspectos de su configuración, como el teclado, ratón, tarjeta de vídeo, etc.. podemos hacer uso de determinadas utilidades para tal fin como por ejemplo:

  • El servidor X posee la capacidad de consultar el hardware y generar un archivo de configuración mediante las herramientas xfree86 -configure o xorg -configure que cargarán todos los drivers y módulos del hardware y lo escribirán en un archivo xf86config.new o xorg.conf que nos valdrá como punto de partida. Es indispensable ejecutar estos comandos en modo monousuario o runlevel 3, donde la interfaz gráfica no esté configurada para iniciarse. Si hemos realizado algunos cambios podremos arrancar nuevamente X para comprobarlos con startx o pasando a un modo de ejecución donde X este activa. Si seguimos sin conseguir los objetivos podremos pasar nuevamente a modos de consola. Una vez hayamos configurado en gran medida nuestro servidor X podremos ejecutar telinit 5 para activar el modo gráfico. En sistemas Debian y derivados lo mejor será matar el servidor X mediante el comando kill o Control+Alt+Retroceso y volviendo a iniciar con el script de inicio.
  • Cada distribución suele contar con sus propias herramientas para configurar el servidor X como es el caso de RedHat que cuenta con system-config-display o la distribución SUSE con sus herramientas YaST o YaST2.
  • Otras dos herramientas que actualmente se encuentran en desuso son xf86cfg y xorgcfg que si su distribución cuenta con ellas pueden serle de ayuda.
  • Para versiones anteriores a XFree86 4.x estas herramientas mencionadas no funcionarán ya que para esta versión del servidor de X se cuenta con herramientas como xf86config, xconfigurator o xf86setup.

Los nombres de los archivos de configuración y su ubicación suelen variar según el servidor de X que utilicemos, por ejemplo para xorg es posible que encontremos el archivo de configuración en /etc/xorg.conf o /etc/x11/xorg.conf, mientras que para XFree86 4.x es posible que se oculte con el nombre de XF86config-4 o XF86config en /etc/ o /etc/X11.
Estos archivos de configuración suelen estar divido por secciones, una por cada característica principal y que comienzan con una línea Section y el nombre de la sección y finalizan con EndSection. Veremos algunos ejemplos en los siguientes apartados.

Secciones principales de los archivos de configuración

Para XFree86 4.x y X.org-X11 las principales secciones son: Module, InputDevice, Monitor, Device, Screen y ServerLayout.

  • La sección Module, controla la carga de los módulos del servidor X que son los controladores de las características específicas del hardware. Su sección duele tener el siguiente aspecto:
Section "Module"
 Load "dbe"
 Load "glx"
 ...
Endsection
  • La sección InputDevice como su nombre indica referencia a los dispositivos de entrada, como por ejemplo al teclado y al ratón. La gran mayoría de secciones cuentan con la línea Identifier “nombre” que sirve para identificar el dispositivo del que trata y una serie de opciones o características del dispositivo.
Section "InputDevice"
 Identifier "Keyboard0"
 Driver "kbd"
 option "xkbmodel" "pc105"
 option "Autorepeat "500 200"
 ...
Ensection

Las líneas Identifier suelen utilizarse posteriormente en la sección ServerLayout, que digamos que es donde se unen diferentes dispositivos para realizar una función conjunta o en la sección Screen por ejemplo, si se tratase de monitores, para agrupar varios dispositivos de monitores en un mismo conjunto.

La línea Driver deja claro que indica el driver a cargar para hacer posible el uso del teclado.

Algunas opciones interesantes con respecto al teclado y al ratón son:

Autorepeat “500 200” : Indica que tiempo debemos de dejar pulsado una tecla (500 milisegundos) para que comience a repetirse el caracter y el tiempo que pasará hasta que vuelva a ser repetido, suponiendo que tenemos la tecla aun pulsada (200ms)

Device: Es una opción para el Identifier “Mouse0” y con ella indicamos el archivo de dispositivo por el cual se accede al ratón, por ejemplo /dev/input/mice, /dev/psaux (para el puerto de ratón PS/2), /dev/usb/usbmouse (un antiguo identificador de ratones USB), /dev/ttyS[0|1] (primer o segundo ratón RS-232).

Protocol: Indica el protocolo usado para el dispositivo. El protocolo “Auto” puede adivinar el protocolo que es necesario utilizar para el dispositivo en cuestión.

Nota: PS/2 es tanto una interfaz de hardware como un protocolo de software; muchos ratones USB utilizan el protocolo de ratón PS/2 aunque no usen el puerto de ratón PS/2 necesariamente.

Emulate3Buttons: En ratones sin bola, al pulsar ambos botones a la vez produce el efecto de apretar la ruleta, como si fuese un 3º botón.

ZaxisMapping: Asocia el efecto de “ruleta hacía arriba” y “ruleta hacia abajo” con los botones 4 y 5.

  •  La sección Monitor tiende a ser bastante extensa y define alguno de los aspectos mas delicados de la configuración de X, como la frecuencia de refresco y los posibles modos de resolución. La resolución deseada a emplear se define en la sección Screen. Algunas líneas de esta sección importantes podrían ser las que ajustan los modos de resolución (modeline) y las velocidades de refresco del monitor (horizontal y vertical).
Section "Monitor"
 ...
 HorizSync 30.0-83.0
 VertRefresh 55.0-75.0
 Modeline "1920x1080" 138.50 1920 1968 ....
 ...
Ensection

Las líneas HorizSync y VertRefresh definen el rango de velocidades de refresco horizontal y vertical que puede aceptar el monitor en Kilohercios (Khz) y hercios (Hz), respectivamente. Quiere decir esto que cuando el manual del fabricante del monitor especifica que el monitor puede trabajar en rangos de (por ejemplo) 27 a 96 kHZ en valores horizontales y de 50 a 160 Hz en valores verticales, el monitor estará preparado para admitir una velocidad de refresco vertical de hasta 160Hz dependiendo de la resolución, por ello estos valores determinan la resolución máxima. La velocidad máxima de refresco del monitor vendrá dada por los valores de refresco horizontal y vertical, y la resolución máxima.

Las líneas de modo (modeline) definen las combinaciones de tiempos horizontales y verticales que pueden producir una resolución y velocidad de refresco dadas. Si se le pide que genere una resolución concreta, X buscará todas las líneas de modos y empleará aquellas que ofrezcan la velocidad de refresco más alta a dicha resolución. Muchas archivos de configuración omiten estás líneas y se debe al uso de la característica DDC.

XFree86 4.x y Xorg-X11 suelen incluir la característica DDC (Data Display Channel): Protocolo que permite a los monitores indicar al ordenador sus velocidades máximas de refresco horizontal y vertical y las líneas de modo (modeline) apropiadas.

  • La sección Device define varias opciones especificas para servidores X como por ejemplo la tarjeta gráfica. En esta sección al igual que con el resto de dispositivos, se referencia a los drivers. Los nombres para los drivers de la tarjeta gráfica podemos deducirlos de los nombres de sus controladores que suele encontrarse en /usr/lib/xorg/modules/drivers (o lib64) o /usr/X11R6/lib/modules. Sus nombres suelen acabar en ‘_drv.0′
  • La sección Screen informa a X de la combinación de monitores y tarjetas de vídeo que se están utilizando, por medio de las líneas Monitor “Monitor0” y Device “Videocard0” ambas correspondientes a los identificadores (Identifier) de sus correspondientes secciones. Además es posible que la sección Screen esté dividida en sub-secciones que definen los diferentes modos de vídeo que puede utilizar X (resoluciones) con los que iniciar el monitor y la profundidad de color, que viene definida por la línea Depth. Por el contrario fuera de estas sub-secciones, es decir en la sección general de Screen aparecerá la línea DefaultDepth, que ya podemos imaginar para que es.

Section “Screen”
Identifier “Screen0”
Device “Videocard0”
Monitor “Monitor0”
DefaultDepth 24
SubSection “Display”
Depth 24
Modes “1920×1080” “1280×1024” “1024×768”
EndSubsection
SubSection “Display”
Depth 24
Modes “1024×768” “800×600” “640480”
EndSubSection
EndSection

Nota: La línea Modes especifica la resolución que deseamos emplear

  • Por ultimo, la sección ServerLayout, es la sección que reúne el resto de componentes de la configuración de X. Normalmente esta sección identifica una sección Screen o varias, dependiendo del número de monitores y dos secciones InputDevice uno para el teclado y otro para el ratón.

Nota: Muchos entornos de escritorio y otras utilidades de usuario ofrecen herramientas para definir opciones de dispositivos, por lo que los valores indicados en los archivos de configuración del servidor X pueden ser invalidados por los ajustes del usuario.

Para obtener información de la pantalla usamos la herramienta xdpyinfo. Esta herramienta nos ayudará a conocer el número de versión de X, la resolución y la profundidad de color de todas las pantallas actuales, información de extensiones de X (módulos de software que proporcionan capacidades ampliadas a X), etc..

 

Configurar las fuentes de X

El sistema de fuentes principal de X se puede definir desde el archivo de configuración de X. Otra opción es configurar un servidor de fuentes para gestionarlas de forma centralizada.

Las tecnologías de fuentes se pueden separar en dos categorías:

  • Fuentes de mapa de bits: El tipo mas simple de formato de fuente. Representa las fuentes mediante los pixeles individuales de un vector que pueden estar activos o inactivos (apropiadas para ordenadores con poca potencia). El problema principal de estas fuentes es que deben de optimizarse cada fuente para mostrarse con una resolución concreta.
  • Fuentes escalables: Corresponde a la mayoría de las fuentes modernas, son también conocidas como fuentes perfiladas. Este tipo de formato representa cada carácter como una serie de líneas y curvas en una matriz de alta resolución permitiendo al ordenador escalar cualquier tamaño de fuentes o resolución. Las fuentes escalables se suelen ver peor que las de mapa de bits.

Los dos formatos principales son PostScript Type 1 o Type 1 de Adobe y TrueType de Apple.

Configurar las fuentes básicas de X

Las fuentes básicas son aquellas gestionadas directamente por X. Para configurarlas, debe de hacer dos cosas: preparar un directorio de fuentes que las contenga y añadirlo a la ruta de fuentes de X.

Preparar un directorio fuente:

Los directorios para instalar las fuentes suelen ser /usr/X11R6/lib/X11/fonts para XFree86, /usr/share/fonts/ o /usr/share/X11/fonts para Xorg y /opt/fonts o /usr/local/fonts para fuentes externas. Las extensiones para las fuentes Type 1 son .pfa o .pfb y .ttf para fuentes TrueType

Una vez copiadas las fuentes a un directorio, deberá de preparar un archivo de resumen que las describa (fonts.dir o fonts.scale). El modo mas sencillo para crear estos archivos es utilizando mkfontscale y mkfontdir.

mkfontscale lee todas las fuentes del directorio actual y crea el archivo fonts.scale que es como el archivo fonts.dir pero describe solo fuentes escalables.
mkfontdir combina el archivo fonts.scale con el archivo fonts.dir, creando este si no existe ya.

Nota: Es preferible utilizar el programa mkfontscale ya que gestiona ambos tipos de fuentes.

Si vas a utilizar una distribución antigua puede probar con los programas alternativos ttmkfdir, para fuentes TrueType (fonts.dir) o type1inst para fuentes Type1

Nota: Las fuentes básicas presentan inconvenientes importantes:

  • La integración entre la visualización por pantalla e impresión no es fácil, por lo que son poco adecuadas para procesadores de texto o aplicaciones que generan salidas impresas.
  • Si están facilitadas por un servidor, se puede dar el caso que estén inaccesible por aplicaciones remotas no capaces de acceder al servidor (incluso que el servidor aparezca como caído en la red)
  • Tienen un soporte limitado o nulo para características tipográficas avanzadas.
  • No admiten suavizado.

Añadir fuentes a la ruta de fuentes de X:

Cuando haya configurado las fuentes en un directorio y creado el archivo correspondiente, deberá de añadir las fuentes a la ruta de fuentes de X editando la sección Files del archivo de configuración X.

Si su sección Files contiene las líneas FontPath que hacen referencia a unix:/7100, unix:/-1 o tcp/nombreservidor.dominio.edu:7100 su sistema estará configurado para obtener fuentes básicas de un servidor de fuentes X.

Para añadir su nuevo directorio de fuentes a la ruta de fuentes, duplique una de las líneas FontPath existentes y cambie la especificación del directorio para que apunte al nuevo. Si desea que sus nuevas fuentes invaliden las fuentes existentes, coloque el nuevo directorio al principio de la lista. Podremos añadir :unscale tras el nombre del directorio para indicar a X que utilice la fuente solo si coincide exactamente con el tamaño de fuente solicitado, es decir que no intente escalar las fuentes de ese directorio.

Para probar las nuevas fuentes el modo mas fiable de hacerlo es cerrar X y reiniciarlo. Hay métodos más rápidos pero pueden generar algún error, que es añadir la ruta de fuentes a un sistema en ejecución con el programa xset.

$ xset fp+ /el/directorio/fuentes
$ xset fp rehash

Donde:

fp+ indica que se añada el directorio al inicio del listado y rehash que se genere una nueva lista de directorio.

Configurar un servidor de fuentes

Algunos sistemas siguen usando servidores de fuentes, pero la mayoría han abandonado esta práctica. Para añadir un servidor de fuentes, primero deberemos de instalar las fuentes en el sistema como indicamos anteriormente y después modificaremos el archivo de configuración del servidor de fuentes (/etc/X11/fs/config o similar) donde indicaremos mediante la palabra ‘catalogue=‘ todos los directorios de fuentes, uno por cada línea y separados por coma ‘,‘ menos el último. A continuación reiniciaremos el servidor:

$ /etc/init.d/xfs restart

Configurar fuentes Xft

Xft está basado en parte en la biblioteca FreeType, biblioteca usada para renderizar fuentes TrueType y Type 1. Es un sistema basado en el cliente, admite el suavizado de fuentes y otras funcionalidades avanzadas.
Permite compartir los mismos directorios de fuentes para ambos sistemas es decir si ha preparado un directorio de fuentes como describimos anteriormente, puede añadirlo a Xft. Abra el archivo /etc/fonts/local.conf, /etc/fonts/fonts.conf o similar y busque la línea <dir>/directorio/de/fuente</dir>, duplíquela y modifique el directorio, apuntando al nuevo.

Nota: Si no existen líneas <dir>directorio</dir> tendrá que crearla justo antes de la línea </fontconfig>

Escriba fc-cache como root para que Xft recorra sus directorios de fuentes y cree archivos de índice similares a fonts.dir.

 

ADMINISTRA ACCESOS GUI

X es una GUI con acceso a red. Utiliza el protocolo XDMCP, por lo que podría administrar tanto la pantalla del servidor X local, como escuchar las conexiones de un servidor X remoto.

Existen varios métodos para iniciar el servidor XDMCP. Los dos más comunes son iniciarlo de manera más o menos directa desde init, a través de una entrada en /etc/inittab o sus archivos de configuración auxiliares, o bien iniciarlo como parte de un conjunto de scripts de inicio de un modo de ejecución. Podríamos iniciar o parar un servidor XDMCP con los scripts SysV /etc/init.d/xdm, kdm, mdm o gdm.

La mayoría de las distribuciones definen un servidor XDMCP de dos modos:

  1. Selección mediante archivo de configuración (/etc/sysconfig/desktop), definiendo la variable DISPLAYMANAGER=/etc/xdm o DISPLAYMANAGER=xdm
  2. Selección mediante Script de inicio: SysV (xdm, kdm, gdm…), Upstart o Systemd

Nota: Linux Mint define en su archivo de arranque /etc/init.d/mdm la variable DEFAULT_DISPLAY_MANAGER_FILE que apunta al archivo /etc/X11/default-display-manager cuyo contenido referencia al binario /usr/sbin/mdm

Configurar servidores XDMCP

En Linux son habituales cinco servidores XDMCP (X Display Manager Control Protocol):

  • XDM (X Display Manager): Mas antiguo y con menos funcionalidades. Acepta nombres de usuario y contraseñas pero no permite a los usuarios realizar otras acciones, como por ejemplo escoger que entorno de escritorio ejecutar (esto se configura a través de los archivos de acceso del usuario). Su archivo de configuración principal es /etc/X11/xdm/xdm-config. Podemos configurar el sistema para que responda a las peticiones de acceso remoto prestando atención a la línea DisplayManager.requestPort: 0 (en este caso, configurado para NO aceptar conexiones remotas). Para configurar xdm como servidor de acceso remoto, deberíamos cambiar 0 por 117 (puerto de XDMCP) y reiniciar xdm. Podemos controlar quien accede de forma remota al servidor xdm y de que modo configurándolo en el archivo /etc/X11/xdm/Xaccess, por ejemplo,
*.mydomain.es
miequipo.otrodominio.es
*mydomain.es CHOOSER BROADCAST

En las líneas anteriores estamos indicando que permitimos el acceso a todos los equipos del dominio “mydomain.es“, al equipo “miequipo.otrodomonio.es” y solo los equipos de “mydomain.es” podrán solicitar un selector (una visualización de los sistemas locales que aceptan conexiones XDMCP)

Existen diferentes archivos de configuración importantes relacionados con xdm. Cuando ejecutamos startx* este pasa a xinit el shell script /etc/X11/xinit/xinitrc, en el cual se pueden definir aspectos globales de configuración X, como poner un fondo, hacer que se lancen determinadas aplicaciones al inicio, iniciar el controlador de ventanas o incluso simplemente referenciar a otro archivo de configuración. El contenido de xinitrc puede ser anulado si existiese el archivo ~/.xinitrc, en que se configuran los aspectos de X a nivel local (de usuario). Podría ocurrir como comentábamos que xinitrc referencie a otro archivo como /etc/X11/Xsession. El archivo Xsession es otro script que realizará tareas de configuración e inicializará variables (similares a las variables de entorno pero que solo son aplicadas a programas basados en X) que apuntarán a otros archivos, realizándose así una configuración modular de X. Estos archivos de configuración pueden ser algunos como:

Xaccess: Donde se controla el acceso al servidor remoto

Xsession.options: Opciones globales de configuración

Xsession-errors: Normalmente se encuentra oculto en el home del usuario

Xservers: Servidores locales de xdm

Xsetup: Script que se ejecutará cuando se inicia xdm

Xstartup: Script que se ejecutará cuando un usuario acceda a XWindows.

Xresource: Se usa normalmente para cambiar el tamaño de las fuentes, colores e incluso conseguir bonitos efectos gráficos. Por ejemplo, si quisiéramos modificar el texto mostrado por XDM podríamos hacerlo modificando el recurso xlogin*greeting, el fondo de aplicaciones X, como el de la terminal con XTerm*Background: black, la barra de desplazamiento de la terminal Xterm*scrollBar True, etc…

(*) Puede ser una buena idea echarle un vistazo a este script de inicio, en él además de llamarse al script xinitrc, se definen variables de importante valor como, la terminal por defecto para el usuario (defaultclient=/usr/bin/term), el servidor por defecto (/usr/bin/X), argumentos por defecto para el cliente o servidor si se necesitasen (defaultclientargs= y defaultserverargs=, respectivamente), el display por defecto (defaultdisplay=”:0″) o la habilitación de autenticación de X (enable_xauth=1)

Nota: Estos archivos de configuración, como ya vimos con el archivo Xaccess, nos permiten el uso de comodines, por ejemplo ‘*‘ para referenciar a ‘todos‘.

  • KDM: Asociado con el proyecto KDE. KDM está basado en XDM por lo que comparte muchas de sus opciones de configuración. La ubicación de los archivos de configuración de KDM es impredecible, en ocasiones utiliza archivos de configuración de XDM (/etc/X11/…) y otras se encuentran en ubicaciones extrañas como /etc/kde//kdm o /usr/share/kd4/. KDM amplia XDM permitiendo a los usuarios seleccionar un tipo de sesión cuando acceden. La mayoría de estas opciones se encuentran definidas en el archivo kdmrc. Este archivo puede encontrarse seccionado con etiquetas como por ejemplo:[General]: Contiene las opciones globales como, ConfigVersión (no modificar, limpia las actualizaciones de versión automática), ConsoleTTYs (cuando pasamos al modo consola kdm monitorizará todas las líneas aquí presente), LockPidFile (por defecto en True, kdm utiliza el bloqueo de archivo para guardar múltiples administradores de pantallas en ejecución).[Xdmcp]:  Aquí se ajustan opciones relacionadas con el trabajo en red. De estar en en Enable se escucharán peticiones remotas, Port (indica el número de puerto, 117 para XDMCP).[Shutdown]: Contiene las opciones globales referentes al apagado del sistema.[X-*-Greeter]: Contiene las opciones relativas a la pantalla de ‘Bienvenida’. ColorSheme (configura el color de la pantalla de Bienvenida), GreetString (cabecera de la pantalla de Bienvenida), GreetFont (la fuente utilizada para la cabecera de Bienvenida), en definitiva, todo lo relacionado con la pantalla de bienvenida.
  • GDM: Gestor de pantallas de GNOME. Se ejecuta en 2º plano, dirige las sesiones de X y el inicio de sesión de usuario. No utiliza ningún código de XDM y es compatible con XDMCP. Puede ser instalado mediante el paquete gdm de los repositorios oficiales. Deberá de ser activado por systemd, mediante su script de inicio SysV o archivo de configuración Upstar (.conf). Desde la versión 2.28 no dispone de su herramienta de configuración ‘gdmsetup‘, debido a que ha sido integrado con el resto de GNOME. Su archivo de configuración se encuentra en /etc/gdm/custom.conf en el que podremos efectuar cambios como iniciar sesión automáticamente, iniciar sin contraseña, cerrar sin contraseña, cambiar la sesión predeterminada de inicio… Se encuentra seccionado como el de kdm.

Iniciar sesión automáticamente:

[daemon]
 # activar acceso automático para el usuario
 AutomaticLogin=nombredeusuario
 AutomaticLoginEnable=True

Añadir una demora en el ingreso:

TimedLoginDelay=1

Para cambiar la sesión predeterminada de GDM podemos crear el archivo ~/.dmrc con el siguiente contenido para pre-establecer cinnamon:

[Desktop]
 Session=cinnamon
  • MDM: Es un fork de GMD2 utilizado por Linux Mint, por lo que su configuración está basada en GMD.
  • LightDM (Light Display Manager): Compacto y compatible con varios entornos de escritorio. Es el gestor de sesión que aspira a ser el estándar para el sistema de ventanas de X11 y de Wayland. Se puede instalar desde los repositorios oficiales. Será necesario instalar tras este un greteer (interfaz de usuario para LightDM, login screen), se recomienda lightdm-gtk-greeter o lightdm-kde-greeter. Una vez instalado es necesario activarlo mediante systemd.

La instalación de lightDM se ubica bajo el directorio /etc/lightdm, donde encontraremos gran parte de los archivos de configuración como /etc/lightdm/lightdm.conf.d/*.conf o /etc/lightdm/lightdm.conf aunque es posible encontrar archivos bajo /usr/share/lightdm/lightdm.conf.d/*.conf  (no se recomienda editar estos últimos, serán anulados por los  del directorio /etc/lightdm). Podremos entonces modificar la configuración como por ejemplo habilitar el autologin, cambiar iconos, cambiar la imagen o el color de fondo, deshabilitar la sesión de invitados, etc… mediante los archivos de configuración de /etc/lightdm/ o los de configuración del propio greeter /etc/lightdm/lightdm-gtk-greeter.conf

Imaginemos que deseamos anular la configuración de inicio de sesión por defecto en Ubuntu la cual es proporcionada desde /usr/share/lightdm/lightdm.conf.d/50-ubuntu.conf . Deberemos entonces de crear un nuevo archivo de configuración /etc/lightdm/lightdm.conf.d/50-myconfig.conf con el siguiente contenido:

[SeatDefaults]
user-session=mysession

Existe un archivo adicional para configuraciones de inicio de sesión de los usuarios que es /etc/lightdm/users.conf, pero deberemos de tener en cuenta que este será anulando si el demonio ‘accountsservice‘ se encuentra en ejecución, podemos comprobarlo de la siguiente manera:

ps -aef | grep accountsservice

Algunos ejemplos:

  • Vamos a suponer que queremos deshabilitar el inicio de sesión para la cuenta de invitados (guest):
[SeatDefaults]
allow-guest=false
  • Ocultar las cuentas de inicio de sesión de los suarios del sistema en la pantalla de login:
[SeatDefaults]
greeter-hide-users=true
  • Permitir introducir un nombre de usuario manualmente para iniciar sesión:
[SeatDefaults]
greeter-show-manual-login=true
  • Usar un usuario predeterminado para iniciar sesión:
[SeatDefaults]
autologin-user=username
  • Cambiar la sesión por defecto:
[SeatDefaults]
user-session=name

Nota: El nombre de la sesión tiene que ser alguno de los instalados en: /usr/share/xsessions/*.desktop

 

  • Igualmente podríamos usar el archivo de configuración /etc/lightdm/lightdm-gtk-greeter.conf para cambiar la imagen de fondo de inicio de sesión. Deberemos de modificar la variable background del archivo tal que así:
background=/usr/share/pixmaps/black_and_white_photography-wallpaper-1920x1080.jpg

Nota: Para modificar el color, bastará con darle a esta variable un valor hexadecimal de color.

  • Si quisiéramos modificar la configuración para XDMCP, debemos de hacerlo desde el archivo de configuración /etc/lightdm/keys.conf

Lightdm tiene su propia herramienta de configuración de línea de comandos:

$ dm-tool –help

Alguna de las opciones que nos permite este comando son: cambiar entre sesiones de usuarios (incluyendo a una sesión de invitados), bloquear la sesión, listar las sesiones iniciadas, etc…

Igualmente podemos hacer uso del comando $ lightdm [opciones]

Nota: Como siempre en la sección de comandos, obtendremos mejor información.

Referencias:

https://wiki.ubuntu.com/LightDM

https://wiki.debian.org/LightDM

https://wiki.ubuntu.com/LightDM

Utilizar clientes X remotos

X es un servidor que se ejecuta en el ordenador del usuario. Los clientes X son los programas que ejecuta el usuario como xterm, kmail, libreoffice, etc… Cuando se utiliza X para un acceso remoto, el servidor X se ejecuta en el ordenador del usuario mientras que los clientes X se ejecutan en el sistema remoto. Normalmente, Linux está configurado de manera que su servidor X responda solo a las peticiones de acceso local como medida de seguridad. Para solucionar este problema deberemos de realizar cambios que variarán dependiendo de la distribución y en servidor X, por ejemplo:

Si usamos GMD revisaremos el archivo de configuración (gmd.conf, para versiones antiguas) y buscaremos la línea DisallowTCP=true cambiándola a false. Para versiones mas modernas de GDM editaremos su archivo de configuración (custom.conf) y añadiremos la línea DisallowTCP=false en la sección [Security]

Para los servidores KDM y XDM localizaremos el archivo Xservers y lo editaremos, eliminando el parámetro -nolisten tcp de la línea de configuración que comience con :0 permitiendo así la escucha de conexiones remotas.

Para sistemas openSUSE deberemos de editar el archivo ‘displaymanager‘ ubicado normalmente bajo /etc/sysconfig y estableceremos en ‘yes‘ la opción DISPLAYMANAGER_XSERVER_TCP_PORT_6000_OPEN

Nota: Puede que incluso en el propio script de inicio ‘startx‘ debamos de eliminar el valor -nolisten tcp de alguna variable, puede que de defaultserverargs. Esto no suele ser muy común pero deberemos de tenerlo en cuenta.

Tras realizar estos cambios será necesario reiniciar X

Ejemplo de conexión remota a X:

Ordenador A aloja programas importantes como eclipse, SQL Developer, procesadores de texto,etc.. El ordenador B, es un PC ‘estándar’ con un teclado y un monitor. Será B el PC en el que el usuario esté trabajando, es decir los programas se ejecutarán en el PC A, pero serán mostrados por la pantalla de B. A efectos visuales podriamos decir que es el PC B el que está realizando el groso del trabajo, pero no es así, realmente es A quien ofrece las aplicaciones. Esto podemos conseguirlo a través de varias formas, entre ellas podríamos destacar, la conexión SSH con X, xhost o VNC.

  • El protocolo SSH es una herramienta útil de acceso remoto para realizar conexiones de red seguras, es decir, transportar otro protocolo a través de su propia conexión codificada. La codificación de SSH quizás ralentice el acceso a X, aunque si activa las funciones de compresión de SSH puede que reduzca la gravedad de este problema.
    Este método requiere que se configuren ciertas opciones, concretamente deberemos de pasar la opción -X o -Y al programa cliente ssh o establecer la opción ForwardX11 o ForwardX11Trusted en ‘yes’ en el archivo de configuración del cliente ssh /etc/ssh_config. Además de esto, deberemos de establecer la opción X11Forwarding en ‘yes’ en el archivo de configuración del servidor /etc/sshd_config. Estas funciones activarán el reenvío de X por ssh.
  • El programa xhost se utiliza para agregar y eliminar nombres de hosts o de usuarios a la lista de ‘permitidos’ para realizar conexiones con el servidor X. En el caso de los hosts, proporciona una forma pobre de control de privacidad y seguridad.

Para usar este método necesitaremos indicar al cliente, que acepte los datos que el servidor proporcionará:

$ xhost +nombreservidor

Lo siguiente será comprobar la variable DISPLAY en el servidor, por lo que accederemos por ssh a ‘nombreservidor’ y la setearemos correctamente:

$ ssh nombredservidor
$ export DISPLAY=pccliente:0.0

Con este comando estaremos indicando a la máquina servidora que utilice a pc cliente para mostrar sus X

A continuación podremos ejecutar desde esa misma terminal los comandos que inicien los programas clientes y estos, serán mostrado por nuestra pantalla, con lo que delegaremos el mayor consumo de CPU al servidor.

Una vez terminemos, lo mejor será quitar el permiso para el host servidor en el pc cliente con la siguiente orden:

$ xhost -nombreservidor
  • VNC

Otra opción para ejecutar los programas X es utilizar el sistema VNC (Virtual Network Computing, Cálculo virtual de red). VNC ejecuta un servidor X en el ordenador servidor, mientras que el cliente tendrá su propia aplicación VNC cliente que contactará de forma remota con el servidor VNC. Esta forma de conexión puede ser beneficiosa en determinadas situaciones, como cuando se intenta acceder a un sistema desde detrás de ciertos tipos de corta-fuegos. Al ser un protocolo independiente de la plataforma se puede controlar un sistema Windows o Mac desde Linux.

 

ACCESIBILIDAD DE X

La utilidad AccessX es un programa antiguo (actualmente en desuso) que funciona en cualquier entorno de escritorio. AccessX y los paneles de control de los entornos de escritorio proporcionan opciones de accesibilidad. Este paquete no está disponible en muchas distribuciones y sus funciones se han integrado en paneles de control de los entornos de escritorio.

Teclado en pantalla

GOK (GNOME On-Screen Keyboard, Teclado en pantalla de GNOME), como su propio nombre indica es un teclado virtual, pero además proporciona herramientas que crean accesos directos para varias funciones de ratón, menús y barras de herramientas de otros programas.

Herramientas de aumento

Agrandan partes de la pantalla (normalmente el área que hay alrededor del ratón). Una de las lentes para pantallas es KMag.

Sintetizadores de voz

  • orca: lector de pantalla integrado en GNOME 2.16 y posteriores
  • Emacspeak: Similar a Orca en muchos aspectos pero amplia sus funcionalidades

Pantallas de Braille

BRLTTY es un demonio de Linux que redirecciona la salida de la consola en modo texto a una pantalla de Braille. Incluye características como desplazamientos, terminales virtuales e incluso un sintetizador de voz.

 

AJUSTAR LA HORA Y LA CONFIGURACIÓN LOCAL

Definir su zona horaria

Cuando nos comunicamos con otros ordenadores es aconsejable la definición de la zona horaria en cada equipo o incluso en cada sesión de cada equipo para ‘situarnos‘ mejor en el ambiente de trabajo, por ejemplo cuando estamos trabajando sobre un servidor localizado en Chicago y nosotros nos encontramos en nuestra oficina de España, podría resultar cómodo ver la hora en nuestro sistema y posteriormente en el servidor y comprobar que estamos bajo la misma franja horaria, es mas, será conveniente incluso utilizar la hora UTC, ya que es la utilizada para las marcas de tiempo en los nuevos archivos y directorios. De este modo se establecerán correctamente las marcas horarias de sus archivos y evitaremos extraños problemas temporales al intercambiar datos con estos servidores.

¿De donde surge el estandar UTC?

Cuando la comunicación entre distintos puntos distantes de la tierra se hizo algo elemental y necesario, apareció la necesidad de tener una hora común, por lo que se definió un estándar mundial de medición horaria. Este estándar se llama hora universal UT o UTC (Coordinated Universal Time) formalmente conocido como ‘Greenwich Mean Time‘ o GMT, debido a que se utiliza como hora local en Greenwich,Inglaterra. Cuando personas con diferentes horas locales necesitan comunicarse, pueden expresar el tiempo en hora universal, para que no exista confusión acerca de cuando deben suceder las cosas.

¿Porque existe el horario local o ‘time zone’?

El mediodía es el momento del día en el cual el Sol se encuentra en la posición más alta debido a la rotación de la Tierra. El momento del mediodía sucede en diferentes momentos en diferentes lugares. Esto nos conduce al concepto de hora local. Existen 24 zonas horarias en el planeta.
Es posible pensar que todos los lugares en donde el mediodía sucede en el mismo momento tienen la misma zona horaria, políticamente no siempre esto es posible. Por diversas razones, varios países adoptan el “horario de verano” (daylight savings time) para atender las demandas económicas.

Linux tiene un paquete de zonas horarias que reconoce todas las zonas horarias existentes, y puede ser fácilmente actualizado cuando las reglas cambian. Todos los usuarios pueden seleccionar la zona horaria apropiada.

Reloj de Hardware y reloj de Software

Una computadora tiene un reloj de hardware alimentado por una batería y que puede ser configurado directamente desde su BIOS o UEFI. La batería asegura que el reloj siga funcionando incluso cuando la computadora se encuentra sin suministro eléctrico. Este reloj suele configurarse con la hora UTC.

Por otra parte el kernel de Linux mantiene la fecha y hora de manera independiente al reloj de hardware, ya que acceder continuamente al reloj de hardware es lento y complicado. Durante el arranque, el kernel de Linux fija su hora basándose en la hora UTC del hardware, de manera que Linux posteriormente pueda aplicar sobre esta, el horario de verano o DST (Daylight Savings Time) y configurar así su hora local o zone time.

Nota: Otros OS como Windows, asumen que la hora del reloj de hardware es la hora local, por lo que puede existir un desfase horario si tenemos un arranque dual con ambos OS.

Configurar y visualizar la hora en un equipo Linux

En Linux, la zona horaria del sistema es determinada por /etc/localtime, que en ocasiones es un enlace simbólico que apunta a un archivo de datos de zona horaria que describe la zona horaria local. Los archivos de datos de zonas horarias están ubicados bajo el directorio /usr/lib/zoneinfo o /usr/share/zoneinfo. Para cambiar la zona horaria, vale con enlazar /etc/localtime y el archivo de configuración /usr/share/zoneinfo/UE/Amsterdam (por ejemplo) o /usr/lib/zoneinfo/UE/Amsterdam.

En caso de que sea un archivo binario y no un enlace simbólico podemos renombrar el actual:

$sudo mv /etc/localtime /etc/localtime.original

Y a continuación crear el enlace simbólico:

$sudo ln -s /usr/share/zoneinfo/UE/Amsterdam /etc/localtime

De esta manera ajustaremos la zona horaria para todo el sistema.

Si por el contrario lo que queremos es cambiar la zona horaria para una determinada sesión (usuario) podemos usar herramientas como: tzsetup, tzselect, tzconfig o similar. Por ejemplo en nuestro caso (Linux Mint 17.1 Rebecca) tenemos tzselect. Si invocamos este comando nos aparecerá un menú en el que primeramente aparecerán los continentes y unos números para seleccionar uno de ellos, a continuación igualmente aparecerá una lista con los países, y finalmente una breve aclaración de lo que va a ser modificado:

The following information has been given:
Iraq
Therefore TZ='Asia/Baghdad' will be used.
 Local time is now: Fri Jan 30 13:00:52 AST 2015.
 Universal Time is now: Fri Jan 30 10:00:52 UTC 2015.
 Is the above information OK?
 1) Yes
 2) No

Una vez seleccionado la opción 1) ‘yes’ nos aparecerá el contenido de la variable TZ, que podremos pegar en los archivos de inicio de sesión de los usuarios ‘~/.profile

TZ='Asia/Baghdad'; export TZ

A parte de la variable TZ, nos aparece el timezone, en nuestro ejemplo anterior ‘Asia/Baghdad‘. Si hemos cambiado la zona horaria para todo el sistema, sería interesante cambiar el valor de /etc/timezone (Debian) o /etc/sysconfig/clock (RedHat) por Asia/Baghdad, ya que este es útil para detectar rápidamente que timezone tenemos definido y para evitar confundir a las herramientas de configuración superior.

También podemos ver los timezone disponibles con el comando timedatectl. Por ejemplo si usamos:

$ sudo timedatectl list-timezones

Nos listará todos los timezones disponibles. Si queremos setear uno en concreto:

$ sudo timedatectl set-timezone [timezone]

Veremos como configurar el tiempo, habilitar o deshabilitar ntp, ajustar RTC o ver la configuración de tiempo actual, con este mismo comando en el apartado de comandos de este capítulo.

Para visualizar la hora actual usamos el comando date. Este comando desplegará una línea similar a

vie ene 30 11:15:15 CET 2015

Es comveniente cuando cambiamos de zona horaria comprobar que el conjunto de caracteres ‘CET, Central European Time‘ ha cambiado por el actual. Podemos conocer el resto de códigos en la página http://www.timeanddate.com/time/zones/

Aclaraciones: Esté capítulo contiene extractos de información del libro “Guía Para Administradores de Sistemas GNU/Linux: Versión 0.8

Mantener la hora en el sistema con servidores NTP

Tanto el reloj de hardware como el de software son poco fiables en x86 y x86-64 estándar, ambos tienden a desajustarse levemente, por lo que no es extraño que en un mes o dos después de ser ajustados acaben con una diferencia de varios minutos con respecto al tiempo correcto. Para salvaguardar esta situación podremos emplear varios métodos, como por ejemplo configurar la hora manualmente cada cierto tiempo o incluso automáticamente a través de tareas cron (veremos el uso de cron en el Capítulo 7).

Podremos configurar la hora del reloj de software con el comando date, cuya sintaxis es la siguiente:

date [-u | --utc | --universal] [MMDDhhmm[[CC]AA] [.ss]]

El formato para date debe contener como mínimo un mes, un día, una hora y un minuto (MMDDhhmm), pudiendo añadir un año de dos o cuatro dígitos e incluso los segundos. La hora debe de ser configurada en formato 24 horas.

  • Ajustar la hora a las 5:45 AM del 15 de Enero del 2015:
# date 011505452015

date asume que esta hora es especificada para hora local por lo que si en realidad lo que deseábamos era ajustar la hora universal UTC, deberíamos de haber incluido alguna de las 3 opciones disponibles: -u, –utc o –universal.

Para ajustar el reloj de hardware podremos hacerlo por ejemplo con la utilidad hwclock o bien desde el firmware del equipo.

Con el comando hwclock podremos ajustar el reloj de hardware a partir de la hora del reloj de software o viceversa. hwclock permite un argumento como opción, con el que podremos ajustar la hora de varias maneras o imprimir la hora actual.

  • Ajustar el reloj de hardware a partir del reloj de software:
# hwclock --systohc
  • Ajustar el reloj de software a partir del reloj de hardware:
# hwclock --hctosys

Esta opción suele ser común en los script de inicio para ajustar el reloj al inicio del sistema.

  • Mostrar la hora del reloj de hardware
# hwclock -r | --show
  • Configurar de forma manual la hora del reloj de hardware:
# hwclock --set --date=011505452015

Usamos el mismo formato que para el comando date

  • Guardar la hora como UTC o como hora local: opciones –utc  –localtime

No es habitual utilizar el comando hwclock, quizás de vez en cuando para evitar que el reloj de hardware se aleje demasiado de la hora exacta, aunque esto lo hacen algunas distribuciones de manera automática como parte del procedimiento de cierre del sistema.

Hasta aquí hemos visto como ajustar la hora de los relojes de hardware y software mediante el uso de los comandos date y hwclock, pero es importante mantener totalmente la precisión de la hora en el sistema, especialmente en aplicaciones científicas, empresariales e industriales, donde las marcas temporales de los archivos pueden volverse confusas si los servidor de archivos y sus clientes tienen horas distintas. Existen protocolos de seguridad y autenticación que incrustan marcas temporales en sus paquetes y se basan en éstas para el funcionamiento normal del sistema. Podemos encontrarnos con que un servidor de Directorio Activo o la suite de seguridad Kerberos no funcionen, impidiendo el acceso a archivos o directamente la autenticación dentro del sistema.

Para evitar estos problemas se recomienda ajustar la hora a través de la red, de manera que todos los servidores y ordenadores de una empresa mantengan sus relojes actualizados al ‘unísono’. Podremos conseguir esta configuración a través del protocolo NTP (Network Time Protocol). Para un cliente o equipo concreto, bastará con tener el servicio ntp instalado y en ejecución, siempre y cuando este debidamente configurado. En la siguiente sección veremos como configurar el servicio ntp.

Fundamentos  de NTP

Una de las herramientas más populares para configurar la hora de la red es NTP. Este protocolo crea una jerarquía por capas de fuentes horarias. En la parte superior de la estructura, se encuentran una o varias fuentes horarias que normalmente son relojes atómicos o receptores de radio que obtienen sus horas de señales horarias basadas en relojes atómicos. Esta parte superior de la jerarquía la forman los llamados servidores temporales de estrato 0 (stratum 0). No podremos acceder directamente a estos servidores , excepto desde los servidores temporales de estrato 1. Estos servidores de estrato 1 ejecutan servidores NTP que distribuyen la hora a servidores de estrato 2, que a su vez distribuyen la hora a servidores de estrato 3 y así sucesivamente.

stratum

Cada incremento en el número de estrato reducirá ligeramente la precisión de la señal horaria, pero no demasiado. Un reloj de un servidor temporal de estrato 4 tendría una precisión con una desviación inferior al segundo.

NTP funciona midiendo el tiempo de ida y vuelta de los paquetes entre el servidor y el cliente. Los dos sistemas intercambian paquetes con marcas temporales incrustadas; el cliente ajusta su hora para que esté sincronizada con la marca temporal del origen pero añade una pequeña cantidad de tiempo para tener en cuenta el retardo del trayecto de ida y vuelta.

La diferencia entre ajustar la hora de forma manual o hacerlo de forma automática mediante NTP, es que como ya sabemos el reloj tiende a desfasarse con el tiempo por lo que de configurarlo manualmente deberemos de estar pendientes cada cierto tiempo de que el desfase no se haga mayor. Aquí es donde destaca NTP el cual posee un archivo normalmente /var/lib/ntp/ntp.drift o /etc/ntp.drift que alberga información sobre las imprecisiones del reloj de software y, por tanto, se puede utilizar para corregirlas. Un servidor NTP aunque funcione solo como cliente, consultará periódicamente sus sistemas fuentes para mantener correctamente configurada la hora del sistema y para actualizar el archivo ntp.drift impidiendo con esto, que el desfase aumente de forma considerable.

Nota: El principal programa de servidor NTP de Linux funciona tanto de servidor como de cliente.

Configurando un servidor NTP

Si tiene una red de trabajo, por ejemplo una empresa en la que coexisten servidores de archivos, servidores de autenticación, de control de versiones, etc… y ordenadores clientes, lo mejor será configurar un servidor temporal NTP para que el resto de servidores y ordenadores de la red obtengan la hora a través de este. Para configurar este servidor temporal deberemos de conocer sus archivos de configuración y algunas características de NTP que harán mas efectiva la sincronización horaria dentro de la empresa. Por ejemplo, cuando configure un servidor NTP, lo primero que deberá de hacer es sincronizar este servidor con alguno de los servidores de estrato o fuentes temporales. Puede que piense que localizar un servidor NTP con un número de estrato bajo (estrato 1) es lo ideal. Quizás sea lógico y cierto pensar que cuanto mas cerca estemos del reloj atómico, mejor será la precisión horaria dentro de la oficina, pero en la mayoría de los casos el mejor método es sincronizar con un sistema de estrato 2 o inferior, ya que con esto reduciríamos la carga en los servidores de estrato 1, lo que mejoraría el rendimiento global de la red NTP.

Antes de comenzar con la configuración deberemos de elegir el candidato para servir la hora en la oficina. Este ordenador/servidor no necesariamente tiene que ser potente, pero si que debe de tener acceso permanente a la red. Una vez seleccionado el equipo, instalaremos (en caso de que no lo esté) el paquete ntp o ntpd de los repositorios oficiales. Cuando el sistema esté equipado con este paquete, pasaremos  a editar su archivo de configuración para determinar las características y opciones de nuestro servidor NTP. El archivo de configuración suele ser /etc/ntp.conf y las líneas a las que mayor atención deberemos de prestar serán a las que empiezan por la palabra ‘server‘ ya que son las que indicarán con que servidores temporales queremos sincronizar. Lo normal es tener entre 2 y 3 líneas con servidores temporales, ya que de estar uno caído u ofreciendo una hora desfasada, automáticamente NTP sincronizará con otro servidor de la lista. Podremos localizar servidores temporales para usarlos como servidores de estrato superior al nuestro, es decir con los que sincronizaremos nuestro servidor NTP de varias formas, por ejemplo:

  • Mediante nuestro ISP: Muchos proveedores de servicios de Internet (ISP) trabajan con servidores NTP que suelen estar muy cerca en términos de red, lo que los convierte en buenos candidatos.
  • El servidor NTP de la distribución que usemos: Si nos encontráramos cerca de estos servidores (en términos de red), podrían ser una buena opción. A decir verdad esto casi nunca ocurre pero igualmente es bueno que lo tengamos en mente.
  • Listas de servidores NTP públicos: Podremos encontrar estos servidores en http://support.ntp.org/bin/view/Servers/WebHome. Tendremos que localizar el mas cercano en termino de red y además es posible que necesitemos permisos para utilizarlos.
  • Banco de servidores NTP públicos: El subdominio pool.ntp.org está dedicado a servidores que funcionan voluntariamente como servidores NTP públicos. Para utilizar el pool de servidores bastará con utilizar el nombre del subdominio ‘pool.ntp.org‘ o un host dentro de ese dominio como ‘0.pool.ntp.org‘. Suele ser la opción mas extendida junto a la del ISP.

De los puntos anteriores podrán surgir preguntas tipo ¿Que quiere decir un servidor cercano en términos de red? o ¿Como compruebo si un servidor esta cerca o lejos en términos de red?

Un servidor cercano en términos de red es aquel que tiene unos buenos tiempos de respuesta, o mas concretamente de ida y vuelta de los paquetes. Podremos comprobar esto con el comando ping <ip del servidor>. Si obtenemos tiempos elevados lo mejor será descartar el servidor en cuestión.

Una vez hayamos localizado y comprobado los servidores a utilizar, los agregaremos al archivo de configuración.

Es recomendable inspeccionar detalladamente el archivo de configuración para eliminar o modificar entradas no deseables. A continuación vamos a detallar una configuración ntp.conf en la que comentaremos muchas de las opciones disponibles para NTP, ya sea como cliente o como servidor.

$ cat /etc/ntp.conf
# Archivo para el control de desfase horario
driftfile /var/lib/ntp/ntp.drift
# Políticas de acceso para cualquier servidor de tiempo utilizado.
# Suele comenzarse con políticas restrictivas y se va siendo mas
# permisivo en líneas posteriores.
# Aceptar todas las conexiones 'default' pero a la vez invertimos
# el significado con 'ignore' que denegará cualquier tipo de paquete
# incluyendo consultas con comandos ntpq y ntpc
restrict default ignore
# Nota: Podríamos haber usado -4 para especificar IPv4 o -6 para IPv6.
# Aceptar todas las conexiones, pero prohíbe modificar la configuración
# del servidor 'nomodify', en cambio si permite las consultas, aunque
# luego se prohíben estas con el comando 'noquery'. 
# 'notrap' niega el modo 6 de control de mensajes para servicios de
# control de registro remotos. 'nopeer' deniega nuevas asociaciones
# no autentificadas, propias de mensajes broadcast.
restrict default nomodify notrap nopeer noquery
# Nota: Los comandos ntpq y ntpc de poco servirán con una conexión
# como esta, ya que 'noquery' invalida las consultas. Esta línea
# es típica para una configuración cliente.
# Permitir conexiones entre la red local. Pero deniega reconfigurar
# la hora del servidor.
restrict 192.168.0.0 mask 255.255.255.0 nomodify
# Máxima permisividad. En este caso para el equipo local
restrict 127.0.0.1
# Añadir un reloj indisciplinado utilizado para cuando ninguna
# de las fuentes temporales están disponibles.
fudge 127.0.0.1 stratum 10
server 127.0.0.1
# Archivo de claves si acaso fuesen necesarias para realizar
# consultas
keys /etc/ntp/keys
# Lista de servidores de tiempo de estrato 1 o 2.
# Se recomienda tener al menos 3 servidores listados.
server 0.pool.ntp.org iburst
server 1.pool.ntp.org iburst
server 2.pool.ntp.org iburst
# Nota: Cuando un servidor es inalcanzable, iburst hace que se
# envíen 8 paquetes en lugar de 1 (por defecto) con un intervalo
# de tiempo de 2s entre paquetes, algo que se puede modificar.
# Esta opción es solo válida para el comando server y es altamente
# recomendable.
# Permisos que se asignarán para cada servidor de tiempo. 
# En los ejemplos, se impide a las fuente consultar o modificar
# el servicio en el sistema, así como también enviar mensaje de 
# registro.
restrict 0.pool.ntp.org mask 255.255.255.255 nomodify notrap noquery
restrict 1.pool.ntp.org mask 255.255.255.255 nomodify notrap noquery
restrict 2.pool.ntp.org mask 255.255.255.255 nomodify notrap noquery
# Se activa la difusión hacia los clientes y además estos no
necesitarán autenticación
broadcastclient
disable auth

Además de las opciones anteriormente definidas para el comando restric existen otras como:

  • kod: Si el acceso es denegado a un cliente, se envía un paquete ‘kiss-of-death‘. Para informar de ello
  • noserver: El servicio de tiempo es denegado, aun que se puedan realizar consultas al servidor.
  • notrust: Ignora todos los paquetes NTP que no están autenticados criptográficamente
  • limited: Limitar el número de clientes para un servidor NTP de la misma red. Deberemos de usar además
    las opciones clientlimit <limite> (por defecto 3) y el intervalo de tiempo considerado como inactivo en
    el caso de que sea sobrepasado lientperiod <segundos> por defecto 3.600s

Nota: Podemos obtener mas información a través de la página man: $ man ntp_acc

Una vez hayamos configurado el servidor NTP será necesario reiniciarlo para que los cambios se hagan presentes. No obstante NTP tarda un tiempo en determinar cuáles de las fuentes proporcionan la mejor señal, por lo que es posible que los servidores fuentes no aparezcan como sincronizados hasta pasados unos minutos.

Para verificar que NTP funciona, podemos utilizar el comando ntpq. La herramienta ntpq puede ser utilizada de forma interactiva o bien podemos pasarle opciones directamente. Si pasamos la opción -i indicamos que queremos iniciar ntpq de forma interactiva (opción por defecto), con la opción -p listaremos los servidores de tiempo con los que estamos intentando sincronizar y la opción -c nos permite pasarle un comando a ntpq ($ sudo ntpq -c peers). Si queremos ver las IP de los sistemas con los que sincronizamos en lugar de su nombre DNS podremos acompañar la opción -p con -n (-np)

Nota: Podemos acceder a ntpq de forma interactiva e introducir el comando ‘help‘ para desplegar los comandos aceptados por ntpq

Si invocamos a ntpq directamente sin opciones, se desplegará un prompt (ntpq> ) donde podremos teclear los comandos aceptados por ntpq, por ejemplo:

ntpq

La imagen anterior muestra una salida al comando ntpq> peers . Hubiésemos conseguido esta misma salida escribiendo directamente $ sudo ntpq -p.

Interpretación de la salida ntpq :

  • remote: Muestra los servidores configurados con los que sincronizar la hora. Dependiendo del metacaracter que preceda al nombre del host tendrá uno u otro significado. El asterisco ‘*‘ indica con que servidor estamos sincronizado, el resto de servidores con horas adecuadas serán indicados con ‘+‘ mientras que aquellos servidores descartado por diferentes razones tendrán caracteres como , x o #
  • refid: Referencia los servidores a los que sincroniza cada sistema ‘remote
  • st: Muestra el estrato del servidor, en nuestro caso 2 y 3.
  • t: Los tipos disponibles (u: unicast, es el mas común. l: local, m: multicast, b: broadcast,: netaddr)
  • when: Número de segundos transcurridos desde la última respuesta
  • poll: Intervalo de sondeo en segundos para las fuentes.
  • reach: Código que indica si ha fracasado o ha tenido éxito (377) la localización de la fuente.
  • delay: Indica el tiempo de ida y vuelta del paquete de respuesta (en milisegundos)
  • offset: Indica el desfase de tiempo entre el cliente y el servidor
  • jitter: Indica la diferencia de tiempo entre dos muestras (en milisegundos)

Nota: Si aparece el host LOCAL(0) sabremos entonces que la fuente de referencia de último recurso es el propio reloj del sistema.

Podremos comprobar cuan desviado está el reloj del sistema en segundos basándose en la última vez que contacto con el servidor remoto, con el comando ntpdc -c loopinfo

Configurar clientes NTP

La configuración de los clientes es similar a la de los servidores con un par de excepciones:

  • Se configuran de modo que hagan referencia al servidor o los servidores NTP que se hayan configurado en un entorno local y no a fuentes externas.
  • Como medida de seguridad es recomendable asegurarse de que no se puede acceder a sus clientes NTP como si se tratase de servidores. Esto se puede hacer bien con una regla de cortafuegos o con la línea ‘restrict default ignore‘ de ntp.conf o con ambas.

Cuando haya configurado un cliente, reinicie su demonio NTP. Entonces, podrá utilizar ntpq para verificar el estado. En algunos casos, es mas sencillo configurar la hora en un cliente utilizando el comando ntpdate. Este programa forma parte de la suite NTP y configura el reloj en un solo paso. El comando ntpdate ha caído en desuso y podría desaparecer del paquete NTP en cualquier momento.Aún así podemos probar con la siguiente sintaxis:

# ntpdate servidor.dehora.com

Como alternativa, podemos iniciar ntpd con la opción -g, que le permite configurar el reloj en un solo paso.

En condiciones normales, ntpd finalizará si la hora del servidor horario difiere de la hora local en algo mas que unos pocos minutos.

 

Consultar y establecer su configuración local

La configuración local es un modo de especificar el idioma, el país del ordenador o usuario y la información relacionada relativa a la personalización de la visualización del entorno.

Código de configuración local:

[idioma[_territorio][.conjuntodecódigos][@modificador]

Idioma: en (inglés), fr (francés), es (español), etc..

Territorio: FR (Francia), JP (Japón), US (Estados Unidos)…

Conjunto de códigos: Son los métodos de codificación.

  • ASCII: Método de codificación mas antiguo y primitivo, emplea codificación de 7 bits, suele utilizarse para el inglés. No puede procesar los caracteres que se emplean en la mayoría de los otros idiomas.
  • ISO-8859: Fue uno de los primeros intentos de ampliar ASCII, empeando un octavo bit para ampliar ASCII a 128 caracteres. Se divide en muchos subestándares, por ejemplo ISO-8859-1 que abarca los idiomas de Europa del este
  • UTF-8: 8-bit Unicode Transformation Format o Formato de transformación Unicode de 8 bits. Es el conjunto de códigos de idiomas mas reciente. Se inicia con ASCII pero lo amplia incluyendo extensiones de tamaño variable, de modo que la codificación de un único carácter puede ocupar desde uno hasta cuatro bytes. Ofrece la posibilidad de codificar exto en cualquier idioma aceptando Unicode, que es un conjunto de caracteres diseñado para admitir todos los lenguajes posibles. UTF-8 gestiona todos sus sistemas de escritura automáticamente.

¿Cual es su configuración local?

El código de configuración local se puede asignar a una o varias variables de entorno. Ejecute el comando locale para saber cómo están configuradas en su sistema.

Cuando los programas consultan estas variables, realizan automáticamente ajustes en función de sus valores. La mayoría de estas variables de configuración local definen características obvias y específicas, como LC_PAPER (tamaño del papel), LC_MEASUREMENT (unidades de medidas), etc…

La variable LC_ALL se emplea para realizar lo que podríamos denominar invalidaciones maestras, es decir, invalida el resto de las variables LC_*

Otra variable relacionada es LANG que define la configuración local en caso de que las variables LC_* no se hayan definido. locale -a identidfica todas las configuraciones locales disponibles.

Modificar su configuración local

Para cambiar su configuración local el método mas sencillo es definir la variable de entorno LC_ALL, por seguridad debería de definir también LANG en sus archivos de script de inicio de bash, como ~/.bashrc o /etc/profile

$ export LANG=es_ES.UTF-8
$ export LC_ALL=es_ES.UTF-8

Nota: Algunos programas y conjuntos de programas pueden requerir que defina el idioma independientemente de la configuración local global del sistema

Hay parámetros que requieren mención especial: LANG=C

Cuando establece LANG=C los programas que ven esta variable de entorno muestran una salida que no ha pasado por el filtro de las traducciones de las configuraciones locales, útil en casos en los que la configuración local daña la salida de un programa; por ejemplo, cuando las conversiones a UTF-8 cambian los caracteres que se deberían preeservar como entidades de 8 bits.

A veces ocurre que un editor de texto admita UTF-8 pero no ISO-8859, si trabajas con archivos ASCII no habrá problemas, pero si recibe un archivo de texto ISO-8859-1 con caracteres no romanos, como las diéresis, su editor podría mostrarlos de una manera extraña. La utlidad iconv puede resolver este problema ya que realiza conversiones entre conjuntos de caracteres. Su sintaxis es:

incov -f codificación [-t codificación] [archivo de entrada…]

Las opciones -f y -t especifican la codificación de origen y de destino. Podremos obtener una lista de codificaciones con la opción –list.

Por defecto iconv envía la salida a la salida estándar, si deseas almacenar los datos en un archivo podrías redireccionar la salida:

$ iconv -f iso-8859-1 -t UTF-8 foobar.txt > foobarcodeutf.txt

 

CONFIGURANDO IMPRESORAS EN LINUX

Sobre las impresoras en Linux

lpr es el programa encargado de envíar las tareas de impresión (la envía a una cola especificada, que suele encontrarse en un subdirectorio de (/var/spool/cups) a la impresora, que puede ser invocado por el usuario o la aplicación desde la que se ejecuta la orden de imprimir.

Nota: El sistema de impresión acepta tareas de impresión de lpr o de ordenadores remotos.

Existen programas que pueden enviar la tarea de impresión (a la cola) en formato PostScript (lenguaje de programación orientado a la impresión que heredó Linux de Unix) el cual es legible por impresoras de alto precio (normalmente). Ante este problema (el que linux antiguamente no pudiese usar impresoras domésticas), se creo Ghostscript que es un traductor de PostScipt. Ghostscript es un demonio que se ejecuta en 2º plano y que espera a que se envíe algún documento en formato PostScript para traducirselo a la impresora. Lo que hace Ghostscript realmente es tomar la entrada enviada en formato PostScript, la analiza y genera una salida en varios formatos de mapas de bits diferentes, incluyendo formatos válidos para muchas impresoras que no admiten PostScript. Una de las desventajas de GhostScript es que genera archivos de salida de un gran tamaño, por lo que algunas impresoras (en particular las láser) pueden necesitar una ampliación de memoria para operar de manera fiable bajo Linux.

La cola de impresión es gestionada por un software conocido como CUPS (Common Unix Printer System) que filtra el documento determinando a una cola de impresión concreta. CUPS puede funcionar como cliente, enviando tareas de impresión a otros ordenadores que ejecuten los mismos protocolos. Pueden existir varias colas, que imprimirán de maneras distintas en la misma impresora, por ejemplo, podemos definir una cola para que imprima a una sola cara y otra cola para que imprima a doble cara, siempre y cuando la impresora admita está función. En casos en los que el documento vaya en formato PostScript, será CUPS quien lo mande antes a Ghostscript para su traducción. Los administradores podrán examinar, alterar o establecer el contenido de la cola de impresión.

CUPS dispone de una herramientra web a la que podemos acceder via http://localhost:631 o por el puerto 639 si se trata de https, en la cual podremos definir las impresoras, características,etc… CUPS se ejecuta mediante script de inicio SysV (cupsd) o de disponer de otro sistema de inicialización deberemos de buscar su archivo de arranque como ya hemos estudiado en el TEMA – 5. La herramienta GUI de CUPS puede modificar los archivos de configuración de la impresora de forma automática, pero si queremos hacerlo de forma manual, ya sea por que queremos compartir una impresora o para realizar una configuración mas detallada, deberemos de acudir al directorio donde se encuentran estos: /etc/cups. Por ejemplo si queremos añadir o eliminar una impresora podremos hacerlo mediante el archivo /etc/cups/printers.conf, si queremos configuirar opciones adicionales, como por ejemplo la configuración de una cola, podremos modificar el archivo /etc/cups/nombrecola.ppd (PostScript Printer Definition). Este tipo de archivos (PPD) son el “pegamento” perfecto para unir la impresora con CUPS, digamos que son los drivers, su definición en sí. Para realizar una configuración al detalle tendremos el archivo /etc/cups/cupsd.conf, archivo que tiene una estructura parecida a httpd.conf, por lo que nos permitira ajustar incluso la seguridad, denegar acceso a hosts, acceder a impresoras IPP remotas, etc…

Si CUPS no nos muestra el modelo de nuestra impresora, desafortunadamente tendremos que buscar el archivo PPD de nuestra impresora en nuestra propia distribución, en Foomatic, Gutenprint, CUPSDDK, el fabricante o cualquier fuente que lo pueda tener.

Configurar y compartir la impresora

Podemos compartir impresoras mediante un servidor samba para redes mixtas (Windows y Linux). Windows reconoce las impresoras compartidas mediante el protocolo SMB/CIFS (Server Message Block/Common Internet File System). Si tenemos una impresora compartida mediante samba y el demonio cupsd corriendo en nuestra máquina Linux, podremos añadir la impresora mediante la ruta:

smb://nombredeusuario:contraseña@SERVIDOR/RECURSO_COMPARTIDO

Si en cambio vamos a imprimir en un equipo Linux o UNIX, que utilice el antiguo formato LPD (BSD Line Printer Daemon) utilizaremos la ruta:

lpd://nombredehost/cola o ipp://nombrehost/cola

Linux podrá trabajar con LPD, IPP o SMB/CIFS, pero por regla general IPP es el mas sencillo de configurar, necesitará que ambos sistemas (cliente/servidor de impresión) estén usando CUPS, de lo contrario la segunda opción sería LPD ya que no requiere credenciales y por ultimo SAMBA.

La forma por defecto de añadir una impresora con CUPS es:

1. Acceder a CUPS GUI http://localhost:631, escribir usuario y password de root (si la solicita) y clicar en la pestaña ‘Administración‘ > ‘Add printer
2. Podremos añadir una impresora a partir de tres categorías: local, impresora de red detectada o otra impresora de red.
3. Si por ejemplo usamos ‘impresora de red‘, introduciremos la ruta completa del dispositivo como mencionamos anteriormente, supongamos

lpd://nombreservidorimpresion/nombreimpresora

Nota: Se usará ‘nombreimpresora‘ como nombre de cola de impresión

4. Ahora estaremos en la página en la que podremos introducir el nombre de la impresora, su descripción y ubicación. Conviene que el nombre de la impresora sea corto y entendible, ya que lo usaremos para lanzar impresión desde línea de comandos o para localizarla desde GUI. Igualmente, en esta página podremos marcar la opción ‘Share This Print
5. A continuación seleccionaremos un fabricante y clicaremos en ‘Continue‘ o bien hacer referencia directamente a un archivo PPD que tengamos en el PC.
6. Si eligió un archivo PPD, puede saltarse este paso, de lo contrario deberá de seleccionar un modelo de impresora y continuar.
7. Aquí podremos seleccionar las opciones específicas para la impresora como el tamaño del papel, la resolución, etc… clicaremos ‘Set Printer Options‘ para terminar.

Herramientas para el uso de la impresora

Podemos usar varias herramientas para imprimir y gestionar las colas de impresión desde la línea de comandos como por ejemplo, si queremos enviar trabajos a la cola de impresión o modificar esta, podremos usar lp o lpr, si queremos ver el estado de la cola de impresión lpq o lpc que ofrece opciones extras, con lprm o cancel podremos cancelar trabajos en la cola de impresión o moverlos con lpmove. El comando lpadmin nos permite una administración de las impresoras a través de CUPS.

Otras herramientas podrian ser: lpstat, lpoptions, cupsaccept, cupreject, cupsenable y cupsdisable. Estos y los anteriores serán estudiados a fondo en la sección de comandos de este mismo capítulo.

Algunos ejemplos:

  • Imprimir un archivo y eliminarlo a su finalización:
$ lpr -r <nombrearchivo>
  • Enviar una notificación por correo:
$ lpr -m <dir-email>
  • Ver las colas existentes:
$ lpq -P <nombreimpresora>
  • Eliminar una tarea en concreto:
$ lprm <num-tarea>

 

Comandos Capítulo 6

 

Licencia Creative Commons
Curso LPIC-1 400 Capítulo 6 por nebul4ck se distribuye bajo una Licencia Creative Commons Atribución-NoComercial-CompartirIgual 4.0 Internacional.


1 comentario

  1. […] Configuración de servidores X, configuración local e internacionalización y el sistema de impresión CUPS. LPIC-1 Capítulo 6. […]

    Me gusta

Deja un comentario, Gracias!

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s

A %d blogueros les gusta esto: