TkDesk -- elastyczne środowisko pracy w systemach Unix







Wstęp

Zapewne większość osób, które często pracują z systemami Unix w graficznym środowisku X Window, ma jakiś ulubiony sposób organizacji swojej przestrzeni roboczej. Jednym z bardziej znanych komercyjnych rozwiązań tego typu jest CDE - zestaw aplikacji, tworzących razem zintegrowane środowisko pracy.

Nie wiem, czy przy obecnej popularności potężnych projektów, takich jak KDE,(1) czy GNOME(2) warto jeszcze opisywać inne rozwiazania. Cóż - gdy wybierałem programy mające tworzyć moje środowisko pracy (pulpit) KDE był dopiero w bardzo wczesnej fazie projektowania. Myślę zresztą, że nawet dziś znajdzie się wielu użytkowników preferujących prostsze i bardziej elastyczne rozwiązania. Nie bez znaczenia jest też ilość zasobów zajmowanych przez takie "kombajny" jak KDE i GNOME. Z pewnością jednym z alternatywnych rozwiązań, godnych rozważenia, jest TkDesk.

Czym jest TkDesk? Jest to proste, zintegrowane środowisko przeznaczone dla systemu X Window.(3) Składa się ono z rozbudowanego menadżera plików, paska aplikacji oraz kilku drobniejszych narzędzi. W połączeniu z nawet najprostszym menadżerem okien (WM) TkDesk tworzy wygodne środowisko pracy. Autorem programu, dostępnego pod licencją Gnu General Public License, jest Christian Bolik. Godne uwagi jest, że TkDesk został napisany z użyciem języka skryptowego Tcl/Tk.(4) Pomimo wykorzystania tego właśnie języka program pracuje zdumiewająco szybko i zajmuje niewiele zasobów komputera.



Instalacja i użytkowanie

TkDesk dostępny jest w postaci kodu źródłowego oraz prekompilowanych binariów dla systemu Linux/i386 (linkowanych statycznie i dynamicznie). Aktualną wersję programu (1.2) można kompilować z wersjami Tcl/Tk od 7.5/4.1 do 8.2/8.2. Wymagane wersje bibliotek podane są w Tabeli 1. (Uwaga: użycie bibliotek wersji 8.x wymaga dodatkowo posiadania pakietu [inc Tcl] (itcl) w wersji 3.0).(5) Program działa praktycznie w każdym systemie Uniksowym, posiadającym zainstalowane biblioteki Tcl/Tk. Ja używam TkDeska w systemie Digital UNIX V4.0D (na procesor alpha, program kompilowałem z wersją Tcl/Tk 7.6/4.2) i na laptopie z systemem Linux/i386 (z zainstalowanym TkStep 8.0(6) i itcl 3.0).


Tcl Tk itcl
Tcl 7.5 Tk 4.1 itcl 1.5 (zawarty w TkDesk)
Tcl 7.6 Tk 4.2 itcl 1.5 (zawarty w TkDesk)
Tcl 8.0 Tk 8.0 itcl 3.0.1 (musi być instalowany osobno)
Tcl 8.1 Tk 8.1 itcl 3.0.1 + łatka w katalogu contrib/itcl_fix.diff
Tcl 8.2 Tk 8.2 itcl 3.0.1 + łatka w katalogu contrib/itcl_fix.diff

Tabela 1. Wersje Tcl/Tk/itcl wymagane do kompilacji TkDesk v. 1.2

{Rysunek 1. Pasek aplikacji}Kompilacja i instalacja programu przebiega w typowy sposób: po rozpakowaniu źródeł i zapoznaniu się z informacjami w plikach README i INSTALL (warto na tym etapie upewnić się, czy posiadamy wszystkie wymagane biblioteki we właściwych wersjach) i ewentualnym zastosowaniu najnowszych łatek dostępnych na stronie domowej projektu[3] wykonujemy polecenia ./configure i make. Warto także zapoznać się z opcjami skryptu configure: ./configure --help. Po pomyślnym zakończeniu kompilacji można przetestować działanie programu, wywołując polecenie ./testdrive oraz dokonać instalacji na twardym dysku (make install). Domyślnie dane programu, pliki ze standardową konfiguracją, zestaw całkiem estetycznych ikon, przykładowe dźwięki (.au) i dokumentacja (dostępna też z programu: menu Help lub F1) instalowane są w katalogu /usr/local/lib/TkDesk. Pliki wykonywalne umieszczane są w katalogu /usr/local/bin. W katalogu domowym użytkownika przechowywana jest indywidualna konfiguracja programu (katalog $HOME/.tkdesk). Program uruchamia się poleceniem tkdesk.

