Manualinux
http://www.nvu.com http://www.gimp.org InicioPresentaciónActualizacionesManualesDescargasNoticiasAgradecimientoEnlaces

Entornos GráficosAplicaciones

Administradores de SesionesAdministradores de VentanasEscritoriosUtilidades de Escritorio

Utilidades de Escritorio - XScreenSaverUtilidades de Escritorio - Zufall

Utilidades de Escritorio - Xsettingsd




Utilidades de Escritorio - Xsettingsd




Copyright

Copyright © José Luis Lara Carrascal  2015-2018   http://manualinux.eu



Sumario

Introducción
Instalación
Opciones de línea de comandos
Configuración
Configurar el inicio de Xsettingsd
Crear un script selector de configuraciones
Enlaces




Introducción  

Xsettingsd es un programa con el que podremos volcar a un archivo, la configuración del aspecto visual (tema GTK+, tema de iconos, fuentes de texto, control del suavizado de éstas y tamaño, efectos de sonido, tema del puntero del ratón, etc.) de cualquier entorno de escritorio escrito en GTK+ que soporte la especificación XSETTINGS de freedesktop.org, por ejemplo, de los tratados en esta web, XFce 4, o MATE, para posteriormente cargarla cuando utilicemos nuestro administrador de ventanas favorito, con el añadido de que el programa permite cargar diferentes archivos de configuración, y que el consumo de memoria del mismo, es mucho menor, que si utilizáramos los programas de estos entornos de escritorio.



Instalación  

Dependencias

Herramientas de Compilación


Entre paréntesis la versión con la que se ha compilado Xsettingsd para la elaboración de este documento.

* GCC - (8.1.0) o Clang - (6.0.0)
* SCons - (3.0.1)
* Pkg-config - (0.29.2)

Librerías de Desarrollo

* Xorg - (7.7 / xorg-server 1.20.0)
   LibX11 - (1.6.5)



Descarga  Información sobre los paquetes

xsettingsd-1.0.0.tar.xz

Firma Digital  Clave pública PGP

xsettingsd-1.0.0.tar.xz.asc

Verificar la firma digital del paquete

$ gpg --import manualinux.asc 
$ gpg --verify xsettingsd-1.0.0.tar.xz.asc xsettingsd-1.0.0.tar.xz

Optimizaciones

$ export {C,CXX}FLAGS='-O3 -march=amdfam10 -mtune=amdfam10'

Donde pone amdfam10 se indica el procesador respectivo de cada sistema seleccionándolo de la siguiente tabla:
Nota informativa sobre las optimizaciones para GCC
* La opción '-march=' establece el procesador mínimo con el que funcionará el programa compilado, la opción '-mtune=' el procesador específico para el que será optimizado. 

* Los valores separados por comas, son equivalentes, es decir, que lo mismo da poner '-march=k8' que '-march=athlon64'.

* En versiones de GCC 3.2 e inferiores se utiliza la opción '-mcpu=' en lugar de '-mtune='.
Nota informativa sobre las optimizaciones para Clang
* La opción '-mtune=' está soportada a partir de la versión 3.4 de Clang.

* Los valores de color azul no son compatibles con Clang.

* Las filas con el fondo de color amarillo son valores exclusivos de Clang, y por lo tanto, no son aplicables con GCC.
Valores CPU
Genéricos
Intel
AMD
VIA
IDT

Optimizaciones adicionales

Optimizaciones adicionales
GCC
Graphite
$ export {C,CXX}FLAGS+=' -floop-interchange -ftree-loop-distribution -floop-strip-mine -floop-block'
LTO
$ export AR=gcc-ar RANLIB=gcc-ranlib NM=gcc-nm
$ export {C,CXX}FLAGS+=' -fuse-linker-plugin -flto=2'
Donde pone 2 se indica el número de núcleos de nuestro procesador, si sólo tiene uno, utilizar el parámetro -flto

Clang
Polly
$ export {C,CXX}FLAGS+=' -O3 -mllvm -polly -mllvm -polly-vectorizer=stripmine'
LTO
$ export AR=llvm-ar RANLIB=llvm-ranlib NM=llvm-nm
$ export {C,CXX}FLAGS+=' -flto'
ThinLTO
$ export AR=llvm-ar RANLIB=llvm-ranlib NM=llvm-nm
$ export {C,CXX}FLAGS+=' -flto=thin'
La aplicación de esta optimización es alternativa a la tradicional LTO, a partir de Clang 3.9, y por lo tanto, no es combinable con la misma.

