Available Languages: | Deutsch | English | Español | Français | 日本語 (Nihongo) | Português | Русский (Russkiy) | 中文 (简) (Simplified Chinese) |

Ejecutando X11 en Darwin y Mac OS X

Este documento trata sobre la ejecución de X11 / XFree86 / Xtools en los sistemas Mac OS X y Darwin de Apple. Proporciona una introducción y una historia del desarrollo y, a partir de ahí, describe el estado actual del arte y las múltiples elecciones disponibles para utilizar X11 con/sin Fink.

Contents

1 Introducción

1.1 ¿Qué es X11?

X Window System Versión 11 o, más brevemente, X11 es un sistema de visualización de gráficos (graphics display system) con una arquitectura cliente-servidor trasparente a la red. Permite a la aplicaciones dibujar píxeles, líneas, texto, imágenes, etc. en tu pantalla. X11 también viene con bibliotecas adicionales que permiten a las aplicaciones dibujar interfaces de usuario (botones, campos de texto y similares)

X11 es el sistema gráfico estándar de facto en el mundo Unix. Acompaña a Linux, a los *BSD y a muchos sabores comerciales de Unix. Los entornos de escritorio CDE, KDE y GNOME se ejecutan sobre él.

1.2 ¿Qué es Mac OS X?

Mac OS X es un sistema operativo fabricado por Apple. Al igual que sus predecesores NeXTStep y OpenStep, está basado en BSD y por lo tanto es un miembro de la familia de sistemas operativos Unix. Sin embargo, viene con un sistema de visualización de gráficos propietario llamado Quartz y cuya apariencia es denominada Aqua, aunque los dos nombres se intercambian con frecuencia.

1.3 ¿Qué es Darwin?

Darwin es básicamente una versión reducida de Mac OS X disponible libre de cargos y con su código fuente completo. No contiene ni Quartz, ni Aqua ni ninguna otra tecnología relacionada y, por defecto, sólamente ofrece una consola de texto.

1.4 ¿Qué es XFree86?

XFree86 es una implementación de X11 con código libre (open source). Fue desarrollada inicialmente para ejecutarse en PeCés Intel x86, de ahí su nombre. Actualmente se ejecuta en muchas plataformas y en muchos sistemas operativos incluyend OS/2, Darwin, Mac OS X and Windows.

1.5 ¿Qué es Xtools?

Xtools es un producto de Tenon Intersystems. Es una versión de X11 para Mac OS X, basada en XFree86.

1.6 Cliente y servidor

X11 tiene una arquitectura cliente-servidor. Hay un programa central que hace el dibujado real y que coordina el acceso por varias aplicaciones: ese es el servidor. Una aplicación que nececesite dibujar usando X11 se conecta al servidor y le dice qué dibujar. En el mundo X11 estas aplicaciones se llaman clientes.

X11 permite que servidores y clientes estén en diferentes máquinas, lo que provoca a menudo confusiones terminológicas. En un entorno con estaciones de trabajo y servidores, puedes ejecutar el servidor X11 en una estación de trabajo y las aplicaciones clientes de X11 en el servidor. Debe quedar claro que cuando hablamos de "servidor" nos referimos al programa servidor de visualización X11, no a la máquina oculta en tu armario.

1.7 ¿Qué significa "rootless" (desarraigado)?

Un pequeño inciso: X11 modela la pantalla como una jerarquía de ventana contenidas unas en otras, lo que se conoce como estructura de árbol. En la cima de esta jerarquía está una ventana especial que tiene el tamaño de la pantalla y que contiene a todas las demás ventanas. Esta ventana contiene el escritorio y se denomina "ventana raíz" (root=raíz, rootless=sin raíces, desarraigado).

De vuelta al asunto: Como cualquier entorno gráfico, X11 fue escrito para funcionar en solitario y tener control absoluto sobre la pantalla. Pero en Mac OS X, Quartz gobierna siempre la pantalla y, por lo tanto, es necesario efectuar algunos ajustes para que ambos entornos puedan convivir.

Un ajuste es permitir que los dos hagan turnos. Cada entorno usa una pantalla completa, pero sólamente uno es visible. El usuario puede cambiar de entorno en cualquier momento. Este modo se denomina de pantalla completa (full-screen) o enraizado (rooted). Se le llama rooted porque hay una ventana raíz totalmente normal en la pantalla de X11 que funciona como en cualquier otro sistema.

Otra posibilidad de ajuste es mezclar los dos entornos ventana a ventana. Así se elimina la necesidad de cambiar de entorno (y de pantalla) continuamente. Esto elimina también la ventana "raíz" de X11, porque Quartz se ocupa del escritorio. Como no hay ventana "raíz" (visible), este modo se llama "desarraigado" (rootless). Es el modo más cómodo de utilizar X11 en Mac OS X.

1.8 ¿Qué es un gestor de ventanas (window manager)?

En muchos entornos gráficos la apariencia de los marcos de las ventanas (barra de títulos, botones de cierre, etc) está definida por el sistema. X11 es diferente. Con X11 los marcos de las ventanas (también llamados "decoración") los provee un programa separado, llamado gestor de ventanas. En muchos aspectos, el gestor de ventanas es como cualquier otra aplicación cliente: arranca de la misma forma y se comunica con el servidor X a través de los mismos canales

Se puede escoger entre un gran número de gestores de ventana diferentes. Una extensa lista se encuentra en xwinman.org. Algunos de los más populares permiten al usuario personalizar la apariencia vía los llamados temas. Muchos gestores de ventana proporcionan también funcionalidades adicionales, tales como menús desplegables (pop up) en la ventana raíz, muelles (docks, como el de quartz) y botones lanzaderas (para abrir documentos, aplicaciones o menús)

Muchos gestores de ventanas han sido empaquetado en Fink; aquí hay una lista actualizada.

