Zenity
Z Fedora Wiki
Spis treści |
W tym celu należy utworzyć plik /home/użytkownik/.devilspie/zenity.ds o zawartości:
(if (and (is (window_class) "Zenity") (is (application_name) "zenity") ) (begin (focus) (pin ) (above) ) )i z okienka poleceń (Alt+F2) lub terminala wydać komendę:
devilspie -d
Najlepiej dodać tę komendę do autostartu. Możliwość programu są ogromne, więc jeśli chcemy możemy dostosować ustawienia dla każdego okienka zenity z osobna.
sudo + zenity
Sudo pozwala łatwo wykonać program z prawami roota, ale wymaga konsoli do wpisania hasła. Jedynym obejściem wydaje się ustawienie "sudo bez hasła", co jednak jest głupotą od strony bezpieczeństwa. Okazuje się, że sudo może czytać hasło ze standardowego wejścia dzięki opcji -S(przez su - tego efektu nie uzyskasz) podane np. z okienka dialogowego zenity.
Najpierw potrzebujemy przestawić jeszcze jeden parametr sudo poza podstawową konfiguracją. Zaloguj się na konto roota i wpisz
visudo
a następnie zahaszuj parametr "wymagaj konsoli"
# Defaults requiretty
Teraz już wystarczy prosty skrypt.
#!/bin/bash # zsudo - sudo z okienkiem zenity o hasło # run: zsudo polecenie zenity --title="zenity sudo" --text="Podaj hasło dla sudo:" \ --entry --entry-text "****" --hide-text \ |sudo -S "$@"
Nazwij go zsudo, nadaj prawa wykonywania chmod +x zsudo i przenieś do /usr/local/bin/zsudo.
Teraz już możesz bez terminala nacisnąć Alt+F2 i wpisać np zsudo yumex
sudo + zenity + nautilus-script
Tak przygotowany skrypt zsudo można wykorzystać do otwierania plików lub katalogów niczym program consolehelper. Jeśli masz GNOME możesz umieszczając skrypty w katalogu
$HOME/.gnome2/nautilus-scripts/
dodawać polecenia do menu kontekstowego pod prawym klawiszem myszy.
Utwórz w powyższym katalogu skrypt o nazwie zsudo-open i wypełnij następująco:
#!/bin/bash # do otwierania PLIKU cmd="gedit $NAUTILUS_SCRIPT_SELECTED_FILE_PATHS" # do otwierania KATALOGU nautilusem #cmd="nautilus ${NAUTILUS_SCRIPT_CURRENT_URI##file://}" # do otwierania KATALOGU w terminalu #cmd="gnome-terminal ${NAUTILUS_SCRIPT_CURRENT_URI##file://}" # DEBUG - odznacz by zobaczyć co tak naprawdę zawiera parametr $cmd # echo "$cmd" | zenity --text-info zsudo "$cmd"
Jak widzisz skrypt zawiera kilka przykładów polecenia, byś mógł dopasować do własnych potrzeb. Zawarłem też prostą opcję DEBUG.
zenity + cron
Wykonywaniem wszelkich cyklicznych operacji zajmuje się w systemie cron lub anacron (upewnij się, że ta usługa jest włączona). O jego obsłudze możesz poczytać w google, ja polecam Ci użyć graficznego programu gnome-schedule dostępnego w repo.
Problem pojawia się często przy uruchamianiu skryptu z poziomu cron. Należy ustawić dwie zmienne: $DISPLAY oraz $LANG. Pierwsza określa "gdzie" ma się wyświetlić okienko, druga kodowanie, które może powodować błędy w zenity. Inną ważną sprawą jest podawanie pełnych ścieżek do poleceń, bądź ustawienie zmiennej $PATH bezpośrednio w cron.
Wartości tych zmiennych możesz sprawdzić wpisując w konsoli
echo $DISPLAY
oraz
echo $LANG
a w skrypcie ustawić ich eksport. Przykładowy skrypt budzik
#!/bin/bash # budzik - powiadomienie z cron export DISPLAY=:0.0 export LANG=pl_PL.UTF-8 /usr/bin/zenity --error --text "Czas na przerwę \n\n Ale to już!"
zenity + ikona na panelu
Komunikaty uruchamiane w cron mogą pojawiać się subtelniej jako ikonka "obok zegarka" na panelu. Przykładowy skrypt (źródło) sprawdza procentową zajętość wybranej partycji i w razie przekroczenia parametru $THRESHOLD powiadamia nas o tym.#!/bin/bash # Komunikat o przekroczeniu ustalonej zajętość dysku # źródło: http://www.cyberciti.biz/faq/mac-osx-unix-get-an-alert-when-my-disk-is-full/ export DISPLAY=:0.0 export LANG=pl_PL.UTF-8 # punkt montowania partycji FS="/home" # próg zajętości w % THRESHOLD=80 OUTPUT=($(LC_ALL=C df -P ${FS})) CURRENT=$(echo ${OUTPUT[11]} | sed 's/%//') [ $CURRENT -gt $THRESHOLD ] && /usr/bin/zenity \ --notification --window-icon "warning" \ --text "Partycja $FS zajęta w $CURRENT% Usuń kilka plików zanim zrobi się za ciasno."
Jeśli chcemy mieć tylko 1 kopię danego programu możemy użyć do jego uruchomienia prostego triku sprawdzającego istnienie PID:
ps -C myprogram || { myprogram & }
PID skryptu można zobaczyć z poziomu samego skryptu wywołując w nim polecenie
echo $$
Istnieje w bash polecenie trap pozwalające przechwycić dowolny sygnał w skrypcie i stosownie go obsłużyć (przypomina obsługę przerwań). Lista sygnałów dostępna jest w pliku signal.h lub po wydaniu polecenia:
trap -l
a szczegóły
man 7 signal
nam potrzebny jest sygnał zakończenia. Bash dodaje pseudo sygnał EXIT, który jest równoważny do każdego prawdziwego sygnału zakończenia skryptu.
Cały skrypt dla crona ostatecznie może wyglądać tak: -->
zenity + gxmessage
Od wydania F12 można w repozytorium znaleźć aplikację gxmessage (w zamyśle stare xmessage z interfejsem GTK). Posiada tylko jeden rodzaj okienek, ale z większą ilością przycisków. Można użyć przy łataniu niedostatków zenity. Jako przykład czytnik stron man:-->- UWAGA: okienko gxmessage nie radzi sobie z wiadomością przekraczającą kilka tysięcy linii, dlatego zadziała dla krótkich stron man, ale próba odczytania strony np. bash zakończy się błędem.
Nautilus-Script: Edytuj dowiązanie
Skrypt nautilusa do edycji linku symbolicznego. Zazwyczaj dowiązanie można edytować jedynie z poziomu MC lub utworzyć link na nowo. Skrypt należy umieścić w katalogu /home/user/.gnome2/nautilus-scripts
Nautilus "przenieś do..." i "kopiuj do..." z paskiem postępu
Nautilusowi (GNOME) brakuje w menu pod prawym klawiszem myszy opcji typu oraz
W sieci można znaleźć różne wersje tego skryptu. Oba skrypty są niemal identyczne oraz:
- można je od razu użyć jako
nautilus scriptlubnautilus actions - wyświetlają pulsujący pasek postępu z nazwą aktualnie kopiowanego/przenoszonego obiektu
- wychwytują próbę nadpisania już istniejącego pliku/katalogu
- można zaznaczyć wiele obiektów na raz
- nie mają problemu ze spacjami w nazwach
Jak użyć "nautilus script" zostało opisane wyżej, natomiast by stworzyć "nautilus actions" należy najpierw zainstalować:
su -c'yum install nautilus-actions'
Aplikacja dostępna jest w menu System > Preferencje .... Jako parametr akcji wystarczy %M dla tych tych skryptów.
Demon do aktualizacji systemu
Pomimo, że istnieje tego typu oprogramowanie w Fedorze, to w toku kolejnych usprawnień powiadomień o aktualizacjach zrobiłem całkiem zgrabny skrypt do aktualizacji. Właściwie wystarczy ustawić sobie ładną ikonkę w skrypcie (inaczej zenity ustawi jakąś domyślną). Skrypt dodajemy na końcu pliku /etc/rc.d/rc.local z ptaszkiem & (WAŻNE!) w postaci:
/usr/local/sbin/yum-zupdate &
domyślnie wykonywane jest polecenie yum check-update -q co pół godziny. Więcej co i jak przestawić w samym skrypcie
Zachęcam do dodawania własnych rozwiązań z zenity
