Jeśli chcecie mnie wesprzeć to zapraszam do kupna mojego poradnika "Jakim jesteś Makiem?".

Synchronizowanie ustawień aplikacji

· Wojtek Pietrusiewicz · 5 komentarzy

Zapraszam do gościnnego wpisy Janusza Bossy — porusza bardzo ciekawe kwestie dla bardziej zaawansowanych userów. Janusza możecie śledzić na Twitterze tutaj.

Jeśli pracujemy na co dzień i korzystamy z więcej niż jednego komputera to po pewnym czasie pojawia się pewien problem. Nie wszystkie z naszych urządzeń są dokładnie tak samo skonfigurowane, albo zmiany konfiguracji musimy przeprowadzać kilkakrotnie (na każdej maszynie osobno). Tutaj chciałbym przyjść z pomocą i pokazać Wam jak można łatwo synchronizować zmiany konfiguracji poszczególnych aplikacji między komputerami przy uzyciu Dropboxa i kilku prostych sztuczek w terminalu. Od razu zaznaczam, że nie będzie to uniwersalna metoda dla wszystkich aplikacji, ale dla sporej części.

Ogólny koncept

Dropbox pozwala nam na łatwe synchronizowanie plików między wieloma komputerami, co lepsze mogą to być komputery używające różnych systemów operacyjnych. Sam codziennie korzystam z Mac OS X i różnej maści Linuxów na serwerach. Plan działania, aby synchronizować ustawienia aplikacji wygląda następująco:

  1. Lokalizujemy pliki, w których aplikacje trzymają swoje ustawienia.
  2. Przenosimy te pliki do katalogu wewnątrz Dropboxa.
  3. Zmuszamy aplikację, aby korzystała z plików w Dropboxie.

Poniżej przedstawię trzy różne rodzaje aplikacji, gdzie szukać ich plików konfiguracyjnych oraz jak je zmusić do używania tych, które są w Dropboxie. Zaczniemy od najłatwiejszego przykładu…

Aplikacje pozwalające na wybór plików konfiguracyjnych

Ten rodzaj aplikacji jest najłatwiejszy w obsłudze. Jeśli program pozwala nam na ręczne wskazanie gdzie pliki konfiguracyjne mają się znajdować (lub automatycznie wykrywają Dropboxa i pozwalają tam przenieść dane – patrz: 1Password), wystarczy wskazać miejsce wewnątrz katalogu ~/Dropbox i wszystko załatwione.

Aplikacje „linuxowe”

Większość aplikacji wywodzących się ze świata *NIX (zarówno konsolowe jak i graficzne) przechowują swoją konfigurację w ukrytych plikach znajdujących się w katalogu domowym użytkownika. Nazwy ukrytych plików zaczynają się od kropki np.: ~/.profile. Synchronizowanie ustawień takich aplikacji także jest banalnie proste i sprowadza się do jednej rzeczy: magicznego narzędzia konsolowego ln. ln pozwala nam na stworzenie „skrótu” do pliku, który dla większości aplikacji nie będzie rozróżnialny od oryginału. Pierwszym krokiem jest namierzenie pliku konfiguracyjnego, dla przykładu posłużę się ~/.profile. Pierwsze co robimy to przenosimy ten plik do katalogu
w Dropboxie (ja swój nazwałem „dotfiles”, bo głównie przechowuję w nim pliki zaczynające się od kropki):

  • mv .profile ~/Dropbox/dotfiles/profile

Następnie „oszukujemy” daną aplikację i tworzymy link (skrót) w miejscu oryginalnego pliku, który wskazuje na plik znajdujący się w Dropboxie:

  • ln -s ~/Dropbox/dotfiles/profile ~/.profile

I gotowe. Wszystkie zmiany w pliku konfiguracyjnym będą synchronizowane przez Dropbox, jeśli na innych komputerach usuniemy pliki konfiguracyjne i zamienimy je na odpowiednie linki to wszystko będzie działać idealnie.

Uwaga: wrzucając pliki do Dropboxa polecam pozbyć się kropki z początku nazwy pliku. Pliki takie nie synchronizują się poprawnie na Linuxach i możecie kiedyś natknąć się na problemy.

„Standardowe” aplikacje OS X

Większość natywnych aplikacji napisanych dla OS X swoje ustawienia trzyma w nieco bardziej skomplikowanych strukturach niż jeden plik tekstowy. System domyślnie tworzy dwie lokalizacje, w których aplikacje mogą przechowywać swoje ustawienia: ~/Library/Preferences i ~/Library/Application Support. W pierwszym katalogu zapisywane są ustawienia tworzone i zarządzane przez system i tzw. „NSUserDefaults” – jest to bardzo prosty zestaw metod, który Apple udostępnia programistom właśnie w celu przechowywania bardzo prosty ustawień aplikacji – wartości liczbowych, kolorów, stanu danych opcji etc. Ponieważ funkcje te są banalne i dostępne dla każdego od ręki bardzo dużo programów korzysta z tej możliwości i przechowuje swoje ustawienia właśnie tam. Jeśli zainstalowaliście Xcode to możecie w każdej chwili podejrzeć co znajduje się w poszczególnych plikach aplikacji po prostu otwierając dany plik z poziomu Findera. Drugi katalog (~/Library/Application Support) to miejsce, gdzie aplikacje mogą zapisywać bardziej złożone dane – nawet bazy danych. Zasada przeniesienia tych plików (lub katalogów) do dropboxa jest dokładnie taka sama jak w poprzednim przypadku – przeniesienie danych i stworzenie linka (skrótu). Jednak tutaj muszę zaznaczyć, że nie zawsze może to działać tak jak powinno: niektóre aplikacje przechowują dane w taki sposób, że ich odczytanie jest możliwe tylko i wyłącznie na komputerze na którym powstały.