1.9 ¿Qué son Quartz/Aqua, Gnome y KDE?

Son entornos de escritorio y hay muchos más. Su propósito es aportar marcos de trabajo adicionales a las aplicaciones para que su apariencia y comportamiento sean visualmente consistentes.Por ejemplo:

Visualizador de gráficos : X11

Gestor de ventanas: sawfish

Escritorio: Gnome

Las fronteras entre visualizador de gráficos, gestor de ventanas y escritorio son borrosas porque funciones similares (y, en ocasiones, la misma) pueden estar implementadas en varios de ellos. Esta es una de las razones por las que un gestor de ventanas concreto puede no ser compatible con un escritorio concreto.

Muchas aplicaciones se desarrollan para integrase en un escritorio particular. Frecuentemente, instalando las bibliotecas del entorno de escritorio (y otras relacionadas) una aplicación desarrollada para un escritorio concreto puede trabajar con pocas o ninguna pérdida de funcionalidad. Ejemplo de esto es la cada vez más numerosa selección de aplicaciones GNOME disponibles para ser instaladas y ejecutadas sin instalar GNOME. Desafortunadamente, el mismo progreso no ha podido ser aún hecho con aplicaciones KDE.

2 Historia

[Disculpas por el lenguaje épico. No pude resistirme...]

2.1 Los primeros días de la creación

En el principio, era el vacío. Darwin vivía su infancia, Mac OS X estaba aún en desarrollo y no había implementaciones de X11 para ninguno de ellos.

Entonces llegó John Carmack y su puerto de XFree86 para Mac OS X Server, el cual era el único SO de la familia Darwin disponible en esos tiempos. Después ese puerto (port) fue actualizado para XFree86 4.0 y Darwin 1.0 por Dave Zarzycki. Las correcciones (patches) encontraron su vía en el repositorio CVS de Darwin y durmieron allí, esperando que las cosas pasaran.

2.2 XonX forms

Un buen día Torrey T. Lyons llegó y le dio a las correcciones las atenciones que estaban esperando. Finalmente, él les dio un nuevo hogar, el repositorio CVS oficial de XFree86. Esto ocurrió durante los tiempos de la Beta Pública de Mac OS X y de Darwin 1.2. XFree86 4.0.2 trabajaba bien con Darwin, pero sobre Mac OS X los usuarios debían abandonar Aqua y marchar sobre la consolar para ejecutarlo. Entonces Torrey montó a su alrededor el equipo XonX y se dispuso a llevar XFree86 a Mac OS X.

En esos tiempos Tenon empezó a construir Xtools, usando XFree86 4.0 como base.

2.3 To root or not to root

Pronto el equipo XonX tuvo XFree86 ejecutándose en modo pantalla completa en paralelo a Quartz y puso las implementaciones de prueba a disposición de los usuarios más avezados. Estas implementaciones (test releases) sedenominaban XFree86-Aqua o XAqua para abreviar. Desde que Torrey había tomado el liderato, los cambios iban directamente al repositorio CVS de XFree86's, que se encaminaba directamente a la versión 4.1.0.

En estos primeros etapas la interconexión con Aqua se efectuaba a través de una pequeña aplicación denominada Xmaster.app (escrita en Carbon y luego reescrita en Cocoa). Después, el código de Xmaster se integró en el servidor X propiamente dicho, dando lugar al nacimiento de XDarwin.app. También se añadieron en ese momento las bibliotecas compartidas (y Tenon fue convencido para que usara el conjunto de correcciones oficila en lugar de los suyos propios para así asegurar la compatibilidad binaria). Había incluso buenos progresos en el modo rootless (usando la API Carbon), pero era demasiado tarde para incluirlo en XFree86 4.1.0. Y las correciones del modo rootless se hicieron libres, y flotaron alrededor de la red. Después XFree86 4.1.0 salió sólo con el modo de pantalla completa, el trabajo en el modo rootless continuó, ahora usando la API Cocoa. Un modo rootless experimental fue incluido en el repositorio CVS de XFree86.

Mientras tanto, Apple produjo Mac OS X 10.0 y Darwin 1.3. Tenon produjo Xtools 1.0 algunos semanas más tarde.

El desarrollo continuó integrando el modo rootless en XFree86, para que cuando XFree86 4.2.0 saliera en Enero del 2002, la versión Darwin/Mac OS X hubiera sido completamente integrada en la distribución principal de XFree86.

3 Cómo obtener e instalar XFree86

3.1 Instalación desde Fink

Fink te permite instalar X11 como quieras y además proporciona los paquetes XFree86. Si usas fink install ..., descargará el código fuente y lo compilará en tu ordenador. Si usas apt-get install ... o el "frontend" dselect, descargará e instalará paquetes binarios precompilados, similares a los de la distribución oficial de XFree86.

El paquete xfree86-base contiene el paquete XFree86 4.2.1.1 (4.2.0 para los usuarios de 10.1) completo excepto el servidor XDarwin. El paquete xfree86-rootless es el servidor estándar XFree86 de la versión estable 4.2.1.1. Soporta las dos operaciones (pantalla completa y rootless) y tiene soporte OpenGL. (En los primeros tiempos, Fink tenía también un paquete xfree86-server que proporcionaba únicamente modo de pantalla completa, pero esta ha dejado de ser una opción intereresante). Tienes también la opción de instalar el servidor tú mismo; mira más abajo. En ese caso debes instalar sólamente xfree86-base o correrás el riesgo de que Fink sobreescriba el servidor instalado manualmente. Nótese que la versión actual estable de xfree86-base (4.2.1.1-3) genera xfree86-rootless, xfree86-base-shlibs y xfree86-rootless-shlibs durante el proceso de construcción (build process). En ese caso, se deben instalar los cuatro paquetes para obtener una configuración activa de XFree86.

