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
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.
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
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?