11:47
Jak stworzyć motyw GDM?
GDM jest popularnym managerem logowania opartym na GTK używany głównie przez użytkowników środowiska Gnome. Jedną z jego zalet jest szeroki wybór tematów graficznych, które można znaleźć w internecie. Jednak użytkownicy Linuksa często chcą się wyróżniać również wśród swojej społeczności i chcą stworzyć swój własny motyw dla GDM.
Najprostszym sposobem jest zmodyfikowanie już istniejącego tematu, lub przeglądnięcie struktury takiego i stworzenie na tej podstawie własnego. Spróbuję tutaj przedstawić jak zabrać się za stworzenie własnego tematy GDM.
Najważniejsza rzeczą jest tutaj chyba tło, dlatego powinniśmy zacząć od znalezienia/przygotowania jakiegoś ładnego obrazka – co najmniej o rozmiarach naszego pulpitu. Następnie utwórzmy sobie katalog, a w nim plik GdmGreeterTheme.desktop, który będzie zawierał wstępne informacje o motywie. Oto jego zawartość:
[GdmGreeterTheme] #opis tematu będzie w pliku XML Greeter=oceans.xml #nazwa motywu Name=Oceans #Opis Description=Ocean GDM Theme by tom000.info #Informacje o autorze Author=Tomasz 'tom000' Chudyk #Screenshoot prezentujacy gotowy temat Screenshot=screen.jpg
Kolejnym krokiem jest utworzenie pliku opisującego położenie elementów w temacie. W naszym wypadku plik nazywa się oceans.xml. Teraz zajmijmy się jego utworzeniem.
<?xml version="1.0"?> <!DOCTYPE greeter SYSTEM "greeter.dtd"> <greeter> <!-- Tutaj będzie opis elementów --> </greeter>
Podstawowe typy elementów to pixmap, rect i label. A oto lista systemowych tagów odpowiadająca za utworzenie istotnych elementów tematu:
<item type="rect" id="language_button" button="true"> <item type="rect" id="session_button" button="true"> <item type="rect" id="system_button" button="true"> <item type="rect" id="disconnect_button" button="true"> <item type="label" id="clock"> <item type="rect" id="caps-lock-warning"> <item type="rect" id="timed-rect"> <item type="label" id="timed-label"> <item type="label" id="pam-prompt"> <item type="entry" id="user-pw-entry"> <item type="label" id="pam-message"> <item type="label" id="pam-error">
Przejdźmy teraz do ustawienia tła dla naszego tematu. W tym celu dodajemy element do pliku XML:
<item type="pixmap"> <normal file="image.jpg" /> <pos x="0" y="0" width="100%" height="0" /> </item>
Kolejnym i zarazem niezbędnym elementem jest obszar do wpisywania nazwy użytkownika i hasła:
<item type="entry" id="user-pw-entry"> <pos x="5" y="35" width="150" height="20"/> </item>
Aby łatwo go wypozycjonować wraz z etykietami, możemy użyć elementu rect i od razu dorzucić etykietę:
<item type="rect"> <pos x="30%" y="70%" width="120" height="100" /> <fixed> <item type="entry" id="user-pw-entry"> <pos x="5" y="35" width="150" height="20"/> </item> <item type="label" id="pam-prompt"> <pos x="5" y="10" /> <normal color="#111111" font="Sans 10" /> <text>Login:</text> </item> </fixed> </item>
Tworzenie pozostałych elementów wygląda podobnie. Warto tutaj pamiętać o elementach takich jak pam-message, pam-error, session_button i system_button.
Podczas tworzenia ważne jest aby od razu testować wprowadzane zmiany. Przyda się do tego program gdmthemetester dostarczony razem z GDM. Aby nasz temat był dostępny dla GDM należy go skopiować do folderu z tematami. Zwykle jest to /usr/share/gdm/themes/.
Aby przetestować wygląd tematu posłużymy się poleceniem:
gdmthemetester flexi ocean
gdzie, ocean to nazwa tematu. W wyniku polecenia otworzy nam się okno GDM o ograniczonych możliwościach, ale na tyle wystarczających, bo zobaczyć, czy każdy element znajduje się w oczekiwanym miejscu.
Aby ostatecznie przetestować i wprowadzić temat, bez potrzeby wylogowania się możemy użyć polecenia:
gdmflexiserver --xnest
Na koniec, aby ułatwić dystrybucje wystarczy utworzyć z folderu z tematem archiwum:
tar czvf Ocean.tar.gz Ocean/
… i zamieścić go w internecie, aby pochwalić się innym.
Podaje na koniec jeszcze kod XML tematu utworzonego przeze mnie:
<?xml version="1.0"?> <!DOCTYPE greeter SYSTEM "greeter.dtd"> <greeter> <item type="pixmap"> <normal file="Oceans_of_Time_Wallpaper_by_rissol.png"/> <pos x="0" y="0" width="100%" height="100%"/> </item> <item type="rect"> <pos x="30%" y="70%" width="120" height="100" /> <fixed> <item type="entry" id="user-pw-entry"> <pos x="5" y="35" width="150" height="20"/> </item> <item type="label" id="pam-prompt"> <pos x="5" y="10" /> <normal color="#111111" font="Sans 10" /> <text>Login:</text> </item> <item type="label" id="pam-error"> <pos x="5" y="80" /> <normal color="#ffff00" font="Sans 10" /> <text/> </item> <item type="label" id="pam-message"> <pos x="5" y="60" /> <normal color="#ffff00" font="Sans 10" /> <text/> </item> </fixed> </item> <item type="label" id="clock"> <pos x="-20" y="-20" anchor="e"/> <normal color="#111111" font="Sans 12"/> <text>%c</text> </item> <item type="rect" id="session_button" button="true"> <pos y="-20" anchor="w" width="box" height="box"/> <box orientation="horizontal" spacing="10" xpadding="10"> <item type="label"> <normal color="#666666" font="Sans 12"/> <prelight color="#ffff00" font="Sans 12"/> <active color="#ff0000" font="Sans 12"/> <text>Session</text> </item> </box> </item> <item type="rect" id="system_button" button="true"> <pos y="-20" anchor="w" x="100" width="box" height="box"/> <box orientation="horizontal" spacing="10" xpadding="10"> <item type="label"> <normal color="#666666" font="Sans 12"/> <prelight color="#ffff00" font="Sans 12"/> <active color="#ff0000" font="Sans 12"/> <text>System</text> </item> </box> </item> </greeter>
Wpisy na blogu 
Dodaj komentarz