Los paquetes xfree86-base-threaded and xfree86-rootless-threaded son esencialmente los mismos modificados para soportar hebras (N.T.: "threading", un concepto de sistemas operativos) requerido por algunas aplicaciones como xine.

XFree86 4.2.11 (sin hebras / "unthreaded") está considerado la versión básica estable para usar con Fink en Mac OS X 10.2. XFree86 4.3.0 está también disponible, pero está considerada más experimental, por lo que se encuentra en la rama inestable. Tiene soporte de hebras ("trheading") incorporado y es más rápida que la versión 4.2.1.1. Para instalar esta versión hay que instalar el paquete xfree86. Obsérvese que, a artir de esta versión, ya no se separan los paquetes -base y -rootless packages, y que las bibliotecas se han desplazado a xfree86-shlibs. Si construyes binarios desde la versión 4.3, no funcionarán ni con la 4.2.1.1 ni con las X11 de Apple, así que ¡cuidado!.

Usuarios de 10.3: Necesitan instalar la versión 4.3.99.16-2 o posterior, que son "prereleases" de XFree86-4.4. Si estás trabajando desde la distribución binaria, asegúrate de actualizar la descripción de los paquetes (p.e. vía sudo apt-get update).

3.2 Binarios de Apple

El 7 de enero del 2003 Apple publicó una implementación modificada de X11 basada en XFree86-4.2 que incluía renderización mediante Quartz y OpenGL acelerado. El 10 de febrero del mismo año se publica una nueva versión con características adicionales y corrección de errores. Una tercera (i.e. Beta 3) sale el 17 de Marzo del 2003 con más características adicionales y corrección de errores. Esta versión es utilizable en Jaguar.

El 24 de octubre del 2003, Apple publicó Panther (10.3) que incluía una versión de su propia distribución de X11. Esta versión está basada en XFree86-4.3.

Al usar los binarios de Apple, necesitas asegurarse que el paquete X11 User está instalado y debes actualizar Fink.

Bajo fink-0.16.2 es necesario instalar el paquete X11 SDK también. Después de hacer esto, Fink puede crear un paquete virtual system-xfree86.

Bajo fink-0.17.0 instalar X11 SDK solo es necesario si necesitas construir paquetes desde el código fuente. En ese caso, incluso si no se posee el SDK hay paquetes virtuales system-xfree86 y system-xfree86-shlibs, representando este último a las bibliotecas compartidas. Si instalas el SDK, existe un paquete system-xfree86-dev representando a las cabeceras.

Si tienes una distribución de XFree86 instalada, sea a través de Fink o por algún otro método, debes seguir las instrucciones para reemplazar un paquete X11 por otro. Asegúrate de eliminar todos los paquetes existentes y después instala X11 de Apple (y X11 SDK, si se necesita o se desea).

Algunas notas de uso del X11 de Apple:

3.3 Binarios oficiales

El proyecto XFree86 tiene una distribución binaria oficial de XFree86 4.2.0, la cual puede ser actualizada a 4.2.1.1 mediante parches. La puedes enciontrar en tu réplica de XFree86 favorita, en el directorio 4.2.0/binaries/Darwin-ppc-5.x. Asegúrate de obtener Xprog.tgz y Xquartz.tgz aunque estén marcados como optativos. Si no estás demasiado seguro de lo que necesitas, descarga el directorio completo. Ejecuta el script Xinstall.sh como superusuario (root) para instalar el material descargado. (Es posible que necesites leer las instrucciones oficiales antes de la instalación). Si lo prefieres, puedes usar los binarios de XonX, que provienen del mismo código fuente, pero son más fáciles de usar. En cualquier caso descarga, descomprime y ejecuta las siguientes actualizaciones:

  1. Usuarios 10.1: 4.2.0 -> 4.2.0.1 upgrade. Usuarios 10.2: 4.2.0 -> 4.2.0.1 upgrade
  2. Usuarios de 10.1 y 10.2: 4.2.0.1 -> 4.2.1.1 upgrade

También hay una distribución oficial binaria de la versión 4.3.0 en las réplicas de XFree86 en el directorio 4.3.0/binaries/Darwin-ppc-6.x. Asegúrate de obetener Xprog.tgz y Xquartz.tgz aunque estén marcados como optativos. Si no estás demasiado seguro de lo que necesitas, descarga el directorio completo. Ejecuta el script Xinstall.sh como superusuario (root) para instalar el material descargado. (Es posible que necesites leer las instrucciones oficiales antes de la instalación).

Cualquiera que sea la versión instalada, ya dispones de XFree86 con un servidor a pantalla completa o rootless ejecutable bajo Mac OS X.

3.4 Fuentes oficiales

Si tienes tiempo disponible, puedes construir XFree86 4.2.0 desde el código fuente. Éste está disponible en tu réplica de XFree86 favorita, en el directorio 4.2.0/source. Descarga las tres bolas tar X420src-#.tgz y expándelas en el mismo directorio. Puedes personalizar la construcción poniendo definiciones de macros en el fichero config/cf/host.def que está en el árbol fuente de XFree86. Mira el fichero config/cf/darwin.cf para algunas cuestiones puntuales. (Nota: Sólamente las macros con #ifndef pueden ser sobrescritas en host.def.)

Cuando estés contento con la configuración, compila e instala XFree86 con los siguientes comandos:

make World
sudo make install install.man

Para actualizar 4.2.1.1, sigue las instrucciones en Binarios oficiales section.

Para instalar 4.3.0, sigue las instrucciones anteriores, reemplazando "2" por "3" y no actualices a 4.2.1.1.

Como con los binarios oficiales, ya dispones de XFree86 con un servidor a pantalla completa o rootless ejecutable bajo Mac OS X.

3.5 Versión para desarrolladores: lo último de lo último

