Uruchomienie systemu Xwindows za pomocą demona xdm
Na dobry początek...
Dziś praktycznie każda instalacja UNIXa w warunkach domowych nie obejdzie się bez systemu graficznego Xwindows. W końcu łatwiej jest oglądać serwisy www wraz z grafiką, można obejrzeć film, czy też galerię najprzeróżniejszych grafik.
Należy również pamiętać, że drobne przyjemności nie mogą doprowadzić do ograniczenia poziomu zabezpieczeń naszego systemu, zwłaszcza w dzisiejszych czasach, kiedy podłączenie do sieci staje się (niestety ciągle chyba za wolno) coraz bardziej powszechne.
Ten skromny artykuł pozwoli uruchamiać system XFree86 w taki sposób, aby zadowolić obydwie strony: użytkownika oraz wymagający system.
Skąd to wszystko wziąć, czyli krótkie rzypomnienie
Cały system graficzny można zainstalować w systemie FreeBSD na dwa sposoby: albo poprzez program /stand/sysinstall lub też (sposób preferowany przez autora) za pomocą kolekcji /usr/ports.
Instalacja obejmuje następujące składniki:
/usr/ports/x11/XFree86-4/
/usr/ports/x11/XFree86-4-libraries/
/usr/ports/x11/XFree86-4-clients/
/usr/ports/x11-servers/XFree86-4-Server/
oraz w razie potrzeb zestaw czcionek (powyżej konfiguracja minimalna).
A właściwie po co to wszystko, przecież jest startx
No tak, można powiedzieć słusznie i naukowo. Jest tylko jedno drobne ALE.
Dokładnych informacji napewno udzieli wyszukiwarka Google albo też strona X consortium, niemniej w skrócie postaramy się podać to tutaj. Aby móc uruchomić system graficzny potrzebny jest dostęp do zasobów pamięci serwera (poprzez /dev/kmem, a jak można sprawdzić dostęp do tego urządzenia jest bardzo mocno ograniczony). Zatem, aby móc uzyskać dostęp do pamięci konieczne jest posiadanie praw root.
Aby każdy zwykły użytkownik mógł uruchomić system Xwindows poprzez skrypt startx (chyba najbardziej znany sposób w systemach Linuxowych), skrypt ten musi mieć ustawiony bit SUID. Takie rozwiązanie jest wygodne, ale jednocześnie niekorzystne. Z doświadczeń autora wynika, że niektórych aplikacji nie można uruchomić właśnie z tego powodu...
Czy jest zatem alternatywa?
Odpowiedź brzmi tak! Jest nim program o nazwie xdm. Program ten uruchamia system Xwindows (uruchamiany przez roota) i po przeporwadzeniu poprawnej autoryzacji podaje użytkownikowi zasoby Xserwera, bez konieczności posiadania przez użytkownika dodatkowych przywilejów. Zatem rozwiązanie proste i bezpieczne.
Jak to wszystko uruchomić
W sumie nie jest to trudne. Konieczne jest tylko napisanie kilku drobnych skryptów, które pomogą nam automatyzować zadania.
Pierwszym krokiem jest uruchomienie samego demon xdm. Skrypt najlepiej umieścić w katalogu startowym /usr/X11R6/etc/rc.d/ Poniżej bzentujemy przykładowy skrypt:
PREFIX=/usr/X11R6
awk=/usr/bin/awk
grep=/usr/bin/grep
xargs=/usr/bin/xargs
ps=/bin/ps
kill=/bin/kill
case "$1" in
start)
${PREFIX}/bin/xdm > /dev/null
;;
stop)
${ps} ax | ${grep} xdm | ${grep} ${PREFIX} | ${awk} '{print $1}' \
| ${xargs} ${kill} -TERM > /dev/null
;;
*)
echo "$0 start | stop"
;;
esac
Niemniej, to jeszcze za mało, aby móc uruchomić po poprawnym zalogowaniu środowisko (menedżera okien) użytkownika. Do tego celu posłużą skrypty startowe, które trzeba umieścić w katalogu domowym:
.xsession
# wyeksportowanie zmiennych do lokalizacji językowych
export LC_ALL=pl
export LANG=pl
export PATH=$PATH:/usr/local/bin:/usr/local/sbin:$HOME/bin
# uruchomienie obsługi kółka w myszce
/usr/X11R6/bin/imwheel
# ulubiony menedżer okien (autora ;-))
/usr/X11R6/bin/wmaker
# zamapowanie klawiatury (w celu polskich robaczków)
/usr/X11R6/bin/xmodmap ~/.Xmodmap
.xinitrc
# Window Maker default X session startup script
PATH="$PATH:/usr/X11R6/bin"
# If you login from xdm, uncomment this to make error messages appear
# in the console window.
#
tail -f /home/wtp/.xsession-errors > /dev/console &
exec wmaker
Obydwa powyższe pliki powinny mieć ustawiony atrybut wykonywalności.
I trochę bajerów na koniec...
W celu dokonfigurowania samego xdma (okienko logowania) warto zainsteresować się plikami z katalogu /usr/X11R6/lib/X11/xdm/, a w szczególności plikami: Xsetup_0 Xresources.
quex, pon., 25/02/2008 - 01:20
