.. _ssoo-interfaces: Interfaz de usuario ******************** La :dfn:`interfaz` es el elemento del sistema operativo a través del cual interactúa el usuario con el propio sistema. A grandes rasgos, tal interfaz debe permitir al usuario: * Identificarse. * Ejecutar programas y recibir el resultado de los mismos. * Administrar el propio sistema. Las principales interfaces de usuario son: #. *De línea de comandos* (abreviado |CLI|) o *en modo texto* o, simplemente, *consola*\ [#]_. #. *Gráfica* (abreviado |GUI|). #. *Táctil*, que tuvieron un uso bastante marginal hasta la irrupción de los dispositivos móviles. #. *Web*. Otro término para referirse a las interfaces de usuario es :dfn:`shell` (concha en inglés), aunque más comúnmente refiere exclusivamente interfaces de texto y, particularmente, al intérprete de comandos de las interfaces de texto\ [#]_. |CLI| ===== Son las interfaces más antiguas y se componen de una pantalla capaz de representar caracteres y un teclado para que el usuario pueda introducirlos. A pesar de su antigüedad suelen ser la interfaz con las que se administran y configuran servidores dada su versatilidad y los escasos recursos que consumen. .. image:: files/login.png En los sistemas de escritorio (o sea, los sistemas en los que la interfaz predominante es la |GUI|), también es posible acceder a una *shell*. Por lo general, se hace a través de programas gráficos denominados :dfn:`emuladores de terminal` que presentan la interfaz de texto. En estos casos, el emulador puede usarse tanto para administrar la propia máquina, como para acceder remotamente a un servidor para su administración. En estas interfaces es preciso distinguir entre dos componentes: - El programa que habilita la existencia de la propia interfaz, que es el *emulador de terminal* ya referido. - El :dfn:`intérprete de comandos`, que es el programa que se encarga de permitir la introducción de órdenes dentro del emulador de terminal e interpretar la orden introducida para pasarla al sistema operativo. .. table:: :class: ssoo-shells +-------------------+---------------------------+------------------------+ | Sistema operativo | Emulador de terminal | Intérprete de comandos | +===================+===========================+========================+ | | MS-DOS | | | | | Windows 9\* | \- | command.com | +-------------------+---------------------------+------------------------+ | Windows (rama NT) | | ConsHost (Console Host) | | cmd.exe | | | | Windows Terminal | | powershell | +-------------------+---------------------------+------------------------+ | UNIX | | xterm | | sh, ash, dash (POSIX)| | | | Terminal (MacOs v10) | | bash | | | | lxterm | | csh, tcsh | | | | gnome-terminal | | ksh | | | | konsole | | zsh | +-------------------+---------------------------+------------------------+ Sin ánimos de ser exhaustivos, porque utilizaremos esta interfaz al practicar con los sistemas operativos, su mecánica es bastante sencilla: - La terminal presenta un *prompt*\ [#]_ que informa al usuario de algunos aspectos relevantes. Por lo general, de quién es, en qué máquina trabaja y cuál es su directorio de trabajo. - Un cursor tras el *prompt* denota que el sistema está a la espera de que el usuario dé alguna orden. - El usuario da la orden introduciendo una constituida por el nombre de un programa y una serie de parámetros que moldean el comportamiento de esa orden. Al acabar de escribir la orden, pulsa :kbd:`Enter` para enviar la orden al sistema y que este la ejecute. - Durante la ejecución de la orden el programa envía a la terminal mensajes de información, advertencia o error que informan al usuario de cuál es el progresa de la tarea. - Al finalizar la orden devolverá al sistema un código que permite conocer al usuario si ésta tuvo éxito o no y, opcionalmente, una salida de texto con el resultado del procesamiento. - La terminal queda libre y presenta un nuevo *prompt* con un cursor expectante. .. raw:: html .. _ssoo-gui: |GUI| ===== Las interfaces gráficas habilitan la interacción del usuario con el sistema mediante el uso de unos componentes gráficos (ventanas, botones, etc) y algún dispositivo apuntador como el ratón y se apoyan en el teclado cuando requieren la introducción de texto. Esto, no obstante, supone un mayor costo de recursos, aunque facilitan el uso para el usuario no avanzado. Son las interfaces predominantes en los sistemas de escritorio Por lo general, las interfaces gráficas presentan unos elementos comunes: - **Acceso gráfico** que permite la autenticación del usuario. - Un **escritorio** (o varios) sobre el que se sitúan el resto de elementos gráficos. - **Iconos**, que son elementos gráficos de pequeño tamaño que representan objetos del sistema tales como archivos o programas. Permiten que la ejecución de un programa o la apertura de un fichero con el programa preseleccionado se limite a seleccionar el icono, en vez de requerir la composición de la orden como en las interfaces de texto. - **Ventana**, elemento gráfico que muestra la ejecución de un programa y que permite interactuar con él. Las ventanas, a su vez, suelen estar constituidas por componentes estandarizados. - **Menú principal**, que desglosa las aplicaciones del sistema o de usuario disponibles. - **Menú contextual**. que es un menú asociado a algunos elementos gráficos que ofrece la posibilidad de llevar a cabo ciertas acciones sobre el elemento. - **Barra de tareas**, que suele incluir las aplicaciones que se están ejecutando y algunos otros componentes (lanzadores de aplicaciones más frecuentes, controles rápidos, etc.) .. table:: :class: ssoo-gui +--------------------+----------------+ | Sistema operativo | Interfaz |GUI| | +====================+================+ | Windows XP | Luna | +--------------------+----------------+ | Windows 7 | Aero | +--------------------+----------------+ | Windows 8 | Metro | +--------------------+----------------+ | Windows 10 | Fluent | +--------------------+----------------+ | MacOS | Aqua | +--------------------+----------------+ Los sistemas *UNIX* no se ha incorporado a la tabla, porque a diferencia de los sistemas anteriores, no tienen una única interfaz |GUI| y, además, tal interfaz suele descomponerse en elementos independientes: + Un **servidor gráfico** que es el encargado de permitir la interacción con el ratón y el dibujado de las ventanas. El más usado con diferencia es `Xorg `_ desarrollado como *fork* del servidor `XFree86 `_ a partir de 2004. + Un **login gráfico** para la autenticación que presenta muchas alternativas: gdm_, kdm_, xdm_, lightdm_, slim_ + Un **escritorio integrado** donde pueden encontrar el resto de componentes gráficos como Gnome_, KDE_, LXDE_ o XFCE_. + O alternativamente al *escritorio integrado*, un **gestor de ventanas** (fluxbox_, openbox_, enlightment_, icewm_, fvwm_, etc.) y toda una batería de **aplicaciones individuales** que provean del resto de funcionalidades típicas de las interfaces gráficas. Por ejemplo, el autor de este documento usa: * xorg_, como servidor gráfico. * slim_, como logín gráfico. * openbox_, como gestor de ventanas. * tint2_, como barra de tareas. * udiskie_, como gestor de volúmenes. * dunst_, como notificador de eventos. * volumeicon-alsa_, para el control del volumen. Y no usa en absoluto ni gestor de ficheros (para lo cual prefiere la |CLI|), ni iconos de escritorio, para lo cual hay también aplicaciones independientes como idesk_. Interfaz táctil =============== Diseñada para dispositivos móviles, tienen cierta similitud con las interfaces gráficas, aunque eliminando el concepto de ventana, ya que cada programa suele ocupar la interfaz completa, e incorporando los gestos táctiles sobre la pantalla (pellizco, pulsación) o el movimiento del dispositivo (girar el dispositivo provoca girar el sistema operativo) como modo de aportar información al sistema. En cambio, conservan otros elementos gráficos como: - Escritorio. - Iconos para representar sobre el escritorio a los programas. - Barra de notificaciones. - Notificaciones emergentes que informan de algún suceso (por ejemplo, de algún mensaje entrante). Interfaz web ============ Las interfaces web son las menos frecuentes, ya que se encuentran, fundamentalmente, en sistemas operativos incrustados en dispositivos sin monitor, por lo que el acceso a los mismos debe realizarse de forma remota\ [#]_. La interfaz es simplemente una página web accesible a través de navegador. Es habitual en dispositivos de red y servidores |NAS|. .. rubric:: Notas al pie .. [#] De hecho, el intérprete clásico de *UNIX* se llama :command:`sh` que son las dos primeras letras de la palabra; y el nombre de los intérpretes modernos suelen contener estas dos letras: :command:`ash`, :command:`bash`, :command:`tcsh`, etc. Por otro lado, el moderno intérprete de los sistemas Windows se denomina :command:`PowerShell`. .. [#] El término :dfn:`consola` es más amplio y significa más en general cualquier dispositivo físico que permite introducir datos en el sistema; y en ese sentido, es equivalente a :dfn:`terminal`. Sin embargo, a los programas que virtualmente emulan al dispositivo físico y permiten la introducción de datos, también se les denomina como consola o terminal, de ahí que al :program:`command.com` o al :program:`cmd` de los sistemas de *Microsoft*, o al :dfn:`xterm` de los sistemas *UNIX* se les llame también programas de terminal o consola. De ahí, a que por metonimia se denomine a la interfaz de comandos con el mismo nombre con el que se denomina al programa para acceder a ella, no hay mucho camino. .. [#] o :dfn:`símbolo del sistema`. Es más común usar el término en inglés. .. [#] Es frecuente que estos dispositivos también dispongan de una |CLI| accesible bien por un puerto serie o de consola o bien a través de red (|SSH| o telnet). Por lo general, la configuración por consola suele ser más versátil y permitir llevar a cabo configuración imposibles en la interfaz web. .. |CLI| replace:: :abbr:`CLI (Command Line Interface)` .. |GUI| replace:: :abbr:`GUI (Graphical User Interface)` .. |NAS| replace:: :abbr:`NAS (Network Attached Storage)` .. _gdm: https://wiki.gnome.org/Projects/GDM .. _kdm: https://kde.org/ .. _slim: https://www.berlios.de/software/slim/ .. _lightdm: https://github.com/canonical/lightdm .. _xdm: https://gitlab.freedesktop.org/xorg/app/xdm .. _Gnome: https://gnome.org/ .. _KDE: https://kde.org/ .. _LXDE: https://lxde.org/ .. _XFCE: https://xfce.org/ .. _udiskie: https://github.com/coldfix/udiskie .. _idesk: http://idesk.sourceforge.net/html/index.html .. _fluxbox: http://fluxbox.org/ .. _openbox: http://openbox.org .. _enlightment: https://www.enlightenment.org/ .. _fvwm: http://www.fvwm.org/ .. _tint2: https://gitlab.com/o9000/tint2 .. _dunst: https://dunst-project.org/ .. _volumeicon-alsa: http://nullwise.com/volumeicon.html .. _icewm: https://ice-wm.org/