Si además de tiempo tienes nervios de sobra puedes obtener la última versión de desarrollo de XFree86 del repositorio CVS público. Nótese que el código está en constante desarrollo. Lo que obtengas hoy es normalmente distinto de lo que obtuviste ayer.

Para instalar, sigue las instrucciones del CVS de XFree86 para descargar el módulo xc. Después sigue las instrucciones de compilación del código aquí debajo.

3.6 MacGimp

El instalador descargable ofrecido por el personal de MacGimp durante 2001 no contiene XFree86, pero puede sobreescribir algunas ficheros ]de configuración de XFree86.

El CD que MacGimp, Inc. ofrece a la venta contiene una versión indeterminada de XFree86. No está claro que versión es; parece ser una mezcla de 4.0.3, 4.1.0 y alguna versión de desarrollo no implementada. El servidor usa modo rootless mode, usando un parche anterior a la versión 4.1.0.

3.7 Cómo reemplazar X11

Si has instalado alguno de los paquetes X11 de Fink y, por alguna razón u otra has decidido que necesitas eliminarlo, el procedimiento a seguir es simple. Tienes que forzar la eliminación de los viejos paquetes y después instalar los nuevos, con el objetivo de preservar las consistencia de la base de datos dpkg.

Hay dos formas diferentes de hacer esto:

  1. Usar FinkCommander

    Si usas FinkCommander, puedes forzar la eliminación a través del menú. Por ejemplo, si tienes xfree86-rootless instalado pero necesitas la versión threaded, debe seleccionar los paquetes xfree86-rootless, xfree86-rootless-shlibs, xfree86-base y xfree86-base-shlibs packages y entonces ejecutar:

    Source -> Force Remove
  2. Eliminar manualmente desde la línea de comandos

    Para eliminar manualmente se usa dpkg con la opción --force-depends, así:

    sudo dpkg -r --force-depends xfree86-rootless\ 
    xfree86-rootless-shlibs xfree86-base xfree86-base-shlibs

    Obsérvese que si tienes aplicaciones que requieren XFree86 threaded, puedes tener problemas con tu base de datos dpkg si fuerzas la eliminación e instalas un paquete XFree86 diferente o un paquete fantasma representándolo.

Por otro lado, si tienes una versión de X11 no instalada desde Fink necesitas eliminarla usando la línea de comandos:

sudo rm -rf /usr/X11R6 /etc/X11

Esto sigue siendo cierto para cualquier paquete X11 no instalado a través de Fink. Necesitarás también eliminar XDarwin.app | X11.app, dependiendo de cuál tengas instalado. Asegúrate de comprobar tu fichero .xinitrc si has eliminado el X11 de Apple para que no lance quartz-wm. Puedes entonces instalar cualquier variedad de X11 que desees, manualmente o vía Fink.

3.8 Índice de paquetes Fink

Un breve esquema de las opciones de instalación y de los paquetes de Fink a instalar

Tipo de instalaciónPaquetes de Fink
4.2.x construido vía Fink

xfree86-base y xfree86-rootless (y sus -shlibs)

o xfree86-base-threaded y xfree86-rootless-threaded (y -shlibs)

4.3.x construido via Fink

xfree86 y xfree86-shlibs

4.x binarios oficiales

system-xfree86 solo (+ paquetes asociados)

4.x construidos desde fuentes o desde las últimas fuentes CVS

system-xfree86 solo (+ paquetes asociados)

4.2.x de Apple

system-xfree86 solo (+ paquetes asociados)

4.3.x de Apple

system-xfree86 solo (+ paquetes asociados)

4 El arranque de XFree86

4.1 Darwin

En Darwin puro, XFree86 se comporta como en cualquier otro Unix. La forma normal de arrancar es via startx desde la consola; que arranca el servidor y algunos clientes iniciales, tales como el gestor de ventanas y un emulador de terminal con una shell. En Darwin puro no es necesario especificar parámetros, así que basta con teclear:

startx

Se puede personalizar qué es lo que se arranca a través de varios ficheros en tu directorio raíz. .xinitrc controla qué clientes se arrancan. .xserverrc controla opciones de servidor, incluso arrancar otro servidor. Si hay problemas (normalemnte, el problema es obtener una pantalla vacía o que XFree86 te mande de vuelta a la consola), puedes arrancar sin problemas moviendo estos ficheros fuera de su localización. Si startx no encuentra los ficheros, usará modo seguro de arranque, el cual debería funcionar siempre.

Alternativamente, puedes arrancar el servidor directamente mediante alguna de las opciones XDMCP, como ésta:

X -query remotehost

Los detalles pueden obtenerse del manual de Xserver.

Finalmente, está la opción xdm; lee su manual para los detalles.

Nota: Si estás ejecutando Mac OS X anterior a Panther, puedes teclear >console en la ventana de inicio y obrtendrás una consola de texto equivalente a Darwin puro. Si no ves un campo donde entrar un nombre de usuario en la ventana de inicio, teclea la primera letra de cualquier nombre de usuario, y a continuación opción-enter. Puedes usar entonces todos los métodos descritos anteriormente, con la excepción de xdm.

Nota: En Mac OS X Panther, no se puede arrancar XFree86 desde la consola de inicio.

4.2 Mac OS X + XFree86 4.x.y

Hay básicamente dos formas de arrancar XFree86 bajo Mac OS X. Una es hacer doble clic en la el icono de la aplicación XDarwin.app, situada en la carpeta Aplicaciones, o en el icono de un alias de esta aplicación (en el dock, p.e.). Esto te permitirá escoger entre modo de pantalla completa o modo rootless en un diálogo al arrancar. Puedes deshabilitar este diálogo y poner XDarwin permanentemente en le modo de funcionamiento que prefieras en el menú de Preferencias.

Antes de 4.2.0 arrancará en modo pantalla completa automáticamente y no hay ninguna forma de obtener el modo rootless mediante doble clic en la aplicación.the