Parámetros adicionales

Establecer la ruta de búsqueda de directorios de librerías en sistemas de 64 bits multiarquitectura
$ export LDFLAGS+=" -L/usr/lib64 -L/usr/local/lib64"

Establecer el RPATH correspondiente si utilizamos una versión de GCC que no es la principal del sistema
$ export LDFLAGS+=" -Wl,-rpath,/opt/gc8/lib64 -lstdc++"
Sustituir /opt/gcc8/lib64 por la ruta de instalación de la versión de GCC alternativa que se vaya a utilizar en el proceso de compilación de este paquete.

Establecer el uso de enlazador dinámico para LLD
$ export LDFLAGS+=' -fuse-ld=lld'
Optimizaciones complementarias LTO de LLD
$ export LDFLAGS+=' -Wl,--lto-partitions=2'
Optimizaciones complementarias ThinLTO de LLD
$ export LDFLAGS+=' -Wl,--thinlto-jobs=2'
Donde pone 2 se indica el número de núcleos de nuestro procesador, si sólo tiene uno, no es necesario añadir el parámetro en cuestión.

Establecer la variable de entorno de uso de compilador para Clang
$ export {CC,CXX}=clang

Extracción y Compilación  Bloc de Notas Información general sobre el uso de los comandos

$ tar Jxvf xsettingsd-1.0.0.tar.xz
$ cd xsettingsd-1.0.0
$ scons

Parámetros de compilación opcionales

-j2 : Si tenemos un procesador de doble núcleo (dual-core), y el kernel está optimizado para el mismo y es SMP, con este parámetro aumentaremos el número de procesos de compilación simultáneos a un nivel de 2 y aceleraremos el tiempo de compilación del programa de forma considerable.
-j4 : Lo mismo que arriba pero con procesadores de 4 núcleos (quad-core).

Instalación como root

$ su
# install -sm755 xsettingsd dump_xsettings /usr/bin
# install -m644 *xsettings*.1 /usr/share/man/man1

Estadísticas de Compilación e Instalación de Xsettingsd

Estadísticas de Compilación e Instalación de Xsettingsd
CPU AMD Phenom(tm) II X4 965 Processor
MHz 3415.709
RAM 4096 MB
Sistema de archivos XFS
Versión del Kernel 4.16.14-ck1 SMP PREEMPT x86_64
Modo de frecuencia de la CPU ondemand
Versión de Glibc 2.27
Enlazador dinámico LLD 6.0.0
Compilador Clang 6.0.0
Parámetros de optimización -03 -march=amdfam10 -mtune=amdfam10 -mllvm -polly -mllvm -polly-vectorizer=stripmine -flto=thin
Parámetros de compilación -j4
Tiempo de compilación 2"
Archivos instalados 4
Mostrar/Ocultar la lista de archivos instalados
Ocupación de espacio en disco 80 KB

Consumo inicial de CPU y RAM de Xsettingsd

Consumo inicial de CPU y RAM de Xsettingsd
Proceso
CPU Memoria física
xsettingsd 0 % 4,2 MB

Archivo de configuración personal

~/.xsettingsd Es el archivo de configuración personal de Xsettings en nuestro home

Desinstalación como root

1) MODO TRADICIONAL

***********************

2) MODO MANUALINUX

xsettingsd-1.0.0-scripts.tar.gz

$ su
# tar zxvf xsettingsd-1.0.0-scripts.tar.gz
# cd xsettingsd-1.0.0-scripts
# ./Desinstalar_xsettingsd-1.0.0

Copia de Seguridad como root

Con este otro script creamos una copia de seguridad de los binarios compilados, recreando la estructura de directorios de los mismos en un directorio de copias de seguridad (copibin) que se crea en el directorio /var. Cuando se haya creado el paquete comprimido de los binarios podemos copiarlo como usuario a nuestro home y borrar el que ha creado el script de respaldo, teniendo en cuenta que si queremos volver a restaurar la copia, tendremos que volver a copiarlo al lugar donde se ha creado.

$ su
# tar zxvf xsettingsd-1.0.0-scripts.tar.gz
# cd xsettingsd-1.0.0-scripts
# ./Respaldar_xsettingsd-1.0.0

