úterý 1. května 2012

Pořadí indikátorů v Unity panelu - Update 17:10/2.5.12

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/

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}'

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'

8 komentářů:

  1. 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ětVymazat
  2. Teď 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ětVymazat
  3. Velký 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ětVymazat
  4. Tak 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)

    bezi_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é.

    OdpovědětVymazat
    Odpovědi
    1. Tak ještě přidám svůj poznatek, pokud někoho budou hodně zlobit některé indikátory:
      dopracoval 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

      Vymazat
    2. Zas to někdy vyzkouším poškádlit. Každopádně na detekci panelu je vhodnější:
      if pgrep -f unity-panel-service; then ....

      Vymazat
    3. á pgrep neznám, díky za tip, vyzkouším ho.

      Vymazat
    4. a jó, to je menší prasárna :-D
      už to tam mám

      Vymazat

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.