![]() |
Původní rozmístění indikátorů - pořadí podle toho jak se jejich procesy spouštěly |
![]() |
Upravené rozmístění indikátorů |
Pokud ještě neumíte měnit pořadí indikátorů na panelu v Unity, tak vás to naučím. Pokud to umíte, možná ještě neumíte poručit indikátoru Dropboxu, který je tak trochu parchant. I on se dá ale jednoduše zkrotit ;)
Update se týká skriptu pro přesunutí Dropboxu, na konci příspěvku.
Je pár indikátorů, dříve appletů, bez kterých se neobejdu, jako například grafický monitoring CPU, sítě a disků. To je ostatně jedna z příčin mé lehké averze ke GNOME Shellu, v jeho pohřebním panelu maximálně poskakují čísla bez kontextu. Indikátory se na panelu nedají jednoduše přemisťovat jako jsem byl doteď zvyklý, ale zároveň se ani nepřemisťují sami od sebe, což se dá považovat za drobnou kompenzaci. Nějakou tu možnost indikátory aranžovat nám ovšem tvůrci Unity překvapivě dali a tak nezbývá, než ji využít.
Nemůžete měnit pozici hlavního balíku systémových indikátorů, ale ty, co si sami přidáte můžete prohazovat do alelůja.
Soubor s pořadím indikátorů je umístěn v
/usr/share/indicator-application/ordering-override.keyfile
ale pokud nechcete kecat do indikátorů všem uživatelům, zkopírujete si ho nejprve do vlastního home adresáře. Což je rozumné i v případě, že používáte systém sami.
mkdir -p ~/.local/share/indicators/application
cp /usr/share/indicator-application/ordering-override.keyfile ~/.local/share/indicators/application/
cp /usr/share/indicator-application/ordering-override.keyfile ~/.local/share/indicators/application/
Základní obsah souboru vypadá takto:
[Ordering Index Overrides]
nm-applet=1
gnome-power-manager=2
ibus=3
gst-keyboard-xkb=4
gsd-keyboard-xkb=5
Do tohoto seznamu můžete připsat své indikátory a za rovnátka dopsat pořadí podle svého přání, počítá se od prava.
gedit ~/.local/share/indicators/application/ordering-override.keyfile
Názvy indikátorů jak je musíte zapsat do konfiguráku, zjistíte následujícím příkazem (je to celé jeden příkaz), který vypíše všechny právě běžící:
dbus-send --print-reply --dest=com.canonical.indicator.application \
/com/canonical/indicator/application/service \
com.canonical.indicator.application.service.GetApplications \
| sed -n '/object path/{s@.*/\(.*\)/.*@\1@;s/_/-/g;p}'
/com/canonical/indicator/application/service \
com.canonical.indicator.application.service.GetApplications \
| sed -n '/object path/{s@.*/\(.*\)/.*@\1@;s/_/-/g;p}'
Změny se projeví po restartu panelu, ale jeho pouhé zabití (obnoví se sám) většinou nepomůže. Pokud mu dáte trochu kapky, většinou to zabere, ale je to trošku prasárna:
for i in {0..10}; do killall -9 /usr/lib/unity/unity-panel-service;sleep 0.2; done
Odhlášení a přihlášení uživatele je spolehlivější.
Pak je tu ale zmíněný Dropbox, který při každém spuštění vygeneruje jméno indikátoru jiné, protože na konec přidává aktuální číslo procesu. I s tím se dá vyběhnout pomocí krátkého skriptíku, který si uložíte jako příkaz do aplikací spouštěných po startu:
bash -c 'sleep 2; sed -i "s/\(dropbox-client-\)[0-9]*/\1`pidof dropbox`/" ~/.local/share/indicators/application/ordering-override.keyfile
Skript jen při každém startu sezení přepíše jméno dropbox-client-$pid v souboru ordering-override.keyfile na aktuální a v panelu se tak dropbox zobrazí na místě, které jste mu určili. S tím sleepem si v případě potřeby pohrajte, na mém systému jsou ty dvě sekundy akorát a není třeba prasit s resetováním panelu.
Pokud se nepodaří to načasovat tak, aby se ikona správně umístila, mužete zkusit dodat i trochu toho násilí (původně jsem násilí provozoval rovnou - tedy předchozí příkaz je ten aktualizovaný a tento ten původní):
bash -c 'sleep 2; sed -i "s/\(dropbox-client-\)[0-9]*/\1`pidof dropbox`/" ~/.local/share/indicators/application/ordering-override.keyfile; for i in {0..10}; do killall -9 /usr/lib/unity/unity-panel-service;sleep 0.2; done'
Dobrý, sice ne nějak moc čisté, ale sám bych to líp nenapsal. Ani jsem netušil že si Dropbox sám přidává svoje číslo procesu. Jinak super díky moc.
OdpovědětVymazatTeď jsem si uvědomil, že jsem to zapoměl zmínit, já to mám načasované tak, že už tu prasečinku dělat nemusím. Ještě to tam dopíšu.
OdpovědětVymazatVelký dík. Po dvou dnech a asi 50 pokusech/omylech se mě to povedlo dostat po skoro kýženého pořadí. Jen potvůrka indicator-notifications (ppa:jconti/recent-notifications), který zaznamenává zmeškané notifikace z libnotify nejde zaboha posunout a nevypíše se ani jako spuštěný dle příkazu cos uvedl. Zkousnutelná by byla i jiná varianta takového apletu, protože takhle není přesně dle mých představ, jenže jinou jsem nenašel.
OdpovědětVymazatTak jsme měl potřebu spouštět více prostředí, možná někdo navrhnete zlepšení, ale mě funguje tahle ochrana kvůli dropboxu s troškou agrese :-D (na 12.04 šlo bez ní, na 14.04 už ne)
OdpovědětVymazatbezi_unity=$(ps aux | grep /usr/lib/unity/unity-panel-service | wc -l)
if [ $bezi_unity -ge 2 ]; then
sleep 1
sed -i "s/\(dropbox-client-\)[0-9]*/\1`pidof dropbox`/" ~/.local/share/indicators/application/ordering-override.keyfile #změna scriptu na dropbox pid pro řazení indikátorů v unity panelu
unity --replace &
fi
čas je třeba doladit a nezapomínat že grep vrací i sám sebe takže v podmínce je proto číslo 2 a nikoliv 1. Případné návrhy na snadnější řešení přijímám, ale podle mě to je dostatečně jednoduché.
Tak ještě přidám svůj poznatek, pokud někoho budou hodně zlobit některé indikátory:
Vymazatdopracoval sjem se k číslování po 10, kdy začínám na 10, pokračuju na 20 a končím u 140 v mém případě
Po aktualizaci dropboxu asi před 5 dny ě začal zlobil i indikátor dropboxu, takže aplikoval jsem pouze cyklus se zabitím indikační oblasti z článku výše bez parametru 9 :-)
bezi_unity=$(ps aux | grep /usr/lib/unity/unity-panel-service | wc -l)
if [ $bezi_unity -ge 2 ]; then
sleep 5; sed -i "s/\(dropbox-client-\)[0-9]*/\1`pidof dropbox`/" ~/.local/share/indicators/application/ordering-override.keyfile;
for i in {0..10}; do killall /usr/lib/unity/unity-panel-service;sleep 0.2; done
fi
Zas to někdy vyzkouším poškádlit. Každopádně na detekci panelu je vhodnější:
Vymazatif pgrep -f unity-panel-service; then ....
á pgrep neznám, díky za tip, vyzkouším ho.
Vymazata jó, to je menší prasárna :-D
Vymazatuž to tam mám