Copyright
Copyright © José
Luis Lara Carrascal 2013-2018 
Sumario
Introducción
Características
Liquid Rescale
Aura
Opciones de línea de comandos
Configuración
Configurar el inicio de Aura
Iniciamos Aura
Enlaces
Introducción
Aura es una utilidad de escritorio, cuya finalidad consiste en colocar
una imagen en el fondo de la pantalla, ya sea de forma fija, aleatoria
o cíclica. Hasta aquí estaríamos hablando de
otro setter más para GNU/Linux,
como los que existen documentados en esta web. Pero la particularidad
de esta utilidad, es que establece la imagen del fondo de la pantalla a
partir de una llamada en segundo plano que realiza al programa El Gimp, mediante un plugin escrito en Python que viene con el programa, utilizando el plugin Liquid Rescale,
para redimensionar la imagen al tamaño de la pantalla de forma
uniforme y sin preservar la razón de aspecto de la misma,
creando una imagen temporal en formato PNG en el directorio /temp
del sistema, y añadiendo una etiqueta incrustada en la esquina
superior izquierda de la imagen con los datos Exif de la misma.
Esto supone que el resultado de por ejemplo, adaptar el formato de una
imagen de 16x9 a una resolución de 4x3 sea muy dispar. Siendo en
algunos casos, materialmente imposible lograr que una modelo tumbada
que ocupa toda la pantalla, vea como su ombligo desaparece por
arte de magia, o mejor dicho, por arte del algoritmo que utiliza el
plugin Liquid Rescale.
Otro de los inconvenientes de este programa, es el tiempo lógico
que tarda en generar la imagen, teniendo en cuenta que tiene que
ejecutar El Gimp,
en segundo plano, con lo que no es recomendable utilizarlo como
programa principal para colocar una imagen en el fondo de la pantalla.
Sí es recomendable utilizarlo, si lo que
queremos es alternar de forma periódica el fondo de la pantalla,
sin importarnos la proporcionalidad del aspecto de las
imágenes.
Además de tratar su instalación, he incluido una
modificación personal del plugin que viene con el programa, para
que pueda ser utilizado con cualquiera de los setters cuya documentación está disponible en esta web. La instalación de Liquid Rescale también se incluye en este manual.
Características
* Selecciona las imágenes al azar de rutas de acceso específicas.
* Omite las imágenes muy pequeñas y las que tienen razón de aspecto diferente.
* Reescala las imágenes de forma inteligente (recortando los bordes, redimensionando mediante interpolación
cúbica y el uso del algoritmo Liquid Rescale) para ajustarlas al tamaño de la pantalla con la pérdida mínima de calidad.
* Incrusta una etiqueta en la esquina superior izquierda de la imagen con los datos Exif de la misma.
* Puede ejecutarse en segundo plano y cambiar de imagen cada cierto tiempo configurable.
* Hace un seguimiento de las imágenes utilizadas y permite omitir el uso de las imágenes que deseemos.
Liquid Rescale
Liquid Rescale es un plugin para El Gimp, e interfaz de uso de la librería Liquid Rescale, que proporciona una implementación del algoritmo Seam Carving, descrito en este documento.
El procedimiento del algoritmo consiste en cambiar el tamaño de
las imágenes de forma no uniforme, preservando sus
características y evitando la distorsión de las partes
más importantes.
Instalación
Dependencias
Herramientas
de Compilación
Entre paréntesis la
versión con la que se ha compilado Liquid Rescale
para la elaboración de este documento.
* GCC - (8.1.0) o Clang - (6.0.0)
* Gawk - (4.2.1)
* M4 - (1.4.18)
* Libtool - (2.4.6)
* Make - (4.2.1)
* Intltool - (0.51.0)
* Automake - (1.16.1)
* Gettext - (0.19.8.1)
* Autoconf - (2.69)
* Pkg-config - (0.29.2)
Librerías
de Desarrollo
* Xorg - (7.7 / xorg-server 1.20.0)
* Gimp - (2.10.2)
* GLib - (2.56.1)
* GTK+ - (2.24.32)
Módulos de Perl
* XML::Parser - (2.44)
Descarga
liblqr-1-0.4.2.tar.bz2 | gimp-lqr-plugin-0.7.2.tar.bz2
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 |
generic |
Produce un código
binario optimizado para la mayor parte de procesadores existentes.
Utilizar este valor si no sabemos el nombre del procesador que
tenemos en nuestro equipo. Este valor sólo es aplicable en
la opción '-mtune=', si utilizamos GCC. Esta opción está disponible a
partir de GCC 4.2. |
native |
Produce un código
binario optimizado para el procesador que tengamos en nuestro sistema,
siendo éste detectado utilizando la instrucción cpuid.
Procesadores antiguos pueden no ser detectados utilizando este valor.
Esta opción está disponible a
partir de GCC 4.2. |
x86-64 |
Procesador genérico con extensiones 64-bit. Esta opción está disponible a
partir de GCC 8 y Clang 1.9. |
Intel |
atom |
Intel Atom
con soporte de instrucciones MMX, SSE, SSE2, SSE3, SSSE3 y
extensiones 64-bit. Esta opción está disponible
desde GCC 4.6, hasta GCC 4.8. A partir de GCC 4.9 se utiliza la definición bonnell. |
bonnell |
Intel Bonnell con soporte de instrucciones
MOVBE, MMX, SSE, SSE2, SSE3, SSSE3 y extensiones 64-bit. Esta opción está disponible a partir
de GCC 4.9. |
broadwell |
Intel Broadwell con soporte de instrucciones
MOVBE, MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, POPCNT,
AVX, AVX2, AES, PCLMUL, FSGSBASE, RDRND, FMA, BMI, BMI2,
F16C, RDSEED, ADCX, PREFETCHW y extensiones 64-bit. Esta opción está disponible a partir
de GCC 4.9 y Clang 3.6. |
cannonlake |
Intel Cannonlake Server con soporte de instrucciones MOVBE, MMX, SSE,
SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, POPCNT, PKU, AVX, AVX2, AES, PCLMUL,
FSGSBASE, RDRND, FMA, BMI, BMI2, F16C, RDSEED, ADCX, PREFETCHW,
CLFLUSHOPT, XSAVEC, XSAVES, AVX512F, AVX512VL, AVX512BW, AVX512DQ,
AVX512CD, AVX512VBMI, AVX512IFMA, SHA, UMIP y extensiones 64-bit. Esta opción está disponible a
partir de GCC 8 y Clang 3.9. |
core2 |
Intel Core2
con soporte de instrucciones MMX, SSE, SSE2, SSE3, SSSE3 y
extensiones 64-bit. Esta opción está disponible a partir
de GCC 4.3. |
core-avx2 |
Intel Core (Haswell). Esta opción está disponible desde GCC 4.6, hasta GCC 4.8. A partir de GCC 4.9 se utiliza la definición haswell. |
core-avx-i |
Intel Core (ivyBridge)
con soporte de instrucciones MMX, SSE, SSE2, SSE3,
SSSE3, SSE4.1, SSE4.2, AVX, AES, PCLMUL, FSGSBASE, RDRND, F16C y
extensiones 64-bit. Esta opción está disponible
desde GCC 4.6, hasta GCC 4.8. A partir de GCC 4.9 se utiliza la definición ivybridge. |
corei7 |
Intel Core i7 con soporte de instrucciones MMX, SSE, SSE2, SSE3,
SSSE3, SSE4.1 y SSE4.2 y extensiones 64-bit. Soporta también los procesadores Intel
Core i3 e i5. Esta opción está disponible desde GCC 4.6, hasta GCC 4.8. A partir de GCC 4.9 se utiliza la definición nehalem. |
corei7-avx |
Intel Core i7 con soporte de instrucciones MMX, SSE, SSE2, SSE3,
SSSE3, SSE4.1, SSE4.2, AVX, AES y PCLMUL y
extensiones 64-bit. Soporta también los
procesadores Intel Core i3 e i5. Esta opción está disponible desde GCC 4.6, hasta GCC 4.8. A partir de GCC 4.9 se utiliza la definición sandybridge. |
goldmont |
Intel
Goldmont con soporte de instrucciones X87, MMX, SSE42, FXSR,
CMPXCHG16B, MOVBE, POPCNT, PCLMUL, AES, PRFCHW, SlowTwoMemOps, SlowLEA,
SlowIncDec, LAHFSAHF, MPX, SHA, RDRAND, RDSEED, XSAVE, XSAVEOPT,
XSAVEC, XSAVES, CLFLUSHOPT y FSGSBase. Esta opción está
disponible a partir de Clang 5. |
haswell |
Intel Haswell con soporte de instrucciones
MOVBE, MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, POPCNT,
AVX, AVX2, AES, PCLMUL, FSGSBASE, RDRND, FMA, BMI, BMI2,
F16C y extensiones 64-bit. Esta opción está disponible a partir
de GCC 4.9. |
i386 |
Intel i386.
|
i486 |
Intel i486. |
i586, pentium |
Intel Pentium sin soporte de instrucciones MMX. |
i686 |
Produce un código binario optimizado para la mayor parte de
procesadores compatibles con la serie 80686 de Intel. Todos los actuales lo son. |
icelake |
Intel
Icelake con soporte de instrucciones X87, MMX, AVX, FXSR,
CMPXCHG16B, POPCNT, AES, PCLMUL, XSAVE, XSAVEOPT, LAHFSAHF, RDRAND,
F16C, FSGSBase, AVX2, BMI, BMI2, FMA, LZCNT, MOVBE, INVPCID, VMFUNC,
RTM, HLE, SlowIncDec, ADX, RDSEED, SMAP, MPX, XSAVEC, XSAVES, SGX,
CLFLUSHOPT, AVX512, CDI, DQI, BWI, VLX, PKU, PCOMMIT, CLWB, VBMI, IFMA,
SHA, BITALG, VAES, VBMI2, VNNI, VPCLMULQDQ, VPOPCNTDQ, GFNI, CLWB y
HasFastGather. Esta opción está disponible a partir
de Clang 6. |
icelake-client |
Intel Icelake Client con soporte de instrucciones MOVBE, MMX, SSE,
SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, POPCNT, PKU, AVX, AVX2, AES, PCLMUL,
FSGSBASE, RDRND, FMA, BMI, BMI2, F16C, RDSEED, ADCX, PREFETCHW,
CLFLUSHOPT, XSAVEC, XSAVES, AVX512F, AVX512VL, AVX512BW, AVX512DQ,
AVX512CD, AVX512VBMI, AVX512IFMA, SHA, CLWB, UMIP, RDPID, GFNI,
AVX512VBMI2, AVX512VPOPCNTDQ, AVX512BITALG, AVX512VNNI, VPCLMULQDQ,
VAES y extensiones 64-bit. Esta opción está disponible a
partir de GCC 8. |
icelake-server |
Intel Icelake Server con soporte de instrucciones MOVBE, MMX, SSE,
SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, POPCNT, PKU, AVX, AVX2, AES, PCLMUL,
FSGSBASE, RDRND, FMA, BMI, BMI2, F16C, RDSEED, ADCX, PREFETCHW,
CLFLUSHOPT, XSAVEC, XSAVES, AVX512F, AVX512VL, AVX512BW, AVX512DQ,
AVX512CD, AVX512VBMI, AVX512IFMA, SHA, CLWB, UMIP, RDPID, GFNI,
AVX512VBMI2, AVX512VPOPCNTDQ, AVX512BITALG, AVX512VNNI, VPCLMULQDQ,
VAES, PCONFIG, WBNOINVD y extensiones 64-bit. Esta opción está disponible a
partir de GCC 8. |
intel |
Intel Haswell y Silvermont. Este valor sólo es aplicable en
la opción '-mtune='. Esta opción está disponible a partir
de GCC 4.9. |
ivybridge |
Intel Ivy Bridge con soporte de instrucciones
MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, POPCNT, AVX,
AES, PCLMUL, FSGSBASE, RDRND, F16C y extensiones 64-bit. Esta opción está disponible a partir
de GCC 4.9. |
knl |
Intel Knights Landing con soporte de instrucciones
MOVBE, MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, POPCNT, AVX, AVX2,
AES, PCLMUL, FSGSBASE, RDRND, FMA, BMI, BMI2, F16C, RDSEED, ADCX,
PREFETCHW, AVX512F, AVX512PF, AVX512ER y extensiones 64-bit. Esta opción está disponible a partir
de GCC 5 y Clang 3.4. |
knm |
Intel Knights Mill con soporte de instrucciones MOVBE, MMX, SSE, SSE2,
SSE3, SSSE3, SSE4.1, SSE4.2, POPCNT, AVX, AVX2, AES, PCLMUL, FSGSBASE,
RDRND, FMA, BMI, BMI2, F16C, RDSEED, ADCX, PREFETCHW, AVX512F,
AVX512PF, AVX512ER, AVX512CD, AVX5124VNNIW, AVX5124FMAPS,
AVX512VPOPCNTDQ y extensiones 64-bit. Esta opción está disponible a
partir de GCC 8. |
lakemont |
Intel Quark Lakemont MCU, basado en el procesador Intel Pentium. Esta opción está disponible a partir
de GCC 6 y Clang 3.9. |
nehalem |
Intel Nehalem con soporte de instrucciones MMX,
SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, POPCNT y extensiones
64-bit. Esta opción está disponible a partir
de GCC 4.9. |
nocona |
Versión mejorada de Intel Pentium4 con soporte de instrucciones MMX, SSE, SSE2, SSE3 y extensiones 64-bit. |
penryn |
Intel
Penryn con soporte de instrucciones MMX, SSE, SSE2, SSE3,
SSSE3 y SSE4.1. |
pentiumpro |
Intel PentiumPro. |
pentium2 |
Intel Pentium2 basado en PentiumPro con soporte de instrucciones MMX. |
pentium3, pentium3m |
Intel Pentium3 basado en PentiumPro con soporte de instrucciones MMX y SSE. |
pentium4, pentium4m |
Intel Pentium4 con soporte de instrucciones MMX, SSE y SSE2. |
pentium-m |
Versión de bajo
consumo de Intel Pentium3 con soporte de instrucciones MMX, SSE y SSE2.
Utilizado por los portátiles Centrino. |
pentium-mmx |
Intel PentiumMMX basado en Pentium con soporte de instrucciones MMX. |
prescott |
Versión mejorada de Intel Pentium4 con soporte de instrucciones MMX, SSE, SSE2 y SSE3. |
sandybridge |
Intel Sandy Bridge con soporte de instrucciones
MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, POPCNT, AVX,
AES, PCLMUL y extensiones 64-bit. Esta opción está disponible a partir
de GCC 4.9 y Clang 3.6. |
silvermont |
Intel Silvermont con soporte de instrucciones
MOVBE, MMX, SSE, MOVBE, MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1,
SSE4.2, POPCNT, AES, PCLMU, RDRND y extensiones 64-bit. Esta opción está disponible a partir
de GCC 4.9 y Clang 3.6. |
skx |
Intel Skylake Server con soporte de instrucciones X87, MMX, AVX, FXSR, CMPXCHG16B, POPCNT, AES, PCLMUL, XSAVE, XSAVEOPT,
LAHFSAHF, RDRAND, F16C, FSGSBase, AVX2, BMI, BMI2, FMA, LZCNT, MOVBE,
INVPCID, VMFUNC, RTM, HLE, SlowIncDec, ADX, RDSEED, SMAP, MPX, XSAVEC,
XSAVES, SGX, CLFLUSHOPT, AVX512, CDI, DQI, BWI, VLX, PKU, PCOMMIT y CLWB. Esta opción está disponible a partir de Clang 3.5. A partir de Clang 3.9 se utiliza también la definición skylake-avx512. |
skylake |
Intel Skylake con soporte de instrucciones MOVBE, MMX, SSE, SSE2,
SSE3, SSSE3, SSE4.1, SSE4.2, POPCNT, AVX, AVX2, AES, PCLMUL, FSGSBASE,
RDRND, FMA, BMI, BMI2, F16C, RDSEED, ADCX, PREFETCHW, CLFLUSHOPT,
XSAVEC, XSAVES y extensiones 64-bit. Esta opción está disponible a partir
de GCC 6 y Clang 3.6. |
skylake-avx512 |
Intel Skylake Server
con soporte de instrucciones MOVBE, MMX, SSE, SSE2,
SSE3, SSSE3, SSE4.1, SSE4.2, POPCNT, AVX, AVX2, AES, PCLMUL, FSGSBASE,
RDRND, FMA, BMI, BMI2, F16C, RDSEED, ADCX, PREFETCHW, CLFLUSHOPT,
XSAVEC, XSAVES, AVX512F, AVX512VL, AVX512BW, AVX512DQ, AVX512CD y
extensiones 64-bit. Esta opción está disponible a partir
de GCC 6 y Clang 3.9. |
slm |
Intel
Silvermont con soporte de instrucciones X87, MMX, SSE42, FXSR,
CMPXCHG16B, MOVBE, POPCNT, PCLMUL, AES, SlowDivide64, CallRegIndirect,
PRFCHW, SlowLEA, SlowIncDec, SlowBTMem y LAHFSAHF. Esta opción
está disponible a
partir de Clang 3.4. A partir de Clang 3.9 se utiliza también la definición silvermont. |
westmere |
Intel Westmere con soporte de instrucciones
MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, POPCNT, AES,
PCLMUL y extensiones 64-bit. Esta opción está disponible a partir
de GCC 4.9. |
yonah |
Procesadores
basados en la microarquitectura de Pentium M, con soporte de
instrucciones MMX, SSE, SSE2 y SSE3. |
AMD |
amdfam10, barcelona |
Procesadores basados en
AMD Family 10h core con soporte de instrucciones x86-64 (MMX, SSE,
SSE2, SSE3, SSE4A, 3DNow!, enhanced 3DNow!, ABM y extensiones
64-bit). Esta opción está disponible a partir de GCC 4.3. La definición barcelona está disponible a partir de Clang 3.6. |
athlon, athlon-tbird |
AMD Athlon con soporte de instrucciones MMX, 3DNow!, enhanced 3DNow! y SSE prefetch. |
athlon4, athlon-xp, athlon-mp |
Versiones mejoradas de AMD Athlon con soporte de instrucciones MMX, 3DNow!, enhanced 3DNow! y full SSE. |
bdver1 |
Procesadores basados en
AMD Family 15h core con soporte de instrucciones x86-64 (FMA4, AVX, XOP, LWP, AES, PCL_MUL, CX16, MMX, SSE,
SSE2, SSE3, SSE4A, SSSE3, SSE4.1, SSE4.2, ABM y extensiones
64-bit). Esta opción está disponible a partir
de GCC 4.7. |
bdver2 |
Procesadores basados en
AMD Family 15h core con soporte de instrucciones x86-64 (BMI, TBM, F16C, FMA, LWP, AVX, XOP, LWP, AES, PCL_MUL, CX16, MMX, SSE,
SSE2, SSE3, SSE4A, SSSE3, SSE4.1, SSE4.2, ABM y extensiones
64-bit). Esta opción está disponible a partir
de GCC 4.7. |
bdver3 |
Procesadores basados en
AMD Family 15h core con soporte de instrucciones x86-64 (FMA4, AVX, XOP, LWP, AES, PCL_MUL, CX16, MMX, SSE,
SSE2, SSE3, SSE4A, SSSE3, SSE4.1, SSE4.2, ABM y extensiones
64-bit). Esta opción está disponible a partir
de GCC 4.8 y Clang 3.4. |
bdver4 |
Procesadores basados en AMD Family 15h core con soporte de instrucciones x86-64
(BMI, BMI2, TBM, F16C, FMA, FMA4, FSGSBASE, AVX, AVX2, XOP,
LWP, AES, PCL_MUL, CX16, MOVBE, MMX, SSE, SSE2, SSE3, SSE4A,
SSSE3, SSE4.1, SSE4.2, ABM y extensiones 64-bit). Esta opción está
disponible a partir de GCC 4.9 y Clang 3.5. |
btver1 |
Procesadores basados en
AMD Family 14h core con soporte de instrucciones x86-64 (MMX, SSE,
SSE2, SSE3, SSE4A, CX16, ABM y extensiones 64-bit). Esta opción está disponible a partir
de GCC 4.6. |
btver2 |
Procesadores basados en
AMD Family 16h core con soporte de instrucciones x86-64 (MOVBE, F16C,
BMI, AVX, PCL_MUL, AES, SSE4.2, SSE4.1, CX16, ABM, SSE4A, SSSE3, SSE3,
SSE2, SSE, MMX y extensiones 64-bit). Esta opción
está disponible a partir
de GCC 4.8. |
geode |
AMD integrado con soporte de instrucciones MMX y 3DNow!. Esta opción está disponible a partir de GCC 4.3. |
k6 |
AMD K6 con soporte de instrucciones MMX. |
k6-2, k6-3 |
Versiones mejoradas de AMD K6 con soporte de instrucciones MMX y 3DNow!. |
k8, opteron, athlon64, athlon-fx |
Procesadores basados en
AMD K8 core con soporte de instrucciones x86-64 (MMX, SSE, SSE2,
3DNow!, enhanced 3DNow! y extensiones 64-bit). |
k8-sse3, opteron-sse3, athlon64-sse3 |
Versiones mejoradas de
AMD K8 core con soporte de instrucciones SSE3. Esta opción
está disponible a partir de GCC 4.3. |
znver1 |
Procesadores basados en
AMD Family 17h core con soporte de instrucciones x86-64 (BMI, BMI2,
F16C, FMA, FSGSBASE, AVX, AVX2, ADCX, RDSEED, MWAITX, SHA, CLZERO, AES,
PCL_MUL, CX16, MOVBE, MMX, SSE, SSE2, SSE3, SSE4A, SSSE3, SSE4.1,
SSE4.2, ABM, XSAVEC, XSAVES, CLFLUSHOPT, POPCNT y extensiones
64-bit). Esta opción está disponible a partir de GCC 6 y Clang 4. |
VIA |
c3 |
VIA C3 con soporte de instrucciones MMX y 3DNow! (no se implementa planificación para este chip). |
c3-2 |
VIA C3-2 (Nehemiah/C5XL) con soporte de instrucciones MMX y SSE (no se implementa planificación para este chip). |
c7 |
VIA C7 (Esther) con
soporte de instrucciones MMX, SSE, SSE2 y SSE (no se implementa
planificación para este chip). Esta opción
está disponible a partir de GCC 7. |
eden-x2 |
VIA Eden X2 con soporte de
instrucciones x86-64, MMX, SSE, SSE2 y SSE3 (no se implementa
planificación para este chip). Esta opción
está disponible a partir de GCC 7. |
eden-x4 |
VIA Eden X4 con soporte de
instrucciones MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, AVX y AVX2
(no se implementa planificación para este chip). Esta
opción está disponible a partir de GCC 7. |
esther |
VIA Eden Esther con
soporte de instrucciones MMX, SSE, SSE2 y SSE3 (no se implementa
planificación para este chip). Esta opción
está disponible a partir de GCC 7. |
nano |
VIA Nano genérico
con soporte de instrucciones x86-64, MMX, SSE, SSE2, SSE3 y SSSE3 (no
se implementa planificación para este chip). Esta
opción está disponible a partir de GCC 7. |
nano-1000 |
VIA Nano 1xxx con
soporte de instrucciones x86-64, MMX, SSE, SSE2, SSE3 y SSSE3 (no se
implementa planificación para este chip). Esta
opción está disponible a partir de GCC 7. |
nano-2000 |
VIA Nano 2xxx con
soporte de instrucciones x86-64, MMX, SSE, SSE2, SSE3 y SSSE3 (no se
implementa planificación para este chip). Esta
opción está disponible a partir de GCC 7. |
nano-3000 |
VIA Nano 3xxx con
soporte de instrucciones x86-64, MMX, SSE, SSE2, SSE3, SSSE3 y SSE4.1
(no se implementa planificación para este chip). Esta
opción está disponible a partir de GCC 7. |
nano-x2 |
VIA Nano Dual
Core con soporte de instrucciones x86-64, MMX, SSE, SSE2, SSE3 y
SSSE3 (no se implementa planificación para este chip). Esta
opción está disponible a partir de GCC 7. |
nano-x4 |
VIA Nano Quad
Core con soporte de instrucciones x86-64, MMX, SSE, SSE2, SSE3 y
SSSE3 (no se implementa planificación para este chip). Esta
opción está disponible a partir de GCC 7. |
IDT |
winchip2 |
IDT Winchip2, que equivale a un i486 con soporte de instrucciones MMX y 3DNow!. |
winchip-c6 |
IDT Winchip C6, que equivale a un i486 con soporte de instrucciones MMX. |
Optimizaciones adicionales
Optimizaciones adicionales |
GCC |
Graphite
|
$ export {C,CXX}FLAGS+=' -floop-interchange -ftree-loop-distribution -floop-strip-mine -floop-block'
|
LTO |
$ 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 {C,CXX}FLAGS+=' -flto'
|
ThinLTO |
$ 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
Parámetros adicionales de eliminación de avisos específicos en el proceso de compilación |
Clang |
$ export {C,CXX}FLAGS+=' -Qunused-arguments'
|
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 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. |
Modificar el script de Libtool
incluido en el paquete para poder hacerlo compatible con LLD |
$
lld-libtool |
Hacemos uso
de la función de bash explicada en la sección del
manual de Clang,
para poder parchear el script de Libtool incluido en el paquete, y
poder llevar a cabo el proceso de compilación con LLD como
enlazador dinámico. |
Establecer la variable de entorno de uso de compilador para Clang |
$ export CC=clang CXX=clang++ |
Extracción y Configuración de Liquid Rescale Library 
$ tar jxvf liblqr-1-0.4.2.tar.bz2
$ cd liblqr-1.0.4.2
$ ./configure --disable-dependency-tracking --libdir=/usr/lib64
|
Explicación de los
comandos
--disable-dependency-tracking : Acelera
el tiempo de compilación.
--libdir=/usr/lib64 : Instala la librería en /usr/lib64, en sistemas de 64 bits multiarquitectura.
Compilación
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
# make install-strip
# ldconfig -v |
Estadísticas de Compilación e Instalación de Liquid Rescale Library
Estadísticas de Compilación e Instalación de Liquid Rescale Library |
CPU |
AMD Phenom(tm) II X4 965 Processor |
MHz |
3415.709 |
RAM |
4096 MB |
Sistema de archivos |
XFS |
Versión del Kernel |
4.16.13-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 |
3" |
Archivos instalados |
15 |