Po uruchomieniu program wyświetla dwa okna: pasek aplikacji (Rys. 1) i menadżer plików (Rys. 2). Przeznaczenie paska aplikacji jest typowe: służy on do szybkiego uruchamiania programów użytkownika, wyświetla proste aplety, takie jak zegarek, informacje o obciążeniu procesora czy nowej poczcie. Kliknięcie prawym klawiszem myszy na pasku rozwija definiowane przez użytkownika, kontekstowe menu. Pasek obsługuje też mechanizm przeciągnij i upuść (D'n'D) pomiędzy innymi elementami pakietu.

Znacznie bardziej rozbudowany jest moduł menadżera plików. Program posiada typowe możliwości dobrego graficznego menadżera plików: mechanizm przeciągnij i upuść, prosty "kosz" umożliwiający bezpieczne kasowanie plików, operacje na plikach wykonywane w tle, wygodną w użyciu historię poleceń i zakładki (ang.: bookmarks), mechanizm dopełniania w ścieżce katalogów (ang.: Tab-completion, [Ctrl]+[Tab]) i inne. TkDesk posiada też kilka dodatkowych funkcji, które czynią pracę z nim szczególnie przyjemną. Autor w dokumentacji zapewnia, że w swoim programie wykorzystał najlepsze idee z rozmaitych narzędzi i systemów operacyjnych, takich jak NeXT, Apple Finder czy nawet MS Windows. Rzeczywiście - wszystkie okna programu są dobrze zaprojektowane i pracuje się z nimi bardzo wygodnie.


{Rysunek 2. Okno File Browser menadżera plików}

Podstawowe okno menadżera plików (tzw. "File Browser") możemy podzielić na kilka (od 1 do 9) wzajemnie powiązanych list plików. Taki układ okna niezwykle ułatwia przeglądanie drzewa katalogów (Rys. 2). W dowolnym katalogu możemy otworzyć też prostsze okno "File List", zawierające tylko jedną listę plików (Rys. 3). Pomiędzy oknami TkDesk działa mechanizm D'n'D (używa się wleczenia środkowym klawiszem myszy). Można także "upuścić" plik na pasek aplikacji, czy nawet na pulpit (a.k.a root window) uzyskując ikonę, będącą skrótem do pliku (rysunek tkdesk1.jpg).[7] Ikony na pulpicie (niestety nie da się w aktualnej wersji ustawić przeźroczystego tła pod ikoną) można wykorzystać do szybkiego dostępu do programów i plików, a także do wykonywania prostych akcji na plikach, np. upuszczenie pliku na ikonie dyskietki spowoduje skopiowanie go na dyskietkę. Bardzo ciekawym rozwiązaniem są rozwijane z wielu miejsc (menu "Directory", linia ze ścieżką katalogów, okna dialogowe) kaskadowe menu odwzorowujące strukturę katalogów (por. Rys 2). Niezależnie od mechanizmu zakładek ("Bookmars") często odwiedzane lokacje można umieścić w górnej części takiego menu. Z kolei ostatnio odwiedzone katalogi umieszczane są w historii. Wszystko to stwarza skuteczne i wygodne narzędzie do szybkiej nawigacji po rozbudowanej strukturze katalogów.

{Rysunek 3. Okno File List}

Konfiguracja programu

