HTML

Bagoj úr blogja

Kíváncsi Bagoj befigyel a Linux belsejébe, illetve különféle Linux terjesztéseket próbál ki. Ha jó napja van, scriptet ír Neked.

Friss topikok

Színezzük át a Gnome témát a háttérképnek megfelelően

2012.05.29. 23:59 bagoj ur

Olvasom az okosságot nemrégiben: egy valószínűleg rettenetesen unatkozó programozó kitalálta, hogy nem csak a háttérképet cserélgeti a Gnome3 alatt, hanem egy (Python) szkripttel megnézi, hogy mi a beállított háttérkép átlagos színárnyalata, és beállítja ahhoz a GTK téma megfelelő színeit. Kicsit viccesnek találtam a dolgot, de miért ne foglalkozzak vele?

Röviden elemezve a szkriptjét, kiderül hogy a tuti parancs a következő: 

/usr/bin/xprop -root _GNOME_BACKGROUND_REPRESENTATIVE_COLORS

 

Ez elég megdöbbentő módon tényleg kiírja RGB kóddal a háttérkép átlagos színárnyalatát! Hogy mik vannak így 2012-ben...

_GNOME_BACKGROUND_REPRESENTATIVE_COLORS(STRING) = "rgb(45,61,113)"

Ha már ez ilyen egyszerű, akkor ezt a Bash is tudja... :-) Egy titka van a dolognak; ahhoz hogy felhasználó-szinten tudjuk állítgatni egy téma színárnyalatait, nyilvánvalóan egy felhasználói témát kell tudnunk alkalmazni.

A Gnome3 rendszertémák a /usr/share/themes alatt találhatók; az alapértelmezett az Adwaita névre hallgat (nekem nagyon tetszik is, ügyesek voltak a grafikusok). A téma könyvtárában pedig van egy gtk-3.0 könyvtár, abban pedig egy gtk.css fájl, benne a színkódokkal. Ha az Adwaita könyvtárat bemásoljuk a home könyvtárunkban a .themes könyvtár alá (ha nincs, létre kell hozni), akkor elő is állt a felhasználói téma, amelyet már tudunk módosítani. Az ebben lévő színkódokat kell megmachinálnunk.

Ha már a Gnome 3.4-et vagy újabbat koptatunk, akkor ehelyütt van egy kis probléma: a felület gyorsítása érdekében a 3.2-ig text formátumú fájl helyett a 3.4-től egy binárist alkalmaznak, és az említett gtk.css-ben mindössze ennyi van:

@import url("resource:///org/gnome/adwaita/gtk-main.css");

Ez igen sajnálatos a mi szempontunkból, mert a bináris fájlt egyelőre nem tudjuk írni. :-( Én letöltöttem tehát a Gnome 3.2-höz tartozó Adwaita témát, és Adwaita-bagoj néven bemásoltam a .themes alá.

Miután a fenti nehézségen túljutottunk, íme az én kis túlbonyolított szkriptem egyetlen érték átírására (ez a "fénygerenda" színe, és a szkript futtatása után minden újonnan elindított alkalmazásnál látszik is a változás, hogy a kijelölt menüpontok ilyen színűek lesznek).

#!/bin/bash

THEME_NAME="Adwaita-bagoj"
USER=`/usr/bin/whoami`

R=; G=; B=; I=0;

while IFS= read -r -d , a; do
    if [ "1"$I = "12" ]; then
        B=$a;
        let I $((I++));
    fi
    if [ "1"$I = "11" ]; then
        G=$a;
        let I $((I++));
    fi
    if [ "1"$I = "10" ]; then
        R=$a;
        let I $((I++));
    fi
done < <(/usr/bin/xprop -root _GNOME_BACKGROUND_REPRESENTATIVE_COLORS | sed s_^.*rgb\(__ | sed s_\).*_,_);

sed "s/@define-color\ selected_bg_color\ \(.*\)/@define-color selected_bg_color rgb ($R, $G, $B);/" /home/$USER/.themes/$THEME_NAME/gtk-3.0/gtk.css > /home/$USER/.themes/$THEME_NAME/gtk-3.0/gtk.css_new
mv /home/$USER/.themes/$THEME_NAME/gtk-3.0/gtk.css_new /home/$USER/.themes/$THEME_NAME/gtk-3.0/gtk.css
Aki nem szeretné egyből felülírni a gtk.css fájlt, az utolsó sort kommentezze ki, ekkor csak egy gtk.css_new áll elő, amit meg lehet nézni text editorban, hogy minden oké-e.

Nem tudom, van szükség magyarázatra? Én szívesen elregélem, csak dobjatok egy kommentet. :-)

Még annyi fényezni való lenne, hogy a GTK2-es alkalmazások számára a téma gtk-2.0 könyvtárában (egy másik szintaxissal) is be kéne írni azt a bizonyos színt. Ma késő van, fáradt Bagoj vagyok, de be fogom pótolni, ok?

2 komment

Címkék: linux gnome script parancssor arch gnome3

A bejegyzés trackback címe:

https://bagojur.blog.hu/api/trackback/id/tr604546280

Kommentek:

A hozzászólások a vonatkozó jogszabályok  értelmében felhasználói tartalomnak minősülnek, értük a szolgáltatás technikai  üzemeltetője semmilyen felelősséget nem vállal, azokat nem ellenőrzi. Kifogás esetén forduljon a blog szerkesztőjéhez. Részletek a  Felhasználási feltételekben és az adatvédelmi tájékoztatóban.

bagoj ur 2012.05.30. 12:27:53

Most olvasom a blogon, amit meghivatkoztam forrásnak, hogy valaki szintén gyártott már bash szkriptet a probléma megoldására, de az tényleg eléggé bonyolult; pl. az xprop meghívása helyett végigelemzi a háttérképet az Imagemagick-kel stb.

További probléma forrása lehet, hogy alapból feltételezi, hogy az Imagemagick és bc telepítve van. Persze Ubuntunál valszeg így is van...

Azért este majd megnézem tüzetesebben, és a jó ötleteket átveszem. :)

ubuntuone.com/3zh2an3rnVXfUxqtCj5Gev

atomgape 2012.06.05. 23:06:19

Haláli ötlet különben, de sok értelme nincs. :-) De az mondjuk vicces, ha nap közben folyton változó a háttérkép és ahhoz alkalmazkodik az ablakok színe is. Mit csinálna ez egy háttérnek betett videóval? :-)))
süti beállítások módosítása