decoration Wpisy na blogu decoration

decoration
decoration
28.06 2009
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:

Nick:
URL:
Komentarz:
Wynik dzialania z obrazka =

Powrót



Copyleft (C) tom000.info 2004-2010. Some rights reserved.