La otra forma de arrancar XFree86 bajo Mac OS X es mediante el comando startx desde Terminal.app. Si arrancas el servidor de esta forma, puedes decirle que se ejecute en paralelo con Quartz. Esto se hace pasándole la opción -fullscreen así:

startx -- -fullscreen

Eso arrancará el servidor en modo pantalla completa mas los clientes en tu .xinitrc.

NOTE: antes de 4.2, -quartz era usado para el modo de pantalla completa.

Si tienes un servidor que soporta el modo rootless, puedes arrancar en ese modo con la opción -rootless:

startx -- -rootless

La opción -quartz ya no selecciona el modo de pantalla completa, sino que usa el modo por defecto en las preferencias.

A partir de la versión 4.3, si usas startx sin argumentos, obtendrás el cuadro de diálogo de inicio.

4.3 El fichero .xinitrc

Para arrancar algunos clientes X con el servidor X, se usa un fichero de nombre .xinitrc en el directorio raíz. Puede usarse, p.e., para arrancar el gestor de ventanas y algunos terminales X o un entorno de escritorio GNOME. El fichero .xinitrc es un script de shell que contiene los comandos necesarios para ello. Nohyace falta poner el conocido #!/bin/sh en la primera línea ni poner el bit de ejecutable en los permisos; xinit sabe como ejecutar este fichero en una shell.

Si no hay fichero .xinitrc en tu directorio raíz, XFree86 usará el fichero por defecto: /private/etc/X11/xinit/xinitrc. Es posible utilizar este como punto de partida para empezar a editar tu propio .xinitrc:

cp /private/etc/X11/xinit/xinitrc ~/.xinitrc

Si estás usando Fink, debes poner source init.sh justo al principio para garantizar una definición correcta de tu entorno.

Puedes poner cualquier tipo de comandos en un fichero .xinitrc, pero hay que tener cuidado con algunos puntos. Primero, el shell que interpreta el fichero esperarará por defecto que cada programa finalice antes de empezar el siguiente. Eso significa que si esperas que varios programas funcionen en paralelo, hay que avisárselo al shelll poniendolos "en último plano" ("background") añadiendo un & al final de la línea.

En segundo lugar, xinit espera que el script .xinitrc termine e interpreta el final como "la sesión ha terminado, ahora debo matar al servidor X también". Esto significa que el último comando usado en en tu fichero .xinitrc no puede ser ejecutado en último plano y debe ser un programa de larga vida. Por eso suele usarse el gestor de ventanas para este propósito. De hecho, muchos gestores de ventanas asumen que xinit les espera para terminar y usan eso para hacer funcionar el item de menú "Fin de sesión" ("Log out"). (Nota: Para ahorrar algo de memoria y ciclos de CPU, puedes pone exec al principio de la última línea, como en el ejemplo que sigue)

Un simple ejemplo que arranca GNOME:

. /opt/sw/bin/init.sh
exec gnome-session

Un ejemplo más complejo para usuarios de bash que apaga las alertas de X11, arranca algunos clientes y finalmente ejecuta el gestor de ventanas Enlightenment:

. /opt/sw/bin/init.sh

xset b off

xclock -geometry -0+0 &
xterm &
xterm &

exec enlightenment

Para arrancar GNOME 2.2 bajo X11 de Apple, usa la siguiente secuencia:

. /opt/sw/bin/init.sh
quartz-wm --only-proxy &
metacity &
exec gnome-session

Para GNOME 2.4 bajo X11 de Apple, metacity arranca automáticamente y por lo tanto la secuencia se reduce a:

. /opt/sw/bin/init.sh
quartz-wm --only-proxy &
exec gnome-session

Para arrancar KDE 3.2 (version < 3.2.2-21) bajo X11 de Apple:

. /opt/sw/bin/init.sh
export KDEWM=kwin
quartz-wm --only-proxy &
/opt/sw/bin/startkde >/tmp/kde.log 2>&1

Y finalmente, para arrancar la última versión inestable de KDE bajo X11 de Apple:

. /opt/sw/bin/init.sh
/opt/sw/bin/startkde >/tmp/kde.log 2>&1

5 Xtools

5.1 Instalación de Xtools

Para variar, es fácil. Obtén el instalador, haz doble clic y sigue las instrucciones. Asegúrate de seleccionar el volumen de arranque cuando te lo pregunten.

Si estás usando Fink, debes instalar el paquete system-xtools después de instalar Xtools. Este paquete no instala ficheros, sólo comprueba que las bibliotecas y otros ficheros existen y actua como un paquete fantasma en el sistema de dependencias de Fink.

5.2 Ejecución de Xtools

Para ejecutar Xtools, doble clic en Xtools.app en tu carpeta Aplicaciones. Como XFree86, Xtools ejecutará los clientes que especifiques en tu fichero .xinitrc. Xtools permite además arrancar clientes desde el menú.

5.3 Notas sobre OpenGL

Xtools utiliza aceleración física OpenGL en modo rootless y viene con las bibliotecas para necesarias para proporcionar soporte. Pero, mientras la biblioteca principal es perfecta, las bibliotecas libGLU and libglut están presentes únicamente como bibliotecas estáticas, lo cual no es suficiente para una compatibilidad binaria completa con XFree86. También hay cabeceras perdidas. Fink no puede, en este momento, ofrecer una solución. Esperamos que el problema se resuelva en Xtools 1.1.

6 Otras posibilidades X11

6.1 VNC

VNC es un sistema de visualización de gráficos con capacidades de red similar en diseño a X11. Sin embargo trabaja en un nivel más bajo, lo que hace su implementación más fácil. Con el servidor Xvnc y un cliente Mac OS X es posible ejecutar aplicacione X11 con Mac OS X. La página página Xvnc de Jeff Whitaker proporciona más información.

