Gnome Panel je fajn záležitost, dá se na něj nacpat kde co, ale při změně rozlišení obrazovky se jeho obsah strašně rád přemisťuje z místa na místo. Pokud měníte rozlišení častěji, ať už proto, že používáte více monitorů, nebo spouštíte nějaký fullscreen program v jiném, než nativním rozlišení, máte možnost buď neustále uklízet, nebo se na to vykašlat a koukat na ten bordel. Ručně to stále přemisťovat nehodlám, druhá možnost mě přestala bavit, a tak jsem napsal skript, který to udělá za mě..
Poslední update 28.3.11 - doplnění skriptů
Poslední update 28.3.11 - doplnění skriptů
Applety a další objekty, které máte umístěny na panelu, mají svou konfiguraci v GConfu, tedy centrální databázi nastavení Gnome. Odtud můžete jednoduše číst, nebo sem naopak zapisovat hodnoty pomocí konzolového nástroje gconftool-2, nebo grafické aplikace gconf-editor.
Vzhledem k tomu, že střídavě přepínám mezi dvěma monitory s různým rozlišením, dojde vždy po přepnutí k rozházení osazenstva panelu. Můj nápad byl tedy takový, že si uložím nastavení pro obě obrazovky a při přepnutí monitoru načtu nastavení panelu pro dané rozlišení. Skripty pro uložení i nastavení panelu, jsem napsal tak, aby si zjistili pomocí xrandr aktuální rozlišení obrazovky a podle toho použily správný konfigurační soubor. Tyto soubory ukládám do adresáře ~/.gnome2/panel-order/ a vždy nesou jméno odpovídající rozlišení displeje, ke kterému patří (např. 1920x1200).
save-panel.sh (uloží nastavení panelu)
#!/bin/bash
# save positions of gnome panel objects/applets
# for current screen resolution
# author: GdH
_FILE=`xrandr -q|grep \*|awk '{print $1}'`
if [ `echo $_FILE | wc -w` -ne 1 ]; then echo 'error: just one display must be in use..'; exit 1; fi
_PATH="$HOME/.gnome2/panel-order"
[ -d $_PATH ] || mkdir $_PATH
gconftool-2 --all-dirs /apps/panel/applets /apps/panel/objects|while read LINE
do
echo $LINE
gconftool-2 --get "$LINE/position" 2>&1
gconftool-2 --get "$LINE/panel_right_stick" 2>&1
done > /dev/shm/save-panel
if grep "No value" /dev/shm/save-panel; then echo 'error while reading gconf..'; exit 1; fi
mv /dev/shm/save-panel $_PATH/$_FILE
[ $? -gt 0 ] || echo "panel configuration saved to:
$_PATH/$_FILE"
exit 0
# save positions of gnome panel objects/applets
# for current screen resolution
# author: GdH
_FILE=`xrandr -q|grep \*|awk '{print $1}'`
if [ `echo $_FILE | wc -w` -ne 1 ]; then echo 'error: just one display must be in use..'; exit 1; fi
_PATH="$HOME/.gnome2/panel-order"
[ -d $_PATH ] || mkdir $_PATH
gconftool-2 --all-dirs /apps/panel/applets /apps/panel/objects|while read LINE
do
echo $LINE
gconftool-2 --get "$LINE/position" 2>&1
gconftool-2 --get "$LINE/panel_right_stick" 2>&1
done > /dev/shm/save-panel
if grep "No value" /dev/shm/save-panel; then echo 'error while reading gconf..'; exit 1; fi
mv /dev/shm/save-panel $_PATH/$_FILE
[ $? -gt 0 ] || echo "panel configuration saved to:
$_PATH/$_FILE"
exit 0
set-panel.sh (obnoví nastavení panelu)
#!/bin/bash
# restore positions of gnome panel objects/applets
# for current screen resolution
# author: GdH
_FILE=`xrandr -q|grep \*|awk '{print $1}'`
_PATH="$HOME/.gnome2/panel-order"
if [ -f $_PATH/$_FILE ]; then
cat $_PATH/$_FILE|while read OBJECT
do
read POSITION; read STICK
if gconftool-2 --dir-exists="$OBJECT"; then
gconftool-2 --type int --set $OBJECT/position $POSITION
gconftool-2 --type bool --set $OBJECT/panel_right_stick $STICK
fi
done
else
echo "error: no config file.."
exit 1
fi
pkill gnome-panel
exit 0
# restore positions of gnome panel objects/applets
# for current screen resolution
# author: GdH
_FILE=`xrandr -q|grep \*|awk '{print $1}'`
_PATH="$HOME/.gnome2/panel-order"
if [ -f $_PATH/$_FILE ]; then
cat $_PATH/$_FILE|while read OBJECT
do
read POSITION; read STICK
if gconftool-2 --dir-exists="$OBJECT"; then
gconftool-2 --type int --set $OBJECT/position $POSITION
gconftool-2 --type bool --set $OBJECT/panel_right_stick $STICK
fi
done
else
echo "error: no config file.."
exit 1
fi
pkill gnome-panel
exit 0
Objekty panelu jsou v GCconfu ve dvou adresářích, rozdělené na applety a objekty. Do konfiguračního souboru se ukládají pro každý applet, i objekt tři řádky, kde první je cesta, druhý pozice (klíč position) a třetí obsahuje informaci, zda je pozice počítána zprava, místo zleva (klíč panel_right_stick). Skript set-panel.sh pro každý klíč kontroluje, zda objekt, kterému patří existuje, aby nevytvářel nesmyslné klíče, pokud jste mezitím z panelu něco odstranili. Aby se nastavení panelu projevilo, je potřeba panel restartovat, to je ve skriptu zajištěno zabitím panelu - Gnome si ho automaticky spustí znovu. Skript save-panel.sh je dobré spouštět vždy když na panel něco přidáte, nebo z něj něco odeberete, i když v druhém případě nebude mít neaktuální konfigurační soubor žádný negativní dopad, jak jsem v předešlé větě vysvětlil.
Předpokládám, že na většině Gnome systémů by tyto skripty měly fungovat správně. Já to psal a testoval na Ubuntu 10.10 s grafickým driverem Catalyst 11.2 a na 10.04 s ovladačem radeon, i nvidia.
Žádné komentáře:
Okomentovat
Zkuste prosím při komentováni používat místo volby Anonymní volbu Název/adresa URL, kde vyplníte nějakou přezdívku, adresu zadávat nemusíte. Vědět, které příspěvky jsou od jednoho člověka, je fajn. Díky.
Pokud by se vám náhodou odeslaný komentář na stránce nezobrazil, vytáhnu ho z koše hned jak si toho všimnu. I Google spam filter se občas sekne.