Szybki zrzut ekranu we Fluxboksie

From FluxboxPL.org

Tworzenie zrzutów ekranu jest jedną z najczęściej wykonywanych czynności. W końcu każdy chce się pochwalić efektem krótszej bądź dłuższej chwili spędzonej na dostosowywaniu pulpitu do swoich wymagań estetycznych bądź praktycznych. Nic więc dziwnego, że nawet na klawiaturze zagościł specjalnie do tego przygotowany klawisz - PrintScreen SysRq. W większości przypadków wystarczy go wcisnąć, by wykonać zrzut ekranu. Poniższy poradnik opisuje, jak cieszyć się tą funkcjonalnością w naszym ulubionym, minimalistycznym menadżerze okien - Fluxboksie.

Na dobry początek należy zapoznać się z tworzeniem zrzutów ekranu w Linuksie. Oczywiście służą do tego odpowiednie programy - import, scrot a nawet GIMP ma taką opcję. W poniższym poradniku użyję programu import, gdyż zapewnia najlepszą jakość obrazu wynikowego. Program import wchodzi w skład pakietu imagemagick, któy oczywiście musisz wcześniej zainstalować (o ile jeszcze go nie masz).

import posiada szereg opcji, które pozwalają uzyskać oczekiwany efekt. Wszystkie z nich można przeczytać po wpisaniu polecenia

import -help

Jest tego wiele, w dodatku program może wydawać się nieefektywny, gdyż wywołuje się go poprzez wpisanie dość długiego ciągu znaków. Na szczęście nie będzie konieczne robienie tego za każdym razem, gdyż użyjemy jednej z wielu funkcji Fluxboksa - możliwości przypisywania dowolnych akcji do dowolnego skrótu klawiszowego.

Wpierw należy zdobyć kod klawisza, którym będzie tworzony zrzut ekranu. Służy do tego bardzo malutki programik, który być może będziesz musiał(a) wcześniej zainstalować - xev.

Po jego uruchomieniu powinieneś(-naś) zobaczyć małe okno z białym tłem i czarną obwódką kwadratu. Wciśnij odpowiedni klawisz, a zobaczysz podobny do tego tekst w terminalu, w którym został uruchomiony program:

KeyRelease event, serial 32, synthetic NO, window 0xe00001,
    root 0x66, subw 0x0, time 3239061966, (-122,149), root:(361,170),
    state 0x0, keycode 111 (keysym 0xff61, Print), same_screen YES,
    XLookupString gives 0 bytes: 
    XFilterEvent returns: False

Najbardziej interesuje nas 3 linijka, w której znajdziesz kod klawisza (może być potrzeby później) oraz jego nazwę (po przecinku w nawiasie), o ile oczywiście taką ma. Zapamiętaj ją dobrze, gdyż już za chwilę się przyda.

Otwórz plik ~/.fluxbox/keys w swoim ulubionym edytorze i dopisz do niego odpowiednio zmodyfikowaną (o jej modyfikacjach przeczytasz poniżej) linijkę

None Print :ExecCommand import -quality 100 -w root -pause 1 /home/user/scieżka/do/zrzutów/$(date +%d%m%Y).jpg

Wpierw kilka słów o konstrukcji pliku keys. Pierwszy ciąg znaków to modyfikator - np. klawisz ctrl to Mod1. My nie będziemy z niego korzystać, więc wpisujemy None.
Następnie umieszczone są klawisze wywołujące akcję. Posługujemy się w tym miejscu nazwą klawisza (którą można dowolnie zmieniać, o czym napiszę poniżej). Można wywoływać akcję po wciśnięciu kilku klawiszy na raz - wtedy należy oddzielić je spacją.
Następnie, od dwukropka, zaczyna się polecenie, które ma wykonać Fluxbox. W tym wypadku jest to "wykonaj polecenie", ale może też być np. :Minimize (minimalizacja aktywnego okna) czy :NextWorkspace (następny wirtualny pulpit).
Ponieważ Fluxbox ma wykonać polecenie, ono również musi zostać zawarte w tej linijce. Może zawierać dowolnie wiele znaków, w tym spacje. Może również być ścieżką do programu lub skryptu.

Ponieważ

import -quality 100 -w root -pause 1 /home/user/scieżka/do/zrzutów/$(date +%d%m%Y).jpg

Może brzmieć przynajmniej enigmatycznie, już śpieszę z wyjaśnieniem.
Słowo import chyba nie wymaga tłumaczenia.
Flaga -quality odpowiada za jakość obrazu wyjściowego. Musi być za nią liczba z przedziału 1-100. Im wyższa liczba, tym lepsza jakość, ale również plik będzie zajmował więcej miejsca.
Flaga -w odpowiada za przekazanie programowi, obraz z którego okna ma zapisać do pliku. Domyślnie jest to aktywne okno, jednak root odpowiada za zapisanie zrzutu całego wyświetlanego obrazu.
-pause x odpowiada za przedział czasowy (w sekundach), po upłynięciu którego program wykona swe działanie. x musi oczywiście zostać zastąpione liczbą. Można usunąć tę opcję, dzięki czemu zrzut zostanie wykonany natychmiast.
Wreszcie ostatnim elementem jest miejsce, w którym ma zostać zapisany obraz. Tutaj równiez posłużyłem się małą sztuczką, której należy się kilka słów wyjaśnienia.

Zapis $( ) wywodzi się z powłoki bash i umieszcza się w nim polecenie, którego wynik zostanie wyświetlony w miejsce nawiasów.
Program date służy do pokazywania aktualnej daty (lub jej zmiany).
Jako flagę tego programu można użyć formatowania daty poprzedzonego plusem (+). Więcej informacji na ten temat znajdziesz po wpisaniu

man strftime

W powyższym przykładzie efektem będzie plik ddmmyyyy.jpg, gdzie dd to dwie cyfry określające dzień miesiąca, mm odpowiada za numer miesiąca w roku, który z kolei zapisany będzie w miejsce yyyy. Nic nie stoi na przeszkodzie, by zapis ten dowolnie modyfikować. Np.

$(date +$%d.%m.%Y-%H:%M)

Da w efekcie dzień, miesiąc i rok oddzielone od siebie kropkami, a po myślniku znajdzie się godzina i minuta wykonania zrzutu ekranu. Będzie to przydatne zwłaszcza, gdy zrzuty ekranu wykonuje się często.

Może się zdarzyć (aczkolwiek nie powinno), że Fluxbox nie reaguje na nazwę Print lub klawisz ten (bądź dowolny inny, którego chcesz użyć) nie ma przypisanej nazwy. Można to zmienić używając programu xmodmap.

Dopisz do swojego pliku .bash_profile linijkę

xmodmap -e "keycode 111=Print" &

Flaga -e odpowiada za wyrażenia, które zostaną przedefiniowane. Następnie znajduje się keycode x gdzie x to oczywiście numerek, który wcześniej podał xev. Po znaku równości (=) znajduje się nazwa, której będziemy od tej pory użwyać dla tego klawisza. Może być dowolna, jednak należy pamiętać, jakieś się użyło, gdyż potem będzie użyta w pliku keys.
Wreszcie et (&) odpowiada za wykonanie zadania w tle.
Cała linia została umieszczona w pliku .bash_profile, którego treść jest wykonywana przy każdym zalogowaniu się użytkownika.



Podziękowania dla Robola za inspirację ;) .