6.2 WiredX

WiredX es un servidor X11 escrito en X11. También soporta modo rootless. En el sitio web se puede obtener un paquete instalador Installer.app.

6.3 eXodus

De acuerdo con su sitio web, eXodus 8 de Powerlan USA se ejecuta en modo nativo en Mac OS X. Se desconoce que código usa y cómo soporta los clientes locales. Debido a ésto no hay soporte especial para eXodus en Fink. Si tienes más información, por favor acércanosla.

7 Resolución de problemas con XFree86

7.1 Cuando lanzo XDarwin, termina o se cuelga inmediatamente.

Antes de nada: ¡No te asustes! Hay montones de cosas que pueden no funcionar correctamente con XFree86 y un buen número de ellas pueden causar fallos de arranque. De hecho, no es inusual que Darwin se cuelgue si se encuentra problemas de arranque. Esta sección intenta proporcionar una lista de problemas posibles. Pero, lo primero es recopilar dos importantes informaciones:

Versión de XDarwin. Puedes encontrar la versión de XDarwin version en el Finder haciendo clic una sóla vez en el icono de XDarwin y seleccionando "Mostrar Información" desde el menú. La versión se incrementa sólamente cuando el proyecto XonX saca una nueva implementación binaria de prueba. Es decir "1.0a1" puede ser cualquier versión entre 1.0a1 y 1.0a2.

Mensajes de error. Son esenciales para la comprensión de los problemas a los que nos enfrentaremos. Cómo obtener los mensajes de error depende de la forma en que se lance XDarwin. Si ejecutaste startx desde una ventana de Terminal, tendrás los mensajes en esa ventana. Recuerda que puedes hacer "scroll" hacia arriba para buscar los mensajes. Si arrancaste XDarwin mediante doble clic en el icono, los mensajes terminarán en el log del sistema, al que se puede acceder a través de la aplicación Consola en la carpeta Utilidades. Asegúrate de coger el conjunto correcto de errores, i.e., el último.

Comencemos con una lista de mensajes posibles:

_XSERVTransmkdir: Owner of /tmp/.X11-unix should 
be set to root
_IceTransmkdir: Owner of /tmp/.ICE-unix should 
be set to root

Tipo: Inofensivo. X11 crea directorios ocultos en /tmp para almacenar los ficheros socket de las conexiones locales. Por razones de seguridad X11 prefiere que estos directorios sean propiedad del superusuario (root), pero como son accesibles para escritura por cualquiera, X11 funcionará sin problemas. (Nota: Es muy difícil definir al superusuario como propietario de estos directorios porque Mac OS X vacía /tmp en los reinicios y XDarwin se ejecuta sin privilegios -que no necesita- de superusuario).

QuartzAudioInit: AddIOProc returned 1852797029
-[NSCFArray objectAtIndex:]: index (2) beyond 
bounds (2)
kCGErorIllegalArgument : CGSGetDisplayBounds 
(display 35434400)
No core keyboard

Tipo: Falso. Hay errores que aparecen cuando el servidor intenta restablecerse después de un error previo. Se imprime una nueva copia de los mensajes de arranque, seguidos de uno o más de los mensajes anteriores porque el reinicio del servidor no funciona en determinadas versiones de XDarwin. Cuando veas estos mensajes, simplemente ve más arriba en la ventana del Terminal (resp. Consola) y mira otro conjunto de mensajes. Esta situación ocurre en todas las versiones superiores o iguales a la 1.0a3 de XDarwin. El problema fue solucionado después de que 1.0a3 fuera publicada.

cat: /Users/chrisp/.Xauthority: No such file or directory

Tipo: Casi inofensivo. No se sabe de dónde vienen estos mensajes pero se sabe que no tienen impacto ninguno en el desarrollo de las operaciones. Pueden eliminarse ejecutando touch .Xauthority en tu directorio raíz.

Gdk-WARNING **: locale not supported by C library

Tipo: Inofensivo. Significa justo lo que dice: el sistema locale no es soportado por la biblioteca C, pero no impide trabajar a la aplicación. Para más información, ver más adelante.

Gdk-WARNING **: locale not supported by Xlib, locale set to C
Gdk-WARNING **: can not set locale modifiers

Tipo: Malo, pero no fatal. Estos mensajes pueden aparecer junto al anterior. Significa que los ficheros de datos locale de XFree86 no están. Aparentemente este mensaje aparece de forma errática cuando se constuye XFree86 compilándolo desde las fuentes. La mayor parte de las aplicaciones seguirán funcionando. Una excepción notable es GNU Emacs.

Unable to open keymapping file USA.keymapping.
Reverting to kernel keymapping.

Tipo: A manudo fatal. Puede suceder con XDarwin 1.0a1, con la opción de teclado "Load from file" habilitada. Esta versión necesita una ruta completa para cargar un fichero desde el diálogo de preferencias, pero busca automáticamente el fichero si se le solicita desde la línea de comandos. Normalmente, a este mensaje .e sigue el "assert" que viene a continuación. Para evitarlo, sigue las instruciones que se dan más adelante.

Fatal server error:
assert failed on line 454 of darwinKeyboard.c!
Fatal server error:
Could not get kernel keymapping! Load keymapping from file instead.

Tipo: Fatal. Los cambios que Apple hizo en Mac OS X 10.1 rompen el código de XFree86 que lee el formato de teclado desde el núcleo del sistema operativo resultando este mensaje de error. Debes usar la opción de keymapping "Load from file" en Mac OS X 10.1., en las preferencias de XDarwin. Asegúrate que hay un fichero seleccionado, (i.e. usa el botón "Pick file") - activar simpelmente la caja de comprobación puede no ser suficiente en algunas versiones de XDarwin. Si no puedes obtener el diálogo de Prefencias porque XDarwin se cierra antes de darte una oportunidad, simplemente ejecútalo desde el Terminal con el comando startx -- -quartz -keymap USA.keymapping. Esto permite normalmente que XDarwin arranque, y entonces puedes hacer la elección permanente en el menú de Preferencias.

