Odin Tip III: ¿ Podemos cambiar el fondo de Pantheon Greeter en elementary OS Odin ?

El nuevo Pantheon Greeter en Odin, trajo un color gris, como fondo de escritorio, esto suscito alguna polémica y terminó por no gustar demasiado a una parte de los usuarios de este sistema.

Desde entonces empezaron a surgir en la red, algunas soluciones. Gran parte de ellas, partiendo del código fuente del proyecto, básicamente trataban de sustituir esa imagen gris, por una nuestra, tras esto tendríamos que construir e instalar esta versión.

Por ejemplo, podemos ver los detalles de uno de estos proyectos desde su página en GitHub, donde a través de unos scripts, se realiza automáticamente todo ese proceso. Esta  imagen gris se correspondía con el archivo texture.png, que deberíamos reemplazar por uno de nuestros fondos, una vez que lo hayamos renombrado con el mismo nombre y extensión.

Esto plantea un par de problemas, por una parte, se construye y sobrescribe nuestro Pantheon Greeter instalado originalmente desde los repositorios, y otro es que cada vez que queramos cambiar el fondo otra vez, tendríamos que realizar de nuevo todo el proceso, lanzando de nuevo los scripts.

Bueno dejando a parte este proyecto, puede ser bastante interesante ver el programa SystemBackground.vala,

y ver la rutina culpable de todo esto.

 system_background = new Meta.Background (background_actor.meta_display);
 var texture_file = GLib.File.new_for_uri ("resource:///io/elementary/desktop/gala/texture.png");
 system_background.set_color (DEFAULT_BACKGROUND_COLOR);
 system_background.set_file (texture_file, GDesktop.BackgroundStyle.WALLPAPER);

Si pensamos un poco en el antiguo Pantheon Greeter, el cambio de fondo lo hacía, como cabría pensar, es decir desde Pantheon Files.

Si investigamos un poco y sin ser un programador avanzando, podríamos realizar esto sin demasiado esfuerzo, con unos pocos cambios, quedando como algo así,

El código completo correspondiente a este archivo sería el siguiente,

SystemBackground.vala

/*
 * Copyright 2018 elementary, Inc. (https://elementary.io)
 *
 * This program is free software; you can redistribute it and/or
 * modify it under the terms of the GNU General Public
 * License as published by the Free Software Foundation; either
 * version 2 of the License, or (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
 * General Public License for more details.
 *
 * You should have received a copy of the GNU General Public
 * License along with this program; if not, write to the
 * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
 * Boston, MA 02110-1301 USA.
 *
 * Authors: Corentin Noël <corentin@elementary.io>
 */
    public static GLib.Settings settings;
    public class Greeter.SystemBackground : GLib.Object {
    const Clutter.Color DEFAULT_BACKGROUND_COLOR = { 0x2e, 0x34, 0x36, 0xff };

    static Meta.Background? system_background = null;

    public Meta.BackgroundActor background_actor { get; construct; }

    public signal void loaded ();

    public SystemBackground (Meta.Display display) {
        Object (background_actor: new Meta.BackgroundActor (display, 0));
    }

    construct {
        if (system_background == null) {
			settings = new GLib.Settings ("org.gnome.desktop.background");
            system_background = new Meta.Background (background_actor.meta_display);
            this.refresh();
        }

#if HAS_MUTTER338
        ((Meta.BackgroundContent)background_actor.content).background = system_background;
#else
        background_actor.background = system_background;
#endif
    }

    public void refresh () {
        // Meta.Background.refresh_all does not refresh backgrounds with the WALLPAPER style.
        // (Last tested with mutter 3.28)
        // As a workaround, re-apply the current color again to force the wallpaper texture
        // to be rendered from scratch.
        if (system_background != null) {
			
            var texture_file = GLib.File.new_for_uri (settings.get_string ("picture-uri"));
            var texture      = GLib.File.new_for_uri ("resource:///io/elementary/desktop/gala/texture.png");
	            
            try {
               system_background.set_file (texture_file, GDesktop.BackgroundStyle.ZOOM);
		    } catch (Error e) {
			   print ("Error: %s\n", e.message);
			   // WithOut Wall	
               system_background.set_color (DEFAULT_BACKGROUND_COLOR);  
               system_background.set_file (texture, GDesktop.BackgroundStyle.WALLPAPER);
		    }	            
        }
    }
}

Pues si prefieres probar esta opción, veamos como hacerlo.

Instalación

Pues primeramente, tendremos que crear una carpeta de trabajo e instalar todas las dependencias y herramientas de construcciones que necesitamos.

$ cd
$ mkdir Desarrollo
$ cd Desarrollo
$ sudo apt install -y git gnome-settings-daemon libaccountsservice-dev libgdk-pixbuf2.0-dev libgranite-dev libgtk-3-dev libhandy-1-dev liblightdm-gobject-1-dev libmutter-6-dev libwingpanel-dev libx11-dev meson valac imagemagick-6.q16 cmake

Tras esto nos bajamos los fuentes, por tanto clonamos su repositorio,

$ git clone https://github.com/elementary/greeter.git

Ahora editamos SystemBackground.vala, disponible en la carpeta greeter > compositor

borramos todo el código allí disponible, y copiamos y pegamos el código que más arriba se muestra, con los cambios. Tras esto salvamos y nos salimos del editor.

Ya estamos listos para construir e instalar, esto lo hacemos con,

$ cd greeter
$ meson build --prefix=/usr/local
$ cd build
$ ninja
$ sudo ninja install

Terminado el proceso, ya podemos disfrutar de este nuevo Pantheon Greeter, no hace ni siquiera que salgamos de nuestra actual sesión para comprobar que ya ha desaparecido esta imagen gris y que ha sido sustituida por el fondo por defecto en Odin, esto lo hacemos con la herramienta dm-tool,

$ dm-tool switch-to-greeter

Desinstalar

Vale pues si queremos volver a la versión por defecto del sistema, simplemente la desinstalamos con,

$ cd $HOME/Desarrollo/greeter/build
$ sudo ninja uninstall

Pues hasta aquí, no te pierdas el próximo post, donde estableceremos un nuevo fondo desde Pantheon Files 🙂

Guarda el enlace permanente.

Deja un comentario

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.