Używanie nawet najbardziej rozbudowanego programu szybko stanie się uciążliwe, jeśli pozbawieni będziemy możliwości dostosowania go do własnych wymagań. Powodem dla którego używam TkDesk już od paru lat jest możliwość dogłębnej konfiguracji wszystkich istotnych części tego programu. Do najważniejszych właściwości mamy dostęp za pomocą menu "Options". Możemy skonfigurować sposób wyświetlania plików w oknach menadżera plików, potwierdzanie operacji, włączyć obsługę dźwięku itp. Znacznie głębszych zmian można dokonać edytując tekstowe pliki konfiguracyjne zawarte w katalogu $HOME/.tkdesk. Najłatwiej zrobić to wywołując z menu: "TkDesk>Configuration" odpowiednią opcję. Spowoduje to otwarcie wbudowanego w program edytora tekstu z załadowanym odpowiednim plikiem. Korzystając z opcji "Configuration>Save and Reload into TkDesk" (F5) w menu edytora możemy na bieżąco kontrolować skutki wprowadzanych modyfikacji. Pracę ułatwiają dostępne z tego samego miejsca przeglądarka ikon i paleta kolorów. Składnia plików konfiguracyjnych jest przejrzysta, są one bogato komentowane i nawet osoby początkujące nie będą miały problemów z ich modyfikacją. Opcje zawarte w menu "TkDesk>Configuration" pozwalają na dostosowanie do własnych wymagań takich elementów programu jak:(7)

  1. System - m. in. kolory, fonty używane przez program.
  2. ButtonBar - pasek przycisków (mogą być definiowane osobne paski dla obu rodzajów okien menadżera plików a nawet dla osobnych katalogów).
  3. AppBar - pasek aplikacji
  4. Directories - definicja menu o takiej samej nazwie, służącego do przyśpieszenia dostępu do katalogów na dysku. Wybranym katalogom można przypisać też określone akcje, np. próba wejścia do katalogu /mnt/cdrom będzie powodowała zamontowanie urządzenia /dev/cdrom.
  5. Commands - w menu "Commands" można zdefiniować rozmaite operacje na plikach (np. różne rodzaje kompresji, archiwizacji), wywołania często używanych programów, etc.
  6. FileTags - definiuje sposób wyświetlania plików danego typu: atrybuty i kolor czcionek, ikony, etc.
  7. Popups - definiuje zawartość menu podręcznego wyświetlanego po kliknięciu prawym klawiszem myszy w menadżerze plików, w ikonę na pulpicie oraz zawartość menu rozwijanego w oknie dialogowym "Copy Move...".
  8. Sounds - definiuje reakcję dzwiękową programu na zdarzenia takie jak otrzymanie nowej poczty, otwarcie okna, kopiowanie plików, etc.

Na początku każdego pliku konfiguracyjnego opisane są procedury Tcl (nazwane, jak pisze autor, "nieco na wyrost" TkDesk API), które można wykorzystać programując zachowanie się danego elementu programu. Np. fragment definiujący działanie pierwszego przycisku "informacja" na pasku ikon "Button Bar" (Rys. 3) przedstawia się następująco:

{{info.xpm} {
	dsk_fileinfo 
	{Display information about all selected files.}
}}

Użycie funkcji Tcl dsk_fileinfo spowoduje wywołanie okienka "File Information" dla każdego zaznaczonego pliku (por. Rys. 3).W analogiczny sposób definiujemy zachowanie się paska aplikacji, menu i inne.

TkDesk znakomicie ułatwia wykonywanie rozmaitych akcji na plikach. Dany rodzaj pliku możemy powiązać z wybranymi zewnętrznymi programami (np. bitmapy z przeglądarką xv), skryptami powłoki oraz wewnętrznymi poleceniami oferowanymi przez TkDesk. (UWAGA: w aktualnej wersji programu rodzaj pliku rozpoznawany jest na podstawie rozszerzenia (np. *.man, lub *.[1-8n]) a nie wyniku polecenia file(1). To ostatnie można uzyskać po wybraniu polecenia: "File>Information" [Ctrl+i]). Edytując plik "Popups" możemy łatwo zdefiniować listę operacji wykonywanych na plikach danego typu. I tak na przykład fragment:

{{*.xpm} {
	{{View (xv)} {dsk_exec xv %s}}
	{{Edit (GIMP)} {dsk_exec gimp %s}}
	{{Edit (ASCII)} {dsk_edit %s}}
}}

definiuje menu kontekstowe pokazane na Rys. 3. Pierwsze dwie opcje spowodują otwarcie pliku %s w wybranych programach graficznych (dsk_exec) a ostatnia wyświetlenie pliku we wbudowanym w TkDesk edytorze (dsk_edit). Pierwsza z pozycji listy staje się domyślną operacją wykonywaną w przypadku "dwukliknięcia" na pliku. Ostatnim menu definiowanym w powyższym pliku jest lista rozwijana w okienku "Copy, Move..." [Ctrl+c]. Jest to bardzo wygodne rozwiązanie, pozwalające zdefiniować akcje wykonywane na przenoszonych plikach (np. rozpakowanie archiwum do określonego katalogu, utworzenie dowiązań symbolicznych itd., por. Rys. 2)

Ponieważ program stworzony został w języku Tcl istnieje możliwość łatwego poszerzenia jego możliwości o nowe funkcje - dołączając swoje procedury w Tcl. Przykład stanowić mogą pliki (np. tar.tcl) zawarte w katalogu contrib/ w źródłach programu.

Nieprogramiści mogą wykorzystać zbiór gotowych procedur, określany jako TkDesk API. Jest on nie tylko użyteczny przy definiowaniu wewnętrznych elementów programu, jak np. menu kontekstowe ale korzystając z niego można tworzyć własne specjalizowane narzędzia. Możliwe jest także sterowanie programem z innych aplikacji. Należy w tym celu w menu "Options" uaktywnić opcję "TkDesk Server". Do komunikacji z elementami pakietu TkDesk służy program tkdeskclient. Za pomocą komendy tkdeskclient "polecenie parametry" możemy spowodować określoną reakcję pakietu. Na przykład wywołanie z innego programu polecenia:

