Qingy – graficzny terminal logowania
Napisał: Patryk Krawaczyński
06/10/2009 w Administracja Brak komentarzy. (artykuł nr 170, ilość słów: 1020)
P
rogram Qingy (Is Not GettY) autorstwa Michele Noberasco jest alternatywnym dla programu getty menedżerem / terminalem logowania do systemu. Został napisany w języku C, używa biblioteki DirectFB by oferować szybkie oraz ładnie wyglądające GUI, bez wykorzystania systemu graficznego X11.
Pozwala logować się użytkownikom do systemu odpalając automatycznie wcześniej wybraną sesję (konsolę tekstową, KDE, Gnome, Fluxbox itd…), zapamiętuje ostatnią logowaną osobę, zastępuje getty atrakcyjnym graficznym ekranem logowania, który poprzez wiele tematów może być zmieniany losowo za każdym logowaniem. Przed instalacją Qingy należy w systemie zainstalować bibliotekę DirectFB odpowiadającą między innymi za akcelerację sprzętową (jądro Linuksa powinno być już skompilowane i uruchomione z obsługą konsoli z framebufferem).
tar -xvf DirectFB.tar.gz cd DirectFB ./configure --enable-zlib --with-smooth-scaling --prefix=/usr make make install ldconfig
Instalacja programu przebiega podobnie:
tar -xvf qingy.tar.gz cd qingy ./configure --prefix=/usr make make install
Po poprawnej instalacji programu możemy zacząć konfigurację. Pierwszym krokiem będzie wybór motywu. Zbiór znajduje się na domowej stronie programu w zakładce Themes. Oczywiście wybór pada na Slack-Blue. Pobrany motyw należy przekopiować do katalogu: /usr/share/qingy/themes. Główna konfiguracja opiera się na edycji pliku konfiguracyjnego i ustawieniu paru zmiennych odpowiadających za prawidłowe uruchomienie się samego programu. Edycji poddajemy plik /usr/etc/qingy/settings i dostosowujemy odpowiednie zmienne do posiadanej dystrybucji – poniżej dla Slackware:
x_sessions = "/etc/X11/Sessions/" text_sessions = "/usr/etc/qingy/sessions" temp_files_dir = "/var/lib/misc" x_server = "/usr/bin/Xorg" xinit= "/usr/bin/xinit" x_args = "-nolisten tcp -br" theme = "slack-blue" shutdown_policy = "everyone"
Zmienna shutdown_policy, umożliwiająca zamknięcie systemu, dostępna dla każdego (everyone) powinna być ustawiona w tej postaci tylko dla komputerów o domowym zastosowaniu. Jeśli qingy instalowany jest dla zastosowań serwerowych zmienna ta powinna posiadać wartość: root, umożliwiając tylko administratorowi wyłączenie systemu. Po wstępnych ustawieniach należy skonfrontować rzeczywistość z ustawieniami, tworząc nieistniejące katalogi oraz skopiować do nich odpowiednie pliki.
mkdir /etc/X11/Sessions/ cp /etc/X11/xinit/xinitrc.fluxbox /etc/X11/Sessions/Fluxbox mkdir /var/lib/misc
Do katalogu Sessions należy przekopiować plik odpowiadający za uruchomienie danego menedżera okien systemu X. Kopiowaną nazwą pliku będzie nazwą dostępnej sesji na rozwijanej liście, także pliki najlepiej nazwać tak, aby nazwa jednoznacznie kojarzyła się z konkretnym menedżerem okien. Dla przykładu:
which startkde /usr/bin/startkde which startkde > /etc/X11/Sessions/KDE which gnome-session /usr/bin/gnome-session which gnome-session > /etc/X11/Sessions/Gnome
Oczywiście możemy tak jak przykład wyżej skopiować konkretne pliki z katalogu xinit. Warto wspomnieć, że przy kilku użytkownikach, którzy posiadają odpalone sesje – można ustawić wbudowany mechanizm bezpieczeństwa qingy konfigurując go tak, aby bez znajomości odpowiedniego hasła nie było możliwości przejścia do sesji innego użytkownika (lock_sessions = yes). Po tym zabiegu należy w edytorze tekstu otworzyć plik /etc/inittab, w celu inicjacji terminala qingy. W jednym lub kilku wierszach należy zmienić agetty na qingy. W zależności od używanej dystrybucji zamiast terminala agetty możemy spotkać się także z getty lub nawet mingetty. W celu uniknięcia komplikacji wszystkie zmiany powinny być wprowadzane na konsoli wirtualnej, na której nie będzie włączony qingy. Należy także ustawić standardowy poziom uruchomienia systemu na 3, aby terminal nie został pominięty jak to ma miejsce w przypadku 4 poziomu.
# Default runlevel. (Do not set to 0 or 6) id:3:initdefault: ... c1:1235:respawn:/usr/sbin/qingy tty1 –screensaver 0 c2:1235:respawn:/sbin/agetty 38400 tty2 linux c3:1235:respawn:/sbin/agetty 38400 tty3 linux c4:1235:respawn:/sbin/agetty 38400 tty4 linux c5:1235:respawn:/sbin/agetty 38400 tty5 linux c6:12345:respawn:/sbin/agetty 38400 tty6 linux
Po uprzednim zapisaniu zmian wydajemy komendy:
init Q killall agetty
Pierwsze polecenie zmusza system do ponownego załadowania pliku inittab. Drugie natomiast wyłącza automatycznie wszystkie sesje programu agetty na wirtualnych konsolach, zamykając je (oprócz tej na której pracuje użytkownik) i uruchamiając od nowa (respawn), już z qingy na pierwszym terminalu. Po przejściu na pierwszą konsolę (Alt+1) powinien naszym oczom ukazać się ekran logowania qingy. Za pomocą klawisza TAB lub myszy przemieszczamy się pomiędzy odpowiednimi polami terminala. Ze względu na fakt, iż qingy jest głównie przeznaczony dla anglojęzycznych systemów po jego wykorzystaniu do uruchomienia sesji w systemie X, występuje błąd polskich znaków w oknie terminala (xterm, aterm). W celu naprawy tego błędu (pomysłodawcą jest Adam Brożyński) należy stworzyć w katalogu macierzystym danego użytkownika plik .xsession o poniższej zawartości (na końcu jest zawarta linia uruchamiająca Fluxbox, należy ją dostosować do własnego menedżera):
LANG=pl_PL
export LANG
LC_CTYPE="pl_PL"
LC_NUMERIC="pl_PL"
LC_TIME="pl_PL"
LC_COLLATE="pl_PL"
LC_MONETARY="pl_PL"
LC_MESSAGES="pl_PL"
LC_PAPER="pl_PL"
LC_NAME="pl_PL"
LC_ADDRESS="pl_PL"
LC_TELEPHONE="pl_PL"
LC_MEASUREMENT="pl_PL"
LC_IDENTIFICATION="pl_PL"
LC_ALL="pl_PL"
userresources=$HOME/.Xresources
usermodmap=$HOME/.Xmodmap
sysresources=/usr/lib/X11/xinit/.Xresources
sysmodmap=/usr/lib/X11/xinit/.Xmodmap
if [ -f $sysresources ]; then
xrdb -merge $sysresources
fi
if [ -f $sysmodmap ]; then
xmodmap $sysmodmap
fi
if [ -f $userresources ]; then
xrdb -merge $userresources
fi
if [ -f $usermodmap ]; then
xmodmap $usermodmap
fi
exec /usr/bin/startfluxbox
Wówczas podczas logowania należy pamiętać, by wybrać z listy sesji pozycję: „Twój plik .xsession”. Jeśli chodzi o motywy dostępne dla programu, trzeba mieć na uwadze, iż prawie wszystkie znajdujące się w sekcji Themes na stronie domowej programu są dostosowane do rozdzielczości ekranu 1024×768 (najlepiej, aby framebuffer był ustawiony na taką samą rozdzielczość – vga = 791 w LILO). Jeśli rozdzielczość ekranu jest inna niż 1024×768, może być potrzebna modyfikacja pliku konfiguracyjnego danego motywu (/usr/share/qingy/themes/nazwa_motywu/theme), tak aby napisy i odpowiednie pola pojawiły się we właściwych lokalizacjach. Poniżej przedstawiam podrasowany do tej rozdzielczości plik theme dla motywu Slack-Blue, zawierający trochę więcej wyświetlanych informacji, niż w wersji autorskiej:
theme
{
background = "slack-blue.jpg"
font = "courbd.ttf"
button_opacity = 255
window_opacity = 200
selected_window_opacity = 255
default_text_color = 255, 255, 255, 255
default_cursor_color = 0, 0, 0, 160
other_text_color = 255, 255, 255, 220
clear_background = yes
native_resolution = 1024x768
}
window
{
x = 10
y = 468
width = 281
height = 38
text_size = large
type = "label"
content = "Login:"
linkto = "login"
}
window
{
x = 10
y = 532
width = 281
height = 38
text_size = large
type = "label"
content = "Password:"
linkto = "password"
}
window
{
x = 10
y = 596
width = 281
height = 38
text_size = large
type = "label"
content = "Session:"
linkto = "session"
}
window
{
x = 230
y = 468
width = 580
height = 38
type = "login"
}
window
{
x = 230
y = 532
width = 540
height = 38
type = "password"
}
window
{
x = 230
y = 596
width = 608
height = 38
type = "combo"
command = "sessions"
}
window
{
x = 814
y = 64
type = "button"
command = "halt"
content = "power"
}
window
{
x = 878
y = 64
type = "button"
command = "reboot"
content = "reset"
}
window
{
x = 942
y = 64
type = "button"
command = "screensaver"
content = "screensaver"
}
window
{
x = 10
y = 92
width = 1024
height = 32
text_orientation = center
text_size = small
type = "label"
content = "Welcome to "
command = "hostname"
}
window
{ x = 0
y = 746
width = 1024
height = 38
text_orientation = center
text_size = small
type = "label"
content = " "
command = "echo `date +%a,` `date +%d` `date +%b` `date +%Y,` `uptime`"
}
Możliwe jest przypisanie różnych motywów graficznych do różnych numerów terminali. Możliwe jest także ustawienie automatycznego procesu logowania na każdej konsoli osobno. Aby tego dokonać należy tylko szczegółowo zapoznać się z plikiem konfiguracyjnym programu i odpowiednio zmodyfikować ujęte już w komentarze przykłady.
Więcej informacji: Qingy, Qingy HowTo, man inittab

