GPM(8) | System Manager's Manual | GPM(8) |
gpm - una utilidad para cortar y pegar y un servidor de ratón para las consolas virtuales
gpm [ opciones ]
Este paquete intenta ser un servidor de raton útil para las aplicaciones que se ejecutan en la consola de Linux. Está basado en el paquete llamado "selección", y algunas partes de su código provienen de dicho paquete. Este paquete está pensado para reemplazar el paquete "selección" como mecanismo de cortar y pegar; además ofrece mejoras adicionales. El paquete "seleccion" ofrecía una primera implementación del método de cortar y pegar para Linux usando dos botones del ratón, así, la memoria intermedia usada al cortar todavía se sigue denominando buffer de selección o simplemente "selección" en este documento. La información contenida en este documento ha sido extraida del fichero de Texinfo, que es la fuente de información recomendada actualmente.
El ejecutable de gpm actúa como un demonio (así que gpmd sería un nombre más acertado para él). Esta sección describe las opciones de la línea de comando de gpm, mientras que los detalles internos son comentados en la siguiente sección.
Debido a las restricciones impuestas por la llamada a sistema ioctl(TIOCLINUX), gpm debe ser ejecutado por el superusuario. Dichas restricciones fueron añadidas a partir de la versión 1.1 del kernel para solucionar un agujero de seguridad relacionado con la selección y el vaciado de memoria en pantalla.
El servidor puede ser configurado según las preferencias del usuario, y cualquier aplicación que utilice el ratón seguirá las preferencias dictaminadas al servidor. Desde la versión 1.02, el comportamiento del ratón puede ser reconfigurado por cada usuario que entre en la consola del sistema. Véase la descripción del parámetro ``-q''.
Igualmente, desde la versión 0.97, el servidor se pone a si mismo en segundo plano. Para matar el servidor gpm, simplemente se puede ejecutar con el parámetro -k, de todas maneras, "killall gpm" puede ser otra solución.
La versión 1.10 introduce la capacidad de ejecutar comandos especiales bajo ciertas circunstancias. Por defecto, estos comandos especiales son rebotar y parar el sistema, pero el usuario puede especificar cualquier otro comando. La posibilidad de invocar comandos usando el ratón es muy útil para programadores, ya que permite rebotar o parar el sistema de manera ordenada cuando el teclado está bloqueado y no hay red disponible para devolver el sistema a un estado consistente.
Los comandos especiales son ejecutados haciendo un triple clic sobre los botones izquierdo y derecho a la vez (un evento poco probable durante el uso normal del ratón). La manera más fácil de realizar un triple clic es pulsar uno de los dos botones y hacer un triple clic sobre el otro. Cuando se ejecuta esta acción, se pasa a un modo de trabajo especial, un mensaje aparece en la consola y el altavoz del sistema emite dos pitidos (si se tiene altavoz); si el usuario suelta todos los botones y pulsa otra vez sobre uno de ellos antes de tres segundos, entonces el comando especial asociado al botón es ejecutado.
Los comandos especiales ejecutados por defecto son:
El parámetro -S de la línea de comandos habilita los comandos especiales y permite modificar los tres especificados por defecto. Para usar los comandos especiales propuestos por defecto, usar `-S ""' (es decir, especificar un argumento vacío a -S). Para especificar otros comandos, usar una lista separada por el carácter dos puntos (:) para especificar los comandos asociados a los botones izquierdo, central y derecho respectivamente. Si alguno de los comandos está vacío, será interpretado como `enviar un signal al proceso init'. En vez de ejecutar comandos externos, este comportamiento tan particular está soportado por que algunas situaciones extrañas pueden llevar al sistema a un estado tal que sea imposible ejecutar más programas mediante la llamada a sistema fork(); ante esta improbable situación, el usuario será capaz de apagar el sistema de manera ordenada. Matar el proceso init desde un proceso que se esté ejecutando es la única manera de lograrlo.
Como ejemplo, `-S ":telinit 1:/sbin/halt"', asocia el envío de la señal para matar al proceso init al botón izquierdo, pasar a modo monousuario al botón central, y parar el sistema al botón derecho.
Evidentemente, los administradores del sistema tendrán que ir con cuidado con los comandos especiales, ya que gpm se ejecuta con los permisos del superusuario. Los comandos especiales están pensados para ordenadores donde el ratón está disponible únicamente para usuarios de confianza.
Las opciones de la línea de comandos disponibles son las siguientes:
case $( /usr/bin/tty ) in
/dev/tty[0-9]*) /usr/bin/disable-paste ;;
esac
Para seleccionar texto, pulsar el botón izquierdo y arrastrar el ratón. Para pegar el texto seleccionado, en la misma u otra consola, pulsar el botón central. El botón derecho es usado para extender la selección, como en `xterm'.
En los ratones de dos botones se utiliza el botón derecho para pegar el texto seleccionado.
Los dobles y triples clics seleccionan toda la palabra y toda la línea respectivamente. Se recomienda el uso de la opción `-P' para obtener un efecto visual mejor.
Si se selecciona un espacio en blanco al final de una oración, y no hay ningún otro texto hasta el final de la línea, el resto de la línea será seleccionado automáticamente. Si se selecciona un grupo de líneas, los espacios del final de cada línea serán eliminados del buffer de selección.
Cualquier salida que se haga a la consola virtual que tenga una selección de texto marcada hará que la marca de texto seleccionado sea eliminada de la pantalla a fin de mantener la integridad de la misma, aunque el contenido del buffer de selección no se verá afectado.
El mecanismo de selección es desactivado si la consola virtual pasa a modo gráfico, por ejemplo cuando se ejecuta X11, y se restaura cuando se vuelve a modo texto. (Ver la sección de errores más abajo)
El servidor gpm puede tener algunos problemas cuando interactúa con las X: si el ratón es un dispositivo de apertura única (single-open), un ratón del tipo "bus-mouse", por ejemplo, se debería manar gpm antes de ejecutar las X, o usar la opción ``-R'' (ver más arriba). Para matar al servidor gpm simplemente invocar gpm -k. Este problema no es aplicable a ratones conectados al puerto serie.
Dos instancias de gpm no pueden ejecutarse en el mismo sistema. Si se dispone de dos ratones, usar la opción ``-M'' (ver más arriba).
Cuando la consola actual está en modo gráfico, gpm duerme hasta que se vuelve a modo texto (a menos que se especifique -R). Así, no responderá a los clientes. De todas formas, es poco probable que los clientes que estén impacientes esperando al ratón molesten en las consolas distintas a la actual.
Las versiones anteriores a la 1.0 de gpm tienen problemas con las versiones 1.2.9 del kernel, ya que los clientes tienen que tener permisos de escritura sobre /dev/gpmctl. Se debería invocar chmod sobre dicho nodo o instalar la versión 1.0 o posteriores de gpm (si tienes este documento, tienes la versión actualizada)
Andrew Haylett <ajh@gec-mrc.co.uk> (el código de selección original) Alessandro Rubini <rubini@linux.it> (nuevas características) Muchos, muchos colaboradores, tanto del paquete "selection" como de gpm.
Desde la versión 1.14 yo realizo exclusivamente el mantenimiento. Ian Zimmerman y Prosa Inc respaldarán el desarrollo de gpm. El punto de contacto oficial es actualmente la lista de correo gpm@animal.unipv.it, gracias a mi Universidad, la cual generosamente acoge las discusiones sobre gpm. La lista es gestionada por SmartList y todos sois bienvenidos.
/dev/mouse El dispositivo de ratón por defecto /var/run/gpm.pid El PID del servidor gpm en ejecución /dev/gpmctl Un enchufe (socket) de control para
los clientes /dev/gpmdata La cola que se comporta como demonio
`repetidor' (-R)
mev(1) Un ejemplo de cliente para el demonio gpm. gpm-root(1) Un manejador para controlar los eventos
del ratón.
El fichero de info sobre `gpm', el cual da información más completa y explica como construir un cliente de gpm.
Febrero 1995 | 4th Berkeley Distribution |