Fatal server error:
Could not find keymapping file .

Tipo: Fatal (como se indica). Este error se debe a la ausencia de mapas de teclado (keymapping) en Panther. Necesitas instalar xfree86-4.3.99-16 o posterior, porque estas versiones no necesitan esos ficheros.

Warning: no access to tty (Inappropriate ioctl for device).
Thus no job control in this shell.

Tipo: Bastante inofensivo. XDarwin 1.0a2 y posteriores lanzan un shell interactivo en segundo plano para ejecutar el fichero de arranque de clientes (.xinitrc). Esto es así para uqe no sea necesariuo añadir sentencias para establecer la variable PATH en tu fichero. Algunas shells indican que no están conectadas a un terminal real, pero el mensaje puede ser ignorado porque esta instancia de shell no se usa para nada que requiera el control de trabajos ni procesos similares.

Fatal server error:
failed to connect as window server!

Tipo: Fatal. Significa que el servidor en modo consola (para Darwin puro) arrancó mientras se estaba en Aqua. Normalmente esto ocurre si se ha instalado el binario de la distribución oficial de XFree86 pero no la bola tar Xquartz.tgz. También puede ocurrir cuando se pierden los enlaces simbólicos en /usr/X11R6/bin o cuando se invoca el comando XDarwin en una ventana de termianl para arrancar el servidor (se debe usar startx en lugar de ese comando, véase Arrancando XFree86).

En cualquier caso, puedes ejecutar ls -l /usr/X11R6/bin/X* y comprobar la salida. Hay que examinar cuatro entradas relevantes: X, un enlace simbólico apuntando a XDarwinStartup; XDarwin, un fichero ejecutable (esto es el servidor en modo consola); XDarwinQuartz, un enlace simbólico apuntando a /Applications/XDarwin.app/Contents/MacOS/XDarwin; y XDarwinStartup, pequeño fichero ejecutable. Si algunos de estos ficheros no existe o está apuntando a algún lugar equivocado, debes corregirlo. Cómo hacer esto depende del modo en que hayas instalado XFree86. Si lo instalaste desde Fink entonces necesitas reinstalar el paquete xfree86 (o xfree86-rootless para OS 10.2 y anteriores). Si lo instalaste tú mismo, obtén los ficheros desde una copia Xquartz.tgz.

The XKEYBOARD keymap compiler (xkbcomp) reports:
> Error:            Can't find file "unknown" for geometry include
>                   Exiting
>                   Abandoning geometry file "(null)"
Errors from xkbcomp are not fatal to the X server

Tipo: Casi inofensivo. Como el mensaje dice, no es fatal. Hasta donde sabemos. Xdarwin no utiliza la extensión XKB para nada. Quizás algún cliente intenta usarla de algún modo...

startx: Command not found.

Tipo: Fatal. Ocurre con XDarwin 1.0a2 y 1.0a3 cuando los ficheros de inicialización del shell no han tienen nigún comando para añadir /usr/X11R6/bin a la variable PATH. Si usas Fink y no has cambiado tu shell por defecto, debería ser suficiente añadir la línea source /opt/sw/bin/init.csh al fichero .cshrc en tu directorio de usuario.

_XSERVTransSocketUNIXCreateListener: 
...SocketCreateListener() failed
_XSERVTransMakeAllCOTSServerListeners: server already running
Fatal server error:
Cannot establish any listening sockets - Make sure an X server isn't already
running

Tipo: Fatal. Puede suceder si ejecutas accidentalmente varias instancias de XDarwin a la vez o después de un cierre sucio (i.e. crash) de XDarwin. También puede ser debido a un problema de permisos de ficheros con los sockets de las conexiones locale. Puedes intentar limpiar esto con rm -rf /tmp/.X11-unix. Reiniciar el ordenador también puede ayudar (Mac OS X limpia automáticamente /tmp cuando arranca y la pila de red se reinicia).

Xlib: connection to ":0.0" refused by server
Xlib: Client is not authorized to connect to Server

Tipo: Fatal. Los programas clientes no pueden conectarse con el servidor de visualización (XDarwin) porque este usa datos falsos de autentificación. Puede ser causado por algunas instalaciones de VNC, por ejecutar XDarwin a través sudo, y probablemente por algunos otros raros accidentes. El método normal para arreglar esto es borrar el fichero .Xauthority (que almacena los datos de autentificación) en tu directorio de usuario y re-crear un fichero vacío:

cd
rm .Xauthority
touch .Xauthority

Otra causa común de fallos en el arranque de XFree86 es un fichero .xinitrc incorrecto. El fichero .xinitrc se ejecuta y, por alguna razón, termina casi inmediatamente. xinit interpreta esto como "la sesión de usuario ha terminado" y finaliza XDarwin. Véase la sección .xinitrc para más detalles. Recuerda configurar la variable PATH y tener un programa de larga vida que no arranque en segundo plano. Es una buena idea añadir exec xterm como ayuda de emergencia cuando no se halla el gestor de ventanas o similar.

7.2 Iconos negros en el panel GNOME panel o en el menú de una aplicación GNOME

Un problema común es que los iconos u otras imágenes se ven como rectángulos o siluetas negras. En último extremo, esto está provocado por limitaciones del núcleo del sistema operativo. Apple ha sido informada del problema, pero por lo visto hasta ahora no parece que quiera arreglarlo. Véanse los archivos del Darwin bug report para más detalles.