|
Enlaces simbólicos creados |
2 |

|
Ocupación de espacio en disco |
136 KB |
Desinstalación
como root
1) MODO TRADICIONAL
En el directorio de compilación ejecutamos el siguiente comando:
2) MODO MANUALINUX
El principal inconveniente del comando anterior es
que
tenemos que tener el directorio de compilación en nuestro
sistema para poder desinstalar el programa. En algunos casos esto
supone muchos megas de espacio en disco. Con el paquete de scripts que
pongo a continuación logramos evitar
el único inconveniente que tiene la compilación
de
programas, y es el tema de la desinstalación de los mismos
sin
la necesidad de tener obligatoriamente una copia de las fuentes
compiladas.
liblqr-1-0.4.2-scripts.tar.gz
$ su
# tar zxvf liblqr-1-0.4.2-scripts.tar.gz
# cd liblqr-1-0.4.2-scripts
# ./Desinstalar_liblqr-1-0.4.2 |
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 liblqr-1-0.4.2-scripts.tar.gz
# cd liblqr-1-0.4.2-scripts
# ./Respaldar_liblqr-1-0.4.2 |
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_liblqr-1-0.4.2
|
Extracción y Configuración de Liquid Rescale Plugin
$ tar jxvf gimp-lqr-plugin-0.7.2.tar.bz2
$ cd gimp-lqr-plugin-0.7.2
$ ./configure --disable-dependency-tracking
--prefix=$(pkg-config --variable=prefix gimp-2.0)
|
Explicación de los
comandos
--disable-dependency-tracking : Acelera
el tiempo de compilación.
--prefix=$(pkg-config --variable=prefix gimp-2.0)
: Instala el plugin en la ruta de instalación determinada por el
prefijo de instalación proporcionado por el programa pkg-config. Esto evita tener que añadir una ruta específica en función de dónde tengamos instalado Gimp.
Compilación
Parámetros de compilación opcionales
Instalación
como root
$ su -c "make install-strip"
|
Estadísticas de Compilación e Instalación de Liquid Rescale Plugin
Estadísticas de Compilación e Instalación de Liquid Rescale Plugin |
CPU |
AMD Phenom(tm) II X4 965 Processor |
MHz |
3415.709 |
RAM |
4096 MB |
Sistema de archivos |
XFS |
Versión del Kernel |
4.16.13-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 |
5" |
Archivos instalados |
28 |

