¿Cuál es la diferencia entre .Xresources y .Xdefaults?

59

Estos dos archivos parecen tener la misma función. ¿Cuál es la diferencia entre los dos si los hay?

freedrull
fuente

Respuestas:

68

~/.Xdefaultses el método más antiguo para almacenar recursos X. Este archivo se vuelve a leer cada vez que se inicia un programa Xlib. Si se usa X11 en la red, el archivo debe estar presente en el mismo sistema de archivos que los programas.

~/.XresourcesEs más nuevo. Se carga con xrdbla RESOURCE_MANAGERpropiedad de la ventana raíz X11. Cada vez que un programa busca un recurso, se lee directamente RESOURCE_MANAGER.

Si esta propiedad no existe, Xlib recurre al antiguo método de lectura .Xdefaultsen cada inicio de programa. Tenga en cuenta que la mayoría de las distribuciones se cargarán ~/.Xresourcesautomáticamente si está presente, lo .Xdefaultsque hará que se ignore incluso si nunca ha ejecutado xrdbmanualmente.

La ventaja del nuevo método es que es suficiente para llamar xrdbuna vez, y los recursos estarán disponibles para cualquier programa que se ejecute en esta pantalla, ya sea local o remoto. (El nombre ~/.Xresourceses solo una convención xrdb; incluso puede usarlo para cargar cualquier archivo .Xdefaults).

Manual de programación de Xlib P.441:

Antes de X11R2, la configuración de recursos X se leía desde el archivo .Xdefaults en el directorio de inicio de los usuarios y, opcionalmente, en cualquier máquina en la que se ejecutaba el cliente X, por lo que era difícil mantener varios archivos.

Más tarde, el programa xrdb se creó para almacenar la configuración de recursos de los usuarios en .Xresources en la propiedad XA_RESOURCE_MANAGER de la ventana raíz en el servidor X actual, por lo que todos los clientes conectados al mismo servidor tienen acceso a ellos. Si el usuario no ha llamado a xrdb para establecer la propiedad, se lee .Xdefaults.

Wikipedia :

[...] los recursos X se almacenan en dos ubicaciones estándar, dependiendo de si se aplican a todas las pantallas o a una en particular:

  • la propiedad RESOURCE_MANAGER de la ventana raíz de la pantalla 0
  • la propiedad SCREEN_RESOURCES de la ventana raíz de una pantalla arbitraria

No termina en eso.

  • También existe la $XENVIRONMENTvariable, que se establece de manera predeterminada si no se establece. Esto se usa de la misma manera que , pero siempre se lee independientemente de si está presente. Puede usar archivos para mantener algunas configuraciones específicas de la máquina mientras las usa para las globales.~/.Xdefaults-hostname.XdefaultsRESOURCE_MANAGER.Xdefaults-hostnamexrdb

Los elementos # 4 y # 5 enumerados a continuación parecen ser utilizados solo por programas Xlib puros, no por GTK 3 u otros juegos de herramientas.

  • La cuarta ubicación es el directorio señalado por la $XAPPLRESDIRvariable de entorno. (Curiosamente, si la variable no está configurada, $HOMEse usa como predeterminada). Cuando se inicia un programa, se ve si existe alguno de los siguientes archivos (el nombre del archivo es el mismo que el nombre de la clase del programa):

    • $XAPPLRESDIR/$LC_CTYPE/XTerm
    • $XAPPLRESDIR/language/XTerm
    • $XAPPLRESDIR/XTerm

    ( languagese deriva de $LC_CTYPEeliminar todos los componentes excepto el primero; por ejemplo, en_US.utf-8en.)

  • La quinta ubicación son los directorios "predeterminados de la aplicación" en todo el sistema. Nuevamente, los directorios predeterminados de la aplicación se verifican al inicio del programa si tienen un archivo con el nombre del programa. Por ejemplo, XTerm (en Arch Linux) usa:

    • /etc/X11/$LC_CTYPE/app-defaults/XTerm
    • /etc/X11/language/app-defaults/XTerm
    • /etc/X11/app-defaults/XTerm
    • /usr/share/X11/$LC_CTYPE/app-defaults/XTerm
    • /usr/share/X11/language/app-defaults/XTerm
    • /usr/share/X11/app-defaults/XTerm

    Los archivos predeterminados de la aplicación generalmente se instalan /usr/sharejunto con el programa mismo; las anulaciones del administrador irían a /etc.


Todo lo mencionado anteriormente está documentado con gran detalle en la documentación del kit de herramientas X.org - artículo X Toolkit Intrinsics - C Language Interface , sección Carga de la base de datos de recursos .

Desafortunadamente, no pude encontrar ninguna guía de usuario reciente que describa los recursos X, principalmente porque son irrelevantes en el año 2012. Pero para obtener información histórica (léase: horriblemente desactualizada), puede leer la guía del usuario del sistema X Window para X11 R3 y R4 del sistema X Window sección 9: Configuración de recursos (a partir de la página 181).

Gravedad
fuente
Gran respuesta, pero debe tenerse en cuenta que no todas las implementaciones siguen las reglas correctamente. Por ejemplo, recuerdo que las aplicaciones SunOS 4 y Solaris 6 no captarían los cambios predeterminados .X a menos que explícitamente ejecutara "xrdb" después. También puede haber algo extraño cuando la aplicación y el servidor X se ejecutan en diferentes hosts. Algunas aplicaciones leen el archivo local y otras leen la base de datos del servidor X.
David C.
1
@DavidC .: Ese comportamiento Xdefaults está siguiendo las normas expuestas anteriormente. Si xrdbha siempre sido gestionado por esta pantalla X desde su ingreso - es decir, si existe la propiedad raíz X - a continuación, xlib no utilizará los Xdefaults en todos los más.
Grawity
1
Eso tiene sentido. Pero todavía hay muchas aplicaciones aparentemente borken que leerán el contenido de ~ / .Xresources e ignorarán la base de datos xrdb. Lo que puede ser realmente molesto si inicia sesión en un host diferente (que tiene diferentes recursos .X) y descubre que la aplicación no muestra su contenido de la misma manera que cuando se ejecuta localmente.
David C.