La situación actual es que la extensión MIT-SHM del protocolo X11 es prácticamente inutilizable en Darwin y en Mac OS X. Hay dos formas de anular este protocolo: en el servidor y en los clientes. Los servidores XFree86 instalados por Fink (i.e. los paquetes xfree86-server and xfree86-rootless) lo tienen apagado. El GIMP y el panel GNOME panel también. Si notas iconos negros en otra aplicación, arranca con la opción --no-xshm en la línea de comandos.

7.3 El teclado no funciona en XFree86

Un problema conocido que sólamente afecta a los portátiles (PowerBook, iBook). La opción de mapa de teclado "Load from file" en las preferencias de XDarwin se implementó para trabajar con este problema. Ahora se ha convertido en el método por defecto porque el método antiguo (leer el mapa desde el núcleo) dejó de funcionar con Mac OS X 10.1. Si no tienes habilitada esta opción, puedes hacerlo en el diálogo de Preferencias de XDarwin. Comprueba la caja de comprobación de "Load from file" y selecciona el fichero de teclado a cargar. Tras reiniciar XDarwin, el teclado debería funcionar (véase abajo).

Si estás arrancando XFree86 desde la línea de comandos, puedes pasarle el nombre del fichero de teclado como una opción, así:

startx -- -quartz -keymap USA.keymapping

7.4 La tecla de borrar no funciona

Ocurre cuando usas la opción "Load keymapping from file" descrita anteriormente. El fichero de mapeo describe la tecla de borrar como "Delete", no como "Backspace". Se puede corregir poniendo la siguiente línea en tu fichero .xinitrc file:

xmodmap -e "keycode 59 = BackSpace"

XDarwin 1.0a2 y posteriores poseen el código necesario para mapear la tecla de borrar adecuadamente.

7.5 "Warning: locale not supported by C library"

Mensajes comunes, pero inofensivos. Significan lo que dicen: la internacionalización no está soportada a través de las bibliotecas C estándares, el programa usará los mensajes en inglés por defecto, formatos de fecha y así sucesivamente... Hay varias formas de comportarse con respecto a ésto:

8 Consejos de uso

8.1 Arrancar aplicaciones X11 desde Terminal.app

Para lanzar aplicaciones X11 desde una ventana del Terminal.app window, debes inicializar la variable de entorno "DISPLAY". Este variable le dice a las aplicaciones donde encontrar el servidor de ventanas X11. Si XDarwin se ejecuta en la misma máquina que el servidor, puedes hacerlo de las maneras siguientes:

Es interesante tener una configuración que lance XDarwin.app en el arranque (configurable en el panel de Arranque de las Preferencias del Sistema en Mac OS 10.2, o en el panel Cuentas en Mac OS 10.3):

Esto inicia DISPLAY automáticamente en cada shell, pero no sobreescribe el valor actual cuando DISPLAY ha sido inicializado previamente. De esa manera, se puede seguir ejecutando aplicaciones X11 a distancia mediante ssh o por un túnel X11.

8.2 Lanzamiento de aplicaciones Aqua desde un xterm

Una manera de lanzar aplicaciones Aqua desde un xterm (realmente, desde cualquier shell) es el comando open. Algunos ejemplos:

open /Applications/TextEdit.app
open SomeDocument.rtf
open -a /Applications/TextEdit.app index.html

El segundo ejemplo abre el documento en la aplicación que está asociada con él. El tercer ejemplo proporciona explícitamente la aplicación a utilizar.

8.3 Copiar y Pegar

Copiar y Pegar funciona generalmente entre los entornos Aqua y X11, pero hay algunos errores. Emacs es especialmente delicado con la selección en curso. Copiar y Pegar desde Classic a X11 no funciona.

Lo importante es utilizar el método adecuado según el entorno en el que estemos. Para transferir texto desde Aqua a X11, usa Cmd-C en Aqua, luego pasa la ventana de destino al frente y usa el botón central del ratón, i.e. opción-clic en un ratón de un sólo botón (puede ser configurado en las Preferencias de XDarwin), para pegar. Para transferir texto desde X11 a Aqua, simplemente selecciona el texto con el ratón en X11 y usa Cmd-V en Aqua para pegarlo.

El sistema X11 tiene realmente portapaeles separados (llamados "buffers de corte" en lenguaje X11) y algunas aplicaciones tienen puntos de vista curiosos sobre cuáles deben usar. Por eso, la combinación de GNU Emacs or XEmacs algunas veces no funcion. El programa autocutsel puede ayudar aquí: sincroniza automáticamente los dos buffers de corte principales. Para ejecutarlo instala el paquete de Fink autocutsel y añade la siguiente línea a tu fichero .xinitrc:

autocutsel &

(Asegúrate de añadirla antes de la línea que invoca al gestor de ventanas, ¡esa nunca termina de ejecutarse! No pongas la línea al final o nunca se ejecutará) Y recuerda que en el X11 de Apple ya no es necesario (véase Binarios de Apple).

Si estás usando X11 de Apple, entonces puedes usar Comando-C o Edit->Copy, como en las aplicaciones Mac, para copiar texto en el portapapeles, y el botón central o Comando-V para pegar desde le portapapeles al X11 de Apple.

En cualquier caso, si encuentras problemas copiando o pegando desde Aqua a X11 o viceversa, intenta en primer lugar copiar de nuevo, (puede ocurrir que la copia no se hubiera efectuado en el primer intento), y utilizar aplicaciones intermedias tales como TextEdit o Terminal.app en el lado Aqua y nedit o un xterm en el lado X11. Según mi experiencia, siempre hay una solución.


Copyright Notice

Copyright (c) 2001 Christoph Pfisterer, Copyright (c) 2001-2020 The Fink Project. You may distribute this document in print for private purposes, provided the document and this copyright notice remain complete and unmodified. Any commercial reproduction and any online publication requires the explicit consent of the author.


Generated from $Fink: x11.es.xml,v 1.7 2023/08/04 5:08:13 nieder Exp $