|
Ocupación de espacio en disco |
880 KB |
Desinstalación
como root
1) MODO TRADICIONAL
En el directorio de compilación ejecutamos el siguiente comando:
2) MODO MANUALINUX
gimp-lqr-plugin-0.7.2-scripts.tar.gz
$ su
# tar zxvf gimp-lqr-plugin-0.7.2-scripts.tar.gz
# cd gimp-lqr-plugin-0.7.2-scripts
# ./Desinstalar_gimp-lqr-plugin-0.7.2 |
Copia de Seguridad
como root
$ su
# tar zxvf gimp-lqr-plugin-0.7.2-scripts.tar.gz
# cd gimp-lqr-plugin-0.7.2-scripts
# ./Respaldar_gimp-lqr-plugin-0.7.2 |
Restaurar la Copia de Seguridad
como root
$ su
# cd /var/copibin/restaurar_copias
# ./Restaurar_gimp-lqr-plugin-0.7.2
|
Aura
Instalación
Dependencias
Entre paréntesis la
versión con la que se ha instalado Aura
para la elaboración de este documento.
* Python - (2.7.15)
* PyGTK - (2.24.0)
* Gimp - (2.10.2)
* Liquid Rescale Plugin - (0.7.2)
* Xprintidle - (0.2) - opcional
* Pyexiv2 - (0.3.2) - opcional
* Dbus-python - (1.2.6) - opcional
* Python-Colormath - (3.0.0) - opcional
Descarga
aura-1.11.tar.gz
Extracción e Instalación como usuario 
$ tar zxvf aura-1.11.tar.gz
$ cd aura-1.11.0
$ mkdir -p ~/bin
$ mkdir -p ~/.config/GIMP/2.10/plug-ins
$ cp aura ~/bin
$ cp lqr_wpset.py ~/.config/GIMP/2.10/plug-ins
$ sed -i '$iexport PATH=$HOME/bin:$PATH' ~/.bashrc
|
Explicación
de los comandos
sed -i '$iexport PATH=$HOME/bin:$PATH' ~/.bashrc : Normalmente el directorio /bin de nuestro home
suele estar incluido por defecto en el PATH, ejecutar este comando en
el caso de que no sea así en la distribución que estemos
utilizando. Si no existe el archivo ~/.bashrc, cambiar el comando por éste otro: echo 'export PATH=$HOME/bin:$PATH' > ~/.bashrc
Directorio de configuración personal
~/.aura |
Es
el directorio de configuración personal de Aura
en nuestro home. |
~/.aura/blacklist |
Es el
archivo que que contiene los nombres de las imágenes que
serán omitidas cuando Aura
sea ejecutado en modo aleatorio y en segundo plano. Con el comando "aura
--blacklist" podemos
hacer que la imagen de fondo actual, no sea establecida más
como fondo de escritorio. El nombre de la misma quedará
registrado en este archivo. |
~/.aura/current |
Es el
archivo que contiene el nombre de la imagen que está
establecida como fondo de escritorio en curso. |
~/.aura/history.log |
Es el
archivo de registro del historial de las imágenes que han
sido utilizadas como fondo de escritorio por Aura. |
~/.aura/picker.log |
Es el
archivo de registro del proceso de ejecución de Gimp y el plugin lqr_wpset.py.
Cualquier problema en la ejecución del mismo
quedará registrado en este archivo. |
~/.aura/picker.pid |
Es el
archivo que contiene el número PID asignado al proceso de
ejecución de Gimp
y el plugin lqr_wpset.py. |
Desinstalación
como usuario
1)
MODO TRADICIONAL
$ rm -f ~/bin/aura
$ rm -f ~/.config/GIMP/2.10/plug-ins/lqr_wpset.py |
2)
MODO MANUALINUX
aura-1.11.0-scripts.tar.gz
$ tar zxvf aura-1.11.0-scripts.tar.gz
$ cd aura-1.11.0-scripts
$ ./Desinstalar_aura-1.11.0 |
Copia de Seguridad
como usuario
$ tar zxvf aura-1.11.0-scripts.tar.gz
$ cd aura-1.11.0-scripts
$ ./Respaldar_aura-1.11.0 |
Restaurar la Copia de Seguridad
como usuario
$ cd ~/copibin/restaurar_copias
$ ./Restaurar_aura-1.11.0
|
Opciones de
línea de comandos de Aura
Para que el programa nos muestre las opciones de ejecución, ejecutamos el comando aura -h. Un ejemplo traducido al español.
[jose@localhost ~]$ aura -h
Uso:
aura rutas...
aura ( -d | --daemon ) [ --no-fork ] [ --no-init ] rutas...
aura [ -n | --next ] [ -b | --blacklist ] [ -k | --kill ] [
-h | --help ]
Establecer la imagen de fondo seleccionada al azar de las rutas
especificadas.
La opción --daemon inicia la instancia en segundo plano (a
menos que --no-fork se haya especificado),
y obtiene/establece una nueva imagen en el inicio (a menos que
--no-init se haya especificado),
y repite el proceso cada 10800s después.
Algunas opciones (o sus equivalentes de una letra) pueden utilizarse en
lugar de rutas para controlar el
proceso en ejecución de aura (iniciado con la
opción --daemon):
--next
cambia al siguiente fondo de forma inmediata.
--blacklist añade el fondo actual a la
lista negra (será omitido a partir de ahora).
--kill
detiene la instancia en ejecución actual.
--current muestra el nombre de
la imagen del fondo actual
--help
muestra esta ayuda
Varias rutas y parámetros pueden especificarse
también en el
comienzo de este script.
|
Configuración de Aura
El tiempo predefinido para cambiar de una imagen a otra es de 3 horas.
Modificando lo que está de color rojo, del script del programa,
lo dejaremos en 15 minutos. Tener en cuenta que el tiempo se mide en
segundos.
#!/bin/bash
## Options
interval=$(( 3
* 300 )) # 15m
recheck=$(( 300
)) # 5m
activity_timeout=$(( 30 * 60 )) # 30min
max_log_size=$(( 1024 * 1024 )) # 1M, current+last files are kept
|
En un principio, el programa sólo es compatible con los
entornos gráficos GNOME,
XFce 4
y E17,
en los que la integración es total. En el resto de entornos
gráficos, utiliza PyGTK
para colocar la imagen en el fondo de la pantalla, con el inconveniente
de que no soporta pseudotransparencias. Para evitar esto, y que este
manual tenga cierto sentido en esta web, modificamos el plugin lqr_wpset.py, para
poder utilizar cualquier setter
de los que están documentados en este sitio, y
así los usuarios de administradores de ventanas podamos
disfrutar del uso de este programa.
Abrimos con un editor de texto, el plugin ubicado en ~/.config/GIMP/2.10/plug-ins/lqr_wpset.py,
nos vamos a la línea 156 y añadimos a
continuación lo que está de color rojo, en azul
el comando del setter
a utilizar. Podemos cambiarlo por el que deseemos, en este ejemplo
estoy utilizando Feh. Lo
guardamos y ejecutamos Aura
con la ruta a una imagen especifica para comprobar que funciona
correctamente.
## E17 edbus interface
try:
edbus = dbus.SessionBus().get_object(
'org.enlightenment.wm.service',
'/org/enlightenment/wm/RemoteObject' )
dxc, dyc =
edbus.GetVirtualCount(dbus_interface='org.enlightenment.wm.Desktop')
edbus = dbus.Interface( edbus,
dbus_interface='org.enlightenment.wm.Desktop.Background' )
for dx, dy in it.product(xrange(dxc),
xrange(dyc)): edbus.Add(0, 0, dx, dy, path)
except
dbus.exceptions.DBusException: pass # no property/object/interface/etc
os.system('feh
--bg-fill ' + path)
## Paint X root window via pygtk
pb = gdk.pixbuf_new_from_file(path)
pm, mask = pb.render_pixmap_and_mask()
win = gdk.get_default_root_window()
win.set_back_pixmap(pm, False)
win.clear()
win.draw_pixbuf(gdk.GC(win), pb, 0, 0,
0, 0, -1, -1)
|
Y si no queremos que se muestren los datos Exif incrustados en la
esquina superior izquierda del fondo de escritorio, borramos el
siguiente
contenido del plugin lqr_wpset.py.
Nos vamos a la línea 319 (contando las líneas añadidas anteriormente) y la borramos hasta la
línea 375.
## Render label on top of the image layer
# First, render all the the text boxes
# Image title, larger than the rest of the tags
label_title = pdb.gimp_text_fontname( image, layer_image,
label_offset[0], label_offset[1], meta.pop('title'),
-1, True, font_filename[1], PIXELS, font_filename[0] )
pdb.gimp_floating_sel_to_layer(label_title)
# Tags, ordered according to label_tags
meta = list( (label, meta.pop(label))
for label in it.imap(op.itemgetter(0), label_tags)
if label in meta ) + list(meta.iteritems())
offset_layer = 0.5 * font_timestamp[1]
offset_y = label_title.offsets[1] + label_title.height + offset_layer
label_keys = pdb.gimp_text_fontname( image, layer_image,
label_title.offsets[1] + 3 * font_timestamp[1], offset_y,
'\n'.join(it.imap(op.itemgetter(0), meta)),
-1, True, font_timestamp[1], PIXELS, font_timestamp[0] )
pdb.gimp_floating_sel_to_layer(label_keys)
label_vals = pdb.gimp_text_fontname( image, layer_image,
label_keys.offsets[0] + label_keys.width + offset_layer, offset_y,
'\n'.join(it.imap(op.itemgetter(1), meta)),
-1, True, font_timestamp[1], PIXELS, font_timestamp[0] )
pdb.gimp_floating_sel_to_layer(label_vals)
label_layers = label_title, label_keys, label_vals
# Find average color within the label_geom box
# and pick the most distant color from label_colors
label_geom = tuple(( layer.offsets + op.attrgetter(
'width', 'height')(layer) ) for layer in label_layers)
label_geom = label_offset + tuple( # (offsets + dimensions)
max((g[i] + g[2+i] - label_offset[i]) for g in geoms)
for i,geoms in enumerate([label_geom]*2) )
pdb.gimp_context_set_feather(False)
pdb.gimp_context_set_feather_radius(0, 0)
pdb.gimp_image_select_rectangle(
image, CHANNEL_OP_REPLACE,
label_geom[0], label_geom[1],
label_geom[2], label_geom[3] )
label_bg_color = tuple(
int(round(pdb.gimp_histogram(layer_image, channel, 0, 255)[0], 0)) # mean intensity value
for channel in [HISTOGRAM_RED, HISTOGRAM_GREEN, HISTOGRAM_BLUE] )
label_fg_color = pick_contrast_color(label_bg_color)
gimp.set_foreground(label_fg_color), gimp.set_background(label_bg_color)
# Set the picked color for all label layers, draw outlines
label_outline = image.new_layer( 'label_outline',
opacity=30, pos=image.layers.index(layer_image) )
for layer in label_layers:
pdb.gimp_text_layer_set_color(layer, label_fg_color)
path = pdb.gimp_vectors_new_from_text_layer(image, layer)
pdb.gimp_image_insert_vectors(image, path, None, -1)
pdb.gimp_context_set_antialias(True)
pdb.gimp_context_set_feather(False)
pdb.gimp_image_select_item(image, CHANNEL_OP_REPLACE, path)
pdb.gimp_selection_grow(image, 1), pdb.gimp_selection_border(image, 1)
pdb.gimp_edit_fill(label_outline, BACKGROUND_FILL)
# Meld all the layers together
image.flatten()
|
Configurar
el inicio de Aura
En los ejemplos siguientes vamos a configurar el inicio de Aura
para que se
inicie en segundo plano, cargando las imágenes de un
directorio determinado cada 15 minutos. Tener en cuenta que
cuando Aura
funciona como un daemon,
podemos enviarle los siguientes comandos al programa desde una ventana
de terminal:
* Cambiar a la siguiente imagen
* Añadir el fondo actual a la lista negra (se
omitirá su carga a partir de ahora)
* Detener la ejecución del programa
* Mostrar el nombre del archivo de imagen utilizado como fondo en curso
Si queremos guardar las imágenes que genera el programa,
podemos copiar el archivo oculto temporal en formato PNG, que se crea
en el directorio /tmp
con el nombre .lqr_wpset_bg.*.png,
a cualquier directorio de nuestro home.
1) Awesome
Editamos el archivo de configuración personal, ~/.config/awesome/rc.lua y añadimos el comando al final del mismo de la siguiente forma:
client.add_signal("focus", function(c) c.border_color = beautiful.border_focus end)
client.add_signal("unfocus", function(c) c.border_color = beautiful.border_normal end)
-- }}}
os.execute("xbindkeys &")
os.execute("aura -d ~/Fondos/16x9 &") |
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
aura -d ~/Fondos/16x9 &
(sleep 2; bbkeys &) &
docker & |
3) Fluxbox
Editamos el archivo ~/.fluxbox/startup y lo añadimos en la sección correspondiente:
# fluxbox startup-script:
#
# Lines starting with a '#' are ignored.
# You can set your favourite wallpaper here if you don't want
# to do it from your style.
#
#wpsetters=Esetroot fbsetbg -r /home/jose/Fondos-800x600
aura -d ~/Fondos/16x9 &
#
# This sets a black background
#/usr/X11R6/bin/bsetroot -solid black
# This shows the fluxbox-splash-screen
# fbsetbg -C /usr/share/fluxbox/splash.jpg |
4) 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 aura -d ~/Fondos/16x9
|
5) IceWM
Añadimos el comando de ejecución al script de inicio ~/.icewm/startup,
#!/bin/sh
aura -d ~/Fondos/16x9 &
gai-bgswitcher &
bluecombo &
sleep 5; wmix & |
6) JWM
Añadimos el comando de ejecución en la sección correspondiente del archivo de configuración ~/.jwmrc, en la versión original y ~/.jwm/autostart.xml en la versión en español disponible en la web.
<StartupCommand>
aura -d ~/Fondos/16x9 &
</StartupCommand>
|
7) 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 &
aura -d ~/Fondos/16x9 &
|
8) 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 &
aura -d ~/Fondos/16x9 &
|
9) 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 comando de ejecución al
archivo .xinitrc que se encuentra en nuestro home, si no existe lo creamos, y añadimos lo siguiente:
aura -d ~/Fondos/16x9 &
exec sawfish
|
10) 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:
aura -d ~/Fondos/16x9 &
exec sawfish
|
Iniciamos Aura
Los resultados con paisajes son muy buenos, pero los resultados con
personas son decepcionantes. En los ejemplos utilizo paisajes porque es
lo que mejor resultado da.
Imagen original >> 1024x768 px.
Aura + Fluxbox >> 1920x1080 px.
Imagen original >> 1024x768 px.
Aura + Fluxbox >> 1920x1080 px.
Enlaces
http://desktop-aura.sourceforge.net >> La web de Aura.
http://liquidrescale.wikidot.com >> La web de Liquid Rescale.
|