wtorek, 4 stycznia 2011

Cairo-Dock Single/Dual Head setup switch bash script (nvidia)

Pierwszy post w nowym roku miał być bardziej ambitny, ale nawał pracy przy kończących się właśnie projektach sprawił, że na wszystko brakuje czasu. Na ambitniejsze posty przyjdzie wam poczekać jeszcze przynajmniej tydzień.

O czym będzie dzisiejszy post każdy użytkownik linuksa czy maca powinien wiedzieć już po tytule. Dla reszty wyjaśniam iż czytacie właśnie instrukcję stworzenia skryptu automatycznie rozpoznającego czy pracujecie na dwóch, czy na jednym ekranie i dopasowującego konfig docka Cairo-Dock. Potrzeba napisania takiego skryptu chodziła za mną od kilku miesięcy, ale dopiero dziś postanowiłem to w końcu zrobić.

Potrzeba matką wynalazku

Na początku chciałbym zaznaczyć, że funkcja, która opisuję jest chyba jedyną brakującą w konfiguracji Cairo-Docka. Możliwości personalizacji tego programiku są gigantyczne i z tego powodu tym bardziej dziwi mnie brak  tak przydatnego rozwiązania.

Mój komputer to laptop z ekranem 15,4" i maksymalnej rozdzielczości 1280x800px. Gdy pracuję w domu podłączony jest do niego zewnętrzny ekran o rozdzielczości pionowej 1050px, która zapewnia bardzo przyzwoity komfort programowania z widocznym, zajmującym ~40px z dołu ekranu dockiem.



Problem pojawia się gdy monitor VGA jest odłączony. Wtedy te ~40px u dołu ekranu to więcej niż 5% całej dostępnej powierzchni.




Naturalnie Cairo-Dock umożliwia włączenie autoukrywania. Jednak jest z nim jeden problem. Mój dock jest obniżony o 13px poniżej dolnej krawędzi ekranu (coby lepiej wyglądał i zajmował mniej miejsca). Powoduje to że przywołanie urytego docka jest niemożliwe. 

Poza tym, nawet gdyby przywołanie działało byłby to bolesny kompromis bo przecież nie zależy mi wcale na ukryciu doka gdy pracuję na dwóch monitorach.

Co będzie nam potrzebne

Do napisania skryptu potrzebna jest nam informacja czy pracujemy na dwóch czy na jednym ekranie. Jako że piszemy skrypt basha dobrze by było gdyby taka informacja była dostępna w konsoli. Jeśli wasz laptop ma na pokładzie kartę graficzną intela z pomocą przyjdzie wam programik xrandr, jeśli nvidii nvidia-settings, jeśli ati radźcie sobie sami;p

W moim przypadku polecenie, którego należy użyć to:

nvidia-settings -q ConnectedDisplays -t

-q query umożliwia wywołania pozwalające na zmianę atrybutów ustawień,
-t wyświetla aktualny stan atrybutu.

W przypadku gdy podłączony jest jeden monitor polecenie zwraca 0x00010000, w przypadku dwóch 0x00010001. To było dla mnie delikatne zaskoczenie, ale nie chce się kłócić tylko współpracować więc niech będzie tak jak sobie chce.

Teraz przydałoby się rozgryźć gdzie siedzą ustawienia Cairo-Docka. Na szczęscie nie trwa to dłużej niż 3sekundy. Ku zaskoczeniu wszystkich ścieżka do ustawień to:

~.config/cairo-dock/current_theme/cairo-dock.conf

Jako że pliczek ma ~1000 linijek, a ja jestem leniwy nie będziemy go edytowali. Przygotujemy sobie dwa gotowe zestawy ustawień, którymi będziemy nadpisywali ten plik. Aby to zrobić odpalamy sobie panel sterowania Cairo-Docka, ustawiamy wszystkie opcje dla trybu jednego ekranu i zapisujemy. Następnie ręcznie lub w konsoli robimy kopię pliku konfiguracyjnego:

cp ~.config/cairo-dock/current_theme/cairo-dock.conf ~.config/cairo-dock/current_theme/cairo-dock.conf_single

To samo z drugim setupem z tym tylko, że w nazwie pliku z kopią ustawień 'single' zmieniamy na 'dual'.

Składamy wszystko do kupy!

Oto kod skryptu:


#!/bin/sh

if [ `nvidia-settings -q ConnectedDisplays -t` = '0x00010000' ]
then
        cp ~.config/cairo-dock/current_theme/cairo-dock.conf_single ~.config/cairo-dock/current_theme/cairo-dock.conf
else
        cp ~.config/cairo-dock/current_theme/cairo-dock.conf_dual ~.config/cairo-dock/current_theme/cairo-dock.conf
fi

cairo-dock -o


Zapisujemy plik, w moim przypadku (kde4) w katalogu ~.kde4/Autostart/. Ustalany 'wykonywalność' dla naszego pliku za pomocą chmod +x nazwa_pliku i właściwie gotowe. Musimy jeszcze się tylko upewnić czy nasz nowy skrypt będzie uruchamiany automatycznie przy starcie okien i czy automatyczne uruchamianie Cairo-Docka nie jest aktywne.

Brak komentarzy:

Prześlij komentarz