Jak wspominałem w artykule o rozmieszczaniu okien przy pomocy Compiza, od dość dawna zbierałem się do wypróbowania jakiegoś kafelkowego (chyba tak trzeba tłumaczyć tiling) menedżera okien, tj. programu, który sam dobiera rozmiar i położenie okien - pilnując, by się nie nakładały i efektywnie wykorzystywały przestrzeń. Odstraszała mnie jednak siermiężność dostępnych aplikacji - choć bardzo wiele operacji wykonuję z konsoli, to jednak cenię sobie możliwość kliknięcia ikonki na pasku czy uruchomienia czegoś z menu.
Parę miesięcy temu odkryłem ciekawą próbę kompromisu - Bluetile. Jest to odgałęzienie xmonad dostosowane do pracy w środowisku Gnome. Bluetile zarządza przestrzenią roboczą ekranu ale pozostawia dostępny górny i dolny panel Gnome wraz z menu, ikonami czy apletami, dodaje też do nich własny pasek z przyciskami dla najważniejszych operacji.
Używałem Bluetile łącznie - w dwóch podejściach - przez paręnaście dni. Na trwałą przesiadkę się nie zdecydowałem ale doświadczenie uważam za interesujące i osoby szukające komfortu pracy na desktopie zachęcam do podobnego eksperymentu. Coś w tym jest.
Instalacja
Bluetile jeszcze nie jest w Ubuntu spakietowane ale
instalacja nie jest trudna. Odbywa się za pomocą Cabal Install,
czyli haskellowego odpowiednika narzędzi takich jak perlowy cpan
czy
pythonowy easy_install
(xmonad i Bluetile są napisane w
Haskellu) . A wcześniej wymaga poinstalowania grupy standardowych
pakietów.
Poniższą procedurę testowałem zarówno w Ubuntu Karmic, jak Ubuntu Lucid. Bez większych zmian powinna zadziałać także w Debianie.
Instalacja potrzebnych pakietów
Zbiór potrzebnych narzędzi i bibliotek zebrałem robiąc:
$ sudo apt-get install build-essential checkinstall \ libghc6-network-dev libghc6-parsec-dev libghc6-mtl-dev \ libghc6-zlib-dev libghc6-glade-dev libghc6-gtk-dev \ libghc6-gtk-dev libghc6-time-dev \ ghc6
W przeciwieństwie do np. tego opisu nie było konieczne ręczne instalowanie
gtk2hs
, zupełnie wystarczyła wersja z pakietulibghc6-gtk-dev
.
Instalacja Cabala
W Ubuntu Lucid całkowicie wystarczyło
$ sudo apt-get install cabal-install
i już.
W Ubuntu Karmic pobierałem
z tej strony
plik cabal-install
(obecnie najnowsza jest
wersja 0.8.2):
$ wget http://haskell.org/cabal/release/cabal-install-0.8.2/cabal-install-0.8.2.tar.gz $ tar xzvf cabal-install-0.8.2.tar $ cd cabal-install-0.8.2/
i instalowałem narzędzie systemowo (--global
instaluje systemowo, --user
lokalnie):
$ sudo sh bootstrap.sh --global
co owocowało dość długą listą pobieranych i kompilowanych pakietów.
Trafiłem przy tym na kilka błędów wynikających z brakujących bibliotek, np. taki:
Setup: At least the following dependencies are missing: time ==1.1.*
wynikał z braku biblioteki
time
(którą, jak nie było się trudno domyślić, znalazłem w pakiecielibghc6-time-dev
). Po doinstalowaniu braków powtarzałembootstrap
(który zachowywał się inteligentnie, tj. wykorzystywał już pobrane pakiety i wznawiał pracę od miejsca, w którym przerwał działanie).
Konfiguracja Cabala
Po powyższym zrobiłem:
$ cabal update
Co istotne: bez sudo
. W takiej wersji Cabal instaluje biblioteki i
programy w $HOME/.cabal
. Pierwszy update trwał kilkadziesiąt sekund.
Następnie edytowałem plik ~/.cabal/config
(stworzony przez cabal
update
) zmieniając wiersz
-- symlink-bindir:
na
symlink-bindir: /home/marcin/bin
Dzięki temu cabal
tworzył dodatkowe symlinki do instalowanych
programów w ~/bin
(i nie musiałem dorzucać ~/.cabal/bin
do ścieżki).
Instalacja Bluetile
Ostatnim krokiem była instalacja samego Bluetile. Po prostu:
$ cabal install bluetile
Efektem była dość długa kompilacja:
Resolving dependencies... Downloading X11-1.5.0.0... Configuring X11-1.5.0.0... configure: WARNING: unrecognized options: --with-compiler checking for gcc... gcc checking for C compiler default output file name... a.out checking whether the C compiler works... yes checking whether we are cross compiling... no (...) Preprocessing library X11-1.5.0.0... Building X11-1.5.0.0... [ 1 of 25] Compiling Graphics.X11.Xlib.Types ( dist/build/Graphics/X11/Xlib/Types.hs, dist/build/Graphics/X11/Xlib/Types.o ) [ 2 of 25] Compiling Graphics.X11.Types ( dist/build/Graphics/X11/Types.hs, dist/build/Graphics/X11/Types.o ) [ 3 of 25] Compiling Graphics.X11.Xlib.Display ( Graphics/X11/Xlib/Display.hs, dist/build/Graphics/X11/Xlib/Display.o ) [ 4 of 25] Compiling Graphics.X11.Xlib.Event ( dist/build/Graphics/X11/Xlib/Event.hs, dist/build/Graphics/X11/Xlib/Event.o ) [ 5 of 25] Compiling Graphics.X11.Xlib.Screen ( Graphics/X11/Xlib/Screen.hs, dist/build/Graphics/X11/Xlib/Screen.o ) (...) [1 of 1] Compiling Main ( bluetilemockwin/BluetileMockWin.hs, dist/build/bluetilemockwin/bluetilemockwin-tmp/Main.o ) Linking dist/build/bluetilemockwin/bluetilemockwin ... [1 of 3] Compiling Utils ( bluetilegreet/Utils.hs, dist/build/bluetilegreet/bluetilegreet-tmp/Utils.o ) [2 of 3] Compiling Paths_bluetile ( dist/build/autogen/Paths_bluetile.hs, dist/build/bluetilegreet/bluetilegreet-tmp/Paths_bluetile.o ) [3 of 3] Compiling Main ( bluetilegreet/BluetileGreet.hs, dist/build/bluetilegreet/bluetilegreet-tmp/Main.o ) Linking dist/build/bluetilegreet/bluetilegreet ... Installing executable(s) in /home/marcin/.cabal/bin
I potrzebne programy się pojawiły:
$ ls ~/.cabal/bin/ bluetile xmonad $ ls ~/.cabal/libexec bluetiledock bluetilegreet bluetilemockwin
Przy teście na Karmic, z ręcznie instalowanym Cabalem, wszystkie te programy wylądowały w
.cabal/bin
. Nie jestem pewien z czego wynika ta różnica, użytkowo nie była istotna.
Uruchomienie
Bluetile uruchamiłem po prostu robiąc:
$ ./bin/bluetile &
Program startując wyłączył Compiza i zastępił go w roli zarządcy okien (między innymi oznaczało to inne, niestety brzydsze, paski tytułowe a także pożegnanie się z compizowymi skrótami i efektami), wyświetlił własny pasek z lewej strony ekranu i zaprezentował okno powitalne. Wszystkie panele Gnome pozostały aktywne, aktywne okna zostały przeniesione na jeden - pierwszy - desktop.
Domyślnie nie było żadnego tilingu, okna były rozmieszczone swobodnie.
Kliknąłem D na pasku Bluetile i zostały ułożone według wizji tego menedżera okien.
Używanie
Bluetile obsługuje cztery różne wersje układania okien, ustawiane niezależnie dla każdego z wirtualnych desktopów:
-
tryb
A
to po prostu brak kafelkowania, okna mogą się nakładać, ich położenie jest regulowane myszą (tryb przydatny zwłaszcza przy używaniu programów które - jak Gimp z jego mrowiem pomocniczych okienek - szczególnie źle reagują na narzucany układ), -
tryb
S
to szerokie okno wypełniające górną połówkę ekranu a pozostałe cięte w coraz węższe pionowe paski w dolnej połówce (przynajmniej na moim LCD - wariant mało sensowny),
- tryb
D
to główne okno z lewej strony ekranu a pozostałe pionowo układane z prawej strony (głównie tego trybu używałem),
- tryb
F
to główne okno wypełniające cały ekran (alternatywa dla maksymalizacji, poręczna bo później po powrocie do trybu D przywrócany jest poprzedni układ okien).
Do przełączania wykorzystywałem głównie przyciski A
, S
, D
i F
z pasku Bluetile (intuicyjne bo opatrzone ikonkami ilustrującymi
wybierany układ okien), alternatywą są skróty Win-a, Win-s, Win-d i Win-f (z
których Win-s mi nie działało, przechwytywane przez Gnome, które
wyświetlało okienko wylogowywania).
Oczywiście natychmiast pojawiała się potrzeba ustalania które okno jest główne i w jakiej kolejności wszystkie są ułożone. Zalecaną metodą są skróty klawiszowe. Kluczowym jest Win-Shift-Spacja, który ustawia bieżące aktywne okno jako główne (czyli to z niego robi to zajmujące pół ekranu). Win-Shift-j i Win-Shift-k działają skromniej, przesuwają bieżące okno o jedną pozycję w dół / w górę hierarchii. Działa też ciąganie myszą (po pociągnięciu paska okienka w jakiś rejon ekranu owo okno jest zamieniane z uprzednio tam leżącym).
Win-O otwiera menu pozwalające przerzucić okno na inny wirtualny desktop (odpowiednią opcję wybiera się strzałkami i zatwierdza Enterem).
Przycisk +1
z paska (albo Win-,) pozwala zwiększyć liczbę okien w
głównej części ekranu, np. w trybie D
po jednokrotnym jego
kliknięciu z lewej strony pojawiają się dwa okna, po kolejnym już
trzy), przycisk -1
(albo Win-.) odwraca tą operację.
Układ po jednokrotnym kliknięciu +1
.
Skróty klawiszowe Win-h i Win-l pozwalają zmniejszać lub zwiększać główny obszar (każde wciśnięcie Win-h zwęża/zmniejsza główne okno, Win-l je poszerza/powiększa), a Win-i i Win-u podobnie powiększają/zmniejszają aktywne okno pomocnicze w ramach jego połówki desktopu.
Tu zwęziłem główne okno (kilka Win-h) a także trochę powiększyłem czarny terminal (Win-i).
Wreszcie, Win-spacja przenosi focus do głównego okna a Win-j i Win-k do poprzedniego/następnego. Alternatywnie można oczywiście klikać odpowiednie okienka myszą.
Pełny wykaz skrótów klawiszowych jest na stronie Bluetile. Niestety nie da się ich zmieniać (tj. da się ale trzeba edytować kod haskellowy w ramach źródeł, co samo w sobie trudne nie jest ale komplikuje instalację).
Integracja z Gnome
Jak widać na powyższych obrazkach, pod Bluetile nadal działają panele Gnome wraz z appletami. Można korzystać z ikonek i menu, minimalizować okna, działa też większość standardowych skrótów klawiszowych (choćby Alt-F4 czy Alt-F2).
Jedyną istotną dla mnie rzeczą, która nie działa, okazał się podgląd wirtualnych desktopów na dolnym pasku. Co prawda pokazywał poprawnie okna na bieżącym desktopie i pozwalał przechodzić na inny desktop przez kliknięcie odpowiedniej kratki, ale w ogóle nie pokazywał zawartości innych desktopów (wszystkie kratki poza bieżącą były zawsze puste).
Zważywszy, że Bluetile prowokuje używanie wielu desktopów (4 okna per desktop to praktyczne maksimum), niesłychanie utrudniało to zorientowanie się gdzie co mam, dużo czasu traciłem na przeskakiwanie przez kolejne desktopy w poszukiwaniu potrzebnego okna.
Trudne życie z kafelkami
Już pierwsze godziny pracy z kafelkami pokazały mi, jak wiele okien otwieram i jak chaotycznie niekiedy nimi zarządzam. Pod Compizem czy Metacity te osiem niepotrzebnych terminali czy pięć okien nautilusa leży pod spodem nie przeszkadzając, pod Bluetile z miejsca przyczyniały się do tłoku na ekranie. Zacząłem nabierać niechęci do uruchamiania nowych aplikacji, zamiast otworzyć terminal czy edytor wolałem szukać jakiegoś już działającego (i ułożonego) okna. Zauważalny koszt mentalny, którego brak wysiłku na zmienianie rozmiaru okien jednak nie równoważył (pewnie bardziej doceniłbym automatyczny layout gdybym ćwiczył go zanim przywykłem do skrótów automatycznego rozmieszczania okien w Compizie).
Straszliwie brakowało mi trybu focus follows mouse z którego wiernie korzystam od parunastu lat, wciąż byłem zdziwiony że pierwsze kliknięcie w nieaktywne okno nie wywołuje akcji/przycisku/menu a jedynie zmienia focus.
Do dziś nie odkryłem zasady przydzielania miejsca nowo uruchamianym programom, to gdzie trafiają wydaje mi się chaotyczne.
Nie potrafiłem się przestawić na skakanie po desktopach przy pomocy Win-1, Win-2, Win-3, ... (dla mnie od zawsze służą do tego Ctrl-F1, Ctrl-F2, itd), do tego, jak już pisałem wyżej, miałem trudności z pamiętaniem które okno jest na którym desktopie.
Miałem też problemy z layoutem A (swobodnie poukładane okna). Przesuwanie okienek i zmienianie ich rozmiaru okazało się nieergonomiczne, odpowiednie aktywne paski są wąskie i trudne do złapania, do tego chyba w ogóle nie ma prawego dolnego rogu okna (tj. możliwości regulacji obu wymiarów jednym przeciąganiem). Bardzo szybko całkowicie straciłem ochotę na pracę w tym trybie.
Okazyjne anomalie takie jak okienko dialogowe na pół ekranu troszkę psuły wrażenie ale szczególnie mi nie przeszkadzały, za to bardzo irytowały sytuacje w których jakieś okno uparcie było trochę za wąskie (np. masa serwisów webowych, z youtube na czele, na połówce ekranu się nie mieści i wymaga horyzontalnego scrollowania lub korygowania layoutu).
Zdarzały się też problemy z powiadamianiem okien o ich faktycznym rozmiarze, chyba najczęściej miewał je Emacs.
Wreszcie Bluetile niestety jest po prostu brzydkie, te płaskie szare paski robiły na mnie zniechęcające wrażenie.
Z wrażeń pozytywnych: automatyczny układ szczególnie dobrze sprawdzał się przy pracy polegajacej na otwieraniu i zamykaniu wielu terminali.
Wyłączanie
Bluetile można wyłączyć w każdej chwili, służy do tego przycisk Q na pasku. Z zaproponowanych opcji wybieramy Quit & Start Metacity a potem znowu jest normalnie.
Niestety nie ma opcji by od razu przejść do compiza, trzeba przeklikiwać preferencje albo wydać z linii komend polecenie:
$ compiz --replace
Zdarzało mi się, że po zakończeniu Bluetile znikały paski Gnome. W takiej sytuacji pomagało
$ killall gnome-panel $ gnome-panel
Podsumowanie
Rozmaitych trudności napotkałem zbyt wiele, by przy Bluetile pozostać, ale doświadczenie uważam za ciekawe. Gdyby tak ktoś dorobił podobną funkcjonalność jako moduł do Compiza...