tkdeskclient "dsk_active dir /home"

spowoduje zmianę katalogu w ostatnio aktywnym oknie menadżera plików TkDesk na /home. Inne polecenia umożliwiają wyświetlanie okien dialogowych, menu kontekstowego, wykonywanie operacji na plikach i inne. Opis wszystkich funkcji programu zawarty jest w dokumentacji dostępnej w menu "Help>User's Guide". Razem z programem instalowanych jest też kilka skryptów powłoki, mogących służyć za przykład wykorzystania API programu (pliki /usr/local/bin/*-tkdesk).





Osobiste uwagi i podsumowanie

Niewątpliwie TkDesk nie może równać się z poważnymi i wysoce zintegrowanymi środowiskami, takimi jak [C,K]DE czy GNOME. Jednak, gdy z pewnych względów potrzebujemy lżejszej i prostszej alternatywy lub gdy lubimy głęboko ingerować w działanie programu, TkDesk wydaje się niezastąpiony.

Program posiada kilka wad. Osobiście najbardziej brakuje mi przeźroczystej obsługi archiwów i protokołu FTP (takiej jaka jest na przykład w GNU Midnight Commander). W aktualnej wersji TkDesk do zdalnego kopiowania plików używa polecenia scp z pakietu SSH (w oknie "Copy, Move..." należy wpisać user@host:ścieżka). Wszystkie operacje na plikach, takie jak kopiowanie, kompresowanie, etc. wykonywane są w tle. O ich pomyślnym zakończeniu lub błędach powiadamiany jest użytkownik. Niewyświetlane jest za to żadne okienko dialogowe, pokazujące stan zaawansowania tych operacji. W wielu przypadkach informacja taka była by jednak bardzo przydatna. Funkcje te z pewnością pojawią się w następnych wersjach programu (plik TODO). Rozwiązaniem jest też możliwość samodzielnego wzbogacania programu o własne procedury z wykorzystaniem języka Tcl.

Korzystanie z gotowych funkcji API umożliwia z kolei nawet nieprogramiście łatwe zintegrowanie pakietu TkDesk z innymi programami. W swoim środowisku X Window wywołanie programu dodałem do skryptów startowych używanego menadżera okien - programu AfterSTEP. Cała reszta komunikacji (np. wywołanie menadżera plików z menu AfterSTEP, paska Wharf i innych programów) odbywa się z wykorzystaniem serwera TkDesk (rysunek tkdesk1.jpg).[7] Przykładem może być prosty skrypt w bashu, służący do przeglądania skompresowanych plików i pakietów rpm[7] lub wywołanie okna z listą plików z programu LinNeighborhood używanego przeze mnie do przeglądania zasobów SMB (rysunek tkdesk2.jpg).[7]

Karol Grela, 24 stycznia 2000


Odnośniki

1. http://www.kde.org

2. http://www.gnome.org

3. http://people.mainz.netsurf.de/~bolik/tkdesk/

4. http://www.scriptics.com

http://www.tcltk.com/
http://www.neosoft.com/tcl
http://www.sco.com/Technology/tcl/Tcl.html
http://www.cetus-links.org/oo_tcl_tk.html
http://www.scriptics.com/scripting/syntax.html

5. http://www.tcltk.com/itcl/

6. TkStep jest modyfikacją Tk, wyświetlającą kontrolki (widgets) w stylu znanym z systemu NeXT (por. ilustracje w poniższym artykule). Więcej informacji - http://touchwood.ee.uts.edu.au/TkSTEP/. Aby skompilować TkDeska z bibliotekami TkStep należy użyć opcji ./configure --enable-tkstep.

7. na płytce CDROM dołączonej do tego numeru magazynu znajdują się dodatki do pakietu TkDesk: dodatkowe ikony, pliki z moją konfiguracją, przykładowe skrypty powłoki, wykorzystujące TkDesk API, fragmenty konfiguracji menadzera okien AfterSTEP integrujące z nim program i inne (spis zawartości). Dodatkowo dodano dwa kolorowe zdjęcia ekranu (.jpg) pokazujace wszystkie elementy pakietu i jego współpracę z innymi programami.


Podpisy do ilustracji i tabel

Tabela 1. Wersje Tcl/Tk/itcl wymagane do kompilacji TkDesk v. 1.2

Rysunek 1. Pasek aplikacji

Rysunek 2. Okno "File Browser" menadżera plików

Rysunek 3. Okno "File List"