Restaurar la Copia de Seguridad como root

Y con este otro script (que se copia de forma automática cuando creamos la copia de respaldo del programa) restauramos la copia de seguridad como root cuando resulte necesario.

$ su
# cd /var/copibin/restaurar_copias
# ./Restaurar_xsettingsd-1.0.0



Opciones de línea de comandos

A continuación las opciones de línea de comandos con el texto traducido al español, de las dos aplicaciones que componen el paquete.

1) xsettingsd 

Es el programa encargado de cargar la configuración GTK+ que tengamos almacenada en un archivo de configuración, previamente creado con el comando dump_xsettings ejecutado en un entorno de escritorio GTK+, que soporte la especificación XSETTINGS.

[jose@localhost ~]$ xsettingsd -h
Uso: xsettingsd [OPCIÓN] ...

Programa que implementa la especificación XSETTINGS para opciones de control de
las aplicaciones X11.

Opciones: -c, --config=ARCHIVO   archivo de configuración (por defecto es ~/.xsettingsd)
          -h, --help             imprime este mensaje de ayuda
          -s, --screen=PANTALLA  pantalla a utilizar (por defecto son todas)

2) dump_xsettings 

Es el programa utilizado para volcar la configuración GTK+ de un entorno de escritorio que soporte la especificación XSETTINGS a un archivo de configuración o a la salida estándar, para posteriormente cargarlo con xsettingsd en el administrador de ventanas que utilicemos por defecto, o en cualquier otro que deseemos.

[jose@localhost ~]$ dump_xsettings -h
Uso: dump_xsettings [OPCIÓN] ...

Vuelca los valores actuales XSETTINGS en formato xsettingsd.

Opciones: -h, --help          
  imprime este mensaje de ayuda
          -s, --screen=PANTALLA  pantalla a utilizar (por defecto es 0)



Configuración

Para poder editar la configuración de las opciones GTK+ volcadas en el archivo de configuración correspondiente, primero tendremos que ejecutar el siguiente comando, en una ventana de terminal, en el entorno de escritorio que deseemos volcar estas opciones. En el ejemplo que pongo a continuación, lo realizaremos con MATE. Abrimos una ventana de terminal y ejecutamos el comando de volcado de datos.

$ dump_xsettings > ~/.xsettingsd

Un ejemplo de archivo de configuración, tomando como referencia el volcado realizado en el entorno de escritorio, MATE. Todas las opciones soportadas por GTK+ las podemos leer en este enlace, el problema es que las tenemos que interpretar siempre en formato XSETTINGS, si las queremos adaptar al archivo de configuración pertinente.

Gtk/AutoMnemonics 1
Gtk/ButtonImages 1
Gtk/CanChangeAccels 0
Gtk/ColorScheme ""
Gtk/CursorThemeName "mate"
Gtk/CursorThemeSize 24
Gtk/DecorationLayout "menu:minimize,maximize,close"
Gtk/DialogsUseHeader 0
Gtk/EnableAnimations 1
Gtk/FileChooserBackend "gio"
Gtk/FontName "DejaVu Sans 10"
Gtk/IMModule ""
Gtk/IMPreeditStyle "callback"
Gtk/IMStatusStyle "callback"
Gtk/KeyThemeName "Default"
Gtk/MenuBarAccel "F10"
Gtk/MenuImages 1
Gtk/ShowInputMethodMenu 1
Gtk/ShowUnicodeMenu 1
Gtk/ToolbarIconSize "large-toolbar"
Gtk/ToolbarStyle "both-horiz"
Net/CursorBlink 1
Net/CursorBlinkTime 1200
Net/DndDragThreshold 8
Net/DoubleClickTime 400
Net/EnableEventSounds 0
Net/EnableInputFeedbackSounds 0
Net/FallbackIconTheme "mate"
Net/IconThemeName "matefaenzagray"
Net/SoundThemeName "__no_sounds"
Net/ThemeName "Menta"
Xft/Antialias 1
Xft/DPI 104448
Xft/HintStyle "hintmedium"
Xft/Hinting 1
Xft/RGBA "rgb"
Xft/lcdfilter "lcddefault"