Jestem wielkim fanem prostych gier flashowych na kongregate.com i posłużę się tym przykładem, aby pokazać Wam jak łatwo można synchronizować nasze osiągnięcia w poszczególnych grach między dwoma komputerami:

  • mv ~/Library/Preferences/Macromedia/Flash Player/#SharedObjects/RS6YDLYS/chat.kongregate.com ~/Dropbox/dotfiles/
  • ln -s ~/Dropbox/dotfiles/chat.kongregate.com ~/Library/Preferences/Macromedia/Flash Player/#SharedObjects/RS6YDLYS/chat.kongregate.com

W ten sposób czy jesteśmy w domu, czy w pracy, zawsze możemy kontynuować naszą grę od miejsca, w którym skończyliśmy ostatnio.

Automatyzacja

Z biegiem czasu coraz więcej plików będziemy trzymali na swoim Dropboxie i synchronizowali między poszczególnymi komputerami. Zawsze pojawi się taki moment kiedy będziemy musieli komputer przygotować od nowa – czy to z powodu wymiany na nowszy model, zmiany miejsca pracy, czy (tfu!) awarii. Wtedy może okazać się, że stworzenie wszystkich skrótów jest bardzo czasochłonne, a wręcz niemożliwe, ponieważ nie pamiętamy gdzie dokładnie znajdowały się poszczególne pliki.

Tutaj z pomocą może przyjść prosty skrypt, który robi całą robotę za nas – ja nazywam go „bootstrap” (co mniej więcej oznacza pomaganie samemu sobie improwizowanymi metodami :)). Zawartość tego skryptu jest bardzo prosta – tworzy wszystkie linki, które są nam potrzebne. Wygląda to mniej więcej tak:

  • #/bin/bash
  • rm ~/.profile;
  • ln -s ~/Dropbox/dotfiles/profile ~/.profile;
  • rm -rf ~/Library/Preferences/Macromedia/Flash Player/#SharedObjects/RS6YDLYS/chat.kongregate.com
  • mkdir -p ~/Library/Preferences/Macromedia/Flash Player/#SharedObjects/RS6YDLYS
  • ln -s ~/Dropbox/dotfiles/chat.kongregate.com ~/Library/Preferences/Macromedia/Flash Player/#SharedObjects/RS6YDLYS/chat.kongregate.com

Oczywiście sam skrypt także trzymamy na Dropboxie i, koniecznie, musimy sobie wyrobić nawyk uzupełniania go o wszystkie nowe pliki jakie dodajemy do synchronizacji.

Jeśli skrypt jest gotowy i na nas czeka, to na nowym komputerze wystarczy go uruchomić, aby wszystkie pliki konfiguracyjne „znalazły się” na swoich miejscach.

Disclaimer

Nie ponosimy odpowiedzialności jeśli Wasze czynności (nawet te wykonane zgodnie z instrukcjami) spowodują utratę waszych danych. Pamiętajcie aby zawsze, przed modyfikacją plików których nie znacie, zrobić ich kopię zapasową.

Chcesz zwrócić mi na coś uwagę lub skomentować? Zapraszam na @morid1n lub na forum.

  • A czy takiej funkcjonalności czasem nie miał mieć iCloud?

  • iCloud ma za zadanie synchronizować że tak się wyrażę „zawartość multimedialną” naszego komputer. Może z czasem Apple wprowadzi taką usługę.

  • 1. #/bin/bash
    brakuje „!” na początku

    2. zamiast rm ~/.profile; lepiej zrobić mv ~/.profile ~/Dropbox/dotfiles/profile

    2. średniki na końcach linii nie są potrzebne

  • Łukasz Berliński

    Przez ln rozumiem linko symboliczne? Nie latwiej byloby sytuacje odwrocic? Zamiast przechowywac oryginaly w katalogu dropboxa, wrzucić tam linki. Wtedy na nowym kompie pink sam utworzy oryginalny plik w odpowiedniej lokalizacji. Ja tak robie z dokumentami. Oryginaly trzymam w oryginalnym katalogu Documents, i jedynie najpotrzebniejsze rzeczy mam podlinkowane pod DB.

  • kw

    Zastanawiam się jak zablokować tworzenie zwielokrotnionych kopii plików na Dboxie zaczynających się od kropki?