NFsec Logo

Qingy – graficzny terminal logowania

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

Kategorie K a t e g o r i e : Administracja

Tagi T a g i : , , , , , ,

Komentowanie tego wpisu jest zablokowane.