.. _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/