De todos los parámetros anteriores, paso a explicar los más comunes, es decir, los que normalmente cambia siempre el usuario con más asiduidad: tema de iconos, tema GTK+, Fuente de texto, etc. En esta entrada de Manualinux - Blog, están explicados de forma más amplia para la edición del archivo de configuración de GTK+ en sus diferentes series, la 2 o la 3

Definición de los elementos más comunes del archivo de configuración de Xsettingsd
Gtk/CursorThemeName "mate" Define el tema a utilizar por el puntero del ratón. El nombre del tema se define siempre por el nombre del directorio del tema, ubicado por defecto en /usr/share/icons para los temas del sistema, y en ~/.icons para los temas del usuario.

Normalmente los temas para el puntero del ratón, se configurán a través de Xorg, por lo que este parámetro resulta innecesario, a no ser, que queramos utilizar un tema específico para una determinada aplicación.
Gtk/CursorThemeSize 24 Define el tamaño del puntero del ratón. Los valores tienen que estar comprendidos entre 0 y 128. El valor por defecto es 0.
Gtk/FontName "DejaVu Sans 10" Define la fuente de texto y tamaño a utilizar por las aplicaciones GTK+. En cualquier aplicación que permita seleccionar fuentes de texto, podemos averiguar las fuentes que tenemos instaladas en nuestro sistema.
Net/IconThemeName "matefaenzagray" Define el tema de iconos a utilizar. El nombre del tema se define siempre por el nombre del directorio del tema, ubicado por defecto en /usr/share/icons para los temas del sistema, y en ~/.icons para los temas del usuario. El valor por defecto es hicolor.
Net/ThemeName "Menta" Define el tema a utilizar por defecto. El nombre del tema se define siempre por el nombre del directorio del tema, ubicado por defecto en /usr/share/themes para los temas del sistema, y en ~/.themes para los temas del usuario. El valor por defecto es Raleight.



Configurar el inicio de Xsettingsd  Bloc de Notas  

Si iniciamos los entornos gráficos desde línea de comandos, o desde administradores de sesión como Qingy o SLiM, tendremos que añadir la variable de entorno DESKTOP_SESSION, más un nombre de entorno de escritorio (xfce o gnome) para que las aplicaciones Qt5 puedan cargar la configuración GTK+ que tengamos, ya sea la proporcionada por Xsettingsd o la predefinida del archivo de configuración personal. Ya que estas aplicaciones utilizan esta variable de entorno para determinar si se está ejecutando un entorno de escritorio. Un ejemplo de inicio con Fluxbox:

# Applications you want to run with fluxbox.
# MAKE SURE THAT APPS THAT KEEP RUNNING HAVE AN ''&'' AT THE END.
#
# unclutter -idle 2 &
# wmnd &
# wmsmixer -w &
idesk &
wmix &
export DESKTOP_SESSION=xfce
xsettingsd &

En las pruebas que he realizado en mi sistema, sólo funcionan los nombres xfce y gnome. Si utilizamos el nombre del administrador de ventanas, el aspecto visual de las aplicaciones Qt5 no cambiará.

1) AfterStep


Añadimos el comando de ejecución en la sección correspondiente del archivo de configuración ~/.afterstep/autoexec

Function "InitFunction"
#    Module  "I"     Animate
    Function "I"    WorkspaceState
    Function "I"    WorkspaceModules
    Module  "I"    Banner
    Exec    "I"    exec "$HOME/.afterstep/non-configurable/send_postcard.sh"
    Exec    "I"     exec "/usr/local/bin/xbindkeys"
    Exec    "I"     exec "/usr/bin/xsettingsd"
EndFunction

2) Blackbox

Siguiendo el método que se utiliza en el manual de Blackbox, lo añadimos al script ~/.blackbox/autostart de la siguiente forma,

#!/bin/sh

(sleep 2; bbkeys &) &
bsetbg -f ~/Fotos/40.jpg
xsettingsd &

3) Enlightenment - E16

En su manual se explica de forma detenida la forma de añadir aplicaciones al inicio, sólo tendremos que crear los scripts correspondientes de ejecución. Abrimos un editor de texto con 3 ventanas y añadimos lo siguiente a cada una:

xsettingsd_init
#!/bin/sh

xsettingsd &

xsettingsd_start
#!/bin/sh

killall -9 xsettingsd &> /dev/null
xsettingsd &


xsettingsd_stop
#!/bin/sh

killall -9 xsettingsd &> /dev/null 

4) Fluxbox


Añadimos el comando de ejecución en la sección correspondiente del script de inicio ~/.fluxbox/startup

# Applications you want to run with fluxbox.
# MAKE SURE THAT APPS THAT KEEP RUNNING HAVE AN ''&'' AT THE END.
#
# unclutter -idle 2 &
# wmnd &
# wmsmixer -w &
idesk &
wmix &
xsettingsd &

5) JWM

Añadimos el comando de inicio, reinicio y terminación al archivo de configuración, ~/.jwm/autostart.xml, de la versión en español disponible en la web.

<JWM>

    <StartupCommand>
    xsettingsd &
    </StartupCommand>
   
    <RestartCommand>
    killall -9 xsettingsd &> /dev/null
    xsettingsd &

    </RestartCommand>
   
    <ShutdownCommand>
    killall -9 xsettingsd &> /dev/null    
    </ShutdownCommand>
  
</JWM>  

6) Openbox

Añadimos el comando de ejecución al script de inicio ~/.config/openbox/autostart, autostart.sh en versiones inferiores a la 3.5.

sleep 5; pypanel &
xbindkeys &
Esetroot -scale ~/Fondos/2141.jpg
xsettingsd &   

7) Pekwm

Añadimos el comando de ejecución en la sección correspondiente del script de inicio ~/.pekwm/start

# There's probably a few other good uses for it, too. I mainly pushed for it
# because when I was doing fluxbox's docs, people used to complain that there
# wasn't one, and I wanted to avoid that for pekwm. ;) --eyez

numlockx &
fbpanel &
#idesk &
#wmix &
hsetroot -fill /home/jose/Fotos/Natasha_Henstridge.jpg -gamma 1.5 -sharpen 1.5 -blur 1.0
xsettingsd &   

8) Fvwm

Añadimos el comando de ejecución en la sección correspondiente del archivo autostart, cuya configuración se explica en el manual de Fvwm.

AddToFunc StartFunction  I     Test (Init) Exec exec xscreensaver
AddToFunc StartFunction  I     Test (Init) Exec exec xbindkeys
AddToFunc StartFunction  I     Test (Init) Exec exec xsettingsd


9) Fvwm-Crystal


Añadimos el comando de ejecución al final del archivo ~/.fvwm-crystal/preferences/Startup, cuya configuración se explica en el manual de Fvwm-Crystal.

# Launch Xsettingsd
+ I Test (x xsettingsd) Exec pidof xsettingsd || exec
xsettingsd

# vim:ft=fvwm

10) IceWM

Añadimos el comando de ejecución al script de inicio ~/.icewm/startup, y el comando de finalización al script de cierre de sesión, ~/.icewm/shutdown.

startup
#!/bin/sh

xsettingsd &

shutdown
#!/bin/sh

killall -9 xsettingsd &> /dev/null 

11) Sawfish

Siguiendo el método que se utiliza en el manual de Sawfish lo añadimos al script ~/.sawfish/autostart de la siguiente forma,

#!/bin/sh

bmpanel &
idesk &
cwallpaper -l
xsettingsd &


12) Window Maker

Añadimos el comando de ejecución al script de inicio ~/GNUSTEP/Library/WindowMaker/autostart

#!/bin/sh
#
# Place applications to be executed when WindowMaker is started here.
# This should only be used for non-X applications or applications that
# do not support session management. Other applications should be restarted
# by the WindowMaker session restoring mechanism. For that, you should
# either set SaveSessionOnExit=YES or select "Save Session" in the Workspace
# submenu of the root menu when all applications you want started are
# running.
#
# WindowMaker will wait until this script finishes, so if you run any
# commands that take long to execute (like a xterm), put a ``&'' in the
# end of the command line.
#
# This file must be executable.
#

xsettingsd &


13) Para los que inician X desde terminal con el comando startx


Para los usuarios que inician los entornos gráficos con el comando startx, pueden añadir el proceso al archivo .xinitrc que se encuentra en nuestro home, si no existe lo creamos, y añadimos lo siguiente:

xsettingsd & 
exec icewm-session

14) XDM

Añadimos el comando de ejecución al archivo .xsession que se encuentra en nuestro home, si no existe lo creamos, y añadimos lo siguiente:

