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>

Dodaj komentarz:

English
Nazywam się Tomasz Chudyk i witam na mojej stronie. Jestem studentem piątego roku informatyki. Moje zainteresowania krążą głównie wokół open-source, Linuksa i technologi internetowych.
