tom000 - Personal Website - Strona główna
decor1 Wpisy na blogu decor2
28.062009
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> 

 

Trackback: http://tom000.info/blog/trackback/jak_stworzyc_motyw_gdm.html

Dodaj komentarz

Opcje

= (wpisz wynik działania z obrazka)
Copyleft (C) tom000.info 2004-2012. Some rights reserved.