xsettingsd & 
exec icewm-session

Para otros administradores de ventanas, consultar sus respectivos manuales, en lo que haga referencia a la ejecución de programas al inicio de estos.



Crear un script selector de configuraciones 

Para poder seleccionar de forma rápida entre varias configuraciones personalizadas, y aprovechando que el programa permite cargar diferentes archivos de configuración, crearemos un script gráfico dependiente de Zenity, y selector de configuraciones personalizadas de Xsettingsd, lo que nos permitirá tener almacenadas varias configuraciones del mismo, y cargar la que creamos conveniente en el inicio de nuestro administrador de ventanas.

Antes que nada creamos un directorio para ubicar las configuraciones personalizadas, en la ruta ~/.config/xsettingsd.

$ mkdir -p ~/.config/xsettingsd

Luego, movemos el archivo de configuración predefinido a dicho directorio, renombrándolo como default.

$ mv ~/.xsettingsd ~/.config/xsettingsd/default

Ahora creamos 3 copias del mismo, que modificaremos, por ejemplo, en lo que respecta al tema GTK+ a utilizar, o cualquier otro parámetro que se nos ocurra.

$ for i in ~/.config/xsettingsd/default ; do
cp $i ~/.config/xsettingsd/config-1 ;
cp $i ~/.config/xsettingsd/config-2 ;
cp $i ~/.config/xsettingsd/config-3 ;
done

Y finalmente, creamos un enlace simbólico desde la ruta predefinida de ubicación del archivo de configuración de Xsettingsd, que hemos movido anteriormente, para no tener que modificar la configuración de los scripts de inicio de los administradores de ventanas correspondientes.

$ ln -s ~/.config/xsettingsd/default ~/.xsettingsd

Cuando lo tengamos todo configurado, abrimos un editor de texto y añadimos lo siguiente:

#!/bin/bash
# Copyright © Jose Luis Lara Carrascal 2015-2018 <manualinux@yahoo.es>
# <http://manualinux.eu> <http://manualinux.freehostia.com> <http://manualinux.heliohost.org>
# Este script se distribuye bajo la Licencia General GNU

selection=$(zenity --height="250" --list "Predefinida" "Configuración 1"
"Configuración 2" \
"Configuración 3" --column="" \
--text="Seleccione la configuración personalizada que desee utilizar con <b>Xsettingsd</b>.\\
Seleccione 'Predefinida', para utilizar la configuración predefinida de <b>Xsettingsd</b>." \
--title="Selector de Configuraciones de Xsettingsd")

if [ $? = 1 ];
then exit
fi

case "selection" in
"Predefinida") ;;
"Configuración 1") ;;
"Configuración 2") ;;
"Configuración 3") ;;
esac

if [ "$selection" = "Predefinida" ] ; then
ln -sf $HOME/.config/xsettingsd/default $HOME/.xsettingsd
killall -9 xsettingsd &> /dev/null
xsettingsd &
fi
if [ "$selection" = "Configuración 1" ] ; then
ln -sf $HOME/.config/xsettingsd/config-1 $HOME/.xsettingsd
killall -9 xsettingsd &> /dev/null
xsettingsd &
fi
if [ "$selection" = "Configuración 2" ] ; then
ln -sf $HOME/.config/xsettingsd/config-2 $HOME/.xsettingsd
killall -9 xsettingsd &> /dev/null
xsettingsd &
fi
if [ "$selection" = "Configuración 3" ] ; then
ln -sf $HOME/.config/xsettingsd/config-3 $HOME/.xsettingsd
killall -9 xsettingsd &> /dev/null
xsettingsd &
fi



Lo guardamos como xsettingsd-conf, le damos permisos de ejecución y lo copiamos al directorio bin de nuestro home.

$ chmod +x xsettingsd-conf
$ mkdir -p ~/bin
$ cp xsettingsd-conf ~/bin

Si queremos añadir o suprimir entradas, basta con tomar como ejemplo las líneas que están de color rojo.

Captura Xsettingsd-conf - 1




Enlaces  


https://github.com/derat/xsettingsd >> La web de Xsettingsd.


Foro Galería Blog


Actualizado el 08-06-2018

Utilidades de Escritorio - Xsettingsd

Utilidades de Escritorio - XScreenSaverUtilidades de Escritorio - Zufall