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