21.02.2014 Views

Aktualności

Aktualności

Aktualności

SHOW MORE
SHOW LESS

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

Spis treści<br />

Miesięcznik Linux+ (12 numerów w roku)<br />

jest wydawany przez<br />

Software-Wydawnictwo Sp. z o. o.<br />

Redaktor naczelny: Krzysztof Krawczyk,<br />

krzysiek@lpmagazine.org<br />

Redaktor: Piotr Truszkowski,<br />

piotrt@lpmagazine.org<br />

Producent: Marta Kurpiewska,<br />

marta@software.com.pl<br />

Opracowanie CD/DVD: Krzysztof Krawczyk,<br />

Piotr Truszkowski<br />

Dział reklamy: Tomasz Dalecki,<br />

reklama@software.com.pl,<br />

tel.: (22) 860 18 79<br />

Prenumerata: Marzena Dmowska,<br />

pren@software.com.pl,<br />

tel.: (22) 860 17 67<br />

Projekt graficzny okładki:<br />

Agnieszka Marchocka<br />

Projekt graficzny pisma: Marcin Ziółkowski,<br />

marcin@software.com.pl<br />

Skład: Marcin Ziółkowski,<br />

marcin@software.com.pl<br />

Adres korespondencyjny:<br />

Software-Wydawnictwo Sp. z o. o.,<br />

00-190 Warszawa,<br />

ul. Lewartowskiego 6<br />

e-mail: redakcja@lpmagazine.org,<br />

tel. (22) 860 18 18<br />

Redakcja dokłada wszelkich starań, aby publikowane<br />

w piśmie i na towarzyszących mu nośnikach<br />

informacje i programy były poprawne,<br />

jednakże nie bierze odpowiedzialności za efekty<br />

wykorzystania ich; nie gwarantuje także poprawnego<br />

działania programów shareware,<br />

freeware i public domain. Uszkodzone podczas<br />

wysyłki płyty wymienia dział prenumeraty.<br />

Wszystkie znaki firmowe zawarte w piśmie<br />

są własnością odpowiednich firm i zostały<br />

użyte wyłącznie w celach informacyjnych.<br />

Redakcja używa systemu<br />

automatycznego składu<br />

Druk: Stella Maris<br />

Płyty dołączone do magazynu przetestowano<br />

programem AntiVirenKit firmy G DATA Software<br />

Sp. z o.o.<br />

Za darmo? Pewnie kiepski<br />

Czy to dobrze,<br />

że Linux jest za<br />

darmo (to akurat nie<br />

jest do końca prawdą,<br />

ale tak powszechnie<br />

się uważa)? Czy<br />

całkiem komercyjny<br />

jego charakter, ale<br />

wciąż otwarty, byłby<br />

znacznie lepszy? Na samym początku jego<br />

rozwoju na pewno nie, ale teraz? Możliwe,<br />

że dzięki temu, wbrew pozorom,<br />

Linux szybciej upowszechniłby się wśród<br />

użytkowników komputerów. Często przecież<br />

uważa się, że cena jest równoznaczna<br />

z wartością. Za darmo? Pewnie kiepski.<br />

I co mają powiedzieć producenci oprogramowania<br />

dla Linuksa? Czy świadomość<br />

tego, że tworzą aplikacje dla darmowego<br />

systemu, w którym jest już prawie wszystko,<br />

czego potrzebuje typowy użytkownik,<br />

nie jest zniechęcające? A jeszcze bar-<br />

4<br />

10<br />

14<br />

16<br />

18<br />

Opis<br />

zawartości<br />

płyt CD/DVD<br />

Piotr Truszkowski<br />

Newsy<br />

Krzysztof Krawczyk,<br />

Krzysztof Gawlas<br />

Jądro Linux<br />

Maja Królikowska<br />

Debian<br />

Grzegorz Prokopski<br />

Mandrake<br />

Daniel Koć<br />

dziej, gdy powstaje darmowy odpowiednik<br />

tej aplikacji? Dla mnie byłoby, więc<br />

z tego powodu często “ucieka się” w usługi<br />

(odpłatne rozszerzenie funkcjonalności<br />

programu, odpłatna pomoc techniczna).<br />

Na szczęście, coraz więcej firm opiera<br />

swój biznes właśnie na Linuksie, więc<br />

może nie jest tak źle, a ja, zgodnie z powiedzeniem,<br />

że “darowanemu koniowi<br />

w zęby nie zaglądaj”, powinienem po<br />

prostu wysłać podziękowania autorom<br />

tych wszystkich aplikacji, z których najczęściej<br />

korzystam, i cieszyć się z tego, co<br />

mam. No i może stworzyć coś samemu.<br />

Zapraszam do lektury tego numeru,<br />

z którego będziecie mogli dowiedzieć się,<br />

co nowego w świecie Linuksa i jak można<br />

wykorzystać ten wspaniały system operacyjny.<br />

Krzysztof Krawczyk<br />

Redaktor Naczelny Linux+<br />

W bieżącym numerze :<br />

Aktualności:<br />

kde<br />

linuxfresh<br />

Sprzedaż aktualnych lub archiwalnych<br />

numerów pisma po innej cenie niż<br />

wydrukowana na okładce – bez zgody<br />

wydawcy – jest działaniem na jego<br />

szkodę i skutkuje odpowiedzialnością<br />

sądową.<br />

19<br />

20<br />

22<br />

Aurox<br />

Robert Główczyński<br />

KDE<br />

Paweł Biliński<br />

LinuxFresh<br />

Piotr Machej<br />

opis CD A<br />

2 czerwiec 2004


Spis treści<br />

Temat miesiąca<br />

Multimedia<br />

Multimedia<br />

30 40<br />

Linux w studiu nagrań<br />

Paweł Wolniewicz<br />

Kolejne zastosowania Linuksa stają się<br />

coraz bardziej dostrzegalne. Tak jest<br />

w przypadku multimediów. Już teraz<br />

można z powodzeniem wykorzystywać<br />

nasz system operacyjny w studiu<br />

nagrań. Paweł prezentuje, jaki sprzęt<br />

i oprogramowanie będzie potrzebne<br />

w tym celu, jak je skonfigurować oraz<br />

jak użyć. Skoncentruje się na serwerze<br />

dźwięku JACK oraz aplikacjach MuSE<br />

i Ardour.<br />

Dla początkujących<br />

Serwer DHCP<br />

i algorytm HTB<br />

Piotr Machej<br />

Dla programistów<br />

58<br />

Książka teleadresowa<br />

w Mono<br />

Marek Sawerwain<br />

Recenzje<br />

38<br />

SUSE Linux 9.1<br />

Professional<br />

Piotr Truszkowski<br />

Na naszym linuksowym rynku pojawiła<br />

się nowa gwiazda, a jest nią<br />

SUSE. Przez wiele lat niedostrzegana,<br />

głównie z powodu braku promocji,<br />

teraz staje się kolejną ważną<br />

dystrybucją wykorzystywaną przez polskich<br />

użytkowników. Swoje wrażenia<br />

z nowej wersji (9.1), którą dostaliśmy<br />

od firmy Novell, aktualnego właściciela<br />

tej marki, przedstawi Wam Piotrek.<br />

Wywiad<br />

26<br />

Wywiad z Matthiasem<br />

Ettrichem, założycielem<br />

projektu KDE<br />

Krzysztof Krawczyk,<br />

Paweł Biliński,<br />

Piotr Truszkowski<br />

Nie wszyscy pamiętają, że Kool Desktop<br />

Environment powstał w 1996 roku.<br />

Wtedy to Matthias Ettrich wysłał list,<br />

w którym namawiał ludzi do przyłączenia<br />

się do projektu. Opisał w nim<br />

motywację do rozpoczęcia KDE oraz<br />

jego główne założenia (w tym oparcie<br />

go na bibliotece Qt, udostępnionej<br />

parę tygodni wcześniej publicznie przez<br />

firmę TrollTech). Postanowiliśmy porozmawiać<br />

z nim i zadać mu kilka pytań.<br />

W większości sieci lokalnych podstawowy<br />

serwer usług jest uruchamiany<br />

na Linuksie. To bardzo dobre rozwiązanie,<br />

szczególnie, że pozwala na wygodne<br />

administrowanie taką siecią. Bardzo<br />

pomocny jest wtedy serwer DHCP oraz<br />

podział dostępnego łącza internetowego.<br />

Piotrek, jak zwykle, pokaże Wam,<br />

że przygotowanie odpowiedniej konfiguracji<br />

Linuksa wcale nie jest takie trudne.<br />

Sprzęt<br />

50<br />

Zarządzanie energią<br />

w Linuksie, część pierwsza<br />

Piotr Wolny<br />

Nasze komputery domowe często zostawiamy<br />

włączone przez cały dzień, nawet<br />

gdy na nich w danej chwili nie pracujemy.<br />

To wszystko jednak kosztuje – licznik<br />

energii elektrycznej nie zatrzymuje<br />

się. Pomocne może się wtedy okazać<br />

wykorzystanie mechanizmów zarządzania<br />

energią dostępnych w ACPI. W tym<br />

miesiącu Piotrek pokaże Wam, jak usypiać<br />

procesor, gdy nie jest potrzebny.<br />

Technologia .NET jest coraz bardziej<br />

popularna, a ponieważ Linux nie może<br />

zostawać w tyle, stale rozwijany jest<br />

projekt Mono, będący otwartą implementacją<br />

tego rozwiązania. Język C#<br />

jest bardzo zbliżony do C/C++, więc<br />

warto zapoznać się z jego możliwościami.<br />

W tym miesiącu Marek pokaże Wam,<br />

jak wykorzystać bibliotekę GTK# do stworzenia<br />

własnej książki teleadresowej.<br />

Dla graczy<br />

68<br />

Crimson Fields<br />

Piotr Truszkowski<br />

Czy pamiętacie grę Battle Isle? To<br />

turowa gra strategiczna, bardzo popularna<br />

nie tak dawno temu. Do swojej<br />

dyspozycji otrzymywaliście jednostki<br />

wojskowe i waszym celem było zdobycie<br />

terenu wroga lub obrona własnego.<br />

Na tym pomyśle bazuje gra Crimson<br />

Fields. Piotrek postanowił zbadać, czy<br />

nowa inkarnacja starego przeboju jest<br />

godna polecenia.<br />

www.lpmagazine.org<br />

3


aktualności<br />

opis CD<br />

płyta A<br />

ACPI<br />

Wszystkie potrzebne łatki na jądro<br />

systemowe, które pozwolą w pełni<br />

wykorzystać ACPI pod Linuksem.<br />

Polecamy artykuł w numerze, opisujący,<br />

jak oszczędzać energię pod Linuksem.<br />

Zawarty na płycie zestaw łatek z<br />

pewnością umożliwi Wam to wszystko, o<br />

czym autor pisze w artykule.<br />

http://acpi.sourceforge.net/<br />

Crimson Fields 0.4.2<br />

Gra dla wytrawnych strategów w stylu<br />

legendarnego Battle Isle. Zaplanuj<br />

działania i pokieruj swoimi wojskami<br />

ku zwycięstwu. Ciekawa grafika,<br />

niesamowita grywalność i trochę<br />

nostalgii. Zamieszczony tytuł z pewnością<br />

zadowoli wszystkich fanów Battle<br />

Isle, jak również tych, którzy w grach<br />

widzą inteligentną rozrywkę. Więcej na<br />

temat tej gry w dziale Dla graczy.<br />

http://crimson.seul.org/<br />

Rc.HTB 0.3<br />

Skrypt do artykułu o dzieleniu<br />

pasma internetowego pod Linuksem.<br />

Przydatny każdemu, kto posiada<br />

bądź zamierza posiadać serwer w<br />

sieci firmowej/osiedlowej i chce mieć<br />

kontrolę nad przydzielaniem pasma<br />

internetowego. Autorem skryptu<br />

jest Polak, więc jest on bardzo<br />

dobrze dopasowany do naszych łącz<br />

internetowych. W numerze znajdziecie<br />

także artykuł, który krok po kroku<br />

pozwoli Wam wraz z pomocą<br />

opisanego skryptu zapanować nad<br />

wszelkimi fanami sieci P2P, którzy<br />

dniami i nocami obciążają Sieć.<br />

http://www.rc.htb.prv.pl/<br />

Mono 0.91<br />

Kompletne środowisko<br />

programistyczne, będące otwartym<br />

odpowiednikiem platformy .NET<br />

firmy Microsoft. Mono oferuje prawie<br />

identyczną funkcjonalność swojego<br />

zamkniętego pierwowzoru i proste<br />

tworzenie zaawansowanych aplikacji.<br />

Z pewnością warto się mu przyjrzeć.<br />

W dziale Dla programistów Marek<br />

Sawerwain pokaże Wam, jak napisać<br />

książkę teleadresową w Mono.<br />

http://www.go-mono.org/<br />

Big Bit - Big Bajt<br />

Big Bit - Big Bajt to nowa audycja<br />

komputerowa nadawana w Radio<br />

Warszawa Praga (106,2 FM), a<br />

prowadzona przez Michała Niwickiego.<br />

Ma ona na celu przedstawienie<br />

szerokiemu gronu słuchaczy systemu<br />

Linux i Wolnego Oprogramowania.<br />

Na płycie znajdziecie plik MP3 z<br />

zapisem drugiej audycji, w której gościł<br />

nikt inny jak nasz redaktor naczelny<br />

– Krzysztof Krawczyk. Zapraszamy<br />

do wysłuchania i aktywnego udziału<br />

w kolejnych audycjach. Big Bit - Big<br />

Bajt w Radio Warszawa Praga w każdy<br />

wtorek o 17:30. Do usłyszenia!<br />

http://www.radiowarszawapraga.pl/<br />

Linux+ Live CD<br />

Linux+ Live CD to dystrybucja Linuksa<br />

uruchamiana z płyty CD. Nie wymaga<br />

ona instalacji na dysku twardym i może<br />

działać niezależnie od już zainstalowanego<br />

systemu operacyjnego. Linux+ Live<br />

zawiera programy omówione w naszych<br />

artykułach.<br />

Aby wystartować Linux+ Live CD, wystarczy<br />

w BIOS-ie komputera podać napęd<br />

CD jako podstawowe urządzenie<br />

rozruchowe, włożyć płytkę z naszą dystrybucją<br />

do napędu i ponownie uruchomić<br />

komputer. Po kilku chwilach naszym<br />

oczom ukaże się plansza powitalna. Po<br />

wciśnięciu klawisza [Enter], Linux+ Live<br />

CD zacznie się uruchamiać. System automatycznie<br />

wykryje nasz sprzęt i skonfiguruje<br />

środowisko graficzne. Na Linux+ Live<br />

CD składają się m.in.:<br />

• jądro Linux 2.4.26 z wieloma łatkami<br />

zwiększającymi jego funkcjonalność;<br />

• graficzne środowisko KDE 3.2.1;<br />

• komunikatory internetowe;<br />

• aplikacje multimedialne;<br />

• i wiele innych...<br />

CrossOver Office 3.0 Demo<br />

Nowy użytkownik Linuksa ma czasem<br />

trudności w odnalezieniu się<br />

w nowym środowisku. Pomimo tego, że<br />

dla Linuksa istnieje wiele odpowiedników<br />

programów z Windows, czasami jesteśmy<br />

wręcz zmuszeni używać np. “jedynie<br />

słusznej” przeglądarki Internet<br />

Explorer czy pakietu biurowego Microsoft<br />

Office. Na naszej płycie CD/DVD prezentujemy<br />

Wam demo najnowszej wersji<br />

narzędzia firmy CodeWeavers o nazwie<br />

CrossOver Office. Dzięki temu programowi<br />

na swojej stacji roboczej z Linuksem<br />

uruchomicie m.in.:<br />

• Microsoft Office 97/2000/XP;<br />

• Lotus Notes;<br />

• Microsoft Project i Visio;<br />

• Macromedia Dreamweaver MX<br />

i Flash MX;<br />

• Adobe Photoshop.<br />

Linux+ Live CD<br />

Po starcie systemu pojawi się nam okienko,<br />

które informuje o niemożności zainicjowania<br />

dźwięku. Należy w tym momencie<br />

kliknąć na przycisk OK, następnie<br />

kliknąć na folder Ustawienia systemowe,<br />

wybrać Sound Config, a następnie<br />

Użyj sterowników ALSA.<br />

Linux+ Live CD to wspaniała okazja<br />

do zaprezentowania Linuksa w swoim<br />

środowisku. Mając przy sobie płytkę<br />

z dystrybucją Linuksa, możesz z niej<br />

skorzystać w każdym miejscu, gdzie tylko<br />

masz dostęp do komputera. Dobrej zabawy!<br />

Możliwość instalacji wielu programów<br />

z Windows<br />

Wymienione powyżej programy to tylko<br />

te, które są przez CrossOver Office 3.0 oficjalnie<br />

wspierane. Możemy oczywiście pokusić<br />

się również o uruchomienie aplikacji<br />

spoza tej listy. CrossOver Office to wspaniała<br />

okazja ku temu, aby wykorzystać<br />

Linuksa w miejscach, gdzie musimy skorzystać<br />

z aplikacji przeznaczonych dla Microsoft<br />

Windows. Uruchomione aplikacje<br />

działają szybko i stabilnie. Warto przekonać<br />

się samemu, czy opisywany pakiet<br />

wart jest swojej ceny – $39.95 za wersję<br />

Standard bądź $84.95 za wersję Professional.<br />

Naszym zdaniem warto. Po uruchomieniu<br />

programu pojawi się okienko informujące<br />

o rejestracji. Możemy bez obaw<br />

kliknąć na opcję Register Later.<br />

http://www.codeweavers.com/<br />

6 czerwiec 2004


płyta B<br />

opis CD<br />

PLD Live CD 0.95<br />

P<br />

LD<br />

PLD Live zachwyca rozmachem<br />

to pierwsza całkowicie<br />

polska dystrybucja Linuksa.<br />

PLD Live CD prezentuje<br />

potęgę, która drzemie we<br />

wspomnianym systemie. Dzięki owocnej<br />

współpracy z Havnerem, twórcą PLD<br />

Live CD, otrzymujecie do rąk produkt na<br />

najwyższym światowym poziomie.<br />

Co takiego wyjątkowego jest w tym<br />

systemie? Z pewnością kilka rzeczy.<br />

Przede wszystkim, PLD Live CD jest<br />

wspaniałym przykładem na to, że „Polak<br />

potrafi”. Ponadto, znajdują się w nim najnowsze<br />

wersje programów. Takich nowinek,<br />

jakie posiada PLD Live CD, nie znajdziecie<br />

nigdzie indziej – jądro 2.6.6, KDE<br />

3.2.2, GNOME 2.6.1 to tylko niektóre z<br />

tych elementów, dla których warto sięgnąć<br />

po tę dystrybucję Linuksa. Kolejną<br />

rzeczą godną uwagi jest ogólne „dopieszczenie”<br />

systemu. Wszystko jest logicznie<br />

poukładane, bardzo dobrze złożone, po<br />

prostu dopracowane do ostatniej linijki<br />

kodu. Warto także zwrócić uwagę na<br />

możliwości PLD Live CD – system obsługuje<br />

chyba wszystkie najpopularniejsze (i<br />

mniej popularne) systemy plików, poczynając<br />

od Ext2, poprzez Ext3, ReiserFS,<br />

JFS, XFS, na FAT i NTFS kończąc. Rewelacyjnie<br />

sprawdza się w każdych warunkach.<br />

Nie można również pominąć szybkości<br />

PLD Live CD. Ze wszystkich znanych<br />

mi dystrybucji Live, ta wypada zdecydowanie<br />

najlepiej. Szybkość startu systemu<br />

i jego działania jest imponująca. Na<br />

PLD Live CD składają się m.in.:<br />

• Linux 2.6.6 z poprawną obsługą m.in.<br />

nForce2;<br />

• sterowniki dla kart opartych o chipsety<br />

Nvidia;<br />

• KDE 3.2.2;<br />

• GNOME 2.6.1;<br />

• Beep Media Player 1.0.0-0.pre5.2;<br />

• Blender 2.30;<br />

• Foobillard 3.0a;<br />

• GIMP 2.0.0;<br />

• LinNeighborhood 0.6.5;<br />

• Mozilla 1.6;<br />

• MPlayer 1.0-0.pre4.3;<br />

• OpenOffice.org 1.1.0;<br />

• Qtparted 0.4.2;<br />

• Samba 3.0.2;<br />

• XFree86 4.4.0;<br />

• XMMS 1.2.10.<br />

PLD Live CD to wspaniała okazja ku temu,<br />

aby poznać Linuksa bez potrzeby jego<br />

instalacji na dysku twardym. Do systemu<br />

dołączono ponad 1200 aplikacji, co sprawia,<br />

że jego przeznaczenie jest naprawdę<br />

bardzo uniwersalne. Możemy wykorzystać<br />

go jako system ratunkowy, multimedialny,<br />

pokazowy bądź w jakikolwiek<br />

inny sposób, który sobie wymyślimy.<br />

http://livecd.pld-linux.org/<br />

Nowy GNOME 2.6<br />

Uwaga<br />

System graficzny wystartuje samoczynnie<br />

po uruchomieniu systemu. Jako<br />

nazwę użytkownika (login) wpisujemy<br />

user (dla zwykłego użytkownika)<br />

bądź root (dla administratora). Nie ma<br />

potrzeby wpisywania hasła. Przydatne<br />

jest także wciśnięcie klawisza [F2]<br />

po wystartowaniu komputera z płyty.<br />

Znajdują się tam różne opcje, z którymi<br />

możemy uruchomić PLD Live CD.<br />

www.lpmagazine.org<br />

7


aktualności<br />

opis DVD<br />

płyta A<br />

Windows -> Linux<br />

Specjalnie dla Was zamieściliśmy<br />

instalatory gier z Windows dla Linuksa.<br />

Oznacza to, że posiadając nośnik CD<br />

z którąś z gier wymienionych poniżej<br />

i przeznaczonych dla środowiska<br />

DOS/Windows, będziecie mogli ją<br />

zainstalować i zagrać pod Linuksem!<br />

Oto i one:<br />

– Duke Nukem 3D;<br />

– Freespace;<br />

– Freespace2;<br />

– Kingpin;<br />

– Medal of Honor;<br />

– Neverwinter Nights;<br />

– Rise of the Triad;<br />

– Soul Ride;<br />

– Tactical Ops;<br />

– Unreal;<br />

– Unreal Gold;<br />

– Unreal: Return To Na Pali.<br />

Dobrej zabawy!<br />

http://www.icullus.org/<br />

CrossOver Office 3.0 Demo<br />

Wersja demo oprogramowania,<br />

które pozwala uruchomić niektóre<br />

z aplikacji Windows na Linuksie<br />

(m.in. Microsoft Office, Lotus Notes,<br />

Microsoft Project i Visio, Macromedia<br />

Dreamweaver MX, Flash MX, Adobe<br />

Photoshop).<br />

http://www.codeweavers.com/<br />

Fresh<br />

Aplikacje opisane w dziale<br />

LinuxFresh: Absg 2.7, BasicLinux<br />

3.21, File 4.09, Grip 3.2.0, MPlayer<br />

1.0pre4, ReactOS 0.2.2, W3m 0.5.1,<br />

Allegro 4.1.14, Cupsddk 1.0, Fontforge<br />

20040509, Lftp 3.0.3, Qt 3.3.2,<br />

Rkhunter 1.0.8, Yavr.<br />

KDE<br />

Aplikacje omówione w dziale<br />

KDE: Amarok 1.0beta3, Attach ,<br />

Eventwatcher 0.4.1, Folder Icons,<br />

Kbootsplash 0.3a2, Kiso 0.4.3,<br />

Kmp3burn 0.2.2, KOffice 1.3.1,<br />

Ksetiwatch 3.0.0, Kxdocker 0.3,<br />

Quanta 3.2-be2.<br />

Mono 0.91<br />

Kompletne środowisko<br />

programistyczne, będące otwartym<br />

odpowiednikiem platformy .NET firmy<br />

Microsoft.<br />

http://www.go-mono.org/<br />

ReHMuDi 2.0<br />

Zestaw aplikacji dla dystrybucji<br />

Fedora, które pozwolą uczynić z niej<br />

prawdziwe studio nagrań. Ponad 180<br />

pakietów binarnych, gotowych do<br />

instalacji po wydaniu polecenia (jako<br />

root): ./install.sh. Uwaga! Pakiety<br />

przeznaczone tylko dla dystrybucji<br />

Fedora!<br />

http://www.agnula.org/<br />

4 x Live<br />

Po Waszym ciepłym przyjęciu<br />

drugiego numeru Linux+ DVD,<br />

w którym na pierwszej płycie DVD zamieściliśmy<br />

cztery różne dystrybucje<br />

Live, postanowiliśmy ponownie przygotować<br />

dla Was taką kompilację. Znajdziecie<br />

w niej same perełki, których na<br />

próżno szukać u konkurencji:<br />

• PLD Live CD 0.95;<br />

• Linux+ Live DVD;<br />

• AGNULA/DeMuDi Live 1.1.1;<br />

• SUSE LiveCD 9.1.<br />

PLD Live CD to w pełni polska dystrybucja<br />

Linuksa, prezentująca najnowsze<br />

wersje oprogramowania, takie jak jądro<br />

2.6.6, KDE 3.2.2 czy GNOME 2.6.1.<br />

Bardzo dobrze zaplanowana i wykonana,<br />

mogąca konkurować pod każdym<br />

względem z produkcjami zagranicznymi.<br />

Linux+ Live DVD to nasza dystrybucja<br />

Linuksa, która ma na celu prezentację<br />

większości oprogramowania z artykułów<br />

zamieszczonych w tym numerze<br />

Linux+.<br />

AGNULA/DeMuDi Live to wyjątkowa<br />

dystrybucja Linuksa, przeznaczona<br />

dla muzyków. Zawiera profesjonalne<br />

oprogramowania do tworzenia<br />

i edycji dźwięku. Zaopatrzona w zestaw<br />

łatek na jądro systemowe i oparta<br />

na Debianie, pozwoli każdemu na<br />

stworzenie własnego utworu muzycznego<br />

bądź poddanie edycji już gotowego.<br />

SUSE LiveCD to przedsmak tego, co<br />

stworzyła niemiecka firma SUSE pod<br />

kierownictwem amerykańskiego Novella.<br />

Warta uruchomienia, chociażby<br />

z tego powodu, aby zobaczyć, jak<br />

wygląda komercyjny produkt dla korporacji.<br />

Być może po jej przetestowaniu<br />

ktoś z Was zdecyduje się na zakup<br />

pełnej profesjonalnej wersji pudełkowej?<br />

Cztery dystrybucje Live, a każda<br />

z nich przeznaczona dla innego odbiorcy.<br />

Aby zacząć zabawę z którąkolwiek<br />

z nich, należy wykonać kilka czynności<br />

poprzedzających. Pierwszą z nich<br />

jest ustawienie w BIOS-ie komputera<br />

napędu DVD jako pierwszego urządzenia<br />

startowego. Drugą jest umieszczenie<br />

Aż cztery systemy Live – z którego<br />

skorzystać?<br />

naszej płyty DVD w napędzie i zrestartowanie<br />

komputera. Po kilku chwilach<br />

ukaże się nam plansza powitalna, z której<br />

będziemy mogli wybrać dystrybucję,<br />

z której chcemy skorzystać:<br />

• aby uruchomić PLD Live CD, wciskamy<br />

[Enter] bądź, aby poznać więcej<br />

opcji, klawisz [F2]. Po uruchomieniu<br />

systemu, logujemy się bez hasła jako<br />

user (dla zwykłego użytkownika)<br />

bądź root (dla administratora systemu);<br />

• aby uruchomić Linux+ Live DVD,<br />

wpisujemy aurox i wciskamy [Enter];<br />

• aby uruchomić DeMuDi, wpisujemy<br />

demudi i wciskamy [Enter];<br />

• aby uruchomić SUSE, wpisujemy suse<br />

i wciskamy [Enter].<br />

Dzięki takiemu zróżnicowaniu, każdy<br />

na naszej płycie znajdzie coś dla<br />

siebie. Jest to także wspaniała okazja<br />

ku temu, aby poznać działanie<br />

Linuksa, bądź pokazać go znajomej/<br />

znajomemu bez strachu o ewentualną<br />

utratę danych czy pracochłonność procesu<br />

instalacji i konfiguracji. Dobrej zabawy!<br />

http://livecd.pld-linux.org/<br />

http://www.lpmagazine.org/<br />

http://www.agnula.org/<br />

http://www.suse.com/<br />

8 czerwiec 2004


płyta B<br />

opis DVD<br />

Fedora Core 2 DVD<br />

Firma Red Hat, po zaprzestaniu<br />

udostępniania swojej dystrybucji<br />

Red Hat Linux za darmo<br />

w Internecie, powołała projekt<br />

Fedora. Wraz z udziałem społeczności<br />

Linuksa z całego świata miał on zająć<br />

się tworzeniem dystrybucji, która stałaby<br />

się darmowym następcą Red Hat Linux,<br />

natomiast firma Red Hat skoncentrowała<br />

się na rynku systemów korporacyjnych,<br />

gdzie klient kupując system liczy<br />

na produkt najwyższej klasy. Kolejne<br />

edycje Fedory wydawane są co 4-6 miesięcy,<br />

natomiast Red Hat Linux co 12 miesięcy.<br />

Red Hat bierze z Fedory najlepsze<br />

elementy i wdraża je do Red Hat Linux.<br />

Można więc napisać, że Fedora jest niejako<br />

„poligonem doświadczalnym” Red<br />

Hata, co ma swoje dobre strony (najnowsze<br />

wersje oprogramowania), jak również<br />

złe (nie wszystko może być do końca stabilne).<br />

Niedawno światło dzienne ujrzała<br />

druga edycja Fedory – Fedora Core<br />

2. Niesie ona ze sobą ogromną ilość<br />

nowinek i udoskonaleń w porównaniu<br />

do pierwszej edycji. Dzięki współpracy<br />

naszej redakcji z programistami projektu<br />

Fedora, prezentujemy Wam – jako<br />

pierwsi w Polsce – najnowszą wersję tego<br />

systemu w wersji DVD. W Fedora Core 2<br />

znajdziecie:<br />

• jądro 2.6.5;<br />

• GNOME 2.6.0;<br />

• KDE 3.2.2;<br />

• najnowsze wersje aplikacji...<br />

Nasza edycja DVD zawiera pełną edycję<br />

Fedora Core 2:<br />

• pakiety binarne;<br />

• pakiety źródłowe.<br />

Fedora zyskała sobie uznanie na całym<br />

świecie nie tylko ze względu na swoje<br />

pochodzenie – to po prostu bardzo dobry<br />

system. Rozwijany jest przez tysiące osób<br />

z całego świata. W Internecie jest dostępna<br />

ogromna ilość oprogramowania (pakiety<br />

RPM tworzą użytkownicy dystrybucji).<br />

Dzięki temu, że system można<br />

za darmo pobrać z Internetu (aczkolwiek<br />

ściąganie ponad 4 GB danych nie<br />

należy do najprzyjemniejszych rzeczy),<br />

liczba użytkowników dystrybucji rośnie<br />

Fedora Core 2<br />

z dnia na dzień (w rankingu serwisu<br />

DistroWatch.com, Fedora zajmuje drugie<br />

miejsce, tuż za Mandrake), co wiąże się<br />

z łatwym zdobyciem informacji na nurtujący<br />

nas problem. W Internecie są dostępne<br />

setki forów dyskusyjnych poświeconych<br />

tej dystrybucji, tysiące stron fanów,<br />

kanałów IRC, a na grupach dyskusyjnych<br />

można bez problemu znaleźć pomoc. To<br />

wszystko tworzy społeczność, na wielkość<br />

której projekt Fedora z pewnością<br />

nie ma co narzekać.<br />

Fedora Core 2 to dystrybucja ze<br />

wszech miar godna polecenia. Zaakceptuje<br />

ją zarówno zaawansowany użytkownik<br />

systemu Linux, jak i zupełny nowicjusz.<br />

Pomimo tego, że Fedora nie posiada<br />

takiej ilości najróżniejszych graficznych<br />

konfiguratorów i ułatwień, jakie<br />

może zaoferować chociażby Mandrake,<br />

z obsługą systemu powinien poradzić<br />

sobie każdy. Instalacja odbywa<br />

się w języku angielskim, jednak podczas<br />

jej trwania możemy wybrać język<br />

polski jako domyślny język systemowy.<br />

Po tym zabiegu, system po zainstalowaniu<br />

będzie się z nami porozumiewał<br />

w naszym ojczystym języku. Osoby,<br />

które dopiero zaczynają swoja przygodę<br />

z Linuksem, z pewnością będą szukały<br />

książek, które pomogą im w zapozna-<br />

niu się z Fedorą. Godnym polecenia tytułem<br />

jest w tym momencie książka Radosława<br />

Sokóła „Po prostu Fedora Core 1”.<br />

Pomimo tego, że dotyczy ona pierwszej<br />

edycji dystrybucji, przedstawione w niej<br />

problemy i rozwiązania sprawdzą się<br />

także w Fedora Core 2.<br />

Nie pozostaje mi nic innego, jak<br />

życzyć Ci drogi czytelniku zadowolenia<br />

z tej dytrybucji. W razie jakichkolwiek<br />

problemów zapraszam jednocześnie<br />

na nasze Polskie Forum Linuksowe<br />

(http://www.linux.com.pl/forum/ ), gdzie<br />

z pewnością uzyskasz odpowiedzi na<br />

nurtujące Cię pytania. Fedora posiada<br />

w Polsce ogromną społeczność. Dołącz<br />

do niej i Ty.<br />

Minimalne wymagania<br />

sprzętowe:<br />

• procesor z zegarem taktowanym<br />

minimum 450 MHz;<br />

• minimum 128 MB RAM;<br />

• monitor zgodny ze standardem<br />

VESA;<br />

• napęd DVD;<br />

• od 800 MB do 5 GB wolnej przestrzeni<br />

na dysku twardym.<br />

www.lpmagazine.org<br />

9


aktualności<br />

newsy<br />

News<br />

Linux+ w Radio Warszawa Praga<br />

Ruszyła audycja komputerowa mocno<br />

promująca system operacyjny Linux.<br />

Big Bit - Big Bajt, bo tak się nazywa<br />

program, jest prowadzony na żywo na<br />

antenie Radio Warszawa Praga (106,2<br />

FM), w każdy wtorek o godzinie<br />

17:30. W studiu dyskutują redaktorzy<br />

miesięcznika Linux+: naczelny<br />

- Krzysztof Krawczyk i redaktor<br />

- Piotr Truszkowski. Prowadzi Michał<br />

Niwicki. Do dyskusji są zapraszani<br />

miłośnicy Linuksa – tel. 670 10 00.<br />

Radiostację można odbierać<br />

w Warszawie i okolicach, ale audycja<br />

będzie również dostępna na płytach<br />

dołączanych do miesięcznika Linux+.<br />

http://www.radiowarszawapraga.pl/<br />

Connector Novella na GPL<br />

Firma Novell zapowiedziała wydanie<br />

wersji 2.0 klienta poczty Evolution oraz<br />

zintegrowanie go wraz z projektem<br />

Connector for Microsoft Exchange<br />

Server Exchange, który dodatkowo<br />

zmienił swoją licencję na GNU GPL.<br />

Połączenie to pozwoli użytkownikom<br />

Linuksa zarządzanie pocztą<br />

elektroniczną i danymi w ramach<br />

Evolution oraz na łatwą współpracę<br />

z innymi osobami korzystającymi z<br />

komputerów biurowych z systemem<br />

Windows, połączonych z serwerami<br />

Exchange 2000 lub 2003.<br />

http://www.linux.pl/<br />

?id=news&show=993<br />

Red Hat Linux Desktop<br />

Czyżby firma Red Hat nie tak<br />

do końca odwróciła się od tzw.<br />

desktopów? Niedawno zapowiedziała<br />

udostępnienie specjalnej, biurkowej<br />

wersji swojego Linuksa przeznaczonej<br />

dla firm. Dystrybucja zostanie<br />

nazwana Red Hat Desktop i będzie<br />

osiągalna na zasadzie subskrypcji.<br />

Licencja za roczne użytkowanie RHD<br />

ma wynosić 3,5 tysiąca dolarów w<br />

wersji dla 70 stanowisk pracy, czyli 50<br />

dolarów "za biurko". Dla porównania:<br />

kopia Windows XP kosztuje w Stanach<br />

Zjednoczonych 299 dolarów.<br />

http://newsroom.chip.pl/news_<br />

91497.html<br />

http://news.com.com/2100-7344_3-<br />

5205117.html<br />

Polski odział SCO zamknięty<br />

SCO Group zamknęła z końcem<br />

kwietnia warszawskie biuro firmy<br />

odpowiedzialne za sprzedaż<br />

produktów w Europie Wschodniej.<br />

Dotychczasowy country manager,<br />

Alexander Sirotin, odszedł z firmy<br />

i założył własną – LUXOS (Linux UniX<br />

Operating Systems). Luxos skupi się na<br />

sprzedaży systemów produkcji SUSE<br />

Linux, a obecnie oferuje migrację<br />

z systemów SCO na SUSE.<br />

http://www.computerworld.pl/news/<br />

66266.html<br />

Linux Audio Developers 2004<br />

Na wielkim ekranie jedna z najbardziej<br />

rozbudowanych linuksowych aplikacji audio<br />

– Ardour, a w prawym dolnym rogu jej autor<br />

– Paul Davis<br />

Kompozytor Orm Finnendahl demonstruje<br />

graficzne możliwości programu pd i jego<br />

zastosowanie w trakcie wykonania utworu<br />

na żywo z udziałem muzyków i kilku<br />

komputerów<br />

Komputerowe studia nagrań do niedawna<br />

kojarzyły się z programem<br />

Pro Tools i komputerami Macintosh. Dziś<br />

coraz częściej można w nich spotkać programy<br />

Nuendo i Cubase pracujące pod<br />

systemem Windows. Czy jutro będzie<br />

tam można zobaczyć Linuksa? Odpowiedzi<br />

na to pytanie można było poszukać<br />

podczas konferencji LAD 2004 między 29<br />

kwietnia a 2 maja w Karlsruhe. Tamtejsze<br />

Centrum Sztuki i Mediów (ZKM) gościło<br />

po raz drugi osoby związane z rozwojem<br />

oprogramowania audio działającego<br />

pod systemem Linux. W tym roku do grupy<br />

programistów dołączyli również użytkownicy<br />

– kompozytorzy wykorzystujący<br />

Linuksa w pracy.<br />

Jaroslav Kysela i Takashi Iwai (SuSE<br />

Linux AG), autorzy systemu ALSA (sterowników<br />

dla kart dźwiękowych), przedstawili<br />

jego historię, teraźniejszość i wizję<br />

przyszłości. W serii 2.6 jądra Linuksa<br />

sterowniki ALSA zostały z nim zintegrowane<br />

i wyparły dotychczasowy standard<br />

OSS Free. Wśród bardzo szerokiej listy obsługiwanych<br />

urządzeń znajdują się zarówno<br />

popularne Sound Blastery, jak i profesjonalne<br />

karty M-Audio i RME. Takashi<br />

Iwai odpowiadał na najczęściej zadawane<br />

pytania i wyjaśniał, w jaki sposób należy<br />

zgłaszać problemy związane z użytkowaniem<br />

Alsy.<br />

Najwięcej emocji wzbudzała osoba<br />

Paula Davisa (Linux Audio Systems). Jest<br />

on autorem kilku projektów budzących<br />

wielkie nadzieje. Pierwszy z nich to JACK<br />

Audio Connection Kit. Jest to współpracujący<br />

z ALSA protokół przesyłania strumieni<br />

danych audio pomiędzy odtwarzaczami,<br />

procesorami efektów i instrumentami,<br />

umożliwiający dowolne konfiguracje.<br />

Nawiasem mówiąc, pomysł na<br />

JACK–a powstał w ubiegłym roku, podczas<br />

pierwszej edycji konferencji. Drugi<br />

projekt Paula Davisa to nowość – biblioteka<br />

Fst, umożliwiająca uruchamianie wtyczek<br />

VST/Windows. Dzieje się to bez potrzeby<br />

korzystania z Wine, czego wymaga<br />

np. Vst-server, inna próba rozwiązania<br />

problemu współpracy Linuksa ze standardem<br />

VST. Podczas prezentacji można było<br />

między innymi zobaczyć bezproblemowo<br />

działający pod Linuksem sampler Kontakt<br />

firmy Native Instruments.<br />

Największe dziecko Paula Davisa to<br />

Ardour, zaawansowany system rejestracji<br />

twardodyskowej. Program ten ma<br />

wkrótce doczekać się wersji stabilnej 1.0.<br />

W chwili obecnej obsługuje on nielimitowaną<br />

(poza ograniczeniami sprzętowymi)<br />

liczbę ścieżek audio z wtyczkami efektowymi<br />

w standardzie LADSPA (w przyszłości<br />

również VST) oraz pełną automatykę<br />

miksu i efektów. Po wydaniu wersji stabilnej<br />

Paul planuje dodać do programu obsługę<br />

MIDI. Jego marzeniem jest osiągnięcie<br />

w ciągu następnego roku 95% funkcjonalności<br />

programu Cubase SX.<br />

Fernando Lezcano jest znany społeczności<br />

linuksowej jako osoba sprawująca<br />

pieczę nad Planet CCRMA, potężnym repozytorium<br />

RPM programów muzycznych,<br />

kontrolowanym przez system Apt.<br />

Jest to doskonałe miejsce dla osób nie<br />

bardzo wtajemniczonych w zagadnienia<br />

konfiguracji Linuksa, a pragnących korzystać<br />

z oprogramowania muzycznego pod<br />

tym systemem. Można tu znaleźć m.in.<br />

skompilowane jądra z łatami umożliwiającymi<br />

osiągnięcie minimalnego opóźnie-<br />

10 czerwiec 2004


www.lpmagazine.org<br />

11


aktualności<br />

newsy<br />

News<br />

E-portfel dla Linuksa<br />

E-portfel to program do zarządzania<br />

finansami osobistymi. Aplikacja<br />

pozwala na ewidencję wydatków<br />

i przychodów wraz z opisem<br />

transakcji oraz tworzenie kategorii o<br />

dowolnej głębokości zagnieżdżeń.<br />

Ciekawą funkcją jest możliwość<br />

pobierania historii transakcji z banku<br />

internetowego mBank. Zostały<br />

rozpoczęte prace nad przygotowaniem<br />

wersji na Linuksa. Producent zachęca<br />

do współpracy w testach.<br />

http://www.eportfel.com/linux.php<br />

Patenty na oprogramowanie<br />

10 maja 2004 roku w Sali<br />

Kolumnowej Sejmu RP odbyła się<br />

konferencja dotycząca patentów<br />

na oprogramowanie. Została ona<br />

zorganizowana przez polski oddział<br />

ISOC (Internet SOCiety). Istotnym<br />

elementem konferencji była obecność<br />

Richarda M. Stallmana, założyciela<br />

projektu GNU (GNU is Not Unix).<br />

Ponieważ Urząd Patentowy Unii<br />

Europejskiej chce opatentować<br />

oprogramowanie, tak jak jest to<br />

zrobione w Stanach Zjednoczonych<br />

i Japonii, liczne organizacje, głównie<br />

FFII.org, ISOC.org, The Greens, nie<br />

chcą do tego dopuścić. Prelegenci<br />

zastanawiali się m.in. nad tym,<br />

czy Europa musi naśladować<br />

USA w kwestii patentowania<br />

oprogramowania, porównywali<br />

propozycje legislacyjne Parlamentu<br />

i Rady Europy, mówili o wpływie<br />

patentów na rozwój oprogramowania,<br />

a także gospodarczej racjonalności<br />

wprowadzenia patentów.<br />

Organizatorzy, a także zagraniczni<br />

goście, chcieli, aby 17-18 maja,<br />

podczas głosowania nad tą sprawą,<br />

Polska, tak jak inne kraje UE,<br />

powiedziała stanowcze NIE patentom<br />

na oprogramowanie. W związku<br />

z tym postanowili przygotować<br />

oświadczenie na temat swojego<br />

stanowiska, które dostarczą Rządowi.<br />

http://www.linux.pl/?id=article&katego<br />

ria=12&show=219<br />

http://www.pcworld.pl/news/<br />

66395.html<br />

Opera 7.50<br />

Firma Opera Software ogłosiła<br />

dostępność nowej wersji swojego<br />

flagowego produktu, czyli<br />

przeglądarki WWW Opera 7.50 dla<br />

Windows, Maca, Linuksa, FreeBSD<br />

oraz Solaris. Kolejna edycja oferuje<br />

użytkownikom nowości w postaci<br />

przepisanego klienta poczty, czytnika<br />

grup dyskusyjnych, nowego klienta<br />

sieci IRC, przeprojektowanego<br />

interfejsu użytkownika i wiele,<br />

wiele innych ciekawych rozwiązań.<br />

http://www.opera.com/<br />

nia toru audio i odpowiadające im moduły<br />

ALSA i MidiShare. Fernando zademonstrował<br />

Common Music – Common Lisp<br />

Music – Common Music Notation, pakiet<br />

do syntezy dźwięku, kompozycji algorytmicznej<br />

i notacji muzycznej.<br />

Fons Andrieansen dał się poznać jako<br />

człowiek wyjątkowo wrażliwy na jakość<br />

dźwięku. Podczas odrębnych pokazów<br />

zademonstrował bardzo przekonywającą<br />

symulację komputerową organów kościelnych<br />

oraz LAAA, aplikację do pomiarów<br />

charakterystyk przenoszenia urządzeń<br />

audio (np. kart dźwiękowych).<br />

Ważną rolę w programie konferencji<br />

odegrała muzyka. Podczas czterech koncertów<br />

uczestnicy mieli okazję posłuchać<br />

utworów powstałych z wykorzystaniem<br />

programów linuksowych. Nie były to, jak<br />

ma to często miejsce w przypadku podobnych<br />

imprez, tylko prezentacje możliwości,<br />

ale w znacznej mierze poważne<br />

kompozycje z udziałem “live electronics”.<br />

Szczególnie utwór Ludgera Bruemmera<br />

“Le temps du miroir” na fortepian<br />

i live electronics w wykonaniu Maki Namekawy<br />

(fortepian) i kompozytora (komputer)<br />

mógł przypaść do gustu. Nie bez<br />

znaczenia dla odbioru muzyki były wspaniałe<br />

warunki akustyczne i 8-kanałowa<br />

aparatura nagłaśniająca w sali koncertowej<br />

“Kubus”.<br />

Ciekawy utwór z udziałem żywych<br />

muzyków przedstawił również Orm Finnendahl<br />

(Folkwang-Hochschule Essen).<br />

Następnego dnia można było wgłębić się<br />

w tajniki pracy kompozytora podczas wykładów,<br />

gdy prezentował, często niestandardowe,<br />

użycie programów linuksowych<br />

jako pomoc w kompozycji.<br />

Poza wykładami i koncertami na uwagę<br />

zasługują prezentacje dwóch sponsorów<br />

imprezy (firmy Hartmann i Lionstracs)<br />

instrumentów Neuron i Mediastation,<br />

wykorzystujących Linuksa jako system<br />

operacyjny.<br />

Konferencja Linux Audio Developers<br />

była świetną okazją wymiany doświadczeń<br />

oraz poznania możliwości systemu<br />

Linux w zakresie audio. Temperatura rozmów<br />

i dyskusji pozwala mieć nadzieję na<br />

jeszcze szybszy rozwój tej grupy programów,<br />

a także wzrost popularności systemu<br />

Linux wśród muzyków i realizatorów<br />

dźwięku.<br />

http://www.zkm.de/lad<br />

Xiph.org dołącza do Linuxaudio.org<br />

Dyskusja na zakończenie konferencji<br />

(Fernando Lezcano, Paul Davis, Takashi<br />

Iwai i Andrea Glorioso)<br />

Fundacja Xiph.org dołączyła 10 maja<br />

do konsorcjum Linuxaudio.org, które<br />

w rezultacie posiada już teraz dziewiętnastu<br />

członków (AGNULA, ALSA,<br />

Ardour, Audacity, Boost Hardware, Core<br />

Sound, Dyne:bolic, Fervent Software,<br />

4Front Technologies, GStreamer, JACK,<br />

JAMin, Linux Audio Systems, Lionstracs,<br />

Mandrakesoft, Mirror Image Studios, Plugin.org.uk,<br />

Rosegarden oraz Xiph.Org Foundation).<br />

Linuxaudio.org jest niedochodową<br />

organizacją, zrzeszającą firmy i projekty<br />

Open Source, które wykorzystują Linuksa<br />

i inne Wolne Oprogramowanie<br />

do pracy nad dźwiękiem. Celem utworzonego<br />

w styczniu konsorcjum jest<br />

koordynowanie wspólnych prac jego<br />

członków, współpracę przy promowaniu<br />

Linuksa w zastosowaniach<br />

dźwiękowych oraz centrum kontaktu<br />

dla potencjalnych partnerów biznesowych.<br />

Fundacja Xiph.org spełnia wszystkie<br />

założenia członkowskie, gdyż jest firmą,<br />

która koncentruje się na tworzeniu<br />

multimedialnych kodeków nowej generacji,<br />

nie tylko publicznie dostępnych,<br />

ale także bez ograniczeń licencyjnych.<br />

Najbardziej znane projekty audio,<br />

którymi się aktualnie zajmuje, to<br />

Vorbis (uniwersalne kompresja strumienia<br />

audio), Speex (kompresja<br />

mowy) oraz FLAC (Free Lossless Audio<br />

Codec).<br />

http://www.linuxaudio.org/<br />

12 czerwiec 2004


aktualności<br />

jądro linux<br />

News<br />

Reiser4 i zewnętrzne<br />

atrybuty plików<br />

Reiser4, nowa wersja dość<br />

popularnego systemu plików<br />

z księgowaniem reiserfs, ciągle<br />

jeszcze nie trafiła do oficjalnej serii<br />

jąder Linuksa i pewnie nie stanie<br />

się to prędko. Z tego powodu<br />

niektórzy deweloperzy próbują<br />

rozszerzać istniejącą wersję tak, aby<br />

mogła sprostać dość podstawowym<br />

wymaganiom na system plików.<br />

Takim wymaganiem są przykładowo<br />

„zewnętrzne” atrybuty plików,<br />

wymagane m.in przez ACL (Access<br />

Control Lists) lub SELinux. Hans<br />

Reiser, twórca i główny opiekun<br />

reiserfs i Reiser4, wyraźnie sprzeciwia<br />

się takim doraźnym rozwiązaniom.<br />

To powoduje, że reiserfs jest<br />

i najprawdopodobniej będzie w tyle<br />

w stosunku do innych systemów<br />

plików, aż do chwili, w której zostanie<br />

zastąpiony przez Reiser4.<br />

http://lwn.net/Articles/81696/<br />

Funkcje inline<br />

Kod jądra Linux zawiera pewne<br />

specyficzne konstrukcje, których<br />

zwykle nie używa się przy<br />

programowaniu w C w przestrzeni<br />

użytkownika. Jednym z takich<br />

elementów są funkcje inline,<br />

czyli funkcje rozwijane w miejscu<br />

wywołania. Przesłanką do ich<br />

używania jest wydajność. Nie ma<br />

jednak nic za darmo; jeśli używa<br />

się funkcji inline, to zwiększa się<br />

rozmiar jądra. Okazuje się jednak,<br />

że w niektórych przypadkach<br />

stosowanie funkcji rozwijanych<br />

w miejscu wywołania wcale nie daje<br />

pożądanych efektów, w szczególności,<br />

gdy dana funkcja jest wywoływana<br />

wiele razy w różnych miejscach<br />

w jądrze. Przekonał się o tym Stephen<br />

Hemminger, który wyeliminował<br />

atrybut inline z zestawu funkcji SKB<br />

(socket buffers) i uzyskał w testach<br />

trzyprocentową poprawę wydajności.<br />

http://lwn.net/Articles/81696/<br />

Kolejki POSIX w Linuksie<br />

W połowie kwietnia do oficjalnej<br />

serii jąder Linux trafiło sporo nowych<br />

rzeczy, a wśród nich implementacja<br />

kolejek POSIX przygotowana przez<br />

dwóch Polaków: Michała Wrońskiego<br />

i Krzysztofa Benedyczaka. Kolejki<br />

te są fragmentem IPC, używanym<br />

do wymiany informacji między<br />

procesami. Do tej pory w Linuksie<br />

istniały kolejki komunikatów w tzw.<br />

stylu Systemu V. Nowa implementacja<br />

nie zastępuje starej, lecz po prostu jest<br />

zgodna z innym standardem.<br />

http://www-users.mat.uni.torun.pl/<br />

~wrona/posix_ipc/<br />

Dostrajanie obsługi wymiany<br />

jądrze Linux, w trakcie rozwoju serii<br />

2.5, dodano możliwość ustala-<br />

W<br />

nia parametru swappiness, który mówi,<br />

jak chętnie system ma korzystać z partycji<br />

bądź pliku wymiany. Wartość tego parametru<br />

ustala się poprzez interfejs /proc<br />

w pliku /proc/sys/vm/swappiness i im jest<br />

ona większa, tym częściej możemy spodziewać<br />

się, że system będzie przenosił<br />

niewykorzystywane strony pamięci na<br />

dysk. To, czy częste swapowanie jest pożądane<br />

i korzystne, szczególnie w przypadku<br />

komputerów biurkowych, okazuje<br />

się nie być jednoznaczne. Wielu deweloperom,<br />

np. Rikowi van Rielowi, wydaje<br />

się, że system powinien zrzucać na<br />

dysk jak najmniej pamięci, bo dzięki temu<br />

jest znacznie bardziej interaktywny. Dzięki<br />

unikaniu wymiany między pamięcią<br />

a dyskiem zyskuje się mniejsze opóźnienia.<br />

Andrew Morton argumentuje zaś, że<br />

zrzucanie rzadko używanych stron pamięci<br />

na dysk poprawia działanie systemu<br />

właśnie dlatego, że oczyszcza pamięć<br />

GPL\0<br />

Jeszcze w trakcie prac nad jądrem 2.4 deweloperzy<br />

Linuksa wpadli na pomysł,<br />

aby moduły jądra Linux same jasno określały<br />

zasady ich licencjonowania. W tym<br />

celu wprowadzono makro MODULE_LICEN-<br />

SE. Do tej pory określono pięć rodzajów licencji<br />

uznanych za 'wolne', czyli właściwe<br />

dla modelu rozwijania jądra. Są to: 'GPL',<br />

'GPL v2', 'GPL and additional rights', 'Dual<br />

BSD/GPL' oraz 'Dual MPL/GPL'. Jeśli jakiś<br />

załadowany moduł przedstawia się jako<br />

moduł o innej licencji, to jądro zostaje<br />

uznane za 'napiętnowane' (ang. tainted).<br />

Celem wprowadzenia tej modyfikacji było<br />

umożliwienie łatwej identyfikacji jąder<br />

zawierających fragmenty, których kod źródłowy<br />

nie został uwolniony. Dzięki niej<br />

użytkownik może łatwo wiedzieć, że system,<br />

którego używa, nie jest w pełni wolnym<br />

oprogramowaniem, a deweloperzy jądra<br />

mogą ignorować zgłoszenia o błędach<br />

od osób, które doświadczają problemów z<br />

takimi systemami. Inną zaletą piętnowania<br />

jest ułatwienie konkretnym dostawcom<br />

stosowania własnej polityki odnośnie binarnych<br />

modułów.<br />

Oczywiście, każdy może w MODU-<br />

LE_LICENSE umieścić to, co chce, jednakże<br />

trudno się spodziewać, że ktoś tego nie<br />

zauważy. Nadużycia mogą się zdarzyć, ale<br />

dość łatwo jest je wyśledzić. Carl Daniel<br />

z danych, do których dostęp jest sporadyczny.<br />

Rzeczywiście, czasem może wydłużyć<br />

się czas, po którym jakaś aplikacja,<br />

np. Mozilla, nadaje się do używania,<br />

gdy użytkownik był przez kilka sekund<br />

nieaktywny, ale jest to koszt znacznie<br />

mniejszy niż koszt utrzymania niewykorzystywanych<br />

intensywnie stron w pamięci<br />

maszyny.<br />

Gdyby Andrew Morton nigdy nie miał<br />

nic wspólnego z pierwszą wersją łatki<br />

low-latency, można by pomyśleć, że jego<br />

twierdzenia są dziwne i nieprzemyślane.<br />

Wydaje się jednak, że ponieważ jest<br />

osobą z dużym doświadczeniem w pracy<br />

nad jądrem, to coś w tym musi być. Tym<br />

razem dyskusja dotyczy jedynie łatwo<br />

modyfikowalnego parametru. To, jaka<br />

wartość swappiness jest najlepsza, zależy<br />

od administratora systemu – nie jest decyzją<br />

podjętą za niego przez deweloperów,<br />

ale dzięki dyskusji można dowiedzieć się,<br />

jakie będą tego konsekwencje.<br />

http://kerneltrap.org/node/view/3000<br />

Hailfinger zauważył przykładowo, że<br />

w module dostarczanym przez firmę<br />

Linuxant w MODULE_LICENSE znalazł<br />

się następujący tekst: "GPL\0 for files in the<br />

\"GPL\" directory; for others, only LICENSE<br />

file applies" (GPL\0 dla plików w katalogu<br />

GPL, dla innych stosuje się plik LICENSE).<br />

Takie oznaczenie modułu wygląda na<br />

dość sprytne oszustwo, wykorzystujące tę<br />

właściwość języka C, że każdy napis kończy<br />

się znakiem '\0'. W ten sposób udało<br />

się zmylić makro. Deweloperzy zaczęli<br />

prześcigać się w sposobach uniemożliwiających<br />

podejmowanie takich praktyk.<br />

Niektórzy chcieli z tego zrobić kwestię tylko<br />

i wyłącznie prawną. Do dyskusji włączył<br />

się również przedstawiciel Linuxant<br />

tłumacząc, że takie rozwiązanie to pewne<br />

'obejście' ich problemów. Napisał, że<br />

nie zawsze tak działają i powoływał się na<br />

pewne utrudnienia patentowe.<br />

Niezależnie od tego, czy Linuxant<br />

miał prawo tak zrobić, interesujące jest<br />

to, że taka próba nie umknęła czyjejś<br />

uwadze. Wielu deweloperom zależy na<br />

tym, aby Linux był naprawdę otwarty.<br />

Zależy im na tym nie tylko z powodów<br />

ideologicznych, ale również technicznych<br />

– łatwiej jest opiekować się kodem, w którym<br />

wszystko jest pod kontrolą.<br />

http://kerneltrap.org/node/view/2991<br />

14 czerwiec 2004


kernel@lpmagazine.org<br />

dział prowadzi: Maja Królikowska<br />

Domeny szeregowania<br />

Szeregowanie procesów (ang. scheduling)<br />

jest jednym z najważniejszych<br />

zadań jądra systemu operacyjnego.<br />

W Linuksie bardzo długo funkcjonował<br />

ten sam algorytm szeregowania procesów,<br />

ale został zmieniony dopiero przez<br />

Ingo Molnara w trakcie rozwijania<br />

wersji 2.5. Nowy scheduler w pełni<br />

zastąpił stary, ale w trakcie wydawania<br />

pierwszych testowych wersji serii<br />

2.6 pojawiły się głosy, że nie przystaje<br />

on do nowoczesnych rozwiązań,<br />

takich jak hyperthreading czy<br />

architektura NUMA. Chociaż ostatnio<br />

trochę mniej można przeczytać<br />

na linux-kernel o algorytmie szeregowania,<br />

to grupa hakerów jądra wciąż<br />

nad nim pracuje. Efekty tej pracy<br />

można oglądać w jądrach serii -mm.<br />

Główną ideą, która stoi za przygotowywanymi<br />

właśnie poprawkami algorytmu<br />

szeregowania, jest pojęcie 'domen<br />

szeregowania' (ang. scheduling domains).<br />

Problem z szeregowaniem procesów<br />

dotyczy tylko maszyn z wieloma procesorami<br />

(fizycznymi lub logicznymi)<br />

i polega na tym, że w systemie może<br />

istnieć wiele logicznych procesorów,<br />

dla których wzajemne relacje są różne.<br />

Przykładowo, w przypadku hyperthreadingu<br />

mamy dwa logiczne procesory,<br />

które dzielą między sobą wszystkie<br />

zasoby – pamięć, cache, a tak naprawdę<br />

nawet sam procesor. W przypadku<br />

architektury SMP wszystkie procesory<br />

mają taki sam dostęp do pamięci, ale<br />

mają oddzielne pamięci cache.<br />

W przypadku NUMA dostęp do fragmentów<br />

pamięci nie jest taki sam dla<br />

wszystkich procesorów. W związku<br />

z tym, przenoszenie procesów pomiędzy<br />

procesorami może bardzo<br />

zależeć od tego, w jakiej wzajemnej<br />

relacji one pozostają. Warto tu<br />

zauważyć, że system NUMA można<br />

widzieć jako zestaw architektur SMP,<br />

które z kolei składają się z fizycznych<br />

procesorów, które dzięki hyperthreading<br />

mogą być znowu widziane<br />

jako dwa logiczne. Współczesne architektury<br />

potrzebują zatem często<br />

rozwiązania, które obsłuży wszystkie<br />

trzy przypadki na raz.<br />

Bardzo ważnym zadaniem algorytmu<br />

szeregującego procesy jest wyrównywanie<br />

obciążeń między procesorami.<br />

Jak już wspomniałam, przenoszenie<br />

procesów między procesorami może<br />

różnie kosztować, zależnie od tego,<br />

w jakiej relacji są te dwa procesory. Problem,<br />

który należy rozwiązać, polega na<br />

tym, aby jakoś 'nauczyć' algorytm szeregujący<br />

inteligentnego i jak najmniej kosztownego<br />

wykonywania postawionego<br />

mu zadania. Z tego powodu wymyślono<br />

domeny szeregowania. Taka pojedyncza<br />

domena to zbiór procesorów, które<br />

mają wspólne zasady szeregowania<br />

i których obciążenie może być wyrównywane<br />

z zachowaniem pewnych ustalonych<br />

zasad. Każda domena zawiera<br />

grupy procesorów i traktuje je jak<br />

pojedyncze jednostki. Domeny szeregowania<br />

są hierarchiczne i każda z nich<br />

zawiera pewne dane będące wskazówkami,<br />

w jaki sposób ma się odbywać<br />

szeregowanie w danej domenie. Na każdym<br />

poziomie odbywa się to trochę inaczej:<br />

• Na poziomie procesora z hyperthreadingiem<br />

wyrównywanie obciążenia<br />

odbywa się bardzo często,<br />

nawet jeśli różnice są bardzo małe.<br />

Koszt takiego działania jest żaden,<br />

ponieważ procesory logiczne dzielące<br />

między siebie jeden procesor fizyczny<br />

mają wspólny cache.<br />

• Na poziomie fizycznych procesorów<br />

próby wyrównywania obciążenia<br />

są znacznie rzadsze, a w przypadku,<br />

gdy cały system jest zajęty, są<br />

w ogóle ucinane. Wyrównywanie<br />

obciążenia odbywa się tylko wtedy,<br />

gdy rozłożenie jest naprawdę nierównomierne.<br />

• W przypadku węzłów NUMA próby<br />

wyrównywania są naprawdę rzadkie.<br />

Dzieje się tak ze względu na<br />

koszt przenoszenia procesów między<br />

węzłami NUMA.<br />

Szeregowanie oparte o domeny nie<br />

jest jeszcze do końca gotowe – wymaga<br />

jeszcze trochę szczegółowej pracy.<br />

Można mieć nadzieję, że trafi niedługo<br />

do oficjalnego jądra i że dzięki domenom<br />

szeregowania skończą się kłopoty<br />

z schedulingiem w 2.6.<br />

http://lwn.net/Articles/80601/<br />

Nowości w SATA<br />

Jeff Garzik ogłosił, że sterownik<br />

Serial ATA, rozwijany przez niego od<br />

jakiegoś czasu, został rozszerzony<br />

o obsługę specyfikacji AHCI<br />

(Advanced Host Controller Interface).<br />

Specyfikacja ta jest w pełni otwarta<br />

i jest z nią zgodny chip ICH6 Intela.<br />

Jest to wyjątek na rynku kontrolerów,<br />

ponieważ większość z nich to<br />

rozwiązania objęte umowami typu<br />

NDA. Chociaż jego architektura jest<br />

otwarta, to nie ustępuje w niczym<br />

innym rozwiązaniom. Jeff Garzik<br />

przyznał, że znacznie lepiej pracuje się<br />

ze sprzętem, którego specyfikacja jest<br />

znana i otwarta. Obsługa SATA została<br />

także całkiem niedawno przeniesiona<br />

z jąder 2.6 na jądra 2.4 jako kolejna<br />

z ostatnich nowości w serii 2.4.<br />

http://kerneltrap.org/node/view/2977<br />

http://kerneltrap.org/node/view/2969<br />

Z ketchupem<br />

Jakiś czas temu Matt Mackall<br />

opublikował Kpatchup, narzędzie<br />

automatyzujące ściąganie i łatanie<br />

kodu jądra Linux. Z czasem ten skrypt<br />

napisany w Pythonie zmienił nazwę<br />

na wdzięczniejszą – Ketchup. Skrypt<br />

ściąga sam łatki, których nałożenie jest<br />

niezbędne do uzyskania pożądanego<br />

efektu – wystarczy określić wersję,<br />

która nas interesuje lub po prostu<br />

zażyczyć sobie najnowszej. Działa<br />

zarówno dla jąder serii 2.4, jak i 2.6,<br />

obsługuje też kilka zestawów łatek<br />

(-mm, -tiny, -mjb).<br />

http://kerneltrap.org/node/view/2976<br />

Budzenie procesów<br />

W jądrze systemu operacyjnego czasem<br />

zdarza się, że trzeba poczekać na<br />

to, aby jakaś strona pamięci mogła<br />

być przez niego użyta, np. wtedy,<br />

gdy jest ona przedmiotem operacji<br />

wejścia-wyjścia. Jeszcze we wczesnych<br />

jądrach 2.4 z każdą stroną pamięci<br />

była związana oddzielna kolejka<br />

oczekujących procesów, co, jak<br />

można się domyślić, powodowało<br />

duże zużycie pamięci. Z tego powodu<br />

zmniejszono liczbę tych kolejek<br />

– przy użyciu funkcji mieszającej<br />

przyporządkowano jedną kolejkę wielu<br />

stronom. Według Williama Lee Irvina<br />

rozwiązanie to nie jest doskonałe,<br />

bo zbyt często zdarzają się kolizje<br />

i budzone są procesy, które nie mają<br />

nic wspólnego z daną stroną pamięci,<br />

a tylko trafiły do tej samej kolejki.<br />

Usprawnieniem tego mechanizmu ma<br />

być przygotowana przez niego łata<br />

implementująca filtrowane kolejki.<br />

W tym rozwiązaniu pojedyncze<br />

procesy mogą dostarczyć pewnych<br />

kluczy i na tej podstawie tylko procesy<br />

o danym kluczu będą budzone.<br />

http://lwn.net/Articles/82759/<br />

http://lwn.net/Articles/83506/<br />

www.lpmagazine.org<br />

15


aktualności<br />

debian<br />

News<br />

Pakiety dnia!<br />

Andrew Sweger codziennie publikuje<br />

opisy pakietów, które mają na celu<br />

przybliżenie ludziom ciekawego<br />

oprogramowania dostępnego<br />

w dystrybucji testing Debiana. Do<br />

tej pory zostało opisanych ponad 30<br />

pakietów. Warto poczytać!<br />

http://www.livejournal.com/users/<br />

debaday/<br />

Instalator Debiana<br />

beta 4 i Linux 2.6<br />

Joey Hess wysłał informację, że<br />

debian-installer używający Linuksa<br />

2.6 jest już blisko. W chwili obecnej<br />

są jeszcze pewne problemy z<br />

partycjonowaniem dysków IDE.<br />

Debian installer beta 4 z jądrem<br />

2.6 jest w tej chwili dostępny tylko<br />

dla platformy i386. Nowa beta<br />

jest także przetłumaczona na 35<br />

języków. Uprasza się o instalowanie<br />

i wypełnianie raportów instalacji,<br />

aby pomóc deweloperom ulepszyć<br />

instalator przed wydaniem Sarge.<br />

http://kitenet.net/%7Ejoey/blog/entry/<br />

26-2004-04-14-01-25.html<br />

http://lists.debian.org/debian-develannounce/2004/04/msg00025.html<br />

Nowy katalog /media<br />

Joey Hess ogłosił, że nowa wersja<br />

pakietu base-files zawiera nowy<br />

katalog /media, a usunięto<br />

z niej katalogi /cdrom i /floppy.<br />

Nowe rozwiązanie jest zgodne ze<br />

standardem File System Hierarchy<br />

Standard (FHS). Ponieważ jednak<br />

stare ścieżki są zakodowane<br />

w wielu programach, to rozważa się<br />

utworzenie dowiązań symbolicznych<br />

z /cdrom i /floppy do /media, które<br />

zostałyby usunięte po wydaniu Sarge.<br />

http://lists.debian.org/debian-devel/<br />

2004/04/msg07012.html<br />

Badania nad bezpieczeństwem<br />

GNU/Linuksa<br />

W odpowiedzi na powszechnie<br />

krytykowane badania bezpieczeństwa<br />

GNU/Linuksa (w odniesieniu do...<br />

Windows) Zespoły Bezpieczeństwa<br />

z Mandrake, Red Hata, SUSE i Debiana<br />

wydały wspólne oświadczenie.<br />

Głównym zarzutem jest, iż<br />

pomimo pozornego uwzględnienia<br />

jakościowych różnic między błędami<br />

dotyczącymi bezpieczeństwa, to<br />

w raporcie tak naprawdę wszystkie<br />

błędy potraktowano tak samo,<br />

niezależnie od prawdziwego<br />

niebezpieczeństwa stwarzanego przez<br />

każdy z nich dla użytkowników.<br />

W wyniku tego wypaczenia konkluzje<br />

raportu Forrestera zdają się mieć<br />

ograniczoną rzeczywistą wartość.<br />

http://www.debian.org/News/2004/<br />

20040406<br />

Wolność, Polityka i Sarge (w 2005?)<br />

Te wydarzenia zaskoczyły niemalże<br />

wszystkich. Po poprzednich głosowaniach:<br />

nad wsparciem dla sekcji non-free<br />

i wyborem nowego Lidera Debiana, najwyraźniej<br />

niewielu ludzi miało wystarczająco<br />

dużo samozaparcia, aby dokładnie<br />

przeanalizować drobną z pozoru “poprawkę<br />

edytorską” do Kontraktu Społecznego<br />

Debiana. Poprawka ta została przyjęta<br />

przy bardzo niskiej frekwencji, ale wystarczającej<br />

do ważności głosowania. W<br />

kilka godzin po ogłoszeniu wyników, Menedżer<br />

Wydania, Anthony Towns, wysłał<br />

list z informacją o statusie wydania Sarge<br />

w kontekście właśnie zatwierdzonych poprawek<br />

do Kontraktu Społecznego. W tym<br />

momencie rozpoczęła się burza.<br />

Ujmując to bardzo zwięźle, tzw. “poprawki<br />

edytorskie” praktycznie uniemożliwiają<br />

wydanie Sarge w przeciągu najbliższych<br />

miesięcy. Poprzednio użyte słowo<br />

“oprogramowanie” zostało zastąpione<br />

słowem “komponent” i w związku z tym<br />

Debian nie może zawierać żadnych komponentów,<br />

których licencja nie jest zgodna<br />

z Wytycznymi Dotyczącymi Wolnego<br />

Oprogramowania (DFSG). Poprzednio<br />

użyte słowo “oprogramowanie” pozwalało<br />

na interpretację Kontraktu Społecznego,<br />

która umożliwiałaby umieszczenie<br />

w sekcji main Debiana elementów nie będących<br />

oprogramowaniem, a dostępnych<br />

tylko na licencji niezgodnej z DFSG. Anthony<br />

napisał: “nie wydaje mi się, abym<br />

mógł wciąż usprawiedliwiać wyjątkowe<br />

(pobłażliwe) traktowanie dokumentacji,<br />

firmware czy innego nie-oprogramowania,<br />

gdyż Kontrakt Społeczny został zmieniony<br />

tak, że teraz w jasny sposób dotyczy<br />

on także nie-oprogramowania.”. To<br />

z kolei powoduje szereg praktycznych<br />

problemów:<br />

Bez względu na okoliczności, wszyscy chcą<br />

wydania Sarge jak najszybciej<br />

Anthony Towns omawia prace<br />

nad Debianem<br />

• istotne pakiety, takie jak glibc, nie będą<br />

miały dokumentacji;<br />

• wiele sprzętu nie będzie mogło być<br />

obsługiwane przez Debiana;<br />

• we wszystkich przypadkach firmware<br />

będzie musiało być usunięte z jądra<br />

Linuksa do przestrzeni użytkownika;<br />

• firmware będzie musiało być zawsze<br />

pakietowane oddzielnie od XFree86<br />

i jądra;<br />

• debian-installer będzie musiał zostać<br />

wyposażony w możliwość pobierania<br />

niewolnego firmware z non-free, ale<br />

nie innych części non-free;<br />

• firmware dla sterowników potrzebnych<br />

do startu systemu (np. karty sieciowe)<br />

będzie musiało zostać udostępnione<br />

w sekcji non-free w formie<br />

udebów, a także będzie trzeba stworzyć<br />

niewolne obrazy Instalatora Debiana,<br />

które będą potrzebne ludziom<br />

mających sprzęt wymagający tych sterowników<br />

do startu.<br />

Prace nad rozwiązaniem niektórych<br />

z tych problemów trwają już od dawna,<br />

ale nawet przy zwiększonym zaangażowaniu<br />

ludzi w ich rozwiązanie, nie ma realnej<br />

szansy na wydanie Sarge w najbliższym<br />

czasie.<br />

List Anthonego Townsa rozpoczął<br />

burzliwą dyskusję, w trakcie której okazało<br />

się, że najprawdopodobniej większość<br />

deweloperów nie miała pojęcia o możliwych<br />

konsekwencjach tych, wydawałoby<br />

się, niewielkich zmian. Pojawiły się<br />

też oskarżenia, że pewna grupa deweloperów<br />

przemyciła kontrowersyjną zmianę<br />

w Kontrakcie Społecznym tytułując ją jako<br />

“korektę edytorską”, a także pisząc niejasne<br />

ogłoszenie zmiany, z którego trudno<br />

było wyczytać, jaki dokładnie jest cel<br />

16 czerwiec 2004


debian@lpmagazine.org<br />

dział prowadzi: Grzegorz Prokopski<br />

zmiany i jak dokładnie zmiany wyglądają<br />

(ogłoszenie zawierało jedynie nowy tekst,<br />

a nie porównanie starego i nowego tekstu).<br />

Niektórzy mieli też pretensje do Anthonego,<br />

że powinien był wysłać ten list<br />

wcześniej, przed zakończeniem głosowania,<br />

a wtedy z pewnością wynik byłby inny<br />

(bardzo prawdopodobne, biorąc pod<br />

uwagę wyniki niedawnego głosowania<br />

nad pozostawieniem sekcji non-free). Najwyraźniej<br />

jednak, ani Anthony, ani też autorzy<br />

samej poprawki nie widzieli wcześniej<br />

pełni konsekwencji przyjęcia tych<br />

zmian.<br />

Co ciekawe, dyskusja nie dotyczyła<br />

samej idei poprawki Kontraktu Społecznego,<br />

aby jaśniej wyznaczał on wymagania<br />

dla elementów składających się na<br />

dystrybucję Debiana, ale raczej problemu<br />

bardzo bezpośredniego i istotnego: Sarge<br />

musi być wydany jak najszybciej. Nie<br />

wydaje się, aby ktokolwiek chciał opóźniać<br />

wydanie Sarge do 2005 roku! Wśród<br />

wielu propozycji można było też znaleźć<br />

propozycję samokasującej się zmiany do<br />

Kłopoty z firmware<br />

Kontraktu Społecznego, która pozwoliłaby<br />

wydać Sarge tak, jakby w mocy była<br />

stara wersja Kontraktu Społecznego, a nowa<br />

jego formuła weszłaby w pełni w życie<br />

dopiero po wydaniu Sarge. Co ciekawe,<br />

propozycja ta została wysunięta przez te<br />

same osoby, które zaproponowały “zmiany<br />

edytorskie”, które wywołały to całe<br />

zamieszanie. W istocie, pojawiło się aż<br />

5 niezależnych propozycji, które wkrótce<br />

zostaną poddane pod jedno, wspólne<br />

głosowanie. Byłoby bardzo dziwne, gdyby<br />

deweloperzy Debiana świadomie zdecydowali<br />

się na opcję, która nie umożliwiałaby<br />

szybkiego wydania Sarge.<br />

[Zmiany] http://www.debian.org/vote/<br />

2004/vote_003<br />

[Anthony] http://lists.debian.org/debianvote-0404/msg00074.html<br />

[DFSG] http://www.debian.org/social_<br />

contract<br />

[5Propozycji] http://lists.debian.org/<br />

debian-vote/2004/05/msg00062.html<br />

J<br />

. D. Hood podsumował opinie, w jaki<br />

sposób Debian mógłby obsługiwać binarne<br />

komponenty firmware, dla których<br />

nie ma dostępnych źródeł. Opiekun pakietów<br />

jądra, Herbert Xu, dodał do dyskusji<br />

swój punkt widzenia, wyjaśniając między<br />

innymi, że wolałby wszystkie pakiety<br />

jądra przenieść do sekcji non-free.<br />

Po usunięciu pierwszych binarnych<br />

firmware z jądra, przyszła kolej na sprawdzenie<br />

XFree86 i innego oprogramowania.<br />

Okazuje się, że jeśli Debian będzie<br />

kontynuował usuwanie tego rodzaju<br />

oprogramowania, to np. MGA, Rage 128<br />

czy Radeon DRM nie będą mogły być obsługiwane.<br />

Anthony Towns wyjaśnił też, że problemy<br />

z binarnymi firmware dzielą się na<br />

dwie kategorie: firmware, które jest niewolne<br />

i firmware, które narusza GNU<br />

GPL. Podczas gdy pierwszy rodzaj może<br />

być traktowany łagodniej dla wydania<br />

Sarge, to drugi musi być rozwiązany<br />

jak najszybciej. Nadmienił też, że problemy<br />

te znane są od dwóch lat i żaden<br />

z nich nie jest uważany za krytyczny dla<br />

wydania Sarge.<br />

Idealnym rozwiązaniem problemu<br />

z firmware byłoby wydzielenie go w postaci<br />

pakietów w sekcji non-free i użycie<br />

specjalizowanego programu, aby je załadować.<br />

W większości przypadków wydaje<br />

się to możliwe do zrealizowania,<br />

choć nie zostało to jeszcze zaimplementowane,<br />

głównie dlatego, że Linus uważa<br />

usuwanie firmware z jądra za bardzo<br />

głupi pomysł. Prawdziwe problemy pojawiają<br />

się jednak, gdy załadowanie firmware<br />

jest potrzebne do startu samego systemu.<br />

Aby umożliwić instalację Debiana<br />

na takim sprzęcie, Debian-installer będzie<br />

musiał zostać wyposażony w możliwość<br />

pobierania pakietów z firmware<br />

z sekcji non-free. W każdym przypadku<br />

powinno być jasne, że deweloperzy Debiana<br />

nie chcą utrudniać życia użytkownikom,<br />

a jedynie, zgodnie z umową społeczną,<br />

oddzielić oprogramowanie wolne<br />

od niewolnego.<br />

http://lists.debian.org/debian-devel-0404/<br />

msg00309.html<br />

http://lists.debian.org/debian-devel/2004/<br />

04/msg00405.html<br />

http://blog.bofh.it/id_27<br />

http://lists.debian.org/debian-release/<br />

2004/04/msg00060.html<br />

http://azure.humbug.org.au/%7Eaj/blog/<br />

2004/04/17#2004-04-17-firmware<br />

Licencja ReiserFS 4<br />

Hans Reiser wydał reiser4progs na<br />

licencji GPL z “wyjaśnieniami”, które<br />

powodują, że cały pakiet nadaje się<br />

w najlepszym przypadku do sekcji<br />

non-free. W “wyjaśnieniach” próbuje<br />

on m.in. narzucić interpretację,<br />

że wtyczki i klastrowe systemy<br />

plików zbudowane na tym systemie<br />

plików są pracami wywodzącymi<br />

się (ang. derivative works) z tego<br />

systemu plików. Takie “wyjaśnienia”,<br />

zmieniające zwyczajową interpretację<br />

GPL, prawdopodobnie powodują, że<br />

to oprogramowanie nie jest w ogóle<br />

dystrybuowalne.<br />

http://lists.debian.org/debian-legal/<br />

2004/04/msg00229.html<br />

Debian Progeny 2.0<br />

Jeden z użytkowników Debiana<br />

przetestował wydanie alfa Debiana<br />

Progeny 2.0, którego obrazy CD<br />

zostały niedawno udostępnione.<br />

Wydanie to jest pierwszą<br />

materializacją idei GNU/Linuksa<br />

składanego z komponentów. Każdy<br />

z komponentów, np. XFree86 czy<br />

GNOME 2.4, ma swoje własne<br />

repozytorium APT, co ma na<br />

celu ułatwienie uaktualniania<br />

indywidualnych komponentów.<br />

http://lwn.net/Articles/80473/<br />

Planet Debian i Debian Planet<br />

W serwisie Debian Planet pojawiło<br />

się pytanie postawione przez<br />

autorów tego serwisu, czy w związku<br />

z zaistnieniem i dużą popularnością<br />

Planet Debian (agregatora blogów<br />

ludzi związanych z Debianem,<br />

który na dodatek jest często mylony<br />

z Debian Planet) jest jeszcze miejsce<br />

i zapotrzebowanie na ich serwis?<br />

Czytelnicy niemal jednogłośnie<br />

wypowiedzieli się twierdząco.<br />

http://www.debianplanet.org/<br />

node.php?id=1100<br />

http://www.debianplanet.org/<br />

Czy już czas na GNOME 2.6<br />

w Debian unstable?<br />

Na liście debian-release zastanawiano<br />

się, czy GNOME 2.6 i GTK 2.4 nie<br />

powinny już zostać włączone do<br />

dystrybucji unstable ? Co prawda,<br />

grupa deweloperów opiekująca<br />

się wspólnie pakietami GNOME<br />

nie planuje jeszcze tego kroku, to<br />

same pakiety znajdują się już w<br />

experimental i zostały przetestowane<br />

na dwóch architekturach. Menedżer<br />

wydania odradza jednak pośpiech<br />

w tej sprawie.<br />

http://lists.debian.org/debian-release/<br />

2004/04/msg00082.html<br />

http://lists.debian.org/debian-release/<br />

2004/04/msg00109.html<br />

www.lpmagazine.org<br />

17


tualności<br />

News<br />

aktualności<br />

mandrake<br />

OpenOffice.org 1.1.1 KDE NWF<br />

OpenOffice.org to program<br />

niezależny od platformy, na jakiej jest<br />

uruchamiany, jednak aby upodobnić<br />

go do aktualnego środowiska, powstał<br />

projekt Native Widget Framework.<br />

W ramach NWF powstała między<br />

innymi wersja 1.1.1 z ikonami<br />

zapożyczonymi z KDE i szybko po<br />

ukazaniu się została spakietowana<br />

przez Texstara dla potrzeb<br />

powstającego PCLinuxOS 2k4,<br />

bazującego na Mandrake. Binarny<br />

pakiet RPM z OpenOffice.org 1.1.1<br />

KDE NWF ma wielkość 67,5 MB.<br />

http://thea.hmdnsgroup.com/<br />

pipermail/pclinuxos_<br />

pclinuxonline.com/2004-April/<br />

001673.html<br />

http://ftp.ibiblio.org/pub/Linux/<br />

distributions/contrib/texstar/temp/<br />

X-y dla Mandrake<br />

W podsystemie grafiki dla Linuksa<br />

(X Window System) nastąpiła<br />

ostatnio mała rewolucja: w związku<br />

z długotrwałymi problemami<br />

z rozwojem implementacji XFree86,<br />

zakończonymi zmianą licencji dla<br />

części jej elementów, której nie<br />

zaakceptowała większość ważnych<br />

dystrybucji, nową standardową<br />

implementacją jest X11 autorstwa<br />

X.Org. Najnowsze wydanie, X11R6.7,<br />

jest w dużym stopniu oparty o<br />

XFree86 4.4-RC2 (jeszcze sprzed<br />

zmiany licencji), w związku z tym<br />

przesiadka nie powinna powodować<br />

problemów z dotychczas używanymi<br />

kartami graficznymi. Pakiety RPM<br />

Phoenix z najnowszym X11 oraz<br />

(do wyboru) z XFree86 4.4.0<br />

dla Mandrake można znaleźć<br />

w repozytorium Rapsys. Ponadto,<br />

znajdziemy tam także pakiety<br />

z eksperymentalnym serwerem<br />

X rozwijanym na FreeDesktop.org,<br />

który w przyszłości może zastąpić<br />

obecny serwer w implementacji X11.<br />

http://rapsys.free.fr/<br />

http://hedera.linuxnews.pl/_news/<br />

2004/04/08/_long/2637.html<br />

Pomysły na 10.1<br />

Po wydaniu ostatniej stabilnej wersji<br />

dystrybucji twórcy mają już pomysły<br />

do wprowadzenia w wersji 10.1,<br />

planowanej na jesień tego roku.<br />

Wśród nich znajduje się między<br />

innymi instalacja przez VNC na<br />

wzór Fedory Core, generalne profile<br />

instalacji (np. komputer multimedialny,<br />

laptop, serwer czy cienki klient<br />

sieciowy) czy włączenie do wydania<br />

najświeższego GNOME 2.6. Pełna lista<br />

planowanych zmian jest bardzo długa<br />

i w poszukiwaniu rodzynków warto<br />

przejrzeć ją samodzielnie.<br />

http://qa.mandrakesoft.com/twiki/bin/<br />

view/Main/IdeasForMandrakelinux101<br />

18 czerwiec 2004<br />

mandrake@lpmagazine.org<br />

Czyszczenie luster<br />

Twórcy Mandrake doszli do wniosku,<br />

że trzeba skończyć z partyzantką,<br />

która do tej pory miała miejsce<br />

na serwerach z kopiami lustrzanymi<br />

ich dystrybucji, i zaproponowali nowy,<br />

bardziej spójny układ katalogów.<br />

W tym układzie jest miejsce zarówno na<br />

repozytoria pakietów, jak i gotowe obrazy<br />

ISO z różnymi wersjami Mandrake Linux.<br />

Zmiany te będą miały znaczenie zarówno<br />

dla użytkowników korzystających<br />

z poprawek bezpieczeństwa, jak również<br />

z testowych lub dodatkowych pakietów<br />

dystrybucyjnych.<br />

Zalecana główna ścieżka kopii ma nazwę<br />

Mandrakelinux z trzema głównymi<br />

podkatalogami: devel (wersja rozwojowa),<br />

official (wersja stabilna) i old (stare pakiety).<br />

Aby móc skorzystać z aktualizacji<br />

do wersji 10.0 z polskiego serwera ICM,<br />

należy z konsoli administratora wydać<br />

polecenie:<br />

urpmi.addmedia icm-update10 S<br />

ftp://ftp.icm.edu.pl/ S<br />

pub/Linux/distributions/mandrakelinux/ S<br />

official/updates/10.0/RPMS/<br />

Mandrakelinux 10 Official<br />

Gotowa jest już nie tylko wersja<br />

Official najnowszego Mandrake<br />

Linux 10.0 dla architektur<br />

32-bitowych, ale także dla procesorów<br />

Athlon64 i Opteron, zbudowanych<br />

w technologii 64-bitowej. Ostateczna<br />

wersja składa się z 4 płyt CD<br />

i w wersji 64-bitowej zapewnia przeciętnie<br />

20% szybszą pracę systemu<br />

na nowych procesorach. Producent<br />

podkreśla włączenie do dystrybucji<br />

jądra 2.6, KDE 3.2, narzędzi do łatwej<br />

migracji z Samby 2.x do Samby 3.x,<br />

możliwość uwierzytelniania LDAP i NIS<br />

na serwerach pracujących pod kontrolą<br />

Windows oraz automatyczne włączanie<br />

akceleracji 3D dla modeli kart graficznych<br />

opartych o kości ATI Rage 128/Pro<br />

i Radeon, NVIDIA i Matrox G200/G400/<br />

G500.<br />

Wielką zaletą 64-bitowej architektury<br />

produkcji AMD jest możliwość<br />

jednoczesnego uruchamiania programów<br />

skompilowanych zarówno 32-, jak<br />

i 64-bitowo. Ze względu na wysokie<br />

dział prowadzi: Daniel Koć<br />

Warto także dodać repozytoria pakietów<br />

dodatkowych (urpmi.addmedia<br />

icm-contrib<br />

ftp://ftp.icm.edu.pl/pub/<br />

Linux/distributions/mandrakelinux/<br />

official/10.0/contrib/RPMS) oraz z ograniczeniami<br />

prawnymi, tzw. Penguin Liberation<br />

Front (urpmi.addmedia plf ftp:<br />

//knight.zarb.org/pub/plf/mandrake/<br />

cooker).<br />

Spragnieni nowości mogą przesiąść<br />

się na niestabilną wersję Cooker<br />

(urpmi.addmedia icm-cooker ftp://<br />

f t p.ic m.e d u.pl/ p u b /lin u x /dis tributions/mandrakelinux/devel/cooker/<br />

i586/Mandrake/RPMS/), jednak warto<br />

pamiętać, że to wersja przeznaczona<br />

przede wszystkim do testów.<br />

Dotychczasowe, niedziałające już adresy<br />

repozytoriów, można usunąć przez:<br />

urpmi.removemedia nazwa-starego-repozytorium.<br />

ftp://ftp.icm.edu.pl/pub/Linux/<br />

distributions/mandrakelinux/README<br />

http://www.mandrakeclub.com/<br />

article.php?sid=1891<br />

Znaczek w prawym dolnym rogu wyróżnia<br />

wersję dla nowej generacji procesorów<br />

ceny nowego sprzętu, wersja Mandrake<br />

dla AMD 64 jest obecnie skierowana<br />

głównie na rynek wydajnych serwerów,<br />

jednak jest to przyszłość także dla<br />

rozwiązań typowo domowych i biurowych.<br />

http://www.mandrakesoft.com/<br />

products/10/<br />

http://www.mandrakesoft.com/<br />

products/10/amd64


aktualności<br />

aurox<br />

aurox@lpmagazine.org<br />

dział prowadzi: Robert Główczyński<br />

Nowy Aurox: 9.4<br />

Na początku maja ukazała się druga<br />

wersja testowa Auroksa 9.4. Wersja<br />

finalna będzie dostępna w Linux+ Extra!<br />

już w czerwcu. Jakie zmiany przynosi kolejne<br />

wydanie tej dystrybucji?<br />

Zmianie uległ sposób przygotowania<br />

płyt. Obecnie jest jeden międzynarodowy<br />

zestaw CD (z napisami startowymi<br />

w kilku językach). Nowością jest dodanie<br />

na płytach danych dla menedżera pakietów<br />

Apt: po wydaniu dla każdego CD polecenia<br />

apt-cdrom add i wpisaniu nazwy<br />

płyty, możemy doinstalowywać pakiety<br />

z płyt dystrybucji poleceniem apt install<br />

(będziemy proszeni<br />

o wkładanie odpowiednich płyt).<br />

Uwaga: Apt i graficzna nakładka (Synaptic)<br />

są w Dodaj/Usuń programy w grupie<br />

Popularne narzędzia. Dodawanie informacji<br />

o zawartości płyt możemy wykonać<br />

również w Synapticu (Działania–>Add<br />

CD-ROM).<br />

Pakiet biurowy OpenOffice.org został<br />

uaktualniony do wersji 1.1.1 (pisałem o<br />

tym w poprzednim numerze). Rzuca się<br />

w oczy zmiana stylu ikon (ikony Ximiana,<br />

zgodne stylistycznie z Evolution i lepiej<br />

pasujące do wyglądu aplikacji GNOME).<br />

Ponadto, OOo został skompilowany z łatkami<br />

pozwalającymi na wykorzystanie<br />

pakietu fontconfig (opis czcionek znajduje<br />

się w pliku /etc/fonts/fonts.conf, co pozwala<br />

na ujednolicenie obsługi czcionek<br />

dla wielu aplikacji). Powróciła możliwość<br />

wykorzystania arkusza kalkulacyjnego jako<br />

źródła danych w edytorze OOWriter.<br />

Lepsze są filtry do importu plików z innych<br />

programów (np. poprawiona obsługa<br />

dokumentów MS Word). Tłumaczenia<br />

i słowniki zostały podzielone na pakiety<br />

dodające obsługę poszczególnych języków<br />

(podczas aktualizacji systemu instalowane<br />

są wszystkie języki; podczas nowej<br />

instalacji – tylko wskazane).<br />

Nowe KDE to pakiety z wydań 3.2.1<br />

i 3.2.2, przygotowywane przez zespoły<br />

Auroksa (oznaczane przez aur) i KDE-<br />

RedHat (fdr). Aplikacje w tym wydaniu<br />

środowiska graficznego zostały lepiej zintegrowane,<br />

została poprawiona obsługa<br />

metody 'przeciągnij i upuść'; więcej aplikacji<br />

można osadzać w innych programach<br />

(pojawił się nawet komponent do<br />

osadzania VIM-a w edytorze stron WWW<br />

Quanta).<br />

Synaptic w akcji<br />

Nowością w KDE 3.2 jest Kontact, pakiet<br />

do pracy grupowej i zarządzania informacjami.<br />

Kontact integruje takie narzędzia,<br />

jak KMail, PIM, książka adresowa,<br />

lista nowin pobierana z Internetu i żółte<br />

karteczki, w wygodnym interfejsie (przypominającym<br />

Evolution).<br />

Kolejny nowy program to Kopete, komunikator<br />

internetowy obsługujący wiele<br />

protokołów do pogaduszek sieciowych<br />

(znajduje się w pakiecie kdenetwork).<br />

Programistów ucieszy stabilna wersja<br />

Umbrello, narzędzia do projektowania<br />

aplikacji zgodnie z metodyką UML (pakiet<br />

kdesdk).<br />

Quanta Plus 3.2 zawiera wstępną implementację<br />

VPL (edycja strony w trybie<br />

WYSIWYG oraz w dzielonym oknie<br />

z zsynchronizowaną edycją kodu źródłowego<br />

i WYSIWYG), nowe kreatory, nowy<br />

edytor tabel HTML.<br />

Usprawniona została obsługa komputerów<br />

przenośnych. Nowym narzędziem<br />

jest KWiFiManager, monitorujący i konfigurujący<br />

połączenia bezprzewodowe. Zarządzania<br />

energią odbywa się przez ACPI.<br />

Poprawiona została obsługa danych<br />

PalmPilot (bazy .pdb, konwersja tekstu<br />

na PalmDOC).<br />

W KOffice została poprawiona funkcjonalność<br />

wszystkich składników pakietu.<br />

Zwraca uwagę rozszerzony zestaw<br />

filtrów importu i eksportu: do KWorda<br />

możemy importować pliki PDF, dokumenty<br />

MS Word; poprawiono eksport<br />

do formatu RTF i dodano możliwość zapisu<br />

dokumentów MS Write. Arkusz kalkulacyjny<br />

KSpread ma poprawioną obsługę<br />

plików Gnumerica (arkusz GNO-<br />

ME); dodano możliwość zapisu i odczytu<br />

plików OpenOffice.org Calc. W arkuszu<br />

możemy korzystać z kilkudziesięciu<br />

nowych funkcji.<br />

Aurox Live w czasopismach<br />

Aurox Live 1.4.4, oparty na Auroksie<br />

9.3 i zawierający m.in. sterowniki<br />

do softmodemów Conexant HSF,<br />

SmartLink (PCI i USB) i Intel ICH<br />

oraz wybór aplikacji z Auroksa, został<br />

opublikowany w czeskiej edycji<br />

miesięcznika Linux+.<br />

http://www.softwaremedia.cz/<br />

Mobile Computing<br />

Jarosław Górny, szef dystrybucji<br />

Aurox, wystąpił na konferencji<br />

Mobile Computing 2004 (Warszawa,<br />

5-6 maja 2004). Jarek prezentował<br />

wykorzystanie Auroksa na<br />

komputerze przenośnym. Konferencje<br />

Mobile Computing organizowane są<br />

przez Software-Konferencje.<br />

http://www.software.com.pl/<br />

News<br />

Aurox dla samorządów<br />

Jarosław Górny i Robert Żmijan<br />

(Aurox Core Team) przekonywali do<br />

Auroksa na prezentacji alternatywnych<br />

rozwiązań informatycznych Open<br />

Source, zorganizowanej przez<br />

niezależny gminny wortal Gmina<br />

Celestynów Online i Celestynowskie<br />

Centrum Informacji. Spotkanie odbyło<br />

się 8 maja 2004 r. w Celestynowie<br />

(powiat otwocki) i było przeznaczone<br />

dla przedstawicieli samorządów oraz<br />

zainteresowanych firm. Wystąpił na<br />

nim również Krzysztof Kleszczewski<br />

(projekt LeftHand). Była to pierwsza<br />

prezentacja z planowanej serii.<br />

http://www.malvision.neo.pl/gco/<br />

portal/<br />

Otwórz oczy...<br />

Pod takim hasłem odbyła się<br />

12 maja w Łomży konferencja<br />

prezentująca możliwości zastosowania<br />

oprogramowania Open Source w<br />

edukacji i biznesie. Jarosław Górny<br />

przedstawiał na niej dystrybucję<br />

Aurox. Konferencję zorganizowały<br />

łomżyńskie firmy i instytucje:<br />

Wyższa Szkoła Agrobiznesu,<br />

Ośrodek Doskonalenia Nauczycieli<br />

i "SPEED" s.c.<br />

Narzędzia dla Auroksa<br />

Zespół Auroksa testuje nowe<br />

środowisko do budowania aplikacji.<br />

Nowe pakiety budowane są na<br />

trzech maszynach z wykorzystaniem<br />

narzędzi: distcc oraz ccache. Distcc<br />

pozwala do kompilacji plików<br />

wykorzystać odległe komputery, na<br />

których uruchomiono serwer distccd.<br />

Ccache pozwala wykorzystać dane<br />

z wcześniejszych kompilacji tego<br />

samego kodu, znacznie<br />

przyspieszając przebudowywanie<br />

pakietów z niewielkimi zmianami<br />

(np. z dodanymi łatkami).<br />

http://dag.wieers.com/packages/<br />

http://distcc.samba.org/<br />

http://ccache.samba.org/<br />

www.lpmagazine.org<br />

19


aktualności<br />

kde<br />

News<br />

Ikonki na folderach<br />

Folders with icons to kolejne miłe<br />

rozszerzenie Konquerora. Dodaje<br />

ono do ikonek naszych folderów<br />

w głównym katalogu partycji obrazki<br />

adekwatne do zawartości. Tak więc,<br />

każdy z katalogów, oprócz /proc<br />

i /tmp, będzie oznaczony inną ikoną.<br />

Ten wodotrysk działa na prostej<br />

zasadzie umieszczania plików<br />

z informacjami o ikonie<br />

w poszczególnych katalogach. Mimo,<br />

że taka opcja jest standardowo<br />

dostępna w przeglądarce Konqueror<br />

w KDE 3.2, to na forach można<br />

przeczytać opinię, iż nowo stworzony<br />

dodatek jest ...milszy. Dla ceniących<br />

sobie wygląd i porządek, polecam<br />

pobranie i instalację.<br />

http://www.kde-apps.org/content/<br />

show.php?content=12314<br />

Nowy obserwator logów<br />

Aplikacja EventWatcher, o której<br />

pisałem w jednym z numerów Linux+,<br />

cały czas rozwija się i wzbogaca<br />

o nowe funkcje. Mamy już dostęp<br />

do w miarę zaawansowanej obsługi<br />

logów systemowych i poprawione<br />

wsparcie dla plików RSS/XML<br />

pobieranych z serwisów newsowych.<br />

W nowej wersji mamy również<br />

usprawniony interfejs i jeszcze<br />

prostszą obsługę całości programu.<br />

http://eventwatcher.sourceforge.net/<br />

Załączamy do e-maila<br />

Attach to Email Service Menu<br />

to kolejny mały dodatek do<br />

Konquerora, tym razem jednak<br />

bardziej przydatny. Po jego instalacji,<br />

w menu podręcznym naszej<br />

przeglądarki plików, pojawia się opcja<br />

pozwalająca na dołączenie danego<br />

pliku czy też katalogu do e-maila<br />

oraz uruchomienie z odpowiednimi<br />

opcjami klienta poczty dla KDE<br />

– KMail. Dodatek dostarczany jest<br />

razem z odpowiednim skryptem<br />

w języku Python, którego interpreter<br />

warto mieć zainstalowany w systemie.<br />

http://www.kde-apps.org/content/<br />

show.php?content=11234<br />

Gorące MP3<br />

KMp3Burner to kolejne narzędzie<br />

z serii dla “wygodnickich”. Zasada<br />

działania tego mini-programu jest<br />

prosta. Po wyborze plików MP3 i<br />

dodaniu ich w wybranej kolejności<br />

do projektu, program sam konwertuje<br />

pliki do formatu .wav i nagrywa<br />

płytę audio za pomocą aplikacji K3B.<br />

Autor programu nie stworzył niczego<br />

nowego, a po prostu jeszcze bardziej<br />

ułatwił nam zadanie, jakim jest<br />

nagrywanie płyt audio z plików MP3.<br />

http://www.kde-apps.org/content/<br />

show.php?content=12067<br />

AmaroK<br />

AmaroK (tak brzmi nazwa kolejnego<br />

odtwarzacza plików multimedialnych<br />

dla KDE) został stworzony<br />

z myślą o wyznaczeniu nowego standardu<br />

w dziedzinie prostoty i ergonomii obsługi.<br />

Posiada on wszystkie podstawowe<br />

funkcje, takie jak odtwarzanie plików<br />

MP3, OGG, płyt audio czy też strumieni<br />

prosto z Internetu, jednak - według autorów<br />

- jego najbardziej istotnych cech należy<br />

doszukiwać się gdzie indziej. Gdzie?<br />

Otóż tam, gdzie właśnie zwykły użytkownik<br />

najczęściej trafia, czyli do ...interfejsu.<br />

I to nie tylko interfejsu okna głównego,<br />

ale przede wszystkim listy utworów, czyli<br />

tzw. "playlisty". Dla jednych jest to mało<br />

istotne, ale drudzy docenią np. dopracowaną<br />

obsługę systemu “przeciągnij<br />

i upuść” (ang. drag'n'drop), która<br />

pozwala w bardzo prosty i szybki sposób<br />

utworzyć listę odtwarzania. Oto większość<br />

najważniejszych cech AmaroKa:<br />

• efekty audio, takie jak reverb, echo czy<br />

compressor;<br />

• kompatybilność z takimi formatami<br />

list odtwarzania, jak .m3u czy .pls;<br />

Kolejny KOffice<br />

K<br />

Office, dobrze znany pakiet biurowy,<br />

rozwija się i ma się całkiem dobrze.<br />

Dowodem na to jest wydanie przez<br />

deweloperów projektu nowej, stabilnej<br />

wersji oznaczonej numerkiem 1.3.1. Poprawki<br />

dotyczące stabilności są stałym<br />

punktem przy wypuszczaniu nowej wersji<br />

tego oprogramowania, jednak wspomnę<br />

o tych najważniejszych dla zwykłego<br />

użytkownika:<br />

• zmiana struktury plików .desktop, odpowiedzialnych<br />

głównie za ułożenie<br />

skrótów do poszczególnych aplikacji<br />

KOffice w głównym menu KDE;<br />

• sprawdzanie błędów za pomocą<br />

“spellcheckera” znów działa poprawnie;<br />

• pakiet nie wiesza się już, gdy partycja,<br />

na której zapisujemy dokument, jest<br />

pełna;<br />

• w KSpread poprawiono możliwość<br />

cofania operacji usuwania wielu komórek;<br />

AmaroK<br />

• przyjemne w obsłudze UI (User Interface);<br />

• efekty wizualizacji ładowane za pomocą<br />

wtyczek.<br />

Poza powyżej wymienionymi cechami,<br />

program charakteryzuje się dobrą<br />

stabilnością i szybkością działania.<br />

Warto również wspomnieć o tempie<br />

rozwoju, które w przypadku tego<br />

projektu jest zadziwiająco szybkie.<br />

http://amarok.sourceforge.net/index.php<br />

KOffice 1.3.1<br />

• w filtrze eksportu z KWord do formatu<br />

HTML poprawnie eksportowane są<br />

wszelkie obrazki;<br />

• filtr z KWord do RTF kompiluje się już<br />

na GCC w wersji 3.4.<br />

Polecam wszystkim użytkownikom aktualizację<br />

do nowej wersji, gdyż chociaż nie<br />

wnosi ona nowych funkcji, to zapewnia<br />

dużo większą stabilność.<br />

http://www.koffice.org/<br />

20 czerwiec 2004


kde@lpmagazine.org<br />

dział prowadzi: Paweł Biliński<br />

Odświeżona Quanta+<br />

Deweloperzy najbardziej znanego<br />

edytora HTML dla KDE, a może<br />

nawet dla całego Linuksa, nie próżnują<br />

i nie pozostają do końca wierni swoim<br />

początkowym założeniom, chociażby<br />

sprzed roku czy dwóch. Według założeń,<br />

Quanta miała być jedynie “prostym”<br />

i “łatwym w obsłudze” szybkim edytorem<br />

HTML, obsługiwanym tylko za pomocą<br />

ręcznego wpisywania kodu stron.<br />

Wiele się od tamtego czasu zmieniło.<br />

Prostota i ergonomia interfejsu użytkownika<br />

faktycznie jest elementem nieodłącznym<br />

od czasu wydania pierwszej<br />

wersji Quanty, jednak np. co do szybkości<br />

czy wielkości można mieć spore<br />

zastrzeżenia. Quanta nie jest najszybszym<br />

edytorem, ani nie należy do<br />

najmniej rozbudowanych. Potraktowałbym<br />

jednak tę drugą cechę jako pozytywną.<br />

Przy wydaniu ostatniej stabilnej wersji<br />

odstąpiono w pewnym stopniu od upartego<br />

założenia, jakim było tworzenie edytora<br />

jedynie tekstowego. Dodano moduł WYSI-<br />

WYG, czyli pomagający w tworzeniu stron<br />

za pomocą myszki, bez znajomości języka<br />

HTML czy JavaScript.<br />

Im więcej czasu mija, tym bardziej<br />

Quanta staję się wielkim centrum do edycji<br />

całych serwisów WWW, a nie jedynie prostym<br />

edytorem pojedynczych stron. Wydanie<br />

wersji 3.3 BE2 oznacza dla użytkow-<br />

KDE bliżej MacOSX<br />

Quanta+<br />

nika wiele zmian, których listę przedstawiam<br />

poniżej:<br />

• dodanie kilku nowych aplikacji, wchodzących<br />

w skład pakietu KwebDev:<br />

KImageMapEditor oraz KlinkStatus;<br />

• lepszy, udoskonalony debugger PHP;<br />

• dodanie automatycznego uzupełniania<br />

znaczników CSS;<br />

• zupełnie przebudowany interfejs, który<br />

jest teraz oparty na fundamentach<br />

mechanizmu KMDI, znanego z zastosowania<br />

w KDevelop;<br />

• instalacja tej testowej wersji nie koliduje<br />

z poprzednią, zatem nie istnieje<br />

ryzyko utraty jakichkolwiek danych<br />

czy zmiany ustawień programu.<br />

http://quanta.sourceforge.net/main2.php?<br />

newsfile=qberelease02<br />

KXDocker<br />

Istnieje już wiele dodatków dla KDE,<br />

które pozwalają użytkownikom na<br />

upodobnienie swojego pulpitu do<br />

wyglądu innych systemów operacyjnych.<br />

Jednak takie zabiegi nie kończą<br />

się jedynie na stylach czy ikonach,<br />

gdyż ważne są również dodatki bardzo<br />

charakterystyczne dla tych systemów.<br />

W przypadku MacOSX mamy do<br />

czynienia z wygodnym paskiem dokującym,<br />

który w wersji dla KDE nosi<br />

nazwę KXDocker. Może on z powodzeniem<br />

zastąpić nasz domyślny panel<br />

- Kicker. Za pomocą KXDockera możemy<br />

umieścić na dole swojego ekranu<br />

pasek z listą uruchomionych zadań,<br />

zestawem ikon uruchamiających programy<br />

czy też modułem pomagającym<br />

nam w montowaniu różnych napędów.<br />

Program posiada sporą ilość opcji konfiguracji,<br />

które możemy dostosować<br />

do własnych potrzeb (np. uczynić panel<br />

przezroczystym czy też dodać własne<br />

tło).<br />

http://www.xiaprojects.com/www/<br />

prodotti/kxdocker/main.php<br />

Zmiana “bootsplasha”<br />

Do tej pory zmiana obrazu<br />

pojawiającego w momencie<br />

uruchomienia bootloadera była<br />

możliwa właściwie jedynie dla bardziej<br />

wtajemniczonych użytkowników.<br />

Teraz jednak sporo zmieniło się<br />

w tej dziedzinie, gdyż powstał program<br />

(oczywiście dla KDE), który pozwala<br />

na szybką zmianę “bootsplasha”. Na<br />

stronie KBootSplash jest dostępnych<br />

kilka przykładowych tematów, które<br />

możemy zainstalować jako domyślny<br />

obraz ładowany przed startem<br />

systemu. Aplikacja jest łatwa<br />

w instalacji, więc warto poświęcić<br />

kilka minut dla upiększenia naszego<br />

systemu.<br />

http://kbootsplash.sourceforge.net/<br />

SETI na bieżąco<br />

Dla maniaków aktywnie biorących<br />

udział w poszukiwaniach życia<br />

pozaziemskiego w ramach projektu<br />

SETI@Home powstał programik<br />

o nazwie KSetiWatch. Ułatwia on<br />

osobom wykonanie podstawowego<br />

zadania, jakim jest udostępnienie<br />

mocy obliczeniowej naszego<br />

komputera do celów naukowych.<br />

Na czym polegają te ułatwienia?<br />

KSetiWatch może np. monitorować<br />

pracę z kilku kont jednocześnie,<br />

“dokować” się do zasobnika w KDE,<br />

powiadamiać nas, gdy sygnał staje<br />

się wyraźniejszy oraz automatycznie<br />

startować i zatrzymywać klienta<br />

Seti@Home.<br />

http://ksetiwatch.sourceforge.net/<br />

Polsko, hojny narodzie!<br />

Serwis KDE.pl ujrzał światło dzienne<br />

około 20 maja ubiegłego roku. Od<br />

tamtego czasu przeszedł wiele zmian,<br />

czasem nawet rewolucyjnych. Jednak,<br />

jak wszyscy wiedzą, utrzymanie<br />

domeny .pl w dzisiejszych czasach<br />

z pieniędzy prywatnych nie jest<br />

sprawą tanią, szczególnie jeśli umowę<br />

podpisuje się bezpośrednio z NASK.<br />

Po roku istnienia serwisu pojawił<br />

się problem przedłużenia umowy,<br />

a co za tym idzie – problem<br />

finansowy. Wszystko jednak dobrze<br />

się skończyło, a to przede wszystkim<br />

dzięki uprzejmości serwisów<br />

LinuxNews.pl oraz 7thGuard.net<br />

oraz czytelników tych portali, którzy<br />

widząc ogłoszenia zadeklarowali<br />

wpłaty, czy też nawet już ich dokonali.<br />

W ten sposób<br />

w niecałe 2 dni uzbieraliśmy całą<br />

sumę. Chciałbym podziękować<br />

wszystkim, którzy wpłacili<br />

jakiekolwiek kwoty oraz tym, którzy<br />

tylko zadeklarowali się (po tym, jak<br />

już całą kwotę uzbieraliśmy). Dzięki<br />

wam KDE.pl może nadal istnieć<br />

i rozwijać się.<br />

http://kde.pl/?page=news&id=10<br />

www.lpmagazine.org<br />

21


aktualności<br />

linuxfresh<br />

News<br />

Sentry Firewall<br />

CD-ROM 1.5.0-rc12<br />

Ta dystrybucja Linuksa uruchamiana<br />

z płyty CD przeznaczona jest do dosyć<br />

specyficznych zastosowań. Jak sama<br />

nazwa wskazuje, pomyślana była jako<br />

podstawa taniej i łatwej w utrzymaniu<br />

zapory sieciowej, ale może również<br />

pracować jako ruter, serwer, a nawet<br />

węzeł systemu wykrywania włamań<br />

(IDS – Intrusion Detection System).<br />

Pliki konfiguracyjne mogą być<br />

przechowywane na zabezpieczonej<br />

przed zapisem dyskietce lub<br />

pobierane ze zdalnego serwera.<br />

W tej wersji rozwojowej zmieniono<br />

wersję jądra na 2.4.26-ow1. Oprócz<br />

tego, dodano pakiety Vsftpd 1.2.2,<br />

SUSE Proxy-Suite 1.9.2.2 oraz CUPS,<br />

a pakiet Snort uaktualniono do<br />

wersji 2.1.2. Wprowadzono też szereg<br />

drobniejszych poprawek.<br />

http://freshmeat.net/projects/sentry_<br />

firewall_cd/<br />

CUPS Driver<br />

Development Kit 1.0<br />

Jak wskazuje sama nazwa, jest<br />

to pakiet służący do tworzenia<br />

sterowników drukarek. Składa<br />

się on z zestawu przykładowych<br />

sterowników, kompilatora plików<br />

PPD, jak również z innych narzędzi,<br />

które można wykorzystać do<br />

tworzenia sterowników drukarek dla<br />

systemu CUPS lub innych środowisk<br />

drukowania. Na stronie domowej<br />

projektu umieszczona jest bardzo<br />

szczegółowa dokumentacja. Prowadzi<br />

ona użytkownika od instalacji<br />

pakietu, poprzez podstawy obsługi<br />

poszczególnych narzędzi, aż do<br />

instrukcji dotyczących konstruowania<br />

plików sterowników.<br />

Obecna wersja jest pierwszą stabilną<br />

wersją tego programu.<br />

http://freshmeat.net/projects/cupsddk/<br />

Basic Linux 3.20<br />

Basic Linux to jedna z wielu<br />

minidystrybucji Linuksa. Jej niewielkie<br />

wymagania sprzętowe (procesor 386,<br />

3MB RAM, system DOS) sprawiają,<br />

że świetnie nadaje się nawet dla<br />

starszych modeli komputerów PC.<br />

Dystrybucję tą można wykorzystać<br />

do przeglądania stron WWW, jak<br />

również do korespondencji za<br />

pośrednictwem poczty elektronicznej.<br />

Oprócz tego, w dystrybucji zawarty<br />

jest klient telnet, program wget oraz<br />

klient DHCP. Basic Linux może<br />

również być wykorzystywany jako<br />

terminal X. Aktualna wersja oferuje<br />

lepsze wsparcie dla laptopów<br />

– wprowadzono między innymi<br />

obsługę PCMCIA.<br />

http://freshmeat.net/projects/baslinux/<br />

Grip 3.2.0<br />

Grip pozwala nie tylko na słuchanie muzyki,<br />

ale również na nagrywanie jej na dysk<br />

Posiadacze obszernych kolekcji płyt<br />

CD z muzyką nieraz chcieliby móc<br />

posłuchać sobie własnej składanki. Czasem<br />

też po prostu chcą zachować oryginalną<br />

płytę na półce, aby uchronić ją<br />

przed zniszczeniem. W takich przypadkach<br />

przydaje się program Grip. Pozwala<br />

on na skopiowanie piosenek z płyty<br />

do pliku na dysku. Jeśli zamierzamy<br />

je później nagrać na płytę jako składankę,<br />

to w tej formie (plików wav) powinniśmy<br />

je zostawić. Gdy jednak chcemy<br />

zgromadzić swoją kolekcję muzyki<br />

na dysku, to lepiej od razu zakodować<br />

pliki do formatu MP3 lub Ogg Vorbis.<br />

Dzięki temu na dysku pozostanie<br />

miejsce na inne programy. Grip potrafi<br />

wykonać wszystkie te czynności – "zripować"<br />

wybrane ścieżki na dysk oraz<br />

zakodować je do wybranego formatu.<br />

O ile odczytanie danych potrafi wykonać<br />

samodzielnie (posiada wbudowane<br />

funkcje programu Cdparanoia),<br />

o tyle do kodowania potrzebuje zewnętrznych<br />

programów, takich jak Lame,<br />

L3Enc, BladeEnc, Gogo i inne. Również<br />

do ripowania możemy użyć zewnętrznego<br />

programu (np. Cdda2wav). Program<br />

potrafi automatycznie uzyskiwać informacje<br />

o nagranych na płycie ścieżkach<br />

z baz CDDB dostępnych w Internecie.<br />

Oprócz tego, Grip może też służyć jako<br />

zwykły odtwarzacz muzyki z płyt CD.<br />

Po uruchomieniu programu i włożeniu<br />

płyty CD, program próbuje pobrać<br />

z Internetu dane o piosenkach. Jeśli mu<br />

się to uda, to zamiast napisów Track 1<br />

i podobnych, w opisie zawartości płyty<br />

pojawią się tytuły piosenek. W dolnej<br />

części interfejsu znajdują się przyciski nawigacyjne<br />

przydatne podczas wykorzystywania<br />

Gripa w roli odtwarzacza muzyki.<br />

W razie wątpliwości co do przeznaczenia<br />

przycisku, wystarczy wskazać go<br />

kursorem, a po chwili pojawi się opis jego<br />

funkcji.<br />

Bardziej interesujące są zakładki<br />

znajdujące się w górnej części interfejsu.<br />

Po pierwszym uruchomieniu programu,<br />

najbardziej interesująca jest zakładka<br />

Config. Tutaj należy w kolejnych zakładkach<br />

wskazać ścieżkę do urządzenia<br />

CD-ROM, wybrać program ripujący<br />

oraz wykorzystywany enkoder. Można<br />

też ustawić szereg innych opcji, włączając<br />

w to obsługę znaczników ID3, adresy<br />

serwerów CDDB, jak również możliwość<br />

użycia serwerów pośredniczących<br />

(ang. proxy).<br />

Po ustawieniu tych opcji można przejść<br />

do zakładki Tracks i oddać się słuchaniu<br />

muzyki lub wybrać ścieżki przeznaczone<br />

do nagrania na dysk. Jeśli informacje<br />

o ścieżce są niezadowalające, można je<br />

zmodyfikować samodzielnie, wskazując<br />

konkretną nazwę ścieżki, a następnie<br />

wciskając ikonę ołówka (Toggle disc editor)<br />

umieszczoną w dolnym pasku interfejsu.<br />

Następnie przydatna okaże się zakładka<br />

Rip, w której dostępnych jest kilka<br />

przycisków. Pierwszy z nich (Rip + Encode)<br />

służy do zgrania wybranych ścieżek<br />

i od razu zakodowania ich do wskazanego<br />

formatu. Zależnie od ustawionych<br />

opcji, oryginalne pliki wav zostaną zachowane<br />

lub skasowane. Drugi przycisk (Rip)<br />

powoduje, że program zgrywa ścieżki do<br />

formatu WAV. Katalogi docelowe można<br />

określić w polach Encode file format<br />

i Rip file format umieszczonych odpowiednio<br />

w zakładkach Config–>Encode–>Encoder<br />

i Config–>Rip–>Ripper. Jeśli<br />

w trakcie zgrywania muzyki na dysk<br />

zmienimy zdanie, możemy przerwać ten<br />

proces wciskając przyciski Abort Rip and<br />

Encode lub Abort Ripping Only.<br />

W przypadku wystąpienia problemów<br />

można zapoznać się z przebiegiem<br />

wykonywania poleceń w zakładce Status.<br />

Oprócz tego, zostanie wyświetlone okno<br />

z komunikatem. W zakładce Help można<br />

znaleźć dokładniejsze informacje na temat<br />

konfigurowania i obsługi programu.<br />

Wersja 3.2.0 to pierwsza od ponad roku<br />

wersja stabilna. Wśród wielu wprowadzonych<br />

w tym czasie zmian szczególnie<br />

warto wymienić wsparcie dla GNOME 2<br />

oraz poprawione wsparcie dla innych języków<br />

narodowych (niestety wciąż brakuje<br />

wsparcia dla języka polskiego).<br />

http://freshmeat.net/projects/grip/<br />

22 czerwiec 2004


fresh@lpmagazine.org<br />

dział prowadzi: Piotr Machej<br />

Lftp 3.0.3<br />

Wielu użytkowników Linuksa nie<br />

wyobraża sobie życia bez programów,<br />

którym można wydawać polecenia<br />

z użyciem myszki, ale bardzo często najciekawsze<br />

programy to te działające w konsoli<br />

tekstowej. Jednym z takich programów<br />

jest klient FTP o nazwie Lftp. Program ten<br />

wyróżnia się na tle innych klientów tekstowych.<br />

Wspiera takie protokoły, jak FTP,<br />

HTTP, SFTP i FISH, jak również FTP poprzez<br />

proxy HTTP, HTTPS oraz FTP<br />

po SSL. Dzięki obsłudze wielowątkowości<br />

pozwala na równoczesne wykonywanie<br />

wielu poleceń – część z nich może być<br />

wykonywana w tle. Ponadto, oferuje bardzo<br />

użyteczną funkcję tworzenia lokalnej<br />

kopii wskazanych katalogów. Nie tylko potrafi<br />

wznowić transmisję pliku w przypadku<br />

zerwania połączenia, ale na dodatek jeśli<br />

opuścimy program w trakcie pobierania<br />

pliku, to zakończy jego pobieranie w tle.<br />

Jeśli chcemy, możemy nawet ograniczyć<br />

przepustowość wykorzystywaną przez<br />

Lftp do transferu plików.<br />

Pracę z programem zaczynamy od uruchomienia<br />

go poleceniem lftp. Możemy<br />

od razu podać adres, z jakim ma się połączyć,<br />

np. lftp ftp://sunsite.icm.edu.pl/.<br />

Po zalogowaniu się (domyślnie włączone<br />

jest logowanie anonimowe, lecz można<br />

podać nazwę użytkownika w parametrze -<br />

u) możemy przeglądać katalogi poleceniami:<br />

cd katalog i ls. Do pobierania plików<br />

służą standardowe polecenia get plik (dla<br />

pojedynczego pliku) i mget maska (dla wielu<br />

plików pasujących do maski). Można do<br />

nich dodać opcję -c, która spowoduje kontynuowanie<br />

ściągania plików, których fragmenty<br />

już znajdują się na dysku (reget).<br />

Program Lftp umożliwia równoczesne<br />

połączenie z wieloma serwerami.<br />

Wystarczy po połączeniu z pierwszym<br />

wydać polecenie open ze ścieżką<br />

do drugiego serwera (np. open<br />

http://www.us.kernel.org/pub/linux).<br />

Do przełączania pomiędzy serwerami<br />

służy to samo polecenie open, ale<br />

ze względu na to, że takie przełączanie<br />

jest nieco niewygodne, Lftp oferuje tzw.<br />

sloty. Najprostszą metodą skorzystania<br />

z nich jest wykorzystanie kombinacji<br />

klawiszy [Alt]-[cyfra], gdzie cyfra jest<br />

z zakresu od 0 do 9. Przykładowo, wciskamy<br />

[Alt]+[1] łączymy się (poleceniem<br />

open) z pierwszym serwerem. Następnie<br />

wciskamy [Alt]+[2] i łączymy się<br />

z drugim serwerem. Teraz możemy<br />

Osoby przyzwyczajone do pracy<br />

w powłoce nie będą miały żadnego<br />

problemu z obsługą Lftp<br />

kombinacjami [Alt]+[1] i [Alt]+[2] przełączać<br />

się pomiędzy nimi i wydawać polecenia<br />

każdemu z osobna. Przypomina to<br />

nieco pracę z wirtualnymi konsolami.<br />

Ta funkcja byłaby jednak nieprzydatna,<br />

gdyby nie możliwość pobierania<br />

plików w tle. Wydając polecenie get lub<br />

mget możemy dodać do niego znak &,<br />

który, podobnie jak w powłoce, powoduje<br />

wykonywanie zadania w tle. Spis<br />

takich zadań możemy uzyskać wydając<br />

polecenie jobs.<br />

Warto zapoznać się z przydatną<br />

możliwością ustawiania zadań w kolejki.<br />

Przykładowo, jeśli wysłaliśmy jakieś<br />

zadanie w tło, możemy poleceniem jobs<br />

sprawdzić, jaki numer został mu przypisany<br />

(jest on podany w nawiasach<br />

kwadratowych). Przypuśćmy, że jest to<br />

numer 0. Teraz możemy ustawić go na<br />

początku kolejki poleceniem queue wait<br />

0. Następnie możemy przejść do innego<br />

katalogu (cd katalog) i dodać do<br />

kolejki ściąganie kolejnego pliku poleceniem<br />

queue get plik. W ten sposób możemy<br />

dodawać i inne polecenia, które<br />

będą wykonywane we wskazanej kolejności.<br />

Ważne jest, aby nie dodawać<br />

do kolejki poleceń zmiany katalogu –<br />

Lftp po prostu zapamiętuje, w którym<br />

katalogu zostało wydane polecenie.<br />

To nie wszystkie możliwości tego bardzo<br />

wygodnego i funkcjonalnego klienta<br />

FTP. Więcej informacji można znaleźć<br />

w dokumentacji programu.<br />

W obecnej wersji poprawiono kilka<br />

błędów w FXP i SFTP. Oprócz tego polecenie<br />

cd katalog/ sprawdza teraz, czy<br />

katalog istnieje. Wprowadzono też kilka<br />

innych ulepszeń.<br />

http://freshmeat.net/projects/lftp/<br />

W3m 0.5.1<br />

Ta tekstowa przeglądarka stron<br />

WWW jest ciekawą alternatywą dla<br />

przeglądarki Lynx, a nawet i dla<br />

bardziej rozbudowanego Linksa.<br />

Obsługuje się ją nieco inaczej niż<br />

wspomniane konkurentki. Głównie<br />

dotyczy to przesuwania kursora,<br />

który w W3m przemieszcza się<br />

nie tylko pomiędzy odnośnikami.<br />

Można również skorzystać z pomocy<br />

myszki do wskazywania wybranych<br />

odnośników. Przeglądarka ta świetnie<br />

radzi sobie z renderowaniem tabel<br />

i ramek (te ostatnie konwertuje do<br />

postaci tabel). Oprócz tego, potrafi<br />

wyświetlać rysunki umieszczone na<br />

stronach (chociaż oczywiście nie<br />

wyświetla rysunków użytych jako tło).<br />

Nowa wersja przynosi poprawki kilku<br />

mniejszych błędów.<br />

http://freshmeat.net/projects/w3m/<br />

ReactOS 0.2.2<br />

ReactOS to ciekawy projekt mający<br />

na celu stworzenie systemu<br />

operacyjnego zgodnego z Windows<br />

NT. Bardzo ważne jest, że projekt<br />

rozwijany jest jako Open Source.<br />

Kierowany jest do wszystkich, którzy<br />

lubią pracować w systemie Windows,<br />

ale z jakiegoś powodu (np. ze względu<br />

na licencje) nie do końca są z niego<br />

zadowoleni. Projekt jest wciąż<br />

w bardzo wczesnej fazie rozwoju, lecz<br />

powoli dodawane są nowe funkcje<br />

i możliwości. Projektanci ReactOS<br />

ściśle współpracują z zespołem<br />

pracującym nad Wine. W nowej<br />

wersji została poprawiona stabilność<br />

i kompatybilność. Poprawiony<br />

podsystem graficzny umożliwił<br />

uruchomienie nowych aplikacji,<br />

takich jak edytor tekstu AbiWord czy<br />

przeglądarka grafiki IrfanView.<br />

http://freshmeat.net/projects/reactos/<br />

Qt 3.3.2<br />

Qt to zestaw narzędzi przeznaczony<br />

dla twórców oprogramowania.<br />

Jego wykorzystanie ułatwia proces<br />

tworzenia graficznego interfejsu<br />

użytkownika programu (GUI). Co<br />

więcej, Qt pozwala na tworzenie<br />

aplikacji wieloplatformowych.<br />

Program stworzony z wykorzystaniem<br />

Qt można uruchomić zarówno<br />

w środowisku X Window, Apple<br />

Mac OS X, jak również w rodzinie<br />

systemów Windows. Wystarczy<br />

po prostu skompilować źródła<br />

programu dla docelowej platformy.<br />

W nowej wersji wprowadzono<br />

szereg mniejszych poprawek, jednak<br />

zachowana została zgodność z<br />

poprzednimi wersjami (3.3.1 i 3.3.0),<br />

zarówno w odniesieniu do źródeł, jak<br />

i skompilowanych binariów.<br />

http://freshmeat.net/projects/qt/<br />

www.lpmagazine.org<br />

23


aktualności<br />

linuxfresh<br />

News<br />

Yet Another antiVirus<br />

Recipe 2.1.1<br />

W obecnych czasach prawie każda<br />

skrzynka poczty elektronicznej<br />

narażona jest na otrzymanie robaka<br />

pocztowego. Obok spamu, jest to<br />

największe utrapienie użytkowników<br />

sieci. Yet Another antiVirus Recipe<br />

(YAVR) jest jedną z możliwych metod<br />

zmniejszenia obciążenia skrzynki<br />

pocztowej takimi listami. Jest to<br />

skrypt procmaila, odfiltrowujący listy<br />

spełniające odpowiednie warunki do<br />

osobnego katalogu. W najnowszej<br />

wersji zostały dodane sygnatury<br />

robaków NetSky.R, NetSky.aa, NetSky.Y<br />

i NetSky.X.<br />

http://freshmeat.net/projects/yavr/<br />

Linux LiveCD Router 1.9.3<br />

Wśród dystrybucji Linuksa<br />

instalowanych na ruterach i zaporach<br />

ogniowych szczególną popularnością<br />

cieszą się dystrybucje uruchamiane<br />

z płyty CD. Ich główne zalety to<br />

brak konieczności instalacji oraz fakt,<br />

że nawet jeśli taki system zostanie<br />

spenetrowany, stosunkowo łatwo<br />

przywrócić go ponownie do stanu<br />

używalności. Włamywacz utrzymuje<br />

kontrolę nad systemem jedynie<br />

do restartu systemu, natomiast<br />

administrator może nagrać nową<br />

płytę z dystrybucją zawierającą już<br />

poprawki błędów wykorzystanych<br />

przez włamywacza. Linux LiveCD<br />

Router jest jedną z takich dystrybucji.<br />

Potrafi dzielić zarówno połączenia<br />

typu dialup, jak i DSL, T1, ISDN<br />

i inne. Można go nawet wykorzystać<br />

jako punkt dostępowy używając<br />

większości z popularnych kart<br />

radiowych. W aktualnej wersji między<br />

innymi dodano nowszą wersję<br />

Webmina, jak również kilka modułów<br />

do konfiguracji sieci i zarządzania<br />

rotacją logów.<br />

http://freshmeat.net/projects/cdrouter/<br />

File 4.09<br />

Ten niewielki program służy do<br />

określania typu pliku. Dzięki<br />

niemu możemy sprawdzić, z jakim<br />

plikiem mamy do czynienia. Potrafi<br />

rozpoznawać programy wykonywalne,<br />

wiele formatów graficznych,<br />

dźwiękowych czy tekstowych. Czasem<br />

może nawet podać takie informacje,<br />

jak rozdzielczość obrazu zapisanego<br />

w pliku graficznym, czy częstotliwość<br />

próbkowania w pliku dźwiękowym.<br />

Jest to jeden z tych programów,<br />

które rzadko wykorzystujemy<br />

bezpośrednio, natomiast używanym<br />

przez nas programom nieraz bardzo<br />

się przydaje. Ta wersja zawiera kilka<br />

niewielkich poprawek błędów.<br />

http://freshmeat.net/projects/file/<br />

FontForge 20040425<br />

uroku pulpitu i wygodzie korzystania<br />

z komputera decydują nie tyl-<br />

O<br />

ko grafika i wygodny interfejs, ale również<br />

użyte czcionki. Pomimo olbrzymiego<br />

wyboru fontów dostępnych w różnych<br />

serwisach internetowych, czasem brakuje<br />

takiego, który akurat by nam odpowiadał.<br />

Często bywa też tak, że znajdziemy<br />

śliczną czcionkę, która jednak ma jedną<br />

wadę – nie posiada polskich znaków diakrytycznych.<br />

Jeśli tylko licencja czcionki<br />

na to pozwala, możemy wtedy nieco<br />

ją poprawić i samodzielnie dodać polskie<br />

'ogonki'. Programem, który pomoże<br />

nam w tym, jest FontForge (dawniej znany<br />

pod nazwą PfaEdit) – edytor czcionek.<br />

Jeśli chcemy, to z jego pomocą możemy<br />

nie tylko poprawić gotowy font, ale nawet<br />

stworzyć od zera swój własny.<br />

FontForge pozwala na operacje na<br />

fontach bitmapowych (BDF), jak również<br />

wektorowych (Postscript, TrueType, Open-<br />

Type, SVG i innych). Oprócz tego możliwe<br />

jest dokonywanie konwersji pomiędzy<br />

różnymi formatami.<br />

Tworząc fonty, rysujemy je za pomocą<br />

krzywych. W celu ułatwienia możemy<br />

w tle warsztatu pracy wyświetlić rysunek<br />

litery, którą chcemy stworzyć. Jest to możliwe<br />

dzięki temu, że FontForge pozwala<br />

na pracę w kilku warstwach. Pierwsza<br />

z nich (Foreground layer) zawiera obrys<br />

naszego fontu. Warstwa tła (Background<br />

layer) może zawierać rysunek lub linie<br />

pomocne w rysowaniu czcionki. Ostatnia<br />

warstwa (Guide layer) zawiera linie pomocne<br />

w określaniu rozmiaru czcionki.<br />

Program możemy uruchomić z parametrami<br />

(np. fontforge -new w celu<br />

utworzenia nowej czcionki) lub bez (samo<br />

polecenie fontforge). W tym drugim<br />

przypadku powita nas okno, w którym<br />

możemy wybrać plik czcionki do edycji<br />

lub wcisnąć przycisk New, jeśli chcemy<br />

zacząć pracę od zera.<br />

Główne okno programu składa się<br />

z menu, pod którym wyświetlone są znaki<br />

dostępne w pliku czcionki. Informacje<br />

o czcionce (nazwę, kodowanie) można<br />

ustawić w menu Element –> FontInfo.<br />

Do edycji znaku przechodzimy wciskając<br />

dwukrotnie przyciskiem myszki<br />

na konkretnym znaku. Można też zaznaczyć<br />

znak i wcisnąć klawisze [Ctrl]+[h]. Pojawi<br />

się okno z obrysem znaku oraz okna<br />

narzędzi i warstw. W tym oknie możemy<br />

modyfikować wygląd znaku lub tworzyć<br />

Może nie jest to najładniejsza litera L<br />

z plusem, ale jak na pierwszy raz...<br />

całkiem nowy. Do tworzenia służą nam<br />

przede wszystkim narzędzia Add curve point<br />

(dodaje punkt będący częścią krzywej),<br />

Add corner point (dodaje punkt narożny,<br />

łączący dwie proste) oraz Add tangent point<br />

(najlepiej sprawdzający się jako punkt<br />

łączący krzywą z prostą, pomiędzy punktami<br />

curve i corner). Po stworzeniu ogólnego<br />

zarysu możemy go poprawiać przesuwając<br />

poszczególne punkty, modyfikując<br />

kształt krzywych, a nawet zmieniając<br />

rozmiar i proporcje całego znaku.<br />

Jeśli chcemy skorzystać z gotowego<br />

znaku, można go zaznaczyć i z menu<br />

dostępnego pod prawym przyciskiem<br />

myszki wybrać Copy. Następnie można<br />

wskazać pole, w którym chcemy ten<br />

znak umieścić i wkleić go poleceniem Paste<br />

dostępnym w tym samym menu. Teraz<br />

już można dokonywać modyfikacji<br />

(np. dodawać polskie ogonki). Szczegółowy<br />

tutorial prowadzący krok po kroku<br />

przez tworzenie i modyfikację fontów<br />

znajduje się na stronie domowej programu.<br />

Warto się z nim zapoznać, gdyż zawiera<br />

wiele ciekawych informacji (między<br />

innymi cenne uwagi odnośnie tworzenia<br />

znaków obrysowywanych przez więcej<br />

niż jedną krzywą, jak np. znak O).<br />

Po zakończeniu pracy ze znakami<br />

można wygenerować fonty wybierając pozycję<br />

menu File–>Generate Fonts. Zależnie<br />

od naszych potrzeb, możemy wygenerować<br />

fonty bitmapowe lub wektorowe.<br />

W nowej wersji programu poprawiono<br />

szereg błędów (między innymi<br />

związanych z powiększaniem obrazu<br />

i wklejaniem danych) oraz dodano kilka<br />

nowych funkcji (np. okno dialogowe pozwalające<br />

dokładnie określić lokalizację<br />

elips i prostokątów).<br />

http://freshmeat.net/projects/fontforge/<br />

24 czerwiec 2004


fresh@lpmagazine.org<br />

dział prowadzi: Piotr Machej<br />

Rootkit Hunter 1.0.7<br />

Wygląda na to, że trzeba będzie poprawić<br />

konfigurację SSH<br />

Czasy, gdy z Sieci korzystała jedynie<br />

grupa naukowców, dawno się już<br />

skończyły. Internet łączy teraz ze sobą najdalsze<br />

zakątki świata, a w jego czeluściach<br />

obok zwykłych użytkowników przebywają<br />

różnej maści łobuzy. Oprócz całej<br />

gamy osób określanych mianem scriptkiddies,<br />

których działalność zwykle ogranicza<br />

się do prób włamania do systemów<br />

z wykorzystaniem gotowych sposobów<br />

(a następnie podmiany strony czy skasowania<br />

plików), w Sieci można znaleźć<br />

bardziej wytrawnych włamywaczy. Dla<br />

nich włamanie się do systemu nie jest<br />

celem samym w sobie, lecz dopiero początkiem<br />

drogi. Dlatego też, jeśli chcą<br />

jak najdłużej utrzymać kontrolę nad<br />

skompromitowanym systemem, muszą<br />

ukryć ślady swojej obecności. W tym<br />

celu powstały tzw. rootkity. Są to zestawy<br />

programów zastępujących różne krytyczne<br />

pliki w systemie. Przykładowo, mogą<br />

być podmienione polecenia ls, find, ps,<br />

who, passwd i inne. Dzięki użyciu takiego<br />

rootkitu, wykrycie obecności intruza<br />

w systemie jest znacznie trudniejsze.<br />

Ze względu na konieczność wykrywania<br />

takich ataków, powstały różne<br />

programy mniej lub bardziej skutecznie<br />

wykrywające obecność rootkitów w systemie.<br />

Jednym z nich jest Rootkit Hunter.<br />

Program ten przegląda pliki i cały system<br />

w poszukiwaniu śladów obecności<br />

znanych i nieznanych rootkitów, tylnych<br />

furtek (backdoor) oraz snifferów.<br />

Program Rootkit Hunter należy uruchamiać<br />

z prawami administratora. Po<br />

uruchomieniu programu (jest to właściwie<br />

skrypt powłoki) poleceniem rkhunter,<br />

możemy zapoznać się ze spisem dostępnych<br />

parametrów wywołania. Najczęściej<br />

będziemy wykorzystywać opcję -c<br />

(a więc wywołanie rkhunter -c), która<br />

powoduje wykonanie pełnego skanowania.<br />

Przy pełnym skanowaniu program najpierw<br />

sprawdza, czy nie zostały podmienione<br />

kluczowe pliki wykonywalne. Następnie<br />

stara się wyszukać ślady obecności<br />

rootkitów na dysku. Po każdym etapie<br />

oczekuje na naciśnięcie klawisza [Enter],<br />

aby użytkownik miał możliwość zapoznać<br />

się z wynikami wyszukiwania. Jeśli nie zostaną<br />

znalezione żadne problemy, potwierdzane<br />

jest to wyświetleniem napisu [ OK ].<br />

W następnym etapie system jest sprawdzany<br />

na obecność koni trojańskich, podejrzanych<br />

właściwości kluczowych plików<br />

oraz podmienionych skryptów. Dodatkowo,<br />

sprawdzane są załadowane moduły jądra,<br />

otwarte porty najczęściej wykorzystywane<br />

przez tylne furtki oraz interfejsy sieciowe<br />

(czy przypadkiem nie są ustawione<br />

w tryb promiscuous).<br />

Kolejny etap to sprawdzenie nazwy<br />

komputera oraz zmian w informacjach<br />

o użytkownikach i grupach (jeśli test jest<br />

wykonywany po raz pierwszy, to informacje<br />

te są zapisywane do późniejszego<br />

porównania). Sprawdzane są również<br />

skrypty startowe i historia powłoki.<br />

Następnie katalog /dev jest przeglądany<br />

w poszukiwaniu podejrzanych plików.<br />

Po sprawdzeniu pliku /etc/passwd i konfiguracji<br />

SSH oraz logowania, zostaje wyświetlone<br />

podsumowanie.<br />

Należy pamiętać, że najważniejsze<br />

jest zapobieganie, a nie leczenie. Lepiej<br />

dbać wcześniej o aktualność systemu<br />

i instalować poprawki związane z bezpieczeństwem<br />

niż później po uruchomieniu<br />

programu Rootkit Hunter zobaczyć napis<br />

Found. Niezależnie bowiem od wykrycia<br />

i usunięcia samego rootkitu, konieczne jest<br />

odtworzenie stanu systemu sprzed włamania<br />

(o ile uda się określić jego datę), co<br />

zazwyczaj wiąże się z ponowną instalacją<br />

systemu. Nigdy bowiem nie można mieć<br />

pewności, że rootkit został całkowicie<br />

usunięty. Oczywiście, przed reinstalacją<br />

systemu należy wykonać kopie zapasowe<br />

ważnych danych, przy czym w przypadku<br />

plików binarnych koniecznie należy<br />

sprawdzić ich integralność.<br />

W tej wersji dodano między innymi<br />

wykrywanie IRIX Rootkit oraz URK<br />

(Universal Root Kit). Oprócz tego, poprawiono<br />

wykrywanie rootkitu Suckit<br />

i wprowadzono kilka innych ulepszeń.<br />

http://freshmeat.net/projects/rkhunter/<br />

Advanced Bash Scripting<br />

Guide 2.7<br />

Większość użytkowników Linuksa<br />

wcześniej lub później styka się<br />

z tworzeniem skryptów powłoki,<br />

chociaż w czasach, gdy coraz<br />

więcej osób korzysta z graficznych<br />

interfejsów, umiejętność ta nie jest<br />

już tak powszechna, jak w dobie<br />

wszechobecnego trybu tekstowego.<br />

Jeśli ktoś jednak zainteresuje się<br />

skryptami powłoki, z pewnością<br />

przyda mu się książka Advanced<br />

Bash Scripting Guide. Można ją<br />

czytać od deski do deski, ucząc się na<br />

licznych przykładach. Zawiera nawet<br />

wskazówki dotyczące podstawowych<br />

technik programowania. Ze względu<br />

na swoją objętość (około 556 stron<br />

wydruku), może odstraszyć niektóre<br />

osoby. Nawet im może się jednak<br />

przydać, jeśli będą szukać rozwiązania<br />

konkretnego problemu.<br />

http://freshmeat.net/projects/advanced<br />

bashscriptingguide/<br />

Allegro 4.1.14<br />

Programiści tworzący gry często<br />

korzystają z gotowych bibliotek<br />

zawierających funkcje do obsługi<br />

grafiki, dźwięku czy urządzeń<br />

wejściowych (klawiatura, myszka<br />

czy joystick). Taką biblioteką,<br />

przeznaczoną dla programistów<br />

C/C++ jest Allegro. Oprócz funkcji<br />

wymienionych wcześniej, oferuje<br />

ona także funkcje matematyczne do<br />

operacji zmiennoprzecinkowych,<br />

funkcje do obsługi 3D, zarządzania<br />

plikami, skompresowane pliki<br />

danych, jak również graficzny interfejs<br />

użytkownika.<br />

http://freshmeat.net/projects/allegro/<br />

MPlayer 1.0pre4<br />

Ten popularny program do<br />

odtwarzania filmów powoli zbliża się<br />

do stabilnej wersji 1.0. Obecnie<br />

potrafi obsługiwać większość<br />

popularnych formatów plików<br />

i kodeków zaczynając od MPEG,<br />

poprzez DivX, Windows Media,<br />

Real Audio/Video, Quicktime, aż to<br />

Vivo. Posiada wiele własnych wersji<br />

kodeków, ale może również korzystać<br />

z bibliotek stworzonych z myślą<br />

o Windows. Oprócz odtwarzania<br />

plików z filmami, radzi sobie też<br />

z odtwarzaniem płyt VCD i DVD<br />

(chociaż pod tym względem lepszy<br />

jest konkurencyjny Xine -- MPlayer<br />

jeszcze nie radzi sobie zbyt dobrze<br />

z menu DVD). Jego wielką zaletą jest<br />

możliwość wyświetlania napisów<br />

z plików w wielu różnych formatach,<br />

jak również napisów dołączonych do<br />

filmów DVD.<br />

http://freshmeat.net/projects/mplayer/<br />

www.lpmagazine.org<br />

25


wywiad<br />

Wywiad z Matthiasem<br />

Ettrichem, założycielem<br />

projektu KDE<br />

CD/DVD<br />

Po uruchomieniu dystrybucji<br />

Linux+ Live CD/DVD w systemie<br />

będzie dostępne graficzne<br />

środowisko pracy KDE.<br />

Krzysztof Krawczyk: Czy mógłbyś<br />

przedstawić się naszym Czytelnikom?<br />

Matthias Ettrich: Urodziłem się<br />

w 1972 roku na południu Niemiec,<br />

w pobliżu Sztutgartu. Moim pierwszym<br />

komputerem był Commodore C64, który<br />

kupiłem z braćmi, gdy miałem 12 lat.<br />

Strasznie mi się spodobał, ale później<br />

przestałem interesować się komputerami<br />

(jest znacznie więcej ciekawszych rzeczy,<br />

gdy jest się nastolatkiem) do momentu,<br />

gdy zacząłem studiować informatykę<br />

na uniwersytecie w Tuebingen. Ówczesny<br />

MS-DOS nie nadawał się do niczego<br />

– wydawało mi się, że nic nie zmieniło<br />

się od czasu C64. GNU/Linuksa odkryłem<br />

rok później i od tego momentu komputery<br />

zafascynowały mnie na nowo.<br />

Prywatnie, żyję sobie szczęśliwie<br />

w małym mieszkanku w Oslo, aktualnie<br />

sam. W środku mam fortepian, z którego<br />

dość często korzystam. Gdy stuknęła<br />

mi trzydziestka, powróciło moje zamiłowanie<br />

do muzyki klasycznej. W tej chwili<br />

ćwiczę klasyczną muzykę kameralną,<br />

głównie Beethovena, Mozarta i Hummela,<br />

ale oczywiście także Chopina. Oprócz<br />

tego, staram się skorzystać z norweskiej<br />

przyrody. Z dwoma przyjaciółmi kupiliśmy<br />

starą drewnianą łódkę, zbudowaną<br />

w 1956 roku, mającą 23 stóp długości.<br />

Przez parę ostatnich tygodni (głównie<br />

weekendy) staraliśmy się ją naprawić.<br />

Mamy nadzieję, że będzie można na niej<br />

pływać. W czasie zimy w Norwegii jeździ<br />

się na nartach. Chociaż norweskie zjazdy<br />

są małe w porównaniu z tymi z Alp<br />

i w niewielkim stopniu nasłonecznione,<br />

to jednak świetny śnieżny puch łatwo to<br />

rekompensuje.<br />

Zawodowo, pracuję na stanowisku<br />

Dyrektora ds. Rozwoju Oprogramowania<br />

w firmie Trolltech. Jestem odpowiedzialny<br />

za rozwój biblioteki Qt dla Uniksa, MS<br />

Windows, Macintosha oraz wbudowanego<br />

Linuksa. Dzięki dobrym układom<br />

w firmie, wciąż jestem w stanie osobiście<br />

uczestniczyć w pracach deweloperskich.<br />

KK: A jak rozpoczęła się twoja przygoda<br />

z KDE?<br />

ME: Około 1995 roku stałem się zagorzałym<br />

zwolennikiem oprogramowaniu<br />

GNU i Linuksa. Byłem tak przekonany do<br />

tego systemu, że nie mogłem zrozumieć,<br />

dlaczego koledzy ze studiów, niezależnie<br />

od tego, co studiowali, chcieli używać<br />

Windows 3.1 – brak wielozadaniowości,<br />

16-bitowa przestrzeń adresowa, częste<br />

pady, okropne ikonki i brzydkie fonty.<br />

Tak naprawdę to żaden z nich nie był<br />

w stanie powiedzieć czegoś dobrego na<br />

temat tego systemu. Pomimo wszystkiego,<br />

był on popularny. Najczęściej używaną<br />

aplikacją był Word 2.0 – drogi, niestabilny<br />

i mało funkcjonalny. Studenci<br />

musieli dzielić swoich dokumenty na<br />

mniejsze kawałki, ponieważ ich edytor<br />

nie był w stanie pracować stabilnie<br />

z dokumentami o więcej niż dziesięciu<br />

stronach. Na Linuksie mieliśmy TeX-a<br />

i LaTeX-a, które były proste w użyciu,<br />

tworzyły wspaniałe dokumenty, były<br />

stabilne i za darmo. Dlaczego ktoś nie<br />

chciałby ich używać?<br />

W tamtych czasach Microsoft był jeszcze<br />

daleki od zwycięstwa i nie wierzyłem<br />

w jego sukces. Za brak zainteresowania<br />

Linuksem obwiniałem istniejące oprogramowanie<br />

i jego brak skupienia się<br />

na końcowym użytkowniku. Wtedy właśnie<br />

zacząłem pisać graficzną nakładkę<br />

na LaTeX-a, która stała się później edytorem<br />

tekstu LyX. Chociaż mój program nie<br />

zahamował sukcesu Worda, to okazał się<br />

udanym projektem Wolnego Oprogramowania<br />

z aktywną społecznością dewelo-<br />

26 czerwiec 2004


wywiad z Matthiasem Ettrichem<br />

wywiad<br />

Matthias Ettrich<br />

perów i nauczył mnie, jak wygląda praca<br />

nad takimi projektami od środka.<br />

Ponadto, zauważyłem, że edytor<br />

tekstu sam w sobie nie był wystarczający,<br />

aby przekonać ludzi do rozważenia<br />

GNU/Linuksa jako poważnej alternatywy.<br />

Windows 95 zaczynał zastępować<br />

starszą wersję, a bardziej zaawansowane<br />

aplikacje dla niego stały się standardem.<br />

Nawet małe drobiazgi, takie<br />

jak okno dialogowe wyboru pliku, były<br />

o niebo lepsze niż cokolwiek osiągalnego<br />

w X Window. Technika "przeciągnij<br />

i upuść" była wszędzie, a protokoły sieciowe,<br />

takie jak HTTP, były wbudowane<br />

w system, więc dostępne dla każdej aplikacji.<br />

I, co najgorsze, Windows 95 w zasadzie<br />

nie wyglądał już tak źle. W rzeczywistości<br />

był bardzo zbliżony do Motifa<br />

– wykorzystywał trochę jaśniejszą szarość<br />

(idealny domyślny kolor na tło)<br />

i bardziej złożony efekt przycisku.<br />

Przez kolejne miesiące przeszukiwałem<br />

dostępne oprogramowanie w Linuksie,<br />

aby poprawić istniejącą sytuację. Zbadałem<br />

większość bibliotek graficznych<br />

i robiłem mniejsze poprawki w różnych<br />

menedżerach okien. Szczęśliwie, studiowałem<br />

wtedy informatykę, a w Niemczech<br />

oznaczało to dużo wolnego czasu<br />

i szybkie łącze internetowe.<br />

Ostatecznie, odkryłem bibliotekę Qt,<br />

który była pierwszą, która nie wyglądała<br />

na znacznie gorszą od tego, co działo<br />

się w Windows. Główną przyczyną tego<br />

było to, że Qt była także przeznaczona<br />

dla Windows, więc musiała radzić<br />

sobie z zaawansowanym API Win32.<br />

Tak się podnieciłem jej możliwościami,<br />

że na różne grupy dyskusyjne wysłałem<br />

zaproszenie do współtworzenia projektu.<br />

Martin Konold, którego znałem z projektu<br />

LyX, przygotował parę usług, w tym<br />

miejsce na serwerze FTP i listy dyskusyjne.<br />

Odzew był natychmiastowy i niesłychany,<br />

co oznaczało, że dużo ludzi myślało<br />

o tych samych zagadnieniach i szukało<br />

sposobów na ich realizację. Czas był<br />

jak najbardziej odpowiedni. Parę dni później<br />

mieliśmy ponad 40 programistów na<br />

liście dyskusyjnej, którzy byli poważnie<br />

zainteresowani tematem. Uzgodniliśmy<br />

najważniejsze rzeczy i zaczęliśmy<br />

kodować.<br />

Wtedy biblioteka Qt była tylko moją<br />

sugestią. Istniało sporo zamieszania<br />

wokół tego tematu. Wielu programistów<br />

nie było zadowolonych z jej licencji. Inną<br />

wadą był jej wbudowany wygląd, zbliżony<br />

albo do Windows, albo do Motifa.<br />

Rekompensowane to było intuicyjnym<br />

API, a szybkie napisanie nowego oprogramowania<br />

było tym, czego chcieliśmy<br />

najbardziej.<br />

Pomyśleliśmy, że zajmiemy się kontrowersyjnymi<br />

rzeczami później i czas<br />

pokazał, że mieliśmy rację. Gdy dwa<br />

lata później zacząłem pracę w Trolltech,<br />

moim pierwszym zadaniem, które sam<br />

sobie przydzieliłem, było wprowadzenie<br />

stylów w Qt. Drugim było poprawienie<br />

relacji ze społecznością KDE, co<br />

oznaczało konieczność zmiany licencji<br />

– na początku Open Source, a później<br />

GNU GPL.<br />

KK: A czym teraz przede wszystkim<br />

zajmujesz się w KDE?<br />

ME: Moją główną rolą było rozpocząć<br />

projekt, przedstawić jego wizję<br />

i pomóc w stworzeniu aktywnej społeczności<br />

równych członków o tym samym<br />

celu. KDE nigdy nie było jednoosobowym<br />

przedstawieniem, a nawet nie było<br />

skoncentrowane tylko wokół kilku ludzi.<br />

Fakt, że zawsze brakowało nam dobroczynnego<br />

dyktatora, opisanego w książce<br />

“Katedra i bazar”, prawdopodobnie nie<br />

dawało spokoju takim teoretykom Wolnego<br />

Oprogramowania, jak Eric S. Raymond.<br />

Dzisiaj koncentruję się głównie na<br />

technologii wspierającej KDE, czyli bibliotece<br />

Qt. Moja pozycja w Trolltech umożliwia<br />

mi przeznaczanie na ten cel zarówno<br />

środków finansowych, czyli sponsorowanie<br />

ludzi i wydarzeń, jak również<br />

pewnych zasobów deweloperskich, czyli<br />

pozwalanie moim inżynierom pracować<br />

nad KDE. Oprócz tego, mam dużo wystąpień<br />

i wywiadów, staram się jednoczyć<br />

ludzi i pomagam w organizowaniu takich<br />

wydarzeń, jak zeszłoroczna konferencja<br />

KDE w Nove Hrady.<br />

KK: Ile osób wspiera rozwój KDE/Qt.<br />

Znasz większość z nich?<br />

ME: Wydaje mi się, że aktualnie<br />

mamy więcej niż tysiąc współpracowników,<br />

więc oczywiście nie znam większości<br />

z nich. Nie wydaje mi się, aby ktokolwiek<br />

znał. Poznałem może ze stu na konferencjach<br />

KDE i innych imprezach. Z kilkoma<br />

nawiązałem bliższe kontakty.<br />

KK: Czy trudno było zarządzać<br />

takim projektem, jak KDE? Czy trudno<br />

jest zarządzać rozwojem Qt?<br />

ME: Centralne zarządzanie w projekcie<br />

Wolnego Oprogramowanie jest związane<br />

z koordynowaniem działań rozwojowych,<br />

a nie z mówieniem ludziom,<br />

co mają robić. Piękno rozwoju Wolnego<br />

Oprogramowania, a zarazem jego<br />

największą siłą, jest to, że każdy robi to,<br />

co lubi najbardziej. W końcu mówimy<br />

o ludziach, którzy poświęcają swój wolny<br />

czas, a nie o płatnej sile roboczej. Dzięki<br />

różnorodności ludzi, do każdego zadania<br />

znajdzie się człowiek, który lubi je najbardziej.<br />

Kluczem do sukcesu w każdym<br />

projekcie jest zachęcić wystarczającą<br />

liczbę odpowiednio zróżnicowanych<br />

ludzi i myślę, że w KDE się to udało.<br />

Zarządzanie rozwojem Qt jest zupełnie<br />

innym wyzwaniem. Mamy tutaj na<br />

miejscu zespół 20 pełnoetatowych inżynierów<br />

i wielu współpracowników na<br />

zewnątrz. Zarządzanie taką wysoce kreatywną<br />

płatną siłą jest znacznie trudniejsze,<br />

gdyż nie można po prostu odrzucać<br />

poprawek – twoim zadaniem jest wyszkolić<br />

tych ludzi i znaleźć im takie zadanie,<br />

które będą najbardziej odpowiednie dla<br />

ich indywidualnych zdolności.<br />

KK: Co myślisz o projekcie GNOME?<br />

Czy programiści KDE współpracują<br />

z tymi z GNOME?<br />

ME: Oba projekty są podobne<br />

w tym, że mają dwie, czasem odrębne,<br />

grupy docelowe: użytkowników<br />

i programistów. Porównanie środowiska<br />

programistycznego zostawiłbym raczej<br />

innym – w dużej mierze jest to kwestia<br />

gustu. Ogólnie, oba mają podobne cele<br />

i dzięki powszechnym i wzajemnym<br />

inspiracjom, często podejmuję podobne<br />

decyzje. Jest to związane z tym, że dzisiaj<br />

na prawie każdym poziomie jest nawiązywana<br />

współpraca pomiędzy oboma<br />

www.lpmagazine.org<br />

27


wywiad<br />

Matthias Ettrich i jego przyjaciele z Trolltechu (Tonje Sund i Lars Knoll)<br />

zespołami. Przykładowo, oba zespoły<br />

pracują aktywnie nad inicjatywą freedesktop.org,<br />

aby zbudować wspólną platformę<br />

pod KDE i GNOME, bazującą na<br />

standardzie POSIX.<br />

KK: Jakiej dystrybucji Linuksa używasz<br />

w domu, a jakiej w pracy? I dlaczego?<br />

ME: Osobiście bardzo lubię i używam<br />

SUSE, gdyż jest wygodna, kompletna<br />

i po prostu jestem do niej przyzwyczajony.<br />

Pomaga także, że znam wielu ludzi<br />

z SUSE, odpowiedzialnych za tę dystrybucję.<br />

Używamy również w pracy Debiana.<br />

Biorąc pod uwagę, że mamy administratorów,<br />

którzy zajmują się problemami<br />

technicznymi, jestem raczej niezależny<br />

od dystrybucji, przynajmniej tak długo<br />

jak zawiera Emacsa i GCC.<br />

KK: Czy myślisz, że KDE na Linuksie<br />

jest dobrą alternatywą dla Windows na<br />

stacjach roboczych?<br />

ME: To całkowicie zależy od tego,<br />

kim jestem i co chcesz robić na swoim<br />

komputerze. Dla mnie i wielu innych,<br />

KDE jest dobrym rozwiązaniem i tak jest<br />

już od kilku lat, więc tak – dla mnie to<br />

dobra alternatywa. W istocie, biorąc pod<br />

uwagę mój sposób pracy, to Windows nie<br />

jest dla mnie dobrą alternatywą. Jeżeli<br />

jesteś zadowolony z tego, jak działa Windows,<br />

a szukasz czegoś, co działa w ten<br />

sam sposób, ale jest tańsze, KDE nie jest<br />

rozwiązaniem. To nie jest zastępstwo dla<br />

Windows Microsoftu i nie chcemy, aby<br />

nim było. Chociaż były projekty Wolnego<br />

Oprogramowania, które starały się<br />

sklonować funkcje programu komercyjnego,<br />

a także jego właściwości, KDE<br />

do nich nigdy nie należało. To platforma<br />

zupełnie niezależna, a gdy obiektywnie<br />

porównywać, bardzo zaawansowana.<br />

Zauważ również, że zadowolenie użytkownika<br />

jest tylko pewną częścią równania.<br />

Równie istotne jest zadowolenie programistów.<br />

KDE jest tak samo platformą<br />

dla programistów, jak jest graficznym środowiskiem<br />

pracy. Przyciąganie programistów<br />

jest tak samo ważne jak przyciąganie<br />

użytkowników. Dzisiaj napisanie aplikacji<br />

KDE przyjaznej dla użytkownika<br />

jest łatwiejsze niż pod Windows. Zatem,<br />

jeśli szukasz dobrej platformy deweloperskiej<br />

dla swojej następnej aplikacji, KDE<br />

jest bardzo dobrą alternatywą.<br />

KK: Czy uważasz, żę KDE będzie<br />

kiedyś “doskonałe”. Albo chociaż bliskie<br />

temu?<br />

ME: Oprogramowanie nigdy nie<br />

jest doskonałe z dwóch powodów. Po<br />

pierwsze, zawsze uczysz się nowych<br />

rzeczy podczas tworzenia oprogramowania<br />

i pewne rzeczy chciałbyś później<br />

poprawić. Po drugie, świat zmienia się<br />

i to szybko. Fragment oprogramowania,<br />

który wydawał się doskonały dzisiaj, nie<br />

jest już taki za parę miesięcy, jest przestarzały<br />

za rok i całkowicie nie do wykorzystania<br />

za 3 lata.<br />

KK: Jakie są twoje plany na przyszłość?<br />

Czy zamierzasz bardziej włączać<br />

się w rozwój KDE czy ograniczysz swój<br />

wkład w to środowisko?<br />

ME: Aktualnie koncentruję się na<br />

następnej generacji Qt. Dzisiejsze Qt jest<br />

sprawdzoną technologią, która była opracowywana<br />

przez więcej niż 10 lat, więc<br />

uważamy, że czas najwyższy poprawić<br />

niektóre elementy jej architektury. Duży<br />

zakres urządzeń, na których jest używana,<br />

zaczynając od potężnych stacji roboczych,<br />

a kończąc na małych urządzeniach<br />

wbudowanych, prowadzi nas ku<br />

nowym wyzwaniom. Bardzo ciekawe<br />

jest to, że zarówno te małe wbudowane<br />

aplikacje, jak również duże aplikacje<br />

biurkowe, które wciąż stają się coraz bardziej<br />

skomplikowane, mają jedną cechę<br />

wspólną: wiele zyskałyby korzystając<br />

z bardziej elastycznej, mniejszej i jednocześnie<br />

szybszej biblioteki. Wierzymy, że<br />

możemy coś takiego przygotować.<br />

W rzeczywistości zawsze planuję<br />

poświęcać więcej czasu na zabawę<br />

z KDE, ale kiedy naprawdę się to uda,<br />

tylko czas pokaże. Tak się składa, że<br />

nigdy nie udaje mi go znaleźć.<br />

KK: Dziękuję za rozmowę.<br />

ME: To ja dziękuję. Pozdrawiam<br />

wszystkich użytkowników KDE<br />

w Polsce.<br />

W Internecie:<br />

• Strona domowa projektu KDE:<br />

http://www.kde.org/<br />

• Strona domowa firmy Trolltech:<br />

http://www.trolltech.com/<br />

28 czerwiec 2004


Linux+ 07/2003 Linux+ 08/2003 Linux+ 09/2003<br />

Linux+ 10/2003<br />

Linux+ 11/2003 Linux+ 12/2003 Linux+ 01/2004<br />

Linux+ 02/2004<br />

Numery archiwalne<br />

Prosimy o przesłanie kuponu pocztą lub faksem.<br />

Prosimy w odpowiednim polu zakreślić numery, które Państwo chcą zamówić.<br />

żółte pola – 24 zł za Linux+<br />

białe pola – 15 zł za Linux+<br />

Linux+ 03/2004<br />

(DVD, CD)<br />

Linux+ 04/2004<br />

(DVD, CD)<br />

niebieskie pola – 27.90 zł za Linux+ DVD<br />

czerwone pola – 9,90 zł za Linux+ bez CD<br />

2000<br />

2001<br />

2002<br />

2003<br />

2004<br />

2004<br />

2004<br />

1 2 3 4 5 6 7 8 9 10 11 12<br />

Linux+ 05/2004<br />

(DVD, CD, bez CD)<br />

L+ 05/2004<br />

– rocznik 2000 (12 numerów) – 120 zł<br />

– rocznik 2001 (12 numerów) – 120 zł<br />

– rocznik 2002 (12 numerów) – 150 zł<br />

– rocznik 2003 (12 numerów) – 150 zł<br />

Imię i nazwisko, nazwa firmy ..............................................................................<br />

Dokładny adres: ....................................................................................................<br />

.................................................................................................................................<br />

Wypełnia płatnik VAT. Oświadczam(y), że jestem(śmy) płatnikiem VAT<br />

i upoważniam(y) Software-Wydawnictwo Sp. z o.o. do wystawienia faktury VAT<br />

bez podpisu odbiorcy.<br />

pieczątka i podpis<br />

Software-Wydawnictwo Sp. z o.o.<br />

ul. Lewartowskiego 6, 00-190 Warszawa, Tel.: (22) 860 17 67


multimedia<br />

Linux<br />

w studiu nagrań<br />

Paweł Wolniewicz<br />

CD/DVD<br />

Po uruchomieniu dystrybucji<br />

Linux+ Live CD/DVD będzie<br />

można przetestować działanie<br />

omawianego oprogramowania.<br />

Na płycie DVD<br />

Na płycie DVD znajdują się<br />

wszytkie opisywane programy<br />

w postaci pakietu ReHMuDi 2.0.<br />

Na płycie CD<br />

Na płycie CD znajdują się<br />

niektóre z omawianych<br />

programów.<br />

O autorze<br />

Autor od sześciu lat korzysta<br />

z muzycznego oprogramowania<br />

dla Linuksa. Prowadzi serwis<br />

http://linux-muzyka.ixion.pl/,<br />

który jest poświęcony<br />

edycji dźwięku w Linuksie.<br />

Ostatnie kilka lat rozwoju<br />

Linuksa to czas dojrzewania<br />

i przystosowywania<br />

się do potrzeb różnych<br />

grup użytkowników. Do niedawna<br />

system spod znaku pingwina był kojarzony<br />

głównie z serwerami, a jego wykorzystanie<br />

jako stacji roboczej wydawało<br />

się mało opłacalne. Obecnie stereotyp<br />

ten jest powoli przełamywany, a nowe<br />

oprogramowanie pozwala na stosowanie<br />

Linuksa w wielu różnych miejscach,<br />

np. w studiu nagrań.<br />

Brak sterowników profesjonalnych<br />

kart dźwiękowych oraz dobrych<br />

aplikacji audio sprawiał, że do<br />

niedawna Linux był mało przyjazny<br />

dla muzyków. Obecnie nie ma już<br />

jednak powodu do wstydu. Pojawiają<br />

się pierwsze studia nagrań korzystające<br />

z Linuksa, a rozwój wolnego oprogramowania<br />

dźwiękowego wspierany<br />

jest - między innymi - przez Komisję<br />

Europejską.<br />

W artykule przedstawię metody przystosowywania<br />

Linuksa do potrzeb studia<br />

nagrań. Opiszę również sposoby wykorzystania<br />

kilku popularnych, muzycznych<br />

aplikacji. Spróbujemy, krok po<br />

kroku, skomponować nasze pierwsze<br />

nagranie (?) w Linuksie.<br />

Użytkownicy komercyjnych aplikacji<br />

służących do edycji dźwięku mogą<br />

w pierwszej chwili poczuć się nieswojo.<br />

Linux nie posiada rozbudowanych<br />

i wielofunkcyjnych "kombajnów"<br />

muzycznych. Podczas komponowania<br />

nagrań będziemy korzystać z co<br />

najmniej kilku mniejszych i bardziej<br />

wyspecjalizowanych aplikacji. Zaletą<br />

takiego rozwiązania jest możliwość<br />

dowolnego wyboru zestawu programów<br />

i proste przesyłanie pomiędzy<br />

nimi materiału dźwiękowego. Wadą jest<br />

konieczność instalowania sporej liczby<br />

aplikacji.<br />

Elementy linuksowego<br />

studia nagrań<br />

Zanim rozpoczniemy konfigurowanie systemu,<br />

wymienię jeszcze najważniejsze<br />

elementy studia nagrań bazującego na<br />

Linuksie. Przede wszystkim powinniśmy<br />

pamiętać, że najważniejszy jest zawsze<br />

sprzęt - komputer i karta dźwiękowa,<br />

a także mikrofony, klawiatury MIDI, przetworniki<br />

analogowo-cyfrowe oraz właściwe<br />

okablowanie. Nawet najlepsze oprogramowanie<br />

nie sprawi, że tania karta<br />

Multimedialne<br />

dystrybucje Linuksa<br />

• AGNULA – A GNU/Linux Audio Distribution:<br />

http://www.agnula.org/<br />

• ReHMuDi – stąd można ściągnąć<br />

obrazy płyt instalacyjnych:<br />

http://download.agnula.org/rehmudi/<br />

• Debian Multimedia Distribution –<br />

multimedialna wersja Debiana:<br />

http://www.agnula.org/download/<br />

demudi/demudi_1_0_iso<br />

• AGNULA/DeMuDi Live – dystrybucja<br />

uruchamiana z płyty CD:<br />

http://download.agnula.org/1.1/1.1.1/<br />

demudi-live-cd_1.1.1.iso<br />

• Planet CCRMA – zestaw pakietów<br />

dla systemów Red Hat i Fedora:<br />

http://ccrma-www.stanford.edu/<br />

planetccrma/software/<br />

• Dyne:bolic – uruchamiana z płyty<br />

CD, łatwa w obsłudze dystrybucja<br />

Linuksa przeznaczona dla osób<br />

pracujących z multimediami:<br />

http://dynebolic.org/<br />

• Audioslack – kilkanaście spakietowanych<br />

programów dźwiękowych dla<br />

Slackware:<br />

http://www.audioslack.com/<br />

• Pakiety RPM dla Mandrake – kilkaset<br />

z nich zawiera oprogramowanie<br />

muzyczne:<br />

http://rpm.nyvalls.se/<br />

30 czerwiec 2004


linuksowe studio nagrań<br />

multimedia<br />

Instalacja sterowników<br />

ALSA i łat niskich<br />

opóźnień<br />

Sterowniki ALSA wchodzą w skład<br />

wszystkich popularnych dystrybucji Linuksa.<br />

Systemy bazujące na jądrach 2.6.x<br />

domyślnie wykorzystują moduły ALSA.<br />

Aktualne wersje źródłowe sterowników<br />

można także pobrać ze strony http://<br />

www.alsa-project.org/.<br />

Ręczna instalacja łat niskich opóźnień<br />

jest zadaniem o wysokim stopniu<br />

trudności. Odpowiednio załatane jądro<br />

wchodzi w skład multimedialnych dystrybucji<br />

Linuksa, więc większość użytkowników<br />

uniknie samodzielnej kompilacji<br />

podrasowanego jądra. Łaty dla<br />

jąder 2.4.x można ściągnąć ze strony<br />

http://www.zip.com.au/~akpm/linux/<br />

schedlat.html. Przed ich instalacją warto<br />

zapoznać się z dokumentem Low-Latency<br />

2.4.x with ALSA HOWTO, dostępnym<br />

na stronie http://www.djcj.org/LAU/guide/<br />

Low_latency-Mini-HOWTO.php3.<br />

Jądro łatamy przy pomocy poleceń:<br />

cd /usr/src/linux<br />

patch -p1 < /usr/src/2.4.20-low-S<br />

latency.patch<br />

Pierwsze z nich przenosi nas do katalogu,<br />

w którym znajdują się źródła łatanego<br />

jądra. Program patch służy natomiast do<br />

nałożenia poprawek na jądro. Poprawmy<br />

ścieżkę dostępu tak, aby wskazywała na<br />

rozpakowany plik łaty niskich opóźnień.<br />

Teraz możemy już skonfigurować<br />

jądro systemu, np. poleceniem make<br />

menuconfig. W menu Processor Type and<br />

Features powinniśmy zaznaczyć opcję<br />

Low latency scheduling. Wszystkie pozostałe<br />

funkcje i moduły określamy według<br />

potrzeb, a następnie kompilujemy jądro.<br />

Aby jeszcze bardziej zwiększyć<br />

wydajność systemu, można skorzystać<br />

z łat preemptible (ftp://ftp.kernel.org/pub/<br />

linux/kernel/people/rml/preempt-kernel/).<br />

Dzięki nim priorytetowe procesy będą<br />

obsługiwane natychmiast, bez oczekiwania<br />

w kolejce, co prowadzi do znacznego<br />

zwiększenia opóźnień. Sposób instalacji<br />

jest analogiczny jak we wcześniejszym<br />

przypadku.<br />

Najlepsze efekty daje zastosowanie<br />

obydwu typów łat: niskich opóźnień<br />

i preemptible. Nie zawsze jest to jednak<br />

konieczne. W przypadku wykorzystywania<br />

Linuksa tylko do odtwarzania dźwięku<br />

i prostej edycji plików dźwiękowych,<br />

można poprzestać na standardowym<br />

jądrze, dostarczanym razem z instalowaną<br />

dystrybucją.<br />

dźwiękowa zabrzmi dobrze. Ponieważ<br />

nie będziemy musieli płacić za programy,<br />

zainwestujmy w dobre urządzenia<br />

studyjne.<br />

Sprzęt dobierajmy w zależności od<br />

stylu tworzonej przez nas muzyki i od<br />

rodzaju wykonywanych zadań. Jeśli<br />

zamierzamy nagrywać ścieżki wokalne,<br />

gitarowe lub perkusyjne, to potrzebny<br />

będzie mikrofon. Partie instrumentalne<br />

można zarejestrować przy pomocy klawiatur<br />

MIDI, keyboardów bądź syntezatorów.<br />

Jeśli chcemy zarchiwizować na krążkach<br />

CD kolekcję płyt winylowych lub kaset, to<br />

gramofon bądź magnetofon możemy podłączyć<br />

bezpośrednio do komputera.<br />

Dla celów nagrywania powinniśmy<br />

wykorzystywać sprzęt wyprodukowany<br />

przez firmy o uznanej renomie.<br />

Dobre marki mikrofonów to AKG, Beyerdynamic,<br />

Sennheiser i Shure. Kupując<br />

instrumenty klawiszowe warto wybierać<br />

produkty firm Korg, Kurzweil, Roland<br />

i Yamaha. W każdym przypadku warto<br />

poradzić się osób posiadających interesujące<br />

nas modele instrumentów. Na pewno<br />

pomoże to podczas dokonywania zakupu.<br />

Sporo informacji o sprzęcie studyjnym<br />

można również znaleźć w Internecie, np.<br />

na stronach http://www.sound.pl/.<br />

Metody nagrywania dźwięku, które<br />

opiszę, wymagają użycia mikrofonu oraz<br />

klawiatury MIDI. Można również wykorzystać<br />

dowolne inne źródło dźwięku,<br />

a instrumenty klawiszowe z powodzeniem<br />

zastąpi programowy sekwencer MIDI.<br />

Sterowniki i jądro systemu<br />

Oprócz sprzętu, bardzo ważne są sterowniki<br />

kart dźwiękowych i interfejsów<br />

MIDI. Powinny one pozwalać na pełne<br />

wykorzystanie możliwości posiadanych<br />

urządzeń. W przypadku studia opartego<br />

na Linuksie rozwiązanie jest jedno - sterowniki<br />

ALSA (Advanced Linux Sound<br />

Architecture). W porównaniu z przestarzałą<br />

już technologią OSS/Free, obsługują<br />

one znacznie więcej kart, a ponadto są<br />

bardziej dopracowane. Jest to zauważalne<br />

zwłaszcza w przypadku mniej popularnych<br />

i starszych kart dźwiękowych.<br />

Kwestią równie ważną, co właściwy<br />

dobór sterowników, jest odpowiednia<br />

konfiguracja jądra systemu. Powinno<br />

ono pozwalać urządzeniom i oprogramowaniu<br />

na natychmiastową reakcję na<br />

wydane im polecenia. Parametrem opisującym<br />

tę cechę jest opóźnienie (latencja).<br />

W uproszczeniu stanowi ono czas, jaki<br />

Rysunek 1. Graficzny instalator ReHMuDi<br />

w akcji (właśnie instalowane są programy<br />

dźwiękowe)<br />

upłynie pomiędzy wysłaniem komunikatu<br />

(naciśnięciem klawisza) a pojawieniem<br />

się sygnału w głośnikach. Niskie opóźnienia<br />

są istotne zwłaszcza wtedy, gdy<br />

wykorzystujemy nasz sprzęt komputerowy<br />

podczas występów na żywo.<br />

Do niedawna obsługa niskich opóźnień<br />

była piętą achillesową Linuksa.<br />

Obecnie istnieją odpowiednie łaty<br />

na jądro, możliwe jest też zainstalowanie<br />

prekompilowanych jąder. Warto też<br />

pamiętać, że opóźnienia zależą nie tylko<br />

od jądra systemu, ale w głównej mierze<br />

są wypadkową mocy obliczeniowej procesora<br />

oraz szybkości układów karty<br />

dźwiękowej.<br />

Serwer dźwięku i programy<br />

Przygotowując Linuksa do wykorzystania<br />

w studiu nagrań nie powinniśmy zapomnieć<br />

o zainstalowaniu profesjonalnego<br />

serwera dźwięku. Jest to demon pozwalający<br />

aplikacjom na wzajemne przekazywanie<br />

edytowanego materiału audio.<br />

Standardowo instalowane serwery - aRts<br />

dla KDE i ESD dla GNOME – z pewnością<br />

nam nie wystarczą. Są one przeznaczone<br />

jedynie dla najprostszych zadań: odtwarzania<br />

dźwięku i prezentacji multimedialnych<br />

oraz obsługi gier. Nie nadają się natomiast<br />

do bardziej zaawansowanych zastosowań,<br />

takich jak miksowanie muzyki na<br />

żywo czy praca z programowymi syntezatorami.<br />

Najlepszym wyborem jest JACK<br />

(JACK Audio Manipulation Kit). Bezproblemowo<br />

obsługuje on częstotliwości<br />

próbkowania do 96000 Hz oraz dźwięk<br />

24-bitowy. Ponadto korzysta z niego<br />

coraz więcej aplikacji. Dzięki serwerowi<br />

JACK możemy przesyłać edytowany<br />

materiał dźwiękowy pomiędzy wieloma<br />

wyspecjalizowanymi programa-<br />

www.lpmagazine.org<br />

31


multimedia<br />

nam koniecznie potrzebna. Zalecane ustawienia<br />

można łatwo otrzymać wykonując<br />

z konta administratora polecenie:<br />

/sbin/hdparm -c 3 -d 1 -m 16 -A1 /dev/hda<br />

Jeśli nowe ustawienia okażą się<br />

lepsze, system będzie działał stabilnie<br />

i znikną ewentualne problemy z odtwarzaniem<br />

dźwięku, to wywołanie programu<br />

hdparm umieśćmy w jednym<br />

Podłączanie urządzeń<br />

i instrumentów<br />

do komputera<br />

Ścieżki wokalne, brzmienie gitar, perkusji<br />

i odgłosy natury możemy nagrać<br />

przy pomocy mikrofonów dynamicznych<br />

i pojemnościowych. Do komputera podłączymy<br />

je na trzy sposoby:<br />

Rysunek 2. Konfiguracja serwera JACK w programie Qjackctl<br />

mi, bez obaw o ewentualną utratę jakości<br />

materiału.<br />

Odpowiedni dobór aplikacji, które<br />

posłużą nam do edycji dźwięku, również<br />

odgrywa duże znaczenie. Wiele zależy<br />

od konkretnych zastosowań, do których<br />

chcemy wykorzystać nasze studio.<br />

Dostępne są setki programów dla Linuksa<br />

- służą one do zapisu dźwięku na<br />

dysk, miksowania ścieżek audio, syntezy<br />

dźwięku, obsługi instrumentów MIDI,<br />

korekcji brzmienia i nakładania efektów.<br />

Wybierajmy raczej te aplikacje, które<br />

potrafią wykorzystać serwer JACK.<br />

Oprócz samodzielnych aplikacji służących<br />

do edycji dźwięku, powinniśmy<br />

zainstalować również wtyczki, z których<br />

będziemy mogli korzystać w dowolnym<br />

edytorze audio. Wtyczki są obecnie<br />

bardzo popularne i powszechnie używane.<br />

Dzięki nim nawet prosta aplikacja<br />

może stać się potężnym narzędziem.<br />

Standardem wtyczek właściwym dla<br />

Linuksa jest LADSPA. Obecnie dostępne<br />

jest kilkaset wtyczek w tym formacie.<br />

Oprócz tego, warto skorzystać z wtyczek<br />

VST, znanych użytkownikom systemu<br />

Windows. Można je już uruchomić<br />

także w Linuksie, ale ich instalacja<br />

wciąż jest skomplikowana. Ponadto, nie<br />

wszystkie wtyczki VST działają poprawnie.<br />

Niemniej, warto zainteresować się<br />

tym formatem - w Internecie znajdziemy<br />

setki darmowych wtyczek VST, nierzadko<br />

nadających się nawet do zastosowań profesjonalnych.<br />

Aby poprawić wydajność wykorzystywanego<br />

sprzętu i oprogramowania,<br />

możemy spróbować uruchamiania aplikacji<br />

z konta administratora. Zaletą tego<br />

rozwiązania jest znacznie efektywniejsze<br />

wykorzystanie zasobów przez programy.<br />

Wadą - zagrożenie niestabilnością systemu<br />

oraz problemy z bezpieczeństwem (o ile<br />

nasz komputer jest podłączony do Sieci).<br />

Winowajcą słabej wydajności bywa<br />

również zła konfiguracja dysku twardego.<br />

W tej sytuacji powinien pomóc program<br />

hdparm. Pozwala on na manipulowanie<br />

ustawieniami dysków EIDE, co może niekiedy<br />

doprowadzić do zawieszenia systemu<br />

i uszkodzenia systemu plików. Zanim<br />

rozpoczniemy eksperymenty z programem<br />

hdparm, koniecznie sporządźmy<br />

kopie zapasowe.<br />

Sprawdźmy, jak Linux obsługuje dyski<br />

twarde zainstalowane w systemie:<br />

hdparm /dev/hda<br />

Powinniśmy ujrzeć m.in.:<br />

multcount<br />

IO_support<br />

unmaskirq<br />

using_dma<br />

= 16 (on)<br />

= 1 (32-bit)<br />

= 1 (on)<br />

= 1 (on)<br />

System skonfigurowany w ten sposób<br />

pozwala na transfer 32-bitowy z jednoczesnym<br />

wykorzystaniem 16 sektorów dysku.<br />

Znajomość znaczenia wszystkich<br />

parametrów programu hdparm nie będzie<br />

• do wejścia mikrofonowego – kabel<br />

mikrofonu podpinamy bezpośrednio<br />

do oznaczonego na czerwono wejścia<br />

na karcie dźwiękowej;<br />

• do wejścia liniowego (Line In) – za<br />

pośrednictwem przedwzmacniacza;<br />

• do wejścia S/PDIF – przy pomocy<br />

konwertera analogowo-cyfrowego.<br />

W każdym z tych przypadków wystarczy<br />

posiadać skonfigurowaną ALSA.<br />

Klawiatury, syntezatory i keyboardy<br />

również podłączamy na trzy sposoby:<br />

• do portu MIDI na karcie dźwiękowej –<br />

instrument musi posiadać złącza MIDI<br />

In/Out, ponadto należy skonfigurować<br />

interfejs MIDI komputera (sterowniki<br />

ALSA);<br />

• do portu USB – częste rozwiązanie<br />

w przypadku klawiatur MIDI. W tym<br />

przypadku konieczna będzie instalacja<br />

odpowiednich sterowników. Jest<br />

ona opisana na stronach:<br />

– http://member.nifty.ne.jp/Breeze/<br />

softwares/unix/usbmidi-e.html<br />

– http://www.djcj.org/LAU/guide/<br />

evolution-usb-midi.php<br />

• do portu szeregowego komputera –<br />

instrument musi posiadać złącze<br />

TO HOST. Będzie potrzebna instalacja<br />

sterownika Notemidi: http://<br />

michaelminn.com/linux/notemidi/<br />

README.html.<br />

Do wejścia liniowego karty dźwiękowej<br />

można podłączać wiele urządzeń.<br />

W ten sposób nagrywa się materiał audio<br />

pochodzący z płyt winylowych i kaset. Nie<br />

jest wymagana instalacja dodatkowych<br />

sterowników.<br />

32 czerwiec 2004


linuksowe studio nagrań<br />

multimedia<br />

Rysunek 3. Ardour jest wielośladowym rejestratorem dźwięku<br />

z plików uruchamianych podczas startu<br />

systemu (np. w /etc/rc.d/rc.local).<br />

Multimedialne dystrybucje<br />

Linuksa<br />

Opisane przeze mnie zabiegi konfiguracyjne,<br />

które pozwalają przeobrazić<br />

komputer z Linuksem w studio nagrań,<br />

mogą wydać się dosyć skomplikowane.<br />

W rzeczywistości wszystkie czynności<br />

zajmą nam niecałą godzinę. Nie będzie<br />

potrzebna samodzielna kompilacja jądra,<br />

łat i oprogramowania. Wykorzystamy<br />

multimedialną dystrybucję Linuksa, czyli<br />

zestaw niezbędnych aplikacji oraz odpowiednio<br />

spreparowane jądro - a wszystko<br />

to w postaci binariów.<br />

Obecnie istnieje kilkanaście multimedialnych<br />

dystrybucji. W większości są<br />

to nakładki na istniejące systemy linuksowe.<br />

Użytkownik, który chce skorzystać<br />

z dobrodziejstw muzycznych aplikacji,<br />

powinien zainstalować wybraną<br />

dystrybucję Linuksa, a następnie odpowiadającą<br />

jej dystrybucję multimedialną.<br />

Po wykonaniu tych czynności konieczna<br />

może być jeszcze konfiguracja posiadanych<br />

kart dźwiękowych. W wielu przypadkach<br />

tę pracę wykona za nas Linux.<br />

Rozpoczynając pracę z dźwiękiem,<br />

warto wypróbować multimedialne dystrybucje<br />

uruchamiane z płyty CD. Posiadają<br />

one podstawowy zestaw aplikacji<br />

dźwiękowych i nie wymagają instalowania<br />

czegokolwiek na dysku twardym.<br />

Stanowią one doskonały wybór dla osób<br />

chcących przetestować muzyczne oprogramowanie<br />

dla Linuksa.<br />

Najlepsza multimedialna dystrybucja<br />

uruchamiana z płyty CD to AGNULA/<br />

DeMuDi Live. Oparto ją na systemie<br />

Knoppix, wzbogaconym o najważniejsze<br />

aplikacje dźwiękowe. Druga tego<br />

typu dystrybucja to Dyne:bolic. Jej grupą<br />

docelową są osoby zajmujące się szeroko<br />

pojętymi mediami.<br />

Instalacja ReHMuDi<br />

Jedną z najpopularniejszych multimedialnych<br />

dystrybucji jest ReHMuDi (przeznaczona<br />

dla systemów Red Hat i kompatybilnych).<br />

Stanowi ona część projektu<br />

AGNULA (A GNU/Linux Audio<br />

distribution). Przed jej zainstalowaniem<br />

będziemy musieli ściągnąć (http://<br />

download.agnula.org/rehmudi/ ) odpowiedni<br />

obraz płyty. Zawiera on tylko<br />

pakiety multimedialne - sam system Red<br />

Hat (obecnie Fedora Core) trzeba zainstalować<br />

osobno.<br />

Na potrzeby tego artykułu zainstalowałem<br />

- na istniejącym systemie Aurox<br />

Linux 9.0 - dystrybucję ReHMuDi 2.0.<br />

Dostępny na stronach internetowych projektu<br />

AGNULA obraz płyty CD zawiera<br />

wprawdzie pakiety przeznaczone dla dystrybucji<br />

Fedora Core 1, ale ze względu na<br />

popularność Auroksa w Polsce zdecydowałem<br />

się skorzystać właśnie z tego systemu.<br />

Mimo kilku komunikatów o błędach<br />

(głównie dotyczących wykorzystania<br />

starszej wersji kompilatora gcc) instalacja<br />

jądra systemu i aplikacji zakończyła<br />

się sukcesem.<br />

Jeśli na dysku twardym znajduje się<br />

już Aurox 9.x lub Fedora Core, to możemy<br />

przystąpić do instalacji pakietów ReH-<br />

MuDi 2.0. Włóżmy do napędu płytę CD,<br />

której obraz ściągnęliśmy ze strony domowej<br />

projektu AGNULA. Skrypt instalacyjny<br />

install.sh znajduje się w katalogu<br />

głównym płyty. Po uruchomieniu go<br />

z konta administratora rozpocznie się<br />

kopiowanie niezbędnego oprogramowania.<br />

Chwilę potem pojawi się okno (Rysunek<br />

1), w którym zaznaczymy programy<br />

przeznaczone do zainstalowania.<br />

Proponuję wybrać wszystkie pakiety<br />

- z pewnością skorzystamy z większości<br />

z nich. Po zatwierdzeniu dokonanego<br />

przez nas wyboru, instalator przystąpi do<br />

pracy - może ona potrwać nawet kilkanaście<br />

minut. Błędy, które mogą pojawić się<br />

na tym etapie, wynikają z braku potrzebnych<br />

bibliotek. Niektóre z instalowanych<br />

aplikacji wymagają obecności KDE<br />

i Qt – w przypadku wystąpienia problemów<br />

powinniśmy doinstalować potrzebne<br />

pakiety.<br />

Po zakończeniu instalacji konieczny<br />

jest jeszcze restart komputera. Podczas<br />

ponownego uruchamiania systemu zostanie<br />

załadowane nowe jądro (skrypt instalacyjny<br />

automatycznie aktualizuje bootloadera).<br />

Jeżeli korzystamy z demona<br />

Kudzu, to spróbuje on wykryć posiadane<br />

karty dźwiękowe. Nie zawsze ta operacja<br />

kończy się sukcesem. Nic straconego. Po<br />

uruchomieniu programu Alsaconf zobaczymy<br />

listę kart dźwiękowych obecnych<br />

w systemie. Wystarczy zatwierdzić komunikat<br />

konfiguratora i... karta już działa.<br />

Problemy mogą wystąpić jedynie w przypadku<br />

egzotycznego sprzętu bądź podczas<br />

instalacji kilku kart dźwiękowych.<br />

W tej sytuacji konieczna może być ręczna<br />

edycja pliku /etc/modules.conf.<br />

Serwer JACK<br />

Po zainstalowaniu ReHMuDi 2.0, na<br />

dysku komputera znajdują się już najlepsze<br />

muzyczne aplikacje dla Linuksa.<br />

Ponadto, system jest odpowiednio skonfigurowany<br />

i przystosowany do pracy<br />

z niskimi opóźnieniami. Pozostaje nam<br />

jeszcze uruchomienie serwera JACK.<br />

Możemy to uczynić wprost z linii poleceń:<br />

jackstart -d alsa.<br />

Jeżeli chcemy precyzyjnie określić<br />

parametry pracy serwera (co jest zdecydowanie<br />

zalecane), a wolimy uniknąć<br />

wydawania skomplikowanych komend<br />

z linii poleceń, skorzystajmy z graficznej<br />

nakładki - programu Qjackctl. Nie<br />

wchodzi on w skład dystrybucji ReHMu-<br />

www.lpmagazine.org<br />

33


multimedia<br />

Di - będziemy musieli go ściągnąć (http://<br />

qjackctl.sourceforge.net/ ) i zainstalować<br />

oddzielnie. Kompilacja programu<br />

trwa bardzo krótko i nie powinna sprawić<br />

problemów. Po jej zakończeniu i uruchomieniu<br />

programu, możemy w wygodny<br />

sposób dostosować ustawienia serwera<br />

JACK do naszych potrzeb (przycisk<br />

Setup...). Zmniejszając rozmiar bufora,<br />

możemy znacząco obniżyć opóźnienia.<br />

Pamiętajmy jednak, aby nie przesadzić.<br />

Jeżeli po uruchomieniu serwera w okienku<br />

Status pojawiają się informacje o błędach<br />

xrun, to znaczy, że nasz system nie<br />

jest w stanie pracować z ustalonym przez<br />

użytkownika opóźnieniem. Może to być<br />

efektem małej mocy obliczeniowej komputera<br />

lub błędnej konfiguracji systemu.<br />

Niskie wartości opóźnień są potrzebne<br />

głównie w czasie występów na żywo<br />

oraz podczas nagrywania materiału<br />

dźwiękowego. W innych przypadkach<br />

niski rozmiar bufora spowalnia tylko<br />

pracę systemu operacyjnego, więc nie<br />

warto obniżać standardowych wartości<br />

opóźnień, jeśli w danej chwili zamierzamy<br />

jedynie odtwarzać pliki dźwiękowe.<br />

Nagrywanie dźwięku<br />

Stabilnie działający serwer JACK pozwoli<br />

nam na rozpoczęcie właściwej pracy<br />

z dźwiękiem. Na początek spróbujmy<br />

nagrać ścieżkę audio z dowolnego<br />

zewnętrznego źródła. Jeżeli będzie nim<br />

mikrofon, to powinniśmy wybrać jeden<br />

z kilku możliwych sposobów podłączenia<br />

go do komputera. Na karcie dźwiękowej<br />

znajduje się wejście mikrofonowe<br />

(oznaczone przeważnie kolorem czerwonym),<br />

ale nie gwarantuje ono dobrej<br />

jakości materiału audio. Przyjmuje ono<br />

dane w postaci prądu o niskim napięciu,<br />

w wyniku czego dźwięk jest podatny<br />

na zakłócenia powstające wewnątrz<br />

i w pobliżu komputera. Rozwiązaniem<br />

problemu może być wykorzystanie<br />

przedwzmacniacza mikrofonowego<br />

lub przetwornika analogowo-cyfrowego.<br />

Pierwszy z nich znacznie zmniejszy<br />

zakłócenia powstające na obwodach<br />

karty dźwiękowej, a drugi wyeliminuje je<br />

całkowicie.<br />

Przedwzmacniacz pozwoli nam na<br />

podłączenie mikrofonu wprost do wejścia<br />

liniowego (Line In) karty dźwiękowej,<br />

zazwyczaj oznaczonego kolorem<br />

niebieskim. Przyjmuje ono dane<br />

w postaci napięcia kilkaset razy większego<br />

niż w przypadku wejścia mikrofonowego.<br />

W efekcie możliwe zakłócenia tylko<br />

w niewielkim stopniu zmniejszają odstęp<br />

sygnału od szumu.<br />

Rozwiązaniem idealnym jest wykorzystanie<br />

konwertera analogowo-cyfrowego.<br />

Zamienia on sygnał płynący z mikrofonu<br />

na dane cyfrowe, które nie podlegają<br />

żadnym zakłóceniom wewnątrz komputera.<br />

Jest to rozwiązanie najlepsze, ale nie<br />

zawsze konieczne.<br />

Sam profesjonalny sprzęt nie zagwarantuje<br />

nam dobrych nagrań. Jeśli ustawimy<br />

mikrofon w pobliżu komputera,<br />

to hałas wentylatora lub głośnego<br />

dysku twardego może znacznie obniżyć<br />

jakość rejestrowanego dźwięku. Jakiekolwiek<br />

inne odgłosy dobiegające z otoczenia<br />

również są niepożądane. Przystępując<br />

do nagrywania dźwięku powinniśmy<br />

zadbać o wszystkie szczegóły – tylko<br />

wtedy uzyskamy materiał audio o zadowalającej<br />

jakości.<br />

Instalacja wtyczek VST<br />

Aby skorzystać z wtyczek VST, bardzo<br />

popularnych wśród użytkowników MS<br />

Windows, trzeba zainstalować emulator<br />

Wine (załączony do większości dystrybucji)<br />

oraz programy Vstserver i Ladspavst<br />

(http://www.notam02.no/arkiv/src/).<br />

Wszystkie wtyczki VST, z których<br />

chcemy skorzystać, powinny znajdować się<br />

w jednym katalogu, na który będzie wskazywać<br />

zmienna środowiskowa VST_PATH.<br />

Zdefiniujemy ją w następujący sposób:<br />

export VST_PATH=/home/pawelw/vst<br />

To polecenie warto wpisać do któregoś<br />

z plików wykonywanych podczas uruchamiania<br />

powłoki Bash (np. ~/.bash_profile).<br />

W przeciwnym przypadku będziemy musieli<br />

je wykonywać po każdym uruchomieniu<br />

systemu.<br />

W przeciwieństwie do emulatora Wine,<br />

programy VSTServer i Ladspavst skompilujemy<br />

samodzielnie. Po rozpakowaniu<br />

źródeł pierwszego z nich, otwórzmy plik<br />

makefile. W pierwszej linijce znajdziemy<br />

ścieżkę dostępu do Wine (WINEPATH=/<br />

usr/local). Jeśli to konieczne, to poprawmy<br />

ją, a następnie zapiszmy plik.<br />

Teraz możemy już skompilować VST-<br />

Server. W katalogu ze źródłami wykonajmy<br />

po kolei:<br />

make<br />

make install<br />

Sekwencje instrumentalne możemy<br />

nagrać przy pomocy klawiatur i syntezatorów<br />

MIDI. Istnieją trzy sposoby podłączania<br />

tego typu instrumentów do komputera.<br />

W zależności od rodzaju wyjść<br />

znajdujących się w obudowie urządzeń<br />

MIDI, możemy je podpiąć do portu USB,<br />

szeregowego lub do interfejsu MIDI.<br />

W dwóch pierwszych przypadkach<br />

będzie jeszcze konieczna instalacja odpowiednich<br />

sterowników.<br />

Przykładowe konfiguracje podłączania<br />

urządzeń muzycznych do komputera<br />

są przedstawione w ramce Podłączanie<br />

urządzeń i instrumentów do komputera.<br />

Zasady są takie same dla wszystkich<br />

systemów operacyjnych - jeżeli wcześniej<br />

nagrywaliśmy już materiał muzyczny, to<br />

nie natrafimy na żadne problemy.<br />

Powinniśmy jeszcze pamiętać<br />

o wybraniu w systemie operacyjnym tego<br />

wejścia karty, z którego będzie nagrywa-<br />

Zainstalujemy jeszcze bibliotekę Ladspavst.<br />

Dzięki niej będziemy mogli korzystać z wtyczek<br />

VST tak samo, jak z wtyczek LADSPA.<br />

Kompilacja jest bardzo prosta – wystarczywykonać<br />

make. Otrzymany plik vst.so przekopiujmy<br />

do katalogu, w którym znajdują<br />

się wtyczki LADSPA. W przypadku ReH-<br />

MuDi jest to /usr/lib/ladspa. Pozostało nam<br />

jedynie uruchomić program VSTServer.<br />

Z linii poleceń wykonajmy vstserver &.<br />

W oknie terminala powinniśmy zobaczyć<br />

nazwę i numer wersji aplikacji, a także<br />

informację Waiting for requests. Jeżeli<br />

po uruchomieniu jakiegokolwiek edytora<br />

audio obsługującego wtyczki LADSPA<br />

pojawią się komunikaty o błędach,<br />

to zapewne któraś z zainstalowanych<br />

przez nas wtyczek VST nie jest<br />

obsługiwana w Linuksie. Na początku<br />

najlepiej jest kopiować po jednej wtyczce<br />

– dzięki temu szybko wykryjemy przyczyny<br />

błędów.<br />

Przed zainstalowaniem wtyczek warto<br />

zapoznać się z:<br />

• artykułem Using VST Plugins In Linux:<br />

http://www.djcj.org/LAU/quicktoots/<br />

toots/vst-plugins/<br />

• instalacją wtyczek VST w Linuksie<br />

– polskojęzyczny artykuł:<br />

http://linux-muzyka.ixion.pl/<br />

tekst.php?id=25031<br />

• Linux Vst Compatibility Page – stroną<br />

opisującą działanie konkretnych<br />

wtyczek VST w Linuksie:<br />

http://www.djcj.org/LAU/ladspavst/<br />

34 czerwiec 2004


linuksowe studio nagrań<br />

multimedia<br />

Rysunek 4. Program MusE - sekwencer MIDI dla Linuksa<br />

ny dźwięk. Posłuży nam do tego programowy<br />

mikser. W każdej dystrybucji<br />

Linuksa można znaleźć co najmniej kilka<br />

programów tego typu (np. aumix, xmix,<br />

kmix, gnome-volume-control i inne).<br />

Sprawdźmy, czy urządzenie, z którego<br />

chcemy nagrać dźwięk, jest odpowiednio<br />

zaznaczone (z reguły Record lub Zapis).<br />

Z programowych mikserów z pewnością<br />

przyjdzie nam jeszcze wiele razy<br />

korzystać. Nagrywając dźwięk trzeba<br />

pamiętać o odpowiednim regulowaniu<br />

jego poziomu. Zbyt cichy materiał audio<br />

ma niewielki odstęp sygnału od szumu. Z<br />

kolei nagrywanie dźwięku ze zbyt dużą<br />

głośnością może spowodować przesterowania<br />

i nieprzyjemne trzaski. W obu<br />

tych przypadkach konieczne będzie, po<br />

uprzedniej korekcji poziomu głośności,<br />

powtórzenie nagrania ścieżki. Parametry<br />

dźwięku można również precyzyjnie<br />

dostrajać przy pomocy programu Jamin<br />

(http://jamin.sourceforge.net/ ) – dzięki<br />

niemu ustalimy, między innymi, odpowiednią<br />

charakterystykę częstotliwościową<br />

materiału.<br />

Do nagrywania dźwięku wykorzystać<br />

można Audacity. Program ten był już opisywany<br />

na łamach Linux+. Bardziej profesjonalne<br />

będzie jednak użycie wielośladowego<br />

edytora Ardour. Pozwala on<br />

na nagranie i zmiksowanie wielu ścieżek<br />

o dowolnej liczbie kanałów. Ardour jest<br />

trudniejszy w obsłudze niż Audacity, ale<br />

są to koszty jego znacznie większej funkcjonalności.<br />

Edytor Ardour<br />

Jeśli zainstalowaliśmy ReHMuDi, to<br />

Ardour znajduje się już na dysku twardym.<br />

Po jego uruchomieniu zobaczymy<br />

okno tworzenia nowej sesji. Wystarczy<br />

wpisać nazwę projektu, nad którym<br />

pracę właśnie rozpoczynamy. Ardour<br />

utworzy katalog służący do zapisu nagranego<br />

materiału.<br />

Po utworzeniu sesji można przystąpić<br />

do pracy z programem. W centralnej<br />

części okna widzimy mapę ścieżek – na<br />

razie znajduje się na niej tylko ślad Master.<br />

Utwórzmy na początek ścieżkę, na której<br />

zarejestrujemy za chwilę materiał dźwiękowy.<br />

Po kliknięciu pustego pola poniżej<br />

nagłówka śladu Master otworzy się okno<br />

dodawania ścieżek. Parametry zaproponowane<br />

przez Ardoura można pozostawić<br />

bez zmian. Jeśli jednak chcemy, aby<br />

nagrywany ślad był stereofoniczny (posiadał<br />

dwa kanały), to kliknijmy prawym<br />

klawiszem myszy napis mono. Zostanie<br />

on zastąpiony przez opcję stereo.<br />

Ścieżka jest już utworzona, a mikrofon<br />

lub inne urządzenia podłączone do<br />

karty dźwiękowej i przetestowane, więc<br />

możemy nagrywać. Zaznaczmy nowy<br />

ślad jako przeznaczony do zapisu. Można<br />

to uczynić wciskając przycisk z literą r,<br />

znajdujący się na prawo od nazwy ścieżki.<br />

Na pasku ikon klikamy jeszcze przycisk<br />

nagrywania, a następnie odtwarzania.<br />

Teraz nasz wokalista (gitarzysta, perkusista)<br />

może zacząć działać. Po zakończeniu<br />

nagrywania należy kliknąć ikonę zatrzymania.<br />

W tej chwili powinniśmy zobaczyć<br />

nowy segment audio z wykresem falowym<br />

zarejestrowanego materiału.<br />

Jeżeli żaden dźwięk nie został nagrany,<br />

a wszystkie urządzenia są poprawnie<br />

podłączone, to wina może leżeć po<br />

stronie edytora Ardour. Z menu Windows<br />

wybierzmy Route Parameters.<br />

W oknie, które pojawi się na ekranie<br />

monitora, można określić urządzenia wejściowe<br />

i wyjściowe. Z reguły Ardour automatycznie<br />

wybiera odpowiednie źródło<br />

dźwięku, ale w przypadku korzystania<br />

z kilku programów muzycznych mogą<br />

być konieczne ręczne poprawki. Dobrze<br />

jest więc zapoznać się z opcjami Route<br />

Parameters.<br />

Z listy znajdującej się z lewej strony<br />

okna wybieramy interesującą nas ścieżkę.<br />

Kliknijmy teraz napis INPUTs. W ramce in<br />

1 powinien znajdować się wpis alsa_pcm:<br />

capture_1, a w in 2 – alsa_pcm:capture_2.<br />

Taka konfiguracja pozwoli nam na nagranie<br />

dźwięku z wejścia audio. Jeżeli wpisy<br />

są nieprawidłowe, to urządzenia alsa_pcm<br />

znajdziemy na jednej z zakładek widocznych<br />

z prawej strony okna. Po ich kliknięciu,<br />

Ardour poprawi przypisania ścieżki.<br />

Właściwy wybór wyjścia dźwięku<br />

(OUTPUTs) jest równie ważny. Wybrany<br />

przez nas ślad powinien być przypisany<br />

do ścieżki Master – w pole out_1<br />

wstawmy ardour:master/in 1, a w out 2<br />

– ardour:master/in 2. Należy również<br />

sprawdzić wpisy dla ścieżki Master.<br />

W tym przypadku do pola out 1 przypiszmy<br />

alsa_pcm:playback_1, a do out 2<br />

– alsa_pcm:playback_2. Dzięki prawidłowej<br />

konfiguracji urządzeń wyjścia, usłyszymy<br />

zarejestrowany materiał audio.<br />

Jeśli wszystkie potrzebne ścieżki<br />

zostały już poprawnie nagrane, to<br />

możemy zapisać sesję (Session –> Save).<br />

Aby zmiksować wszystkie ślady do<br />

pojedynczego pliku WAVE, skorzystajmy<br />

z polecenia Export session to audiofile...<br />

z menu Session –> Export. W oknie<br />

zapisu podajmy nazwę pliku wyjściowego<br />

i zaznaczmy ścieżki, które chcemy<br />

uwzględnić w miksie, przypisując je<br />

jednocześnie do odpowiedniego kanału<br />

(w przypadku plików stereofonicznych).<br />

Rysunek 5. Wybór źródła nagrywanego<br />

dźwięku w programie Ardour. Widoczna<br />

konfiguracja spowoduje, że dane audio<br />

będą pobierane z syntezatora<br />

ZynAddSubFX<br />

www.lpmagazine.org<br />

35


multimedia<br />

MIDI i syntezatory<br />

Spróbujmy teraz dograć do naszej kompozycji<br />

jeszcze jedną ścieżkę. Tym razem<br />

zmusimy do współpracy kilka wyspecjalizowanych<br />

aplikacji muzycznych.<br />

W jednej z nich przygotujemy linię melodyczną,<br />

druga posłuży nam za instrument<br />

odtwarzający poszczególne nuty,<br />

a przy pomocy trzeciej dokonamy rejestracji<br />

dźwięku. W ten sposób można<br />

nagrać dobrze brzmiące ścieżki instrumentalne.<br />

Docenią tę metodę osoby nie<br />

posiadające sprzętowego syntezatora lub<br />

chociażby fortepianu.<br />

Linię melodyczną skomponujemy<br />

w programie MusE – sekwencerze MIDI<br />

dla Linuksa. Posiadacze instrumentów<br />

MIDI nie będą mieli z tym żadnych problemów<br />

– wystarczy zagrać tworzoną<br />

partię na klawiaturze, a zostanie ona<br />

zarejestrowana przez MusE. Poszczególne<br />

nuty można również wstawiać bezpośrednio<br />

w sekwencerze, przy pomocy<br />

myszy. Ta metoda jest jednak znacznie<br />

bardziej pracochłonna.<br />

Po uruchomieniu programu MusE<br />

(wchodzi on w skład ReHMuDi), przystąpimy<br />

do tworzenia ścieżki MIDI. Po<br />

lewej stronie okna znajduje się pusta lista<br />

– kliknijmy na niej prawym klawiszem<br />

myszy, a z menu kontekstowego wybierzmy<br />

Add Midi Track. Następnie zaznaczmy<br />

ikonę ołówka (tuż poniżej menu programu)<br />

i w prawej części okna MusE wrysujmy<br />

myszą nowy segment MIDI. Teraz<br />

Rysunek 6. Qjackctl ułatwia przesyłanie dźwięku pomiędzy aplikacjami<br />

Edycja dźwięku<br />

Nagrany materiał wymaga zapewne<br />

poprawek. Konieczne może okazać się<br />

chociażby usunięcie stałej składowej,<br />

normalizacja, poprawa charakterystyki<br />

częstotliwościowej lub inne zabiegi edycyjne.<br />

W poprawianiu brzmienia pomocne<br />

okażą się wtyczki LADSPA.<br />

Powróćmy do okna Route Parameters<br />

Ardoura. Da nam ono dostęp do<br />

wtyczek zainstalowanych w systemie.<br />

Po zaznaczeniu ścieżki przeznaczonej<br />

do edycji i kliknięciu lewym klawiszem<br />

myszy napisu Pre Redirects, otworzy się<br />

menu podręczne. Wybierzmy polecenie<br />

New Plugin.... Przeniesie nas ono do okna<br />

z obszerną listą wtyczek. Jeżeli zainstalowaliśmy<br />

również wtyczki VST, to powinniśmy<br />

je znaleźć na liście.<br />

Ogólny schemat pracy z wtyczkami,<br />

przedstawiony dalej, ma zastosowanie<br />

w większości przypadków. Przede<br />

wszystkim powinniśmy zaznaczyć wtyczkę<br />

(lub wtyczki), z których chcemy skorzystać.<br />

Następnie klikamy Add i OK.<br />

Nazwy wybranych wtyczek pojawią się w<br />

oknie Route Parameters, w sekcji Pre Redirects.<br />

Po zaznaczeniu jednej z wtyczek jej<br />

parametry zostaną wyświetlone w prawej<br />

części okna. Możemy je zmieniać przy<br />

pomocy suwaków. W przypadku wtyczek<br />

VST warto włączyć wyświetlanie interfejsu<br />

(Gui_on_off ). Jest on z reguły bardzo<br />

estetyczny i uprzyjemnia pracę. Zmodyfikowane<br />

parametry możemy zapisać<br />

(Save). Ostatnim krokiem powinno być<br />

uaktywnienie wtyczki. Kliknijmy przycisk<br />

Bypass lub z podręcznego menu Pre Redirects<br />

wybierzmy polecenie Activate All.<br />

Podczas edycji pojedynczych ścieżek<br />

i plików dźwiękowych można wykorzystać<br />

również inne programy obsługujące<br />

wtyczki LADSPA. Aby uzyskać dostęp do<br />

wtyczek w Audacity, wystarczy zaznaczyć<br />

odpowiedni fragment materiału,<br />

a następnie wybrać (z menu Effect–>Plugins)<br />

odpowiednią wtyczkę.<br />

Trudniejsze zadania<br />

Dotychczas opisywałem tylko najprostsze<br />

metody edycji dźwięku. Możliwości<br />

Linuksa są jednak znacznie większe.<br />

Serwer JACK pozwoli nam na łatwe łączenie<br />

co najmniej kilku programów audio.<br />

O ile w przypadku innych systemów<br />

operacyjnych cały proces edycji nagrania<br />

przeprowadzany jest nierzadko z poziomu<br />

jednej aplikacji, o tyle użytkownicy<br />

Linuksa mogą skorzystać z wielu programów.<br />

Materiał audio przesyłany jest<br />

pomiędzy nimi bez utraty jakości.<br />

Inne programy<br />

muzyczne dla Linuksa<br />

Oprócz aplikacji opisanych w artykule,<br />

można wykorzystać kilkadziesiąt innych<br />

programów obsługujących serwer JACK.<br />

Sekwencery MIDI:<br />

• MusE:<br />

http://lmuse.sourceforge.net/<br />

• Rosegarden-4:<br />

http://www.rosegardenmusic.com/<br />

Syntezatory programowe :<br />

• AlsaModularSynth:<br />

http://alsamodular.sourceforge.net/<br />

• gAlan:<br />

http://galan.sourceforge.net/<br />

• Hydrogen:<br />

http://hydrogen.sourceforge.net/<br />

• LegaSynth:<br />

http://www.reduz.com.ar/legasynth/<br />

• Pd:<br />

http://www-crca.ucsd.edu/~msp/<br />

software.html<br />

• ZynAddSubFX:<br />

http://zynaddsubfx.sourceforge.net/<br />

Rejestracja dźwięku:<br />

• Ardour:<br />

http://ardour.org/<br />

• Ecasound:<br />

http://www.eca.cx/ecasound/<br />

• ReZound:<br />

http://rezound.sourceforge.net/<br />

Edytory audio bez obsługi serwera JACK:<br />

• Audacity:<br />

http://audacity.sourceforge.net/<br />

• GLAME:<br />

http://glame.sourceforge.net/<br />

• Gnoise:<br />

http://gnoise.sourceforge.net/<br />

• Sweep:<br />

http://sweep.sourceforge.net/<br />

36 czerwiec 2004


linuksowe studio nagrań<br />

multimedia<br />

kliknijmy go dwukrotnie – otworzy się<br />

okno edytora pianolowego. Pozwoli<br />

nam ono na wstawianie nut dowolnej<br />

długości i wysokości. Aby przejść do<br />

trybu edycji, ponownie zaznaczmy ikonę<br />

ołówka. Możemy już wrysowywać odpowiednie<br />

nuty na siatce edytora. W razie<br />

popełnienia błędu, posłużmy się wirtualną<br />

gumką do mazania, ale poszczególne<br />

nuty możemy również, w razie potrzeby,<br />

przenosić w inne miejsca.<br />

Sporządziliśmy już zapis nutowy<br />

naszego nagrania, a za chwilę będziemy<br />

mogli je usłyszeć. Dźwięk zostanie wygenerowany<br />

przez programowy syntezator.<br />

Przyjmie on komunikaty MIDI, a następnie<br />

odtworzy je przy pomocy brzmienia<br />

zaprogramowanego przez użytkownika.<br />

Syntezatory to mocna strona Linuksa.<br />

Możemy wybierać spośród kilkunastu<br />

doskonałych aplikacji współpracujących<br />

z serwerem JACK. Ja zdecydowałem się<br />

na ZynAddSubFX – syntezator dostępny<br />

również w wersji dla systemu Windows.<br />

Generuje on dźwięk bardzo dobrej jakości,<br />

a zestaw predefiniowanych instrumentów<br />

ułatwi pracę początkującym<br />

użytkownikom.<br />

ZynAddSubFX nie wchodzi w skład<br />

dystrybucji ReHMuDi, więc będziemy<br />

musieli odwiedzić stronę domową projektu<br />

(http://zynaddsubfx.sourceforge.net/ ).<br />

Dostępne są pakiety binarne przeznaczone<br />

dla popularnych dystrybucji Linuksa,<br />

ale kompilacja źródeł jest prosta<br />

(./configure; make; make install) i przebiega<br />

bardzo szybko. ZynAddSubFX<br />

korzysta z serwera JACK, zatem wygenerowany<br />

dźwięk będziemy mogli zarejestrować<br />

w edytorze Ardour.<br />

Posiadamy już wszystkie potrzebne programy,<br />

więc poświęcimy parę chwil na<br />

ich poprawne skonfigurowanie. Sprawdźmy,<br />

czy sekwencer MusE korzysta z serwera<br />

JACK. W oknie, które otworzy się<br />

po wybraniu polecenia Audio System<br />

z menu Config, powinna być zaznaczona<br />

opcja Use JACK.<br />

Po uruchomieniu programu ZynAdd-<br />

SubFX wróćmy jeszcze na chwilę do<br />

MusE. Z menu Config wybierzmy Midi<br />

Ports / Soft Synth. Zobaczymy listę kanałów<br />

MIDI z przypisanymi do nich urządzeniami<br />

odtwarzającymi (przeważnie<br />

jest to None lub nazwa karty dźwiękowej).<br />

Zmienimy ustawienia pierwszego<br />

kanału – z rozwijanej listy wybierzmy<br />

pozycję ZynAddSubFX. Od tej chwili<br />

sekwencer MusE będzie przesyłał komunikaty<br />

MIDI za pośrednictwem serwera<br />

JACK do syntezatora ZynAddSubFX.<br />

Moglibyśmy już teraz odsłuchać<br />

skomponowanej uprzednio sekwencji<br />

MIDI. Nie mamy jednak na razie możliwości<br />

nagrania muzyki. Do jej rejestracji<br />

wykorzystamy dobrze nam znany<br />

edytor Ardour. Przed przystąpieniem do<br />

pracy będziemy musieli poprawić wpisy<br />

w oknie Route Parameters. Ścieżka, która<br />

posłuży nam do zarejestrowania dźwięku,<br />

powinna pobierać dane z syntezatora.<br />

Do jej wejścia (INPUTs) jest już zapewne<br />

przypisany ZynAddSubFX. Jeżeli nie,<br />

to odpowiednie urządzenia znajdziemy<br />

po prawej stronie okna Route Parameters,<br />

na zakładce ZynAddSubFX. Pozostaje<br />

nam tylko je dodać - tak jak zostało to<br />

przedstawione na Rysunku 5.<br />

Teraz możemy już wysłuchać nagrania.<br />

W sekwencerze MusE kliknijmy<br />

ikonę rozpoczynającą odtwarzanie.<br />

Komunikaty MIDI zostaną przekazane<br />

syntezatorowi ZynAddSubFX, który<br />

na ich podstawie wygeneruje gotowe<br />

brzmienia. Dźwięk przekazany zostanie<br />

do programu Ardour, a następnie na<br />

urządzenia wyjściowe karty dźwiękowej.<br />

Nagraną ścieżkę usłyszymy w głośnikach,<br />

a włączenie nagrywania w edytorze<br />

Ardour spowoduje jej zapisanie.<br />

Jeśli podczas odtwarzania nie usłyszeliśmy<br />

żadnego dźwięku, to jest to zapewne<br />

efekt złego przekierowania dźwięku,<br />

który "zagubił się" po drodze. Ponownie<br />

sprawdźmy ustawienia programów<br />

MusE i Ardour. Pomocny okaże się też<br />

Qjackctl. Klikając przycisk Connect uzyskamy<br />

dostęp do okna połączeń poszczególnych<br />

aplikacji. Na zakładce Audio (Rysunek<br />

6) wyjście ZynAddSubFX powinno<br />

być przypisane do wejścia Ardour, a to<br />

z kolei – do karty dźwiękowej (alsa_pcm).<br />

Na zakładce MIDI powinniśmy zobaczyć<br />

jedno połączenie – sekwencera MusE<br />

z klientem ZynAddSubFX. Dzięki Qjackctl<br />

możemy na bieżąco śledzić przypisania<br />

poszczególnych aplikacji i kontrolować<br />

przekazywanie danych audio.<br />

W większości przypadków serwer<br />

JACK poprawnie łączy wszystkie programy<br />

klienckie. W opisanym przeze mnie<br />

przykładzie z reguły wystarczy poprawnie<br />

skonfigurować wyjście MIDI sekwencera<br />

MusE. Wszystkie inne połączenia są<br />

automatycznie tworzone podczas uruchamiania<br />

poszczególnych programów. Jeśli<br />

skorzystamy z większej liczby aplikacji, to<br />

zapewne będziemy musieli ręcznie zdefiniować<br />

poprawną trasę danych dźwiękowych.<br />

W takiej sytuacji docenimy intuicyjność<br />

i prostotę programu Qjackctl.<br />

Jeżeli nie odpowiada nam brzmienie<br />

generowane przez ZynAddSubFX,<br />

to możemy łatwo zmienić parametry<br />

obwiedni, pogłosu i wiele innych. Początkującym<br />

użytkownikom polecam skorzystanie<br />

z szeregu predefiniowanych instrumentów<br />

(pliki *.ins_zyn), instalowanych<br />

razem z programem. Przed nagraniem<br />

wygenerowanych brzmień warto jeszcze<br />

skorygować ustawienia serwera JACK,<br />

aby opóźnienia były jak najmniejsze. Zbyt<br />

długi czas reakcji syntezatora może zakłócić<br />

odtwarzanie sekwencji MIDI.<br />

Podsumowanie<br />

Opisany przeze mnie schemat (MusE -<br />

ZynAddSubFX - Ardour) jest tylko jedną<br />

z wielu możliwości. Z serwera JACK<br />

korzysta kilkadziesiąt świetnych aplikacji<br />

muzycznych. Sposób ich wykorzystania<br />

zależy w głównej mierze od kreatywności<br />

muzyków. Mam nadzieję, że przedstawiony<br />

przeze mnie przykład zachęci<br />

Czytelnika do własnych, twórczych eksperymentów.<br />

Życzę sukcesów w samodzielnej<br />

pracy z muzyką komputerową<br />

i z Linuksem.<br />

W Internecie:<br />

• Sound & MIDI Software For Linux<br />

– najważniejszy anglojęzyczny serwis:<br />

http://linux-sound.org/<br />

• Archiwa listy linux-audio-user:<br />

http://music.columbia.edu/pipermail/<br />

linux-audio-user/<br />

• The Linux Musician – kolejna anglojęzyczna<br />

witryna:<br />

http://www.linuxmusician.com<br />

• The Linux MIDI + Sound Pages – lista<br />

programów muzycznych dla Linuksa:<br />

http://www.xdt.com/ar/linux-snd/<br />

• The Linux Audio Quality HOWTO:<br />

http://www.linuxdj.com/audio/quality/<br />

• The Linux Musician guide to recording<br />

– nagrywanie dźwięku w Linuksie:<br />

http://www.linuxmusician.com/index.<br />

php?option=displaypage&Itemid=51<br />

&op=page&SubMenu=<br />

• Dźwięk i muzyka w Linuksie – polskojęzyczny<br />

serwis poświęcony edycji<br />

dźwięku:<br />

http://linux-muzyka.ixion.pl/<br />

www.lpmagazine.org<br />

37


ecenzje<br />

SuSE Linux 9.1<br />

Professional<br />

Piotr Truszkowski<br />

Gdy otrzymałem do testów<br />

SuSE Linux 9.1 Professional,<br />

mojej radości nie było końca.<br />

Jako użytkownik SuSE od<br />

kilku lat, obecnie używający Gentoo,<br />

bardzo szybko zainstalowałem nową<br />

wersję „kameleona” i szczerze przyznam,<br />

że jest to moim zdaniem najlepsza wersja<br />

tej dystrybucji, jaka kiedykolwiek ujrzała<br />

światło dzienne. Na samym początku<br />

powitała mnie znajoma z poprzednich<br />

edycji plansza, z której mogłem wybrać<br />

m.in. rozdzielczość instalatora czy tryb<br />

instalacji. Po dokonaniu odpowiednich<br />

wyborów, moim oczom ukazał się instalator.<br />

Wygląda naprawdę ładnie, działa<br />

szybko, intuicyjnie i oferuje naprawdę<br />

duże możliwości.<br />

Polski SuSEł<br />

Niestety, mimo pewnych plotek o rzekomej<br />

obsłudze przez instalator języka polskiego,<br />

nic takiego nie zauważyłem. Szkoda.<br />

W samym procesie instalacji nie zmieniło<br />

się wiele. Dużo nowinek możemy natomiast<br />

zauważyć w kwestii oprogramowania.<br />

Testowane SuSE wyposażone jest<br />

m.in. w jądro 2.6.4, KDE 3.2.1, GNOME<br />

2.4.0 i OpenOffice.org 1.1.1. Jako ciekawostkę<br />

– aczkolwiek bardzo miłą dla polskiego<br />

użytkownika – należy wspomnieć<br />

możliwość instalacji polskiego interfejsu<br />

do OpenOffice.org. Jest to z pewnością<br />

coś, czego bardzo brakowało.<br />

Środowiska graficzne<br />

Osoby korzystające ze środowiska<br />

GNOME z pewnością przyzwyczaiły się<br />

do tego, iż w SuSE Linux kwestia GNOME<br />

zawsze była nieco zaniedbywana. Podobnie<br />

jest i tym razem, co nieco dziwi<br />

z uwagi na to, że firma Novell jest również<br />

właścicielem Ximiana, firmy zajmującej<br />

się rozwojem środowiska GNOME<br />

dla środowisk korporacyjnych. SuSE<br />

Linux zawsze ukierunkowane było na<br />

rynek korporacyjny, czemu więc zamiast<br />

ximianowego, ładnego i funkcjonalnego<br />

Rysunek 1. SuSE po uruchomieniu<br />

biurka otrzymujemy coś tak brzydkiego?<br />

Pasjonaci KDE nie będą mieli powodów<br />

do narzekania. Ich ulubione środowisko<br />

graficzne zostało dopracowane<br />

w najdrobniejszych detalach i stanowi<br />

zupełne przeciwieństwo niedopracowanego<br />

GNOME. Osoby posiadające słabszy<br />

sprzęt również znajdą coś dla siebie<br />

– WindowMaker i inne „lekkie” środowiska<br />

graficzne tylko czekają, aby dać im<br />

szansę.<br />

Administracja<br />

Narzędziem administracyjnym w SuSE jest<br />

program YaST. To bardzo dobre i dojrzałe<br />

narzędzie, dzięki któremu mamy pełną<br />

kontrolę nad naszym systemem. Patrząc<br />

przez pryzmat poprzednich wersji SuSE,<br />

nie zaszły w nim żadne rewolucyjne<br />

zmiany. Moduł do auto-instalacji czy lekko<br />

zwiększona funkcjonalność pozostałych<br />

modułów nie są tym, czego można się<br />

spodziewać po nowej wersji systemu.<br />

Plusy<br />

Jądro 2.6.4 sprawuje się znakomicie. Jest<br />

szybkie i bezawaryjne. Najnowsze wersje<br />

aplikacji: KDE 3.2.1 czy OpenOffice.org<br />

1.1.1, to elementy, które ciężko spotkać<br />

w innych dystrybucjach jako standardowe.<br />

Do tego wszystkiego dochodzi stabilność<br />

i innowacyjność, czyli elementy, które<br />

w SuSE zawsze stały bardzo wysoko<br />

w hierarchii ważności przygotowywanego<br />

systemu. Polski OpenOffice.org z pewnością<br />

jest dużym atutem.<br />

Podsumowanie<br />

SuSE Linux 9.1 to system dla każdego.<br />

Zadowoli zarówno weteranów Linuksa,<br />

jak również tych, którzy gdzieś kiedyś<br />

usłyszeli o nim w radiu, przeczytali<br />

w piśmie bądź zobaczyli u kolegi, jednak<br />

boją się, że nie dadzą sobie rady z administracją,<br />

instalacją bądź użytkowaniem.<br />

Wsparcie firmy Novell z pewnością dobrze<br />

rokuje temu systemowi.<br />

38 czerwiec 2004


dla początkujących<br />

Serwer DHCP<br />

i algorytm HTB<br />

Piotr Machej<br />

CD/DVD<br />

Po uruchomieniu dystrybucji<br />

Linux+ Live CD/DVD można<br />

korzystać z programów omawianych<br />

w artykule.<br />

Na płycie CD/DVD<br />

Na płycie CD/DVD znajdują się<br />

pakiety źródłowe i binarne omawianych<br />

programów oraz wszystkie<br />

listingi z artykułu.<br />

O autorze<br />

Autor ukończył studia na kierunku<br />

Informatyka na Politechnice<br />

Opolskiej. Z Linuksem (i ogólnie<br />

systemami uniksowymi) ma<br />

styczność od wielu lat. Obecnie<br />

administruje dwoma sieciami<br />

blokowymi. Wolne chwile dzieli<br />

pomiędzy jazdy konne, pływanie,<br />

czytanie książek, mang i oglądanie<br />

anime. Kontakt z autorem:<br />

autorzy@linux.com.pl.<br />

Osoby administrujące mniejszymi<br />

lub większymi sieciami<br />

lokalnymi na ogół<br />

są skazane na wieczne<br />

skargi kierowane do nich przez użytkowników.<br />

A to sieć nie działa dość<br />

szybko, a to nie wiadomo, jak skonfigurować<br />

komputer po kolejnej reinstalacji<br />

Windows, a to znów nie można<br />

sobie pograć w ulubioną grę sieciową.<br />

Często ci sami użytkownicy chcieliby<br />

móc równocześnie ściągać pliki z<br />

sieci P2P i nadal bez problemu oglądać<br />

strony WWW.<br />

Odpowiednie skonfigurowanie serwera<br />

udostępniającego Internet może<br />

nieco zmniejszyć liczbę skarg użytkowników.<br />

W niniejszym artykule zajmiemy<br />

się dwiema możliwościami ułatwienia<br />

życia administratora. Pierwsza<br />

z nich to skonfigurowanie serwera<br />

DHCP służącego do dynamicznego<br />

przydzielania adresów IP komputerom<br />

podłączonym do naszej sieci lokalnej.<br />

Druga to przydzielenie odpowiedniej<br />

przepustowości łącza do Internetu<br />

poszczególnym użytkownikom<br />

i usługom w taki sposób, aby nie<br />

utrudniali sobie nawzajem korzystania<br />

z Sieci.<br />

Zakładamy, że udostępnianie łącza<br />

internetowego komputerom w sieci<br />

lokalnej jest już skonfigurowane.<br />

W związku z tym, nie będziemy się tym<br />

zajmować. Czytelników zainteresowanych<br />

tym tematem odsyłam do artykułu<br />

Konfiguracja serwera dla sieci osiedlowej,<br />

który pojawił się w numerze<br />

10/2002 Linux+.<br />

Przykład użycia<br />

Pewnego dnia na Gadu-Gadu odezwał<br />

się do mnie znajomy. Ze względu na to,<br />

że swoje łącze do Internetu dzielił na<br />

kilka osób w bloku, uskarżał się ostatnio<br />

na ciągłe problemy. Jeden z użytkowników<br />

często obciążał łącze ściąganiem<br />

filmów do tego stopnia, że inni nawet<br />

nie mogli poczytać sobie stron WWW.<br />

Jakby tego było mało, drugi użytkownik<br />

(wieczny eksperymentator) co jakiś<br />

czas reinstalował sobie system, a później<br />

potrafił około północy dzwonić do<br />

mojego znajomego, żeby ten skonfigurował<br />

mu dostęp do Internetu.<br />

Cóż było robić? Zadałem mu kilka<br />

pytań i dowiedziałem się, że w jego<br />

sieci znajduje się dziesięć komputerów,<br />

z czego jeden (z zainstalowanym Linuksem)<br />

pełni rolę bramki do Internetu. Nie<br />

Rysunek 1. Przy konfiguracji klienta DHCP<br />

w Windows nie trzeba znać żadnych<br />

adresów<br />

40 czerwiec 2004


dhcp i htb<br />

dla początkujących<br />

wszystkie komputery w równym stopniu<br />

korzystają z sieci, gdyż dwóch użytkowników<br />

jest właścicielami odpowiednio<br />

dwóch i trzech komputerów. Jako łącze<br />

do Internetu służy im SDI, a niedługo<br />

mają zamiar zmienić tą usługę na DSL.<br />

Zaproponowałem mu, aby skonfigurował<br />

sobie serwer DHCP, co powinno<br />

wybawić go od nocnych wizyt u eksperymentatora.<br />

Oprócz tego opowiedziałem<br />

mu o możliwościach, jakie oferuje sterowanie<br />

przepływem danych. Ucieszył się,<br />

gdy dowiedział się, że przy odpowiedniej<br />

konfiguracji będzie mógł spokojnie<br />

pograć sobie w Neverwinter Nights<br />

w sieci, nawet gdy znajomy będzie sobie<br />

ściągał filmy i muzykę. Przygotowałem<br />

mu przykładowe pliki, na podstawie których<br />

mógł później rozbudować własną<br />

konfigurację.<br />

Serwer DHCP<br />

Każdy komputer podłączony do Sieci<br />

posiada przyporządkowany numer IP.<br />

Może on być wpisywany ręcznie podczas<br />

konfiguracji połączenia, ale w przypadku<br />

bardziej rozbudowanych sieci lokalnych,<br />

takie rozwiązanie nie jest ekonomiczne.<br />

Jeśli administrator z jakiegoś powodu<br />

będzie chciał zmienić numery części<br />

komputerów, to będzie musiał odwiedzić<br />

każdy z nich i zmieniać numer ręcznie.<br />

To samo może zdarzyć się, gdy użytkownik<br />

zainstaluje u siebie nowy system operacyjny,<br />

a nie będzie potrafił skonfigurować<br />

połączenia sieciowego.<br />

W takich przypadkach przydaje się<br />

DHCP (Dynamic Host Configuration Protocol),<br />

czyli protokół dynamicznej konfiguracji<br />

komputerów. Dzięki niemu użytkownik<br />

komputera nie musi znać numeru<br />

IP, maski podsieci, adresu bramki czy<br />

adresu serwerów DNS – wystarczy, że<br />

zaznaczy u siebie Automatyczne pobieranie<br />

adresu IP, a wszystkie te informacje<br />

zostaną mu przesłane z serwera DHCP.<br />

Jak to działa? Nie zagłębiając się w<br />

szczegóły techniczne, można powiedzieć,<br />

że DHCP funkcjonuje w modelu klientserwer.<br />

W sieci mamy serwer zarządzający<br />

przydzielaniem adresów IP (oraz<br />

pozostałych parametrów konfiguracyjnych)<br />

oraz szereg klientów domagających<br />

się tych informacji. Klient (a więc każdy<br />

komputer w naszej sieci lokalnej poza<br />

serwerem) po uruchomieniu rozgłasza<br />

komunikaty do serwerów DHCP z żądaniem<br />

przesłania mu parametrów konfiguracyjnych.<br />

Gdy taki komunikat dotrze do<br />

Listing 1. Przykład pliku dhcpd.conf<br />

# Opcje globalne<br />

option domain-name "moja.domena.pl";<br />

option domain-name-servers 194.204.159.1, 194.204.152.34;<br />

option subnet-mask 255.255.255.0;<br />

default-lease-time 21600;<br />

max-lease-time 86400;<br />

# Opcje podsieci<br />

subnet 192.168.100.0 netmask 255.255.255.0 {<br />

}<br />

range 192.168.100.2 192.168.100.250;<br />

option broadcast-address 192.168.100.255;<br />

option routers 192.168.100.1;<br />

# Opcje komputerów<br />

host user2 {<br />

}<br />

hardware ethernet 00:32:1F:13:44:F6;<br />

fixed-address 192.168.100.6;<br />

option broadcast-address 192.168.100.255;<br />

option routers 192.168.100.1;<br />

option host-name "user2";<br />

serwera DHCP, sprawdza on właściwą<br />

dla klienta konfigurację i wysyła mu ją<br />

w komunikacie. Jeśli klientowi ona odpowiada<br />

(w sieci może znajdować się kilka<br />

serwerów DHCP, a klient może sobie<br />

wybrać, z którego chce korzystać), odsyła<br />

potwierdzenie do serwera, który zatwierdza<br />

taką konfigurację.<br />

Adresy mogą być przydzielane na<br />

kilka różnych sposobów. Po pierwsze,<br />

każdemu klientowi może być przypisany<br />

stały adres IP (np. na podstawie adresu<br />

MAC karty sieciowej). Po drugie, adres IP<br />

może być przyznany na określony czas<br />

(wydzierżawiony). Taki adres pochodzi<br />

ze specjalnej puli adresów określonej<br />

przez administratora. Wreszcie, po trzecie,<br />

administrator może przypisać komputerowi<br />

stały numer IP (nie jest wtedy<br />

pobierany z DHCP).<br />

Instalacja i uruchamianie<br />

Na początek musimy zainstalować pakiet<br />

dhcpd. Jest on dołączany do większości<br />

dystrybucji, więc nie powinno być problemów<br />

z jego znalezieniem. W przypadku<br />

dystrybucji Aurox 9.3 pakiet ten<br />

(pod nazwą dhcp-3.0pl2-6.16.i386.rpm)<br />

znajduje się na trzeciej płytce instalacyjnej.<br />

Możemy go zainstalować korzystając<br />

z menedżera pakietów lub z linii poleceń<br />

(po zalogowaniu się na konto root montujemy<br />

płytę CD-ROM poleceniem mount<br />

/mnt/cdrom/, a następnie instalujemy<br />

pakiet poleceniem rpm -Uvh /mnt/cdrom/<br />

Aurox/RPMS/dhcp-3.0pl2-6.16.i386.rpm).<br />

Na tym instalacja kończy się. Konfigurację<br />

przeprowadzamy modyfikując<br />

plik /etc/dhcpd.conf.<br />

Po zakończeniu konfiguracji (według<br />

wskazówek umieszczonych poniżej)<br />

należy stworzyć pusty plik /etc/<br />

dhcpd.leases poleceniem touch /etc/<br />

dhcpd.leases. Teraz już możemy uruchomić<br />

demona DHCP poleceniem /usr/<br />

sbin/dhcpd. Możemy ograniczyć jego<br />

działanie do wybranego interfejsu (tak,<br />

aby działał tylko na interfejsie, do którego<br />

jest podłączona sieć lokalna). W takim<br />

przypadku należy uruchomić go poleceniem<br />

/usr/sbin/dhcpd eth0 (w miejsce<br />

eth0 wstawiamy odpowiednią nazwę<br />

interfejsu).<br />

Jeśli wszystko działa prawidłowo,<br />

możemy dodać wywołanie demona<br />

DHCP do skryptów startowych. W przypadku<br />

dystrybucji Aurox można tego<br />

dokonać wydając polecenie ntsysv<br />

i zaznaczając pozycję dhcpd.<br />

W poniższych rozdziałach omówimy<br />

opcje konfiguracyjne umieszczane<br />

w pliku /etc/dhcpd.conf.<br />

Dynamiczne przydzielanie<br />

adresów<br />

Na Listingu 1 jest umieszczony przykładowy<br />

plik /etc/dhcpd.conf. Jest to skrócona<br />

wersja pliku, który mógłby być zasto-<br />

www.lpmagazine.org<br />

41


dla początkujących<br />

Rysunek 2. Po uruchomieniu serwera<br />

DHCP wystarczy polecić Linuksowi<br />

automatyczne pobieranie z niego adresów<br />

sowany w przypadku opisanym w rozdziale<br />

Przykład użycia. Jak widać, jest<br />

podzielony na trzy sekcje.<br />

W sekcji Opcje globalne są zawarte<br />

ustawienia domyślne. Zostaną one<br />

użyte, jeśli nie nadpiszą ich ustawienia<br />

zawarte w blokach subnet lub host<br />

(odpowiednio sekcje Opcje podsieci<br />

i Opcje komputerów) – najważniejsze<br />

są opcje zawarte w sekcji najbardziej<br />

szczegółowej. Jeśli klienta, który<br />

wysłał komunikat z żądaniem przyznania<br />

numeru IP, nie można dopasować<br />

do żadnego z bloków host, to rozpatrywane<br />

są bloki subnet. Jeśli w blokach<br />

tych nie zostały ustawione wszystkie<br />

opcje, to pobrane zostaną one<br />

z bloku nadrzędnego (w kolejności host<br />

-> subnet -> opcje globalne).<br />

Zaczynamy od ustawienia nazwy<br />

domeny (option domain-name) oraz adresów<br />

serwerów DNS (option domain-nameservers).<br />

Jeśli chcemy podać więcej adresów,<br />

oddzielamy je przecinkiem. Następnie<br />

ustawiamy maskę podsieci (option<br />

subnet-mask).<br />

Opcje default-lease-time i max-leasetime<br />

określają odpowiednio domyślny<br />

i maksymalny czas dzierżawy adresu<br />

przyznanego dynamicznie. Czasy te<br />

podane są w sekundach.<br />

Teraz dochodzimy do najciekawszej<br />

części, jaką jest sekcja Opcje podsieci.<br />

Zaczyna się ona od deklaracji podsieci<br />

(subnet) i jej maski (netmask). Wszystkie<br />

opcje dotyczące tej podsieci są zamknięte<br />

pomiędzy nawiasami klamrowymi:<br />

{ i }. Każda podsieć, która będzie obsługiwana,<br />

jak również każda podsieć, do<br />

której jest podłączony serwer DHCP,<br />

musi posiadać jeden blok subnet. Jest<br />

to konieczne nawet w przypadku, gdy<br />

w danej podsieci nie będziemy przypisywać<br />

adresów dynamicznie.<br />

Pierwsza opcja (range) określa zakres<br />

adresów, które mogą być dynamicznie<br />

przyznawane klientom. Adresy te muszą<br />

należeć do tej samej podsieci, co określona<br />

w deklaracji subnet. W jednym bloku<br />

subnet możemy zdefiniować wiele zakresów<br />

adresów – wystarczy użyć kilku<br />

kolejnych linii zawierających opcję range<br />

z podanymi odpowiednimi adresami.<br />

Następnie ustawiamy adres rozgłoszeniowy<br />

(option broadcast-address) dla<br />

naszej podsieci. Ostatnia opcja to wskazanie<br />

rutera (option routers), przez który<br />

klienci mogą łączyć się z Internetem.<br />

Te dwie sekcje w zasadzie wystarczają<br />

do dynamicznego przydzielania adresów.<br />

Jeśli jednak chcemy mieć większą<br />

kontrolę nad tym, jakie adresy otrzymują<br />

poszczególni użytkownicy sieci, powinniśmy<br />

zainteresować się również sekcją<br />

Opcje komputerów.<br />

Statyczne adresy<br />

Często będzie nam zależeć, aby konkretne<br />

komputery posiadały stałe adresy. Tak<br />

musi być w przypadku serwerów usług<br />

(np. DNS, WWW, FTP), które znajdują<br />

się w sieci lokalnej. Może to być również<br />

przydatne w przypadku zwykłych<br />

komputerów podłączonych do sieci.<br />

Dzięki temu można później łatwo zidentyfikować<br />

poszczególne komputery, a ich<br />

numery IP wykorzystać choćby do tworzenia<br />

odpowiednich regułek na zaporze<br />

ogniowej (np. w celu udostępnienia<br />

komuś konkretnego portu lub przeciwnie<br />

– zablokowania niektórych usług).<br />

Takie przypisanie stałych adresów<br />

poszczególnym komputerom w sieci<br />

dokonywane jest w sekcji Opcje komputerów.<br />

Na Listingu 1 w tej sekcji przedstawiony<br />

jest tylko jeden przykładowy<br />

blok host. Zaczyna się on linią host<br />

nazwa_komputera, po której umieszczane<br />

są opcje konfiguracyjne dotyczące tego<br />

komputera, zamknięte pomiędzy nawiasami<br />

klamrowymi: { i }.<br />

Pierwsza opcja w naszym przykładzie<br />

to hardware ethernet. Określa ona adres<br />

MAC karty sieciowej komputera, dla<br />

którego przeznaczone są opcje zawarte<br />

w tym bloku host. W systemie Windows<br />

adres MAC karty sieciowej możemy<br />

sprawdzić uruchamiając polecenie ipcfg.<br />

W przypadku Linuksa wystarczy uruchomić<br />

polecenie /sbin/ifconfig. Możemy<br />

również sprawdzić adresy MAC innych<br />

komputerów podłączonych do sieci, uruchamiając<br />

na ruterze polecenie /sbin/arp<br />

(jednak nie wypisze ono adresów komputerów,<br />

które akurat są wyłączone lub<br />

nie korzystają z sieci).<br />

Opcja fixed-address to serce naszego<br />

statycznego przydziału numeru IP. Jeśli<br />

byśmy jej nie użyli, to komputer otrzymałby<br />

adres z puli określonej w odpowiednim<br />

bloku subnet. Podczas wyszukiwania<br />

bloku host odpowiadającego komputerowi,<br />

który wysłał żądanie, w pierwszej<br />

kolejności rozpatrywane są bloki host<br />

zawierające opcję fixed-address z adresem<br />

pasującym do podsieci, w której<br />

został uruchomiony komputer. Jeśli taki<br />

blok nie zostanie znaleziony, to w następnej<br />

kolejności przeszukiwane są bloki<br />

host nie zawierające opcji fixed-address.<br />

Kolejne dwie opcje (option broadcast-address<br />

i option routers) pozwalają<br />

na przekazanie do komputera odpowiadających<br />

mu adresu rozgłoszeniowego<br />

i adresu rutera. Opcje zawarte w tym<br />

bloku mają pierwszeństwo przed tymi<br />

określonymi w bloku subnet, więc mamy<br />

możliwość wskazania innego rutera<br />

wybranym komputerom. Jeśli jednak są<br />

takie same, możemy po prostu usunąć<br />

te dwie linie z bloku host – w takim<br />

przypadku będą obowiązywać wartości<br />

umieszczone w bloku subnet.<br />

Ostatnia opcja (option host-name)<br />

pozwala na ustawienie odpowiedniej<br />

nazwy komputera.<br />

W analogiczny sposób można utworzyć<br />

bloki host dla pozostałych komputerów<br />

w sieci, zmieniając odpowiednio<br />

nazwę komputera, jego adres MAC oraz<br />

przypisany numer IP.<br />

Dzielenie pasma<br />

Tym, co bardzo irytuje wielu użytkowników<br />

sieci korzystających z Internetu<br />

za pośrednictwem niewielkich sieci<br />

lokalnych (blokowych, osiedlowych),<br />

jest zapychanie łącza przez inne osoby.<br />

Nieraz dochodzi do sytuacji, w której<br />

część użytkowników przejmuje większość<br />

pasma i cieszy się z szybko ściągających<br />

się plików, podczas gdy inni mają<br />

problemy z otwarciem nawet pojedynczej<br />

strony WWW.<br />

Receptą na ten problem jest odpowiednie<br />

sterowanie przepływem danych<br />

(traffic control). Dzięki temu możemy nie<br />

tylko ograniczyć przepustowość wykorzystywaną<br />

przez poszczególnych użytkowników,<br />

ale również zapewnić odpo-<br />

42 czerwiec 2004


dhcp i htb<br />

dla początkujących<br />

ruterze udostępniali konta innym użytkownikom,<br />

to powinniśmy zainteresować<br />

się IMQ (InterMediate Queueing<br />

device), czyli pośrednim urządzeniem<br />

kolejkującym.<br />

Rysunek 3. Przykład statystyk zarządzania przepustowością łącza przez HTB<br />

wiednie parametry łącza dla wybranych<br />

transmisji (np. dla pracy z SSH).<br />

Jak to działa?<br />

Zacznijmy od tego, że każde łącze ma<br />

określoną przepustowość. Łącze w sieci<br />

lokalnej (często jest to Ethernet o przepustowości<br />

10 lub 100 Mbit) jest zazwyczaj<br />

znacznie szybsze od łącza do Internetu<br />

(np. SDI o przepustowości 115Kbit lub<br />

DSL o przepustowości 1Mbit). Nas interesuje,<br />

co dzieje się na styku tych łączy,<br />

czyli tam, gdzie znajduje się nasz ruter.<br />

Dane przesyłane przez użytkowników<br />

przychodzą do rutera przez jeden z<br />

interfejsów (np. ppp0 w przypadku SDI<br />

lub eth0 w przypadku sieci lokalnej).<br />

Następnie podlegają analizie – w uproszczeniu,<br />

ruter ocenia, do jakiego adresata<br />

mają trafić poszczególne pakiety. Znając<br />

adresata, ruter wyznacza adres następnego<br />

rutera i interfejsu, do którego skieruje<br />

dane. Takie dane przeznaczone do<br />

wysłania trafiają do kolejki wyjściowej,<br />

z której są usuwane, gdy tylko interfejs<br />

zdoła je obsłużyć.<br />

Może się zdarzyć, że do kolejki wyjściowej<br />

dane trafiają tak szybko, że interfejs<br />

nie nadąża z wysyłaniem. Jeśli przeciążenie<br />

takie trwa na tyle długo, że<br />

liczba pakietów przeznaczonych do<br />

wysłania przekroczy rozmiary kolejki<br />

wyjściowej, to część pakietów zostanie<br />

zagubiona. O tym, które pakiety zostaną<br />

zagubione, decyduje algorytm obowiązujący<br />

w danej kolejce.<br />

Jak widać z tego opisu, mamy możliwość<br />

kształtowania jedynie ruchu wychodzącego<br />

z rutera. Może się to wydawać<br />

dziwne, jednak jest dosyć naturalne.<br />

Ruter otrzymujący dane z przeciążonego<br />

łącza nie ma możliwości zmniejszenia<br />

tego przeciążenia za pomocą kolejki<br />

– może to zrobić jedynie ruter wysyłający<br />

dane. Powstaje zatem pytanie, jak mamy<br />

ograniczyć przepustowość dla danych<br />

pobieranych z Internetu.<br />

Dokonamy tego w ten sposób, że<br />

nałożymy ograniczenia na interfejs sieci<br />

lokalnej – jeśli ruter będzie wysyłał jakieś<br />

dane z Internetu do jednego z użytkowników<br />

sieci lokalnej, to zadba, aby były<br />

one wysyłane z określoną szybkością.<br />

W ten sam sposób możemy ograniczyć<br />

przepustowość wykorzystywaną<br />

przez użytkowników do wysyłania<br />

danych do Internetu. Tym razem jednak<br />

ograniczenia należy założyć na interfejs<br />

zewnętrzny (np. ppp0).<br />

Do nakładania ograniczeń posłuży<br />

nam program tc (traffic control) z pakietu<br />

iproute2.<br />

Warto zauważyć, że przy takim<br />

modelu możemy kształtować ruch<br />

wychodzący bezpośrednio z rutera,<br />

jednak nie mamy wpływu na szybkość<br />

pobierania danych przez ruter – ruch<br />

kształtujemy na ruterze, a dane przeznaczone<br />

dla niego nie przechodzą przez<br />

żaden interfejs wyjściowy. W większości<br />

przypadków nie jest to jednak niedogodnością.<br />

Gdybyśmy jednak na naszym<br />

Podstawowe wymagania<br />

Przede wszystkim musimy sprawdzić,<br />

czy posiadamy odpowiednią konfigurację.<br />

HTB (wykorzystywany przez nas<br />

algorytm kolejkowania – patrz ramka<br />

Algorytmy kolejkowania) jest włączone<br />

w jądrach od wersji 2.4.20, dlatego<br />

najlepiej korzystać z najnowszych jąder<br />

linii 2.4.x. Można co prawda skorzystać<br />

z wersji wcześniejszej niż 2.4.20, jednak<br />

wymaga to nakładania łaty na jądro. My<br />

nie będziemy sobie utrudniać życia i skorzystamy<br />

z jądra 2.4.20 lub nowszego.<br />

Drugim ważnym elementem jest<br />

pakiet iproute2 (a dokładniej, wchodzący<br />

w jego skład program tc). Najnowsze<br />

wersje tego pakietu nie wymagają już<br />

nakładania łatki HTB, co oszczędza nam<br />

pracy z kompilowaniem źródeł. Użytkownicy<br />

dystrybucji Aurox mogą wykorzystać<br />

pakiety dołączane do dystrybucji<br />

(iproute-2.4.7 z pierwszej płyty instalacyjnej).<br />

To w zasadzie wszystko, co będzie<br />

nam potrzebne. Teraz możemy już sprawdzić,<br />

czy wszystko działa tak, jak powinno.<br />

W tym celu korzystając z uprawnień<br />

administratora (czyli po zalogowaniu na<br />

konto root lub skorzystaniu z polecenia<br />

su -) wydajemy następujące polecenia:<br />

tc qdisc show<br />

tc filter show<br />

tc class show<br />

Na tym etapie nie powinny one zwrócić<br />

żadnego wyniku. Jeśli pojawi się komunikat<br />

błędu zawierający tekst no such<br />

device, to znaczy, że podczas kompilowania<br />

jądra pominęliśmy jakieś istotne<br />

opcje. W przeciwnym przypadku<br />

możemy przejść do właściwej konfiguracji.<br />

Dzielimy według<br />

użytkowników<br />

W rozdziale Przykład użycia opisaliśmy<br />

przykładową konfigurację sieci lokalnej.<br />

Dla przypomnienia, mamy do czynienia<br />

z siecią lokalną złożoną z dziesięciu komputerów.<br />

Jeden z nich pełni rolę bramki<br />

do Internetu. Sieć lokalna (Ethernet) ma<br />

przepustowość 10Mbit, natomiast łącze<br />

www.lpmagazine.org<br />

43


dla początkujących<br />

Algorytmy kolejkowania<br />

O doborze pakietów do wysłania decyduje<br />

algorytm przypisany do danej kolejki<br />

wyjściowej. Domyślnie jest to najprostszy<br />

algorytm FIFO (First In First Out). Przy<br />

jego wykorzystaniu pakiety są wysyłane<br />

w takiej kolejności, w jakiej pojawiły<br />

się w kolejce. To właśnie dlatego użytkownik<br />

uruchamiający duże ilości obciążających<br />

łącze programów potrafi doprowadzić<br />

do sytuacji, gdy korzystanie<br />

z sieci jest dla innych bardzo trudne.<br />

Z tego powodu stworzono inne algorytmy,<br />

z których możemy korzystać. Należą<br />

do nich między innymi TBF (Token Bucket<br />

Filter), PRIO (Simple Priority Queueing)<br />

czy SFQ (Stochastic Fairness Queueing<br />

– sprawiedliwe kolejkowanie). W dalszej<br />

części będziemy korzystać tylko ze sprawiedliwego<br />

kolejkowania SFQ.<br />

Kolejka nie musi wykorzystywać<br />

tylko pojedynczego algorytmu. Może ona<br />

wykorzystywać znacznie bardziej złożony<br />

algorytm, podzielony na klasy, z których<br />

każda ma przyporządkowany inny<br />

algorytm kolejkowania. O tym, które<br />

pakiety przejdą do których klas, decydują<br />

filtry. W ten sposób można rozdzielać<br />

ruch różnego rodzaju, jak również przyporządkowywać<br />

wybranym pakietom<br />

wyższy priorytet. Do takich złożonych<br />

algorytmów kolejkowania należą między<br />

innymi CBQ (Class Based Queueing)<br />

i HTB (Hierarchical Token Bucket). Ponieważ<br />

HTB jest szybsze i dokładniejsze niż<br />

CBQ, właśnie z tego algorytmu będziemy<br />

korzystać.<br />

Do ustawiania algorytmu kolejkowania<br />

(to trochę nieszczęśliwe tłumaczenie<br />

angielskiego queueing discipline – dalej<br />

będziemy zamiennie używać zwrotu dyscyplina<br />

kolejkowania) służy nam polecenie<br />

tc qdisc add z podanymi parametrami.<br />

Analogicznie do tworzenia poszczególnych<br />

klas służy polecenie tc class<br />

add, a do tworzenia filtrów tc filter<br />

add. Przykłady tych poleceń i ich składnia<br />

opisane są w artykule w praktycznych<br />

przykładach.<br />

do Internetu to SDI (o przepustowości<br />

115Kbit). Dwóch użytkowników posiada<br />

więcej niż jeden komputer – jeden z nich<br />

posiada trzy, a drugi dwa komputery.<br />

Aby pozostali użytkownicy sieci nie byli<br />

poszkodowani, łącze dzielimy pomiędzy<br />

użytkowników, a nie komputery (czyli<br />

trzy komputery jednego użytkownika<br />

otrzymają razem taką samą przepustowość,<br />

jak jeden komputer innego).<br />

Na Listingu 2 znajduje się jedno<br />

z możliwych rozwiązań, które można<br />

w tym przypadku zastosować. Omówimy<br />

je teraz krok po kroku.<br />

Zaczynamy od zdefiniowania zmiennych,<br />

dzięki czemu nasz skrypt będzie<br />

później łatwiejszy do modyfikowania.<br />

W sekcji 1) określamy następujące zmienne:<br />

• CALE – przepustowość całego łącza<br />

sieci lokalnej;<br />

• SDI – przepustowość łącza do Internetu;<br />

• ETH_CEIL – maksymalna przepustowość<br />

możliwa do wykorzystania na<br />

transmisję z rutera do komputerów<br />

w sieci lokalnej;<br />

• USER – przepustowość gwarantowana<br />

każdemu z użytkowników (nie<br />

może być większa niż wartość SDI<br />

podzielona przez liczbę użytkowników);<br />

• USER_CEIL – maksymalna przepustowość,<br />

którą może wykorzystać użytkownik,<br />

jeśli nie jest ona zajmowana<br />

przez innych użytkowników;<br />

• INT_LOC – nazwa interfejsu rutera,<br />

do którego podłączona jest sieć lokalna.<br />

Następnie w sekcji 2) określamy zmienne,<br />

w których przechowywane są numery IP<br />

wszystkich komputerów znajdujących się<br />

w sieci lokalnej. Zmienna IP_SERWER<br />

przechowuje numer IP rutera. Pozostałe<br />

zmienne to numery IP komputerów należących<br />

do użytkowników. Nazwy zmiennych<br />

można dobrać według własnych<br />

upodobań. W tym przypadku przyjęto<br />

zasadę, że nazwa składa się z ciągu<br />

IP_USER uzupełnionego o numer użytkownika<br />

(np. IP_USER2). Jeśli użytkownik<br />

posiada więcej komputerów,<br />

to dodatkowo po znaku podkreślenia<br />

jest podany numer kolejny komputera<br />

należącego do tego użytkownika (np.<br />

IP_USER3_2 to drugi komputer użytkownika<br />

numer 3).<br />

Polecenie zawarte w sekcji 3) powoduje,<br />

że usunięte są wszystkie kolejki<br />

i klasy, które mogły być zdefiniowane<br />

na interfejsie $INT_LOC. Przy okazji<br />

warto zaznaczyć, że o ile przy definiowaniu<br />

zmiennych wykorzystywaliśmy same<br />

nazwy, to przy wstawianiu ich wartości w<br />

poleceniach nazwy zmiennych poprzedzamy<br />

znakiem $.<br />

W sekcji 4) określamy, jaka dyscyplina<br />

kolejkowania będzie wykorzystana<br />

do zarządzania ruchem wychodzącym<br />

z sieci lokalnej. W naszym przypadku<br />

wybieramy dyscyplinę HTB. Utworzonemu<br />

obiektowi nadajemy uchwyt<br />

(handle) 1:0.<br />

Następnie w utworzonym obiekcie<br />

tworzymy klasę odpowiedzialną za<br />

przypisanie przepustowości dla całego<br />

łącza do sieci lokalnej. Odpowiada za to<br />

instrukcja umieszczona w sekcji 5). Użyta<br />

tu wartość zmiennej CALE nie powinna<br />

być większa od rzeczywistej przepustowości<br />

sieci.<br />

W sekcji 6) rozdzielamy naszą klasę<br />

na dwie podklasy. Jedna z nich (o rate<br />

i ceil ustawionym na wartość $SDI)<br />

będzie służyć do kolejkowania pakietów<br />

pochodzących z Internetu. Druga<br />

natomiast pozwoli na przesyłanie pakietów<br />

pochodzących bezpośrednio z rutera<br />

do komputerów w sieci lokalnej z maksymalną<br />

szybkością.<br />

Szereg poleceń zawartych w sekcji<br />

7) przydziela poszczególnym użytkownikom<br />

fragmenty pasma przeznaczonego<br />

do ściągania danych z Internetu.<br />

Warto zauważyć, że pasmo jest dzielone<br />

na liczbę użytkowników, a nie komputerów.<br />

Opcją rate przydzielamy im<br />

pasmo gwarantowane. Należy pamiętać,<br />

aby suma wartości opcji rate wykorzystanych<br />

w tej sekcji nie przekroczyła wartości<br />

rate ustalonej dla kolejki nadrzędnej<br />

w sekcji 6). To samo dotyczy opcji ceil. Jeśli<br />

nie chcemy iść na rękę użytkownikom,<br />

a jedynie przydzielić im konkretne pasmo<br />

(czyli jeśli chcemy, aby gwarantowane<br />

pasmo było zarazem maksymalnym), to<br />

możemy zmiennej USER_CEIL przypisać<br />

tę samą wartość, co zmiennej USER.<br />

Czas na ustawienie filtrów, które będą<br />

odpowiadać za kierowanie pakietów do<br />

odpowiednich kolejek. Zaczynamy od<br />

zapewnienia, że pakiety pochodzące<br />

z rutera nie będą podlegały ogranicze-<br />

Rysunek 4. Po skonfigurowaniu<br />

zarządzania przepustowością możemy<br />

spokojnie czytać strony WWW nawet, gdy<br />

kolega uparcie korzysta z KaZaA<br />

44 czerwiec 2004


dhcp i htb<br />

dla początkujących<br />

Listing 2. Przykładowa zawartość pliku rc.htb dla podziału pasma według użytkowników<br />

# 1) określamy przepustowości<br />

CALE=8700kbit<br />

SDI=110kbit<br />

ETH_CEIL=8000kbit<br />

USER=16kbit<br />

USER_CEIL=100kbit<br />

INT_LOC=eth0<br />

# 2) wskazujemy adresy komputerów<br />

IP_SERWER=192.168.100.1<br />

IP_USER1_1=192.168.100.2<br />

IP_USER1_2=192.168.100.3<br />

IP_USER2=192.168.100.6<br />

IP_USER3_1=192.168.100.8<br />

IP_USER4=192.168.100.15<br />

IP_USER5=192.168.100.50<br />

IP_USER3_2=192.168.100.100<br />

IP_USER6=192.168.100.200<br />

IP_USER1_3=192.168.100.205<br />

# 3) usuwamy wszelkie ustawienia qdisc<br />

tc qdisc del root dev $INT_LOC<br />

# 4) dodajemy obiekt qdisc - htb<br />

tc qdisc add dev $INT_LOC root handle 1:0 htb<br />

# 5) tworzymy klasę odpowiadającą całej dostępnej przepustowości sieci lokalnej<br />

tc class add dev $INT_LOC parent 1:0 classid 1:1 htb rate $CALE ceil $CALE<br />

# 6) wydzielamy klasy dla transmisji danych z Internetu i z serwera<br />

tc class add dev $INT_LOC parent 1:1 classid 1:2 htb rate $SDI ceil $SDI<br />

tc class add dev $INT_LOC parent 1:1 classid 1:3 htb rate $ETH_CEIL ceil $ETH_CEIL<br />

# 7) rozdzielamy przepustowość pomiędzy poszczególnych użytkowników<br />

tc class add dev $INT_LOC parent 1:2 classid 1:4 htb rate $USER ceil $USER_CEIL<br />

tc class add dev $INT_LOC parent 1:2 classid 1:5 htb rate $USER ceil $USER_CEIL<br />

...<br />

# 8) ustawiamy filtr oddzielający transmisję z serwera<br />

tc filter add dev $INT_LOC protocol ip preference 1 parent 1:0 u32 match ip srcS<br />

$IP_SERWER flowid 1:3<br />

# 9) ustawiamy filtry oddzielające transmisję do poszczególnych komputerów w sieciS<br />

lokalnej<br />

tc filter add dev $INT_LOC protocol ip preference 2 parent 1:0 u32 match ip dstS<br />

$IP_USER1_1 flowid 1:4<br />

tc filter add dev $INT_LOC protocol ip preference 2 parent 1:0 u32 match ip dstS<br />

...<br />

$IP_USER1_2 flowid 1:4<br />

# 10) ustawiamy sprawiedliwe dzielenie łącza z serwera<br />

tc qdisc add dev $INT_LOC parent 1:3 handle 3:0 sfq perturb 10<br />

# 11) ustawiamy sprawiedliwe dzielenie łączy poszczególnych użytkowników<br />

tc qdisc add dev $INT_LOC parent 1:4 handle 4:0 sfq perturb 10<br />

tc qdisc add dev $INT_LOC parent 1:5 handle 5:0 sfq perturb 10<br />

...<br />

niom nakładanym na łącze internetowe.<br />

Uzyskujemy to dzięki poleceniu zawartemu<br />

w sekcji 8). Warto zwrócić uwagę na<br />

opcję preference 1, dzięki której reguła<br />

ta zostanie rozpatrzona przed umieszczonymi<br />

w kolejnych liniach (posiadającymi<br />

opcję preference 2). Dzieje się tak,<br />

gdyż opcja ta określa priorytet filtru – im<br />

niższy numer, tym wcześniej będzie rozpatrzony<br />

filtr. Do dopasowania pakietów<br />

wykorzystano filtr u32. Numer kolejki,<br />

do której ma być skierowany dopasowany<br />

pakiet, określony jest opcją flowid.<br />

W analogiczny sposób filtrujemy<br />

pakiety przeznaczone dla poszczególnych<br />

komputerów w sieci lokalnej i kierujemy<br />

je do odpowiednich kolejek. Zajmują<br />

się tym polecenia zawarte w sekcji<br />

9). Warto zwrócić uwagę, że zgodnie<br />

z wcześniejszymi założeniami, pakiety<br />

pobierane przez komputery należące do<br />

jednego użytkownika (np. IP_USER1_1<br />

i IP_USER1_2) kierowane są do tej samej<br />

kolejki. Dzięki temu użytkownik nie<br />

otrzymuje dodatkowego pasma tylko<br />

dlatego, że posiada więcej komputerów.<br />

Wykorzystana w tych liniach opcja preference<br />

2 sprawia, że linie te są rozpatrywane<br />

dopiero po linii umieszczonej<br />

w sekcji 8). Gdyby było inaczej, to podczas<br />

pobierania przez użytkownika<br />

danych z rutera (a nie z Internetu) transmisja<br />

odbywałaby się z szybkością przeznaczoną<br />

dla pobierania danych z Internetu.<br />

Ponieważ dysponujemy siecią<br />

o przepustowości 10Mbit, nie miałoby to<br />

większego sensu.<br />

Aby użytkownicy podczas pobierania<br />

danych z rutera wzajemnie sobie<br />

nie przeszkadzali, to do klasy 1:3 opisanej<br />

w sekcji 6) dodamy jeszcze dyscyplinę<br />

kolejkowania SFQ (odpowiednia linia<br />

znajduje się w sekcji 10)). W zasadzie<br />

jest wątpliwe, aby w sieci lokalnej ktoś<br />

tak mocno „przytkał” łącze, żeby było to<br />

konieczne, jednak dodatkowa pojedyncza<br />

linia w skrypcie nie powinna nam<br />

zaszkodzić.<br />

Analogicznie postępujemy w sekcji<br />

11), gdzie przypisujemy dyscyplinę kolejkowania<br />

SFQ do każdej z kolejek przydzielonych<br />

poszczególnym użytkownikom.<br />

Na tym kończy się działanie skryptu.<br />

Możemy go umieścić na przykład w<br />

pliku /etc/rc.d/init.d/rc.htb. Plikowi temu<br />

należy nadać prawa wykonywania (poleceniem<br />

chmod u+x /etc/rc.d/init.d/<br />

rc.htb), a następnie jego wywołanie<br />

możemy umieścić w jednym ze skryptów<br />

startowych. Ważne jest, aby skrypt<br />

ten był wykonywany dopiero po podniesieniu<br />

wszystkich interfejsów.<br />

Równi i równiejsi<br />

No dobrze, mamy sprawiedliwy podział<br />

łącza, ale jedna z użytkowniczek sieci<br />

tak ładnie się do nas uśmiecha, że nie<br />

mamy sumienia traktować jej na równi<br />

z pozostałymi. Czy można w jakiś sposób<br />

uprzyjemnić jej korzystanie z sieci? Oczywiście.<br />

Narzucającą się od razu myślą jest<br />

zwiększenie wartości opcji rate i ceil<br />

w jej kolejce. Dzięki temu miałaby do<br />

www.lpmagazine.org<br />

45


dla początkujących<br />

Listing 3. Przykładowa zawartość pliku rc.htb dla podziału pasma według usług<br />

# 1) określamy przepustowości i interfejsy<br />

SDI=110kbit<br />

WWW=30kbit<br />

FTP=30kbit<br />

INNE=20kbit<br />

INNE_CEIL=40kbit<br />

INT_INT=ppp0<br />

# 2) usuwamy wszelkie ustawienia qdisc<br />

tc qdisc del root dev $INT_INT<br />

# 3) dodajemy obiekt qdisc - htb<br />

tc qdisc add dev $INT_INT root handle 1:0 htb default 4<br />

# 4) tworzymy klasę odpowiadającą całej dostępnej przepustowości sieci lokalnej<br />

tc class add dev $INT_INT parent 1:0 classid 1:1 htb rate $SDI ceil $SDI<br />

# 5) wydzielamy klasy dla transmisji danych z poszczególnych portów<br />

tc class add dev $INT_INT parent 1:1 classid 1:2 htb rate $WWW ceil $SDI<br />

tc class add dev $INT_INT parent 1:1 classid 1:3 htb rate $FTP ceil $FTP<br />

tc class add dev $INT_INT parent 1:1 classid 1:4 htb rate $INNE ceil $INNE_CEIL<br />

# 6) ustawiamy filtry oddzielające transmisję z poszczególnych portów do Internetu<br />

tc filter add dev $INT_INT protocol ip parent 1:0 u32 match ip sport 80 0xffff S<br />

flowid 1:2<br />

tc filter add dev $INT_INT protocol ip parent 1:0 u32 match ip sport 20 0xffff S<br />

flowid 1:3<br />

# 7) ustawiamy sprawiedliwe dzielenie przepustowości poszczególnych usług<br />

tc qdisc add dev $INT_INT parent 1:2 handle 2:0 sfq perturb 10<br />

tc qdisc add dev $INT_INT parent 1:3 handle 3:0 sfq perturb 10<br />

tc qdisc add dev $INT_INT parent 1:4 handle 4:0 sfq perturb 10<br />

dyspozycji większą gwarantowaną przepustowość,<br />

jak również większe łącze<br />

do wykorzystania. To jednak wiąże się<br />

z koniecznością dokonania kolejnych<br />

przeliczeń i dostosowania wartości w<br />

pozostałych kolejkach.<br />

Możemy rozwiązać to inaczej.<br />

Zwykle jest tak, że nie wszyscy użytkownicy<br />

wykorzystują w całości przydzielone<br />

im pasmo. W takim przypadku<br />

jest ono rozdzielane po równo pomiędzy<br />

pozostałych, potrzebujących użytkowników<br />

(aż do wartości opcji ceil). Możemy<br />

sprawić, że dodatkowe pasmo będzie<br />

w pierwszej kolejności przydzielane<br />

wskazanej osobie. Wystarczy w sekcji 7)<br />

w każdej linii dopisać opcję prio LICZBA,<br />

gdzie LICZBA określa priorytet danego<br />

użytkownika. Im LICZBA mniejsza, tym<br />

większy priorytet – użytkownik o najwyższym<br />

priorytecie będzie miał pierwszeństwo<br />

podczas rozdzielania dodatkowego<br />

pasma.<br />

Przypuśćmy, że w liniach z opcjami<br />

classid o wartościach 1:4, 1:5, 1:6 i 1:8<br />

ustawimy opcję prio 2. W linii z classid<br />

1:9 damy prio 1 (to nasza uśmiechnięta<br />

koleżanka), a w linii z classid 1:7 dopiszemy<br />

prio 3 (to znajomy, który nadepnął<br />

nam na odcisk). W takim przypadku,<br />

jeśli nasza koleżanka będzie ściągała<br />

jakiś duży plik z szybkiego serwera,<br />

a dostępne będzie jeszcze wolne pasmo,<br />

to zostanie ono przydzielone właśnie jej.<br />

Dopiero w następnej kolejności będą<br />

obsłużeni pozostali użytkownicy, a na<br />

samym końcu nasz niegrzeczny kolega<br />

z kolejki 1:7.<br />

Dzielimy według usług<br />

Załóżmy, że nasz serwer udostępnia<br />

jakieś usługi. Może to być serwer WWW,<br />

FTP, czy na przykład SSH. Zapewniliśmy<br />

już komfort korzystania z sieci naszym<br />

użytkownikom lokalnym, ale co z użytkownikami<br />

Internetu? Również i o nich<br />

możemy zadbać. Tym razem będziemy<br />

pracować na interfejsie zewnętrznym (w<br />

naszym przykładzie jest to ppp0), gdyż<br />

chcemy kształtować ruch wychodzący<br />

z serwera do Internetu.<br />

W naszym przykładzie dla uproszczenia<br />

założymy, że na serwerze udostępniamy<br />

tylko usługi WWW i FTP.<br />

Pierwszej z nich przypiszemy przepustowość<br />

gwarantowaną 30kbit na sekundę<br />

(z góry ograniczoną tylko przepustowością<br />

SDI), natomiast drugiej zagwarantujemy<br />

taką samą przepustowość (z tą różnicą,<br />

że transfer FTP nie będzie większy<br />

niż te gwarantowane 30kbit na sekundę).<br />

Wszystkie pozostałe transmisje wychodzące<br />

(a więc również i ruch wychodzący<br />

od użytkowników sieci lokalnej) będą<br />

miały zagwarantowane 20kbit na sekundę<br />

z ograniczeniem do maksymalnie<br />

40kbit na sekundę. Dzięki temu wszelkie<br />

programy typu KaZaA nie będą miały<br />

szans zapchać nam łącza wychodzącego.<br />

Na Listingu 3 podane jest przykładowe<br />

rozwiązanie tego problemu. Zawartość<br />

możemy później dopisać do pliku<br />

rc.htb stworzonego w poprzednich rozdziałach,<br />

dzięki czemu jeden skrypt<br />

będzie odpowiadał za kształtowanie<br />

zarówno ruchu wychodzącego, jak<br />

i przychodzącego.<br />

Zaczynamy od zdefiniowania zmiennych<br />

zawierających wartości poszczególnych<br />

przepustowości. Nazwy SDI, WWW,<br />

FTP i INNE mówią same za siebie. Zmienna<br />

INNE_CEIL odpowiada za górne ograniczenie<br />

pasma dla pozostałego (poza<br />

WWW i FTP) ruchu wychodzącego.<br />

W zmiennej INT_INT zawarta jest nazwa<br />

interfejsu rutera, przez który podłączony<br />

jest do Internetu.<br />

W sekcji 2) kasujemy wszystkie ustawienia<br />

dotyczące kształtowania ruchu na<br />

interfejsie $INT_INT. Nie należy się obawiać<br />

wstawienia tej linii w skrypcie po<br />

stworzeniu regułek dla innego interfejsu.<br />

Polecenie to kasuje ustawienia tylko<br />

i wyłącznie na wskazanym interfejsie.<br />

Polecenie zawarte w sekcji 3) powoduje<br />

ustawienie HTB jako dyscypliny<br />

kolejkowania dla ruchu wychodzącego<br />

do Internetu. Warto zauważyć, że<br />

ponownie użyliśmy uchwytu (handle)<br />

1:0. Jest to możliwe, gdyż uchwyty są<br />

numerowane osobno dla każdego interfejsu.<br />

Tak więc uchwyt 1:0 na interfejsie<br />

eth0 nie ma nic wspólnego z uchwytem<br />

1:0 na interfejsie ppp0.<br />

Dodatkową ciekawostką jest użycie<br />

w tej sekcji opcji default. Wskazuje ona<br />

klasę domyślną, czyli taką, do której kierowany<br />

będzie ruch nie obsłużony przez<br />

filtry – jeśli jakieś pakiety nie zostaną<br />

dopasowane w filtrach, to trafią właśnie<br />

do wskazanej tu klasy. Należy jeszcze<br />

wyjaśnić, w jaki sposób wskazywana<br />

jest klasa domyślna. Użyliśmy tutaj<br />

opcji default 4. Ponieważ została ona<br />

użyta w obiekcie o uchwycie 1:0, więc<br />

46 czerwiec 2004


dhcp i htb<br />

dla początkujących<br />

Listing 4. Zawartość przykładowego<br />

pliku /etc/rchtb/htbusers.conf<br />

NewGroup user1<br />

192.168.100.2 user1_1<br />

192.168.100.3 user1_2<br />

192.168.100.205 user1_3<br />

EndGroup<br />

192.168.100.6 user2<br />

NewGroup user3<br />

192.168.100.8 user3_1<br />

192.168.100.100 user3_2<br />

EndGroup<br />

192.168.100.15 user4<br />

192.168.100.50 user5<br />

192.168.100.200 user6<br />

klasą domyślną będzie klasa o uchwycie<br />

1:4 (numer powstaje przez złożenie<br />

uchwytu obiektu i numeru podanego w<br />

opcji default). Klasa ta zdefiniowana jest<br />

w sekcji 5).<br />

Sekcja 4) to znane nam już polecenie<br />

tworzące główną klasę odpowiedzialną<br />

za przypisanie przepustowości gwarantowanej<br />

i maksymalnej całego łącza do<br />

Internetu.<br />

Następnie w sekcji 5) tworzymy podklasy<br />

odpowiadające za kolejkowanie<br />

ruchu odpowiednich usług.<br />

O tym, jakie pakiety znajdą się w<br />

odpowiednich kolejkach, decydują filtry<br />

zdefiniowane w sekcji 6). Objaśnienie<br />

użytej tu konstrukcji filtru znajduje się<br />

na końcu rozdziału Równi i równiejsi.<br />

Ruch wychodzący z portu numer 80<br />

(a więc WWW ) kierowany jest do klasy<br />

1:2, natomiast wychodzący z portu 20<br />

(FTP) do klasy 1:3. Nie ma filtru kierującego<br />

pakiety do klasy 1:4. Za to właśnie<br />

odpowiada opcja default 4 zawarta<br />

w sekcji 3).<br />

Sekcja 7) kończy skrypt ustawiając<br />

na poszczególnych klasach sprawiedliwy<br />

algorytm kolejkowania SFQ.<br />

Konfigurator podziału<br />

pasma<br />

Jeśli nie mamy ochoty na własnoręczne<br />

wyliczenia i wpisywanie kolejnych regułek,<br />

możemy skorzystać z pomocy konfiguratora.<br />

Michał Łukaszek napisał bardzo<br />

użyteczny skrypt rchtb, który można znaleźć<br />

na stronie http://www.rc.htb.prv.pl/.<br />

W chwili pisania artykułu serwis wciąż<br />

jeszcze odczuwał skutki awarii, lecz sam<br />

skrypt (w najbardziej aktualnej wersji<br />

0.3.3) został udostępniony do pobrania.<br />

Instalacja<br />

Po pobraniu pliku na dysk należy rozpakować<br />

go poleceniem tar xvzf rchtb-<br />

0.3.3.tar.gz. W wyniku zostanie utworzony<br />

katalog rchtb/, a w nim umieszczona<br />

zawartość archiwum. Na początku<br />

należy zapoznać się z plikami README<br />

i INSTALL, w których opisany jest sposób<br />

wykorzystania skryptu oraz możliwe problemy.<br />

Najpierw należy zadbać, aby w systemie<br />

znajdowały się następujące narzędzia:<br />

tree, grep, cut, dialog, ls, where<br />

is, cat (w przypadku Auroksa 9.3 znajdują<br />

się one w pakietach tree-1.4b3-<br />

1.i386.rpm, grep-2.5.1-17.4.i386.rpm,<br />

dialog-0.9b-20031002.1.i386.rpm, coreutils-5.0-24.i386.rpm,<br />

util-linux-2.11y-<br />

29.i386.rpm, znajdujących się na pierwszej,<br />

drugiej i czwartej płytce instalacyjnej).<br />

Jeśli któregoś z tych narzędzi brakuje,<br />

to należy doinstalować odpowiedni<br />

pakiet.<br />

Wskazywanie użytkowników<br />

sieci<br />

Następnym krokiem jest przygotowanie<br />

spisu komputerów, pomiędzy które ma<br />

być dzielone pasmo. Umieszczamy go<br />

w pliku /etc/rchtb/htbusers.conf (w tym<br />

celu powinniśmy pracować z uprawnieniami<br />

administratora). Jego zawartość<br />

odpowiadająca naszemu przykładowi<br />

przedstawiona jest na Listingu 4. Jak<br />

widać, jego składnia jest bardzo prosta.<br />

Pojedynczy komputer opisywany jest<br />

jedną linią składającą się z adresu IP<br />

i odpowiadającej mu nazwy symbolicznej.<br />

Nazwa ta może być taka sama, jak<br />

w pliku /etc/hosts. Jeśli kilka komputerów<br />

ma korzystać ze wspólnego pasma,<br />

to należy je przydzielić do jednej grupy.<br />

Robimy to umieszczając ich wpisy<br />

pomiędzy liniami NewGroup NazwaGrupy<br />

i EndGroup. Pamiętajmy, aby w pliku<br />

/etc/rchtb/htbusers.conf nie umieszczać<br />

wpisu odnoszącego się do samego serwera,<br />

na którym będzie realizowane<br />

dzielenie pasma.<br />

Po stworzeniu odpowiednich wpisów<br />

w pliku /etc/rchtb/htbusers.conf pozostaje<br />

nam uruchomienie właściwego skryptu<br />

konfiguratora. Dokonujemy tego przechodząc<br />

do katalogu rchtb/, w którym<br />

wydajemy polecenie ./rchtb_configure.<br />

Parametry łączy<br />

Pierwsze pytanie dotyczy katalogu,<br />

do którego ma zostać skopiowany<br />

plik rchtb_tc dostarczony w pliku<br />

rchtb-0.3.3.tar.gz. Możemy go użyć<br />

jako zamiennika programu tc pochodzącego<br />

z pakietu iproute2. Jest to<br />

szczególnie użyteczne, gdy posiadamy<br />

starszą wersję pakietu iproute2, nie<br />

wspierającą HTB. Program rchtb_tc<br />

został skompilowany z obsługą HTB,<br />

ESFQ oraz WRR. Najlepiej wybrać zalecaną<br />

lokalizację, czyli katalog /usr/<br />

sbin/.<br />

Kolejną decyzją, którą musimy<br />

podjąć, to wskazanie interfejsu sieciowego<br />

wykorzystywanego do łączenia<br />

z Internetem (w naszym przykładzie<br />

jest to interfejs ppp0). Jeśli na spisie<br />

nie ma jakiegoś interfejsu, należy<br />

opuścić program (dwukrotnie wciskając<br />

klawisz [Esc]), a następnie<br />

podnieść interfejs poleceniem ifup<br />

nazwa_interfejsu. Po wykonaniu tej<br />

czynności można od nowa uruchomić<br />

skrypt.<br />

W analogiczny sposób wskazujemy<br />

interfejs służący do połączenia z siecią<br />

lokalną. W naszym przykładzie jest to<br />

eth0.<br />

Czwarte pytanie dotyczy przepustowości<br />

naszego łącza do Internetu.<br />

Mamy do wyboru kilka standardowych<br />

pozycji, między innymi SDI (które<br />

wybralibyśmy w naszym przykładzie),<br />

kablówkę (w wersji 128/128), Neostradę+,<br />

jak również DSL 1Mbit. Jeśli<br />

żaden z proponowanych wyborów nam<br />

nie odpowiada, możemy wskazać pozycję<br />

Inne łącze, po czym zostaniemy<br />

poproszeni o podanie prędkości downloadu<br />

i uploadu w kilobitach na sekundę.<br />

Analogicznie określamy przepustowość<br />

sieci lokalnej, tym razem<br />

w megabitach na sekundę. Do<br />

wyboru mamy Ethernet (10 Mbit), Fast<br />

Ethernet (100 Mbit) oraz Gigabit Ethernet<br />

(1000 Mbit). Oprócz tego możemy<br />

samodzielnie określić przepustowość<br />

wybierając pozycję Inna przepusowość<br />

W opisywanym przykładzie<br />

właściwym wyborem jest Ethernet 10<br />

Mbit.<br />

Następnie otrzymujemy informację,<br />

jakie wartości parametrów przyjęto<br />

dla poszczególnych interfejsów. Warto<br />

zauważyć, że w przypadku łącza internetowego<br />

wartości uploadu i downloadu<br />

zostały automatycznie nieco zmniejszone<br />

w porównaniu do podanych przez nas<br />

parametrów łącza.<br />

www.lpmagazine.org<br />

47


dla początkujących<br />

Rysunek 5. Poprawne wprowadzenie<br />

danych o komputerach w sieci jest bardzo<br />

ważne<br />

Klasy dla użytkowników<br />

W kolejnym oknie zapoznamy się z graficznym<br />

przedstawieniem zawartości<br />

pliku /etc/rchtb/htbusers.conf. Jeśli coś<br />

się nie zgadza, powinniśmy przerwać<br />

działanie skryptu (podwójnym wciśnięciem<br />

klawisza [Esc]) a następnie poprawić<br />

wpisy w pliku.<br />

Następnie należy wybrać algorytm,<br />

który będzie stosowany do zapewnienia,<br />

że użytkownicy nie „przytkają”<br />

sobie przydzielonego im pasma uruchamiając<br />

np. programy P2P. Do wyboru<br />

mamy SFQ i ESFQ. Ze względu na to,<br />

że zastosowanie ESFQ wymaga nakładania<br />

łaty na jądro, zastosujemy SFQ,<br />

które jest domyślnie wspierane w obecnych<br />

jądrach.<br />

Pozostaje nam wskazanie programu<br />

tc, który pozwala na definiowanie reguł<br />

kontroli ruchu. Możemy spokojnie skorzystać<br />

z domyślnego rchtb_tc, dostarczanego<br />

w pakiecie z rchtb.<br />

Ponieważ skrypt tworzy klasę priorytetową,<br />

do której skierowane zostaną<br />

wybrane pakiety (te z TOS ustawionym<br />

na Minimal Delay) i cały ruch ICMP,<br />

możemy dodatkowo określić jeden port<br />

TCP, z którego ruch trafi do tej klasy.<br />

Domyślnie jest to port 22 wykorzystywany<br />

przez usługę SSH -- dzięki temu nawet<br />

przy znacznym obciążeniu łącza korzystanie<br />

z SSH nadal powinno być komfortowe.<br />

W kolejnym oknie wybieramy minimalną<br />

wartość, jaką mają być znakowane<br />

pakiety użytkowników. Jeśli nie stosujemy<br />

jeszcze żadnego znakowania na zaporze<br />

sieciowej (firewall), to możemy pozostawić<br />

domyślną wartość.<br />

Możemy teraz zapoznać się z dotychczasowymi<br />

wyliczeniami. Dowiemy się,<br />

na ile klas zostanie podzielone pasmo,<br />

oraz jaką gwarantowaną przepustowość<br />

ma każda klasa. Na tym etapie wskazujemy<br />

też, czy skrypt ma dodać osobną<br />

klasę na użytek serwera pośredniczącego<br />

Squid. W naszym przykładzie<br />

nie stosujemy Squida, więc wybieramy<br />

opcję brak.<br />

Ruch wychodzący<br />

Czas określić przepustowość gwarantowaną<br />

dla klientów chcących<br />

połączyć się z naszym serwerem z<br />

Internetu. Wartość tą podajemy jako procent<br />

rozmiaru pasma wychodzącego.<br />

Domyślnie jest to 30%. Jeśli nie<br />

zamierzamy uruchamiać na serwerze<br />

żadnych usług (np. WWW, FTP lub<br />

innych), to możemy wpisać 0. W takim<br />

przypadku klienci z zewnątrz nie<br />

będą mieli gwarantowanej przepustowości.<br />

Podobnie jak w przypadku ruchu<br />

przychodzącego, tworzona jest klasa<br />

priorytetowa. Możemy podać jeden<br />

numer portu TCP, do którego ruch będzie<br />

do niej kierowany. Domyślnie jest to port<br />

SSH, o numerze 22.<br />

Wykorzystanie skryptu<br />

Na tym kończą się pytania zadawane<br />

przez konfigurator. W wyniku jego<br />

działania w katalogu rchtb/ready/ zostały<br />

utworzone dwa pliki: rc.htb oraz<br />

fwmarks.htb. Pierwszy z nich zawiera<br />

skrypt odpowiadający za ustawienie<br />

podziału pasma według naszych<br />

wytycznych. Można umieścić go np. w<br />

katalogu /etc/rc.d/init.d/ (poleceniem cp<br />

rc.htb /etc/rc.d/init.d/) lub w innym<br />

katalogu, gdzie przechowujemy skrypty<br />

startowe. Dzielenie pasma uruchamiamy<br />

wydając polecenie /etc/rc.d/init.d/<br />

rc.htb start, natomiast zatrzymujemy<br />

poleceniem /etc/rc.d/init.d/<br />

rc.htb stop. Wywołanie tego skryptu<br />

można dodać do skryptów startowych.<br />

Należy jednak pamiętać, aby uruchamiany<br />

był on dopiero w momencie,<br />

gdy wszystkie interfejsy sieciowe są już<br />

postawione.<br />

Drugi plik, czyli fwmarks.htb, zawiera<br />

regułki iptables służące do znakowania<br />

poszczególnych pakietów. Regułki<br />

te są konieczne do poprawnego funkcjonowania<br />

niektórych filtrów zdefiniowanych<br />

w pliku rc.htb. Również<br />

jego można skopiować do katalogu<br />

/etc/rc.d/init.d/ i uruchamiać poleceniem<br />

/etc/rc.d/init.d/fwmarks.htb<br />

start (do zatrzymania służy parametr<br />

stop).<br />

Zakończenie<br />

W ten sposób dotarliśmy do końca.<br />

Mam nadzieję, że korzystając z powyższych<br />

wskazówek, każdy Czytelnik<br />

będzie w stanie skonfigurować u siebie<br />

podstawowy serwer DHCP oraz kształtować<br />

ruch sieciowy według swoich<br />

potrzeb. Gorąco zachęcam do lektury<br />

materiałów dostępnych w sieci i głębszego<br />

poznawania przedstawionych tu<br />

narzędzi.<br />

W Internecie:<br />

• DHCP mini-HOWTO:<br />

http://www.tldp.org/HOWTO/DHCP/<br />

index.html<br />

• Konfiguracja demona DHCP:<br />

http://www.baseciq.org/linux/dhcp/<br />

• DHCP + ARP:<br />

http://linux.insurgents.net/artykuly/<br />

dhcp_arp.htm<br />

• DHCP – opis protokołu i konfiguracja<br />

serwera pod Linuksem:<br />

http://www.pckurier.pl/archiwum/<br />

art0.asp?ID=707<br />

• Strona domowa HTB:<br />

http://luxik.cdi.cz/~devik/qos/htb/<br />

• Podręcznik użytkownika HTB:<br />

http://luxik.cdi.cz/~devik/qos/htb/<br />

manual/userg.htm<br />

• Opis teorii działania HTB:<br />

http://luxik.cdi.cz/~devik/qos/htb/<br />

manual/theory.htm<br />

• Kilka interesujących dokumentów<br />

o kształtowaniu ruchu:<br />

http://www.docum.org/<br />

• Kształtowanie Ruchu<br />

i Zaawansowany Routing HOWTO:<br />

http://lukasz.bromirski.net/docs/<br />

translations/lartc-pl.html<br />

• Zaawansowany routing IP w Linuksie:<br />

http://echelon.pl/pubs/NET4.pdf<br />

• Sterowanie przepływem danych w<br />

Linuksie:<br />

http://echelon.pl/pubs/NET4_tc.pdf<br />

• HTB – strażnik trafficu:<br />

http://linio.terramail.pl/htb.html<br />

• Kompilacja kernela 2.4.24 z iptables<br />

i iproute2 + HTB:<br />

http://newbie.linux.pl/wydruk.php?<br />

wydruk=170&show=artykul<br />

• HTB w Debianie "Woody"<br />

z Neostradą+:<br />

http://www.debianusers.pl/article.<br />

php?aid=54&top10=1<br />

• Strona domowa skryptu rc.htb:<br />

http://www.rc.htb.prv.pl/<br />

• Skrypty HTB + iptables:<br />

http://endemic.org/htb/<br />

48 czerwiec 2004


sprzęt<br />

Zarządzanie<br />

energią w Linuksie,<br />

część pierwsza<br />

Piotr Wolny<br />

Na płycie CD/DVD<br />

Na płycie CD/DVD znajdują<br />

się pliki źródłowe najnowszych<br />

jąder Linux, jak również łatki na<br />

jądro związane z zarządzaniem<br />

energią.<br />

O autorze<br />

Autor jest politologiem i pracuje<br />

dla www.wzz.org.pl. Linuksem<br />

zajmuje się mniej więcej od<br />

czasów jądra 2.0.20. Kontakt<br />

z autorem: autorzy@linux.com.pl.<br />

Linux od niemal pierwszych<br />

swoich wersji wspiera technologie<br />

zarządzania energią (ang.<br />

power management). Określenie<br />

"zarządzanie energią" może być jednak<br />

nieco mylące, gdyż współcześnie rozwijana<br />

technologia ACPI umożliwia znacznie<br />

więcej niż tylko oszczędzanie energii<br />

elektrycznej. Dzięki wsparciu w Linuksie<br />

dla ACPI możliwy jest również dostęp<br />

z poziomu systemu operacyjnego do konfiguracji<br />

i odczytywania stanu niektórych<br />

urządzeń komputera. W szczególności<br />

dotyczy to stanu zasilania (baterie lub<br />

sieć), poziomu naładowania baterii czy<br />

temperatury procesora. Możliwe jest również<br />

zmniejszenie ilości zużywanej przez<br />

komputer energii elektrycznej poprzez<br />

wprowadzenie go w stan „uśpienia”,<br />

a nawet „hibernacji”, czyli wyłączenia go<br />

w trakcie pracy z nagraniem całej pamięci<br />

na dysku, tak aby było możliwe ponowne<br />

uruchomienie go w tym samym stanie.<br />

Właśnie tymi zagadnieniami zajmiemy się<br />

w tym miesiącu.<br />

ACPI oraz pozostały kod służący „usypianiu”<br />

komputera w Linuksie rozwija się<br />

bardzo szybko. W ostatnich miesiącach<br />

każda wersja jądra zawierała tysiące zmienionych<br />

i dopisanych linii kodu odpowiedzialnego<br />

za tę funkcjonalność. Pomimo<br />

tego, kod ten jest wciąż daleki od doskonałości.<br />

Wielu użytkowników doświadcza<br />

bardzo dziwnych i nieprzewidywalnych<br />

problemów po uaktywnieniu ACPI,<br />

np. z nie działającymi modemami itp.<br />

Z tego powodu twórcy dystrybucji Linuksa<br />

często domyślnie wyłączają obsługę<br />

ACPI w jądrze. Warto również zabawę<br />

z ACPI zaczynać na najnowszej wersji<br />

jądra i to z serii 2.6.x.<br />

Usypianie komputera przydaje się nie<br />

tylko na maszynach zasilanych z baterii.<br />

Na komputerze stacjonarnym jest to dobra<br />

metoda na przyśpieszenie startu systemu<br />

poprzez np. załadowanie obrazu pamięci<br />

z dysku, które trwa znacznie krócej<br />

niż cały proces normalnego startu. Tryb<br />

S4 może się przydać nawet na serwerach<br />

czy ruterach. Dzięki niemu można szybko<br />

wyłączyć komputer z sieci, aby np. włożyć<br />

nowy dysk i uruchomić go w dokładnie<br />

takim samym stanie, jak przed zamknięciem.<br />

Jeśli zrobimy to szybko, możemy<br />

nawet nie zerwać połączeń TCP/IP.<br />

Usypianie w praktyce<br />

Jeśli dysponujemy Linuksem z nowym<br />

jądrem z serii 2.6.x, mamy do wyboru<br />

Rysunek 1. Strona domowa projektu<br />

Swsusp2, dostarczającego łatki na jądra<br />

Linuksa z funkcjonalnością hibernowania<br />

komputera<br />

50 czerwiec 2004


acpi<br />

sprzęt<br />

Hibernacja i usypianie<br />

W teorii, czyli w specyfikacji ACPI, występuje<br />

aż pięć trybów uśpienia komputera:<br />

• S1 - odpowiednik znanego z MS Windows<br />

standby. W tym stanie zasilanie<br />

procesora jest utrzymywane,<br />

jednak procesor nie wykonuje żadnych<br />

instrukcji;<br />

• S2 - aktualnienie używany, w teorii<br />

podobny do S3, jednak z utrzymaniem<br />

zasilania niektórych urządzeń;<br />

• S3 - "Suspend to RAM " - zasilanie<br />

procesora jest odcięte, zasilanie<br />

pamięci ograniczone jest jedynie do<br />

samo-odświeżania, które gwarantuje<br />

utrzymanie jej zawartości. Technicznie<br />

jest to najtrudniejszy do uzyskania<br />

stan, gdyż wymaga współpracy<br />

procesora, chipsetu, urządzeń i ich<br />

sterowników oraz systemu operacyjnego;<br />

• S4 - "Suspend to Disk" - najciekawszy<br />

z tych trybów, równocześnie<br />

działający najstabilniej. W tym<br />

trybie cała zawartość pamięci jest<br />

nagrywana na dysk (na ogół na partycję<br />

swap) i komputer może zostać<br />

zupełnie wyłączony bądź używany<br />

do innych celów (np. możemy uruchomić<br />

inny system operacyjny, pod<br />

warunkiem, że nie korzysta on z tej<br />

samej partycji swap);<br />

• S5 - "Soft Off " - system jest zamykany,<br />

jednak utrzymywane jest zasilanie<br />

niektórych urządzeń, które mogą<br />

spowodować "obudzenie" systemu,<br />

np. karta sieciowa czy kontroler<br />

USB.<br />

trzy implementacje mechanizmu usypiania<br />

komputera.<br />

Starsze rozwiązanie, nazywane<br />

Swsusp przy konfiguracji jądra, znajdziemy<br />

w dziale Power management<br />

options->Software Suspend (Experimental).<br />

Musimy je zaznaczyć, podobnie<br />

jak znajdujące się poniżej opcje ACPI.<br />

Ponadto nie powinniśmy zaznaczać<br />

APM, natomiast koniecznie potrzebujemy<br />

wsparcia w jądrze dla partycji<br />

wymiany.<br />

Nowsze rozwiązanie, nazywane<br />

Pmdisk, znajdziemy również w dziale<br />

Power management options pod nazwą<br />

Suspend-to-disk support. Od starszego różni<br />

się ono m.in. tym, że nie wymaga zaznaczania<br />

opcji ACPI – działa niezależnie od<br />

tego systemu.<br />

W kolejnych wersjach jądra najprawdopodobniej<br />

zostanie tylko jedno z tych<br />

rozwiązań – to, które zostanie lepiej ocenione<br />

przez deweloperów i użytkowników.<br />

Nam nie zaszkodzi zaznaczyć<br />

obydwu z nich i przetestować, aby wybrać<br />

to, które będzie lepiej działać na naszym<br />

sprzęcie.<br />

Pod adresem http://swsusp.sf.net/<br />

możemy znaleźć najbardziej rozwinięte<br />

rozwiązanie, tyle że rozwijanie niezależnie<br />

od jądra, nazywane Swsusp2. Pozwala<br />

ono wyłącznie na używanie trybu "Suspend<br />

to disk", a jego instalacja jest znacznie<br />

trudniejsza, więc przyjrzymy się jej<br />

później.<br />

Swsusp i Pmdisk<br />

Do pierwszych testów "usypiania" komputera<br />

zaopatrzmy się w nowe jądro z serii<br />

2.6.x i skompilujmy je ze wsparciem dla<br />

Software Suspend, Suspend-to-disk support<br />

oraz ACPI.<br />

Przy wyborze opcji dotyczących ACPI<br />

kompiluję wszystkie na stałe, nie jako<br />

moduły. Nie zaszkodzi, jeśli wybierzemy<br />

wszystkie dostępne w tym dziale opcje,<br />

chociaż w przypadku komputerów stacjonarnych<br />

większość z nich raczej nam<br />

się nie przyda. Zawsze warto zaznaczyć<br />

przynajmniej "Button". Przy konfiguracji<br />

jądra nie zaznaczamy opcji dotyczących<br />

APM, gdyż te dwa rozwiązania nie działają<br />

równocześnie.<br />

Poza skompilowanym i zainstalowanym<br />

jądrem będziemy również potrzebować<br />

partycji wymiany (swap) na tyle dużej,<br />

aby zmieściła się na niej cała pamięć używana<br />

przez system operacyjny i aplikacje.<br />

Na ogół przyjmuje się, że wystarczy<br />

do tego celu partycja wymiany o rozmiarze<br />

130% pamięci fizycznej. Jeśli jednak<br />

uruchamiamy bardzo wiele aplikacji równocześnie,<br />

ta wartość może okazać się za<br />

mała.<br />

Po uruchomieniu nowego jądra<br />

sprawdźmy, czy wszystko działa –<br />

w naszym systemie powinien być katalog<br />

/proc/acpi/ oraz plik /sys/power/state. Jeśli<br />

nie mamy /proc/acpi/, sprawdźmy, czy<br />

ACPI zostało uaktywnione w BIOS-ie<br />

komputera. Jeśli jądro przy starcie nic nie<br />

wspomina o ACPI (dmesg | grep -i acpi<br />

nie pokazuje żadnej linii), oznacza to, że<br />

nasze jądro nie zostało skompilowane ze<br />

wsparciem dla ACPI. Możemy również<br />

sprawdzić, czy w lilo.conf lub grub.conf nie<br />

ma linii acpi=off lub acpi=ht - jeśli taki wpis<br />

tam się znajduje, oczywiście usuwamy<br />

go. Zamiast niego możemy wpisać append="acpi=on<br />

apm=off" (jeśli prawidłowo<br />

samodzielnie skonfigurowaliśmy jądro,<br />

nie jest to niezbędne).<br />

Swsusp<br />

Przetestujmy najpierw tradycyjną<br />

metodę usypiania, czyli Swsusp. Testowanie<br />

dobrze jest rozpocząć od trybu<br />

działającego najstabilniej, czyli "suspend<br />

to disk". Pierwszym krokiem musi być<br />

poinformowanie jądra, gdzie jest partycja<br />

wymiany (swap), na którą ma zostać<br />

nagrany zrzut pamięci przy "zasypianiu".<br />

Musimy to zrobić dodając odpowiednią<br />

linię, np. append="resume=/dev/hda9",<br />

do /etc/lilo.conf, np. pod linią określającą<br />

położenie jądra naszego Linuksa. Jeśli<br />

w tej sekcji lilo.conf, opisującej jądro<br />

naszego Linuksa, jest już linia append,<br />

to resume=... dopisujemy do istniejących<br />

opcji, wewnątrz cudzysłowu. Jeśli używamy<br />

GRUB-a, to opcje przekazywane do<br />

jądra znajdują się w tej samej linii, co nazwa<br />

pliku z jądrem. Również wtedy musimy<br />

dopisać odpowiednią opcję, np. "resume=<br />

/dev/hda9". Pamiętajmy oczywiście o zamianie<br />

przykładowego hda9 na właściwe<br />

oznaczenie partycji swap. Po dopisaniu<br />

opcji i uruchomieniu komendy<br />

lilo lub grub, musimy zrestartować<br />

Linuksa.<br />

Nadszedł czas na decydującą próbę<br />

(najlepiej zapiszmy wszystkie ważne<br />

dane) – wydajemy magiczne polecenie<br />

echo 4 >/proc/acpi/sleep. W ten sposób<br />

posłaliśmy komputer spać, a konkretnie<br />

w czwarty tryb uśpienia, ale najpierw<br />

jeszcze przez kilkanaście do kilkudziesięciu<br />

sekund oglądamy komunikaty<br />

o wyłączaniu poszczególnych urządzeń.<br />

Jeśli jakieś urządzenie sprawia problemy,<br />

to właśnie teraz można o tym przeczytać.<br />

Na koniec tego procesu komputer oczy-<br />

Rysunek 2. Strona domowa projektu ACPI<br />

dla Linuksa<br />

www.lpmagazine.org<br />

51


sprzęt<br />

Rysunek 3. Jądra z serii 2.6.x oryginalnie<br />

dostarczają dwie metody usypiania<br />

komputerów, ale po nałożeniu łatek mamy<br />

do wyboru trzy<br />

wiście wyłącza się. Przy ponownym uruchomieniu<br />

trzeba odczekać kilka sekund<br />

na zwykłe uruchomienie BIOS-a, a także<br />

Lilo/GRUB-a, gdzie po wybraniu wcześniej<br />

uśpionego Linuksa musimy zaczekać<br />

jeszcze kilka sekund na uruchomienie<br />

się jądra systemu. Jądro jednak, zamiast<br />

jak zwykle uruchamiać Inita, przystępuje<br />

do odzyskiwania wcześniej nagranego<br />

stanu i po kolejnych 15 sekundach<br />

system jest całkowicie przywrócony. Nie<br />

ma nawet potrzeby zapisywania danych<br />

w edytorze tekstu – wszystko samo<br />

wraca do dokładnie takiego samego<br />

stanu jak przed uśpieniem. W ten sposób<br />

start Linuksa, wraz z KDE, Open-<br />

Office.org i kilkunastoma innymi programami,<br />

zabiera ok. 30 sekund.<br />

Zdarza się jednak, że komputer nie<br />

chce zasnąć (wtedy możemy spróbować<br />

innych rozwiązań, o których dalej) lub<br />

nie chce się obudzić. W tym przypadku<br />

zaś musimy uruchomić jądro z parametrem<br />

noresume. Można to zrobić wpisując<br />

np. linux noresume po znaku zachęty<br />

Lilo (jeśli Lilo uruchamia się z graficznym<br />

menu musimy najpierw nacisnąć klawisz<br />

[Tab]).<br />

Pozostałe stany uśpienia możemy<br />

przetestować podobnie. Komenda cat<br />

/proc/acpi/sleep pokaże nam tryby obsługiwane<br />

przez nasz system, np. S0 S1 S4 S5.<br />

Możemy wydać komendę echo 1 >/proc/<br />

acpi/sleep, aby przejść do trybu S1 itp.<br />

Pmdisk<br />

Niezależnie od tego, czy testy Swsusp przebiegły<br />

pomyślnie, czy też nie, przetestujmy<br />

teraz nowszą metodę usypiania, czyli<br />

Pmdisk. Działa ona identycznie, ale różni<br />

się wydawanymi poleceniami. Zamiast<br />

resume=/dev/hda9 w konfiguracji lilo/GRUB<br />

musimy wpisać pmdisk=/dev/hda9.<br />

Źródła jądra<br />

Centralny punkt rozpowszechniania źródeł<br />

Linuksa znajdziemy pod adresem www.kernel.org.<br />

Zanim zdecydujemy się cokolwiek<br />

stamtąd ściągnąć, znajdźmy jakiś serwer<br />

lustrzany (ang. mirror) bliżej nas. W ten<br />

sposób pomożemy sobie (skracając czas<br />

ściągania<br />

kilkudziesięciomegabajtowego<br />

pliku) oraz administratorom głównego serwera,<br />

zmniejszając na nim obciążenie.<br />

Strona www.kernel.org dobrze nadaje się do<br />

zorientowania, jaka jest najnowsza dostępna<br />

wersja jądra. No i właśnie: którą wybrać?<br />

Na www.kernel.org dostajemy następujący<br />

wybór:<br />

• jądra z serii 2.6.x - oznaczone są jako<br />

„najnowsze stabilne”, ale wybieramy<br />

je tylko, gdy nasza dystrybucja oryginalnie<br />

jest dostarczana z jądrem 2.6.x<br />

(np. Mandrake 10 i nowsze, Fedora<br />

Core 2) lub przynajmniej została przystosowana<br />

do pracy z jądrami z tej serii,<br />

jak np. Mandrake 9. Jeśli już koniecznie<br />

chcemy ściągać jądro ze strony<br />

www.kernel.org, musimy kliknąć na<br />

odnośnik oznaczony literą „F”;<br />

• jądra z serii 2.4.x - są to bardziej stabilne<br />

jądra o nieco mniejszych możliwościach,<br />

które są podstawą budowania<br />

większości dzisiejszych dystrybucji,<br />

np. Aurox Linux 9.4. Podobnie jak wyżej,<br />

w celu ściągnięcia źródeł musimy kliknąć<br />

na „F”;<br />

• jądra z serii 2.2.x oraz 2.0.x - starsze<br />

wersje jąder i nieco przestarzałe, aby<br />

używać je na dzisiejszym sprzęcie;<br />

mogą przydać się jedynie przy „specjalnych”<br />

zastosowaniach, jak. np. budowa<br />

prostego rutera.<br />

Dodatkowo, dla bardziej zaawansowanych<br />

użytkowników, strona www.kernel.org<br />

zapewnia różne łatki (ang. patches) na<br />

źródła jądra, w tym wersje jądra pre, które po<br />

pewnym okresie testów i poprawek stają się<br />

kolejnymi wersjami stabilnymi, wersje snapshot,<br />

zawierające uaktualniany codziennie<br />

zapis pracy deweloperów jądra, oraz łatki<br />

-mm , czyli Andrew Mortona, zawierające<br />

najnowszy i najmniej przetestowany kod.<br />

Zapewne niedługo na www.kernel.org znajdziemy<br />

również jądra z kolejnej serii „eksperymentalnej”,<br />

czyli 2.7.x.<br />

Jeśli decydujemy się na kompilację<br />

jądra po raz pierwszy, najlepiej nie korzystajmy<br />

z www.kernel.org, a użyjmy źródeł<br />

dostarczanych przez naszą dystrybucję.<br />

Są one z reguły nieco zmodyfikowane<br />

w stosunku do oryginalnych, najczęściej<br />

poprzez nałożenie różnych nowych łatek,<br />

które nie były jeszcze „oficjalnie” przyjęte.<br />

Zawierają one również gotowy plik konfiguracyjny,<br />

dostosowany do naszej dystrybucji.<br />

Jest to więc najlepszy wybór dla<br />

początkującego użytkownika. Źródła jądra<br />

znajdziemy wśród pakietów binarnych (!)<br />

naszej dystrybucji. Będzie to pakiet zawierający<br />

w nazwie kernel source, np. kernelsource-2.4.20-20.9.i386.rpm.<br />

Jeśli nasza<br />

dystrybucja zawiera kilka wersji źródeł<br />

jądra, wybieramy tę, której aktualnie używamy<br />

– możemy to sprawdzić poleceniem<br />

cat /proc/version. Wybrany pakiet instalujemy<br />

jak każdy inny, np. poleceniem rpm -i<br />

[nazwa pliku].<br />

Wybór źródeł dostarczanych przez<br />

naszą dystrybucję, oprócz zalet, ma też<br />

swoje wady. Pierwszą z nich jest fakt, iż<br />

z reguły www.kernel.org zawiera nowszą<br />

wersję źródeł niż nasza dystrybucja. Ma<br />

to jednak znaczenie tylko wtedy, gdy ta<br />

nowa wersja przynosi jakieś istotne dla<br />

nas zmiany. Druga wada może ujawnić<br />

się wtedy, gdy jakieś oprogramowanie<br />

wymaga nałożenia łatek na źródła jądra<br />

i ponowną jego kompilację (np. lm_sensors).<br />

Niestety, twórcy różnych programów, które<br />

wymagają „łatania” jądra, z reguły zakładają,<br />

że korzystamy z „oryginalnych” jąder<br />

z www.kernel.org i ich łatki mogą nie nałożyć<br />

się lub nie działać na jądrach zmodyfikowanych<br />

przez twórców różnych dystrybucji.<br />

Jeśli jednak nie zamierzamy w przyszłości<br />

„łatać” naszego jądra, nie będzie<br />

nam to przeszkadzać.<br />

Po zainstalowaniu pakietu ze źródłami<br />

jądra, w systemie znajdziemy katalog<br />

/usr/src/linux, a w nim kilkadziesiąt (w przypadku<br />

jąder 2.4.x) do prawie dwustu (jądra<br />

2.6.x) megabajtów kodu. Jeśli ściągamy plik<br />

z jądrem samodzielnie, powinniśmy umieścić<br />

go w katalogu /usr/src/, rozpakować np. poleceniem<br />

tar jxfvp linux-2.4.26.tar.bz2,<br />

a następnie utworzyć dowiązanie symboliczne<br />

nowopowstałego katalogu do<br />

/usr/src/linux, np. ln -s linux-2.4.26<br />

linux. Źródła jądra możemy umieścić<br />

w innym katalogu, jednakże może to spowodować<br />

problemy w przyszłości, przy kompilacji<br />

niektórych programów, które domyślnie<br />

zakładają, że źródła te znajdują się właśnie<br />

w /usr/src/linux.<br />

52 czerwiec 2004


acpi<br />

sprzęt<br />

Listing 1: Przykładowy skrypt<br />

„usypiający” komputer<br />

#!/bin/sh<br />

rmmod usblp usb-storage hid;<br />

rmmod ohci-hcd;<br />

rmmod usbcore;<br />

# Suspend to RAM<br />

echo -n "mem" > /sys/power/state;<br />

modprobe usbcore;<br />

modprobe ohci-hcd;<br />

modprobe usblp usb-storage hid;<br />

exit 0;<br />

Nie zapomnijmy oczywiście o zrestartowaniu<br />

komputera. Listę wspieranych<br />

trybów uśpienia uzyskamy komendą cat<br />

/sys/power/state – będą to np. standby<br />

mem disk, które są równoważne z odpowiednio<br />

S1, S3 i S4 (jeśli ustawienia BIOSu<br />

komputera nie modyfikują tej zasady).<br />

Magiczne polecenie usypiające naszą<br />

maszynę będzie wyglądało np. tak: echo<br />

-n disk > /sys/power/state. Zwróćmy<br />

uwagę na opcję -n polecenia echo – bez niej<br />

na pewno nie zadziała. Podobnie testujemy<br />

pozostałe dostępne tryby. W przypadku<br />

problemów z uruchomieniem komputera,<br />

zamiast linux noresume po znaku<br />

zachęty LILO, używamy linux pmdisk=off.<br />

Niestety nie wszystkie tryby działają<br />

dobrze na każdym sprzęcie. Na moim<br />

komputerze, gdzie brak już wolnych<br />

slotów PCI ani gniazd USB czy portów szeregowych,<br />

w pełni dobrze działało polecenie<br />

echo -n disk > /sys/power/state,<br />

czyli usypianie "na dysk". Po wydaniu<br />

odpowiedniej komendy, system potrzebuje<br />

ok. 15 sekund na zapisanie swojego<br />

stanu (przy 512 MB pamięci). Po wydaniu<br />

polecenia echo 4 >/proc/acpi/sleep<br />

system "zasypiał" dłużej i zdarzały się problemy<br />

z działaniem myszki po jego obudzeniu.<br />

Po przywróceniu systemu z dysku,<br />

trzeba zawsze poprawić systemowy<br />

czas i datę, ponieważ system "budzi" się<br />

z datą i czasem zapamiętanym przy "zasypianiu".<br />

Aby zsynchronizować czas<br />

systemowy do czasu z zegara na płycie<br />

głównej, wydajemy polecenie hwclock<br />

--hctosys.<br />

Nie działa za to u mnie tryb S3<br />

– "Suspend to RAM". Spowodowane to jest<br />

posiadanym przeze mnie kontrolerem<br />

SATA SiI3112, którego linuksowy sterownik<br />

nie obsługuje "usypiania". Inni użytkownicy<br />

również często zgłaszają problemy<br />

z tym trybem na różnym innym<br />

sprzęcie, w tym na komputerach przenośnych,<br />

jednak mimo to u większości użytkowników<br />

powinien on działać.<br />

Problemy również występują u mnie<br />

z trybem S1. Po komendzie echo -n mem<br />

> /sys/power/state najpierw komputer<br />

co prawda przechodził do niego, jednak<br />

natychmiast budził się. Po zmianie ustawień<br />

w BIOS-ie (wyłączeniu tam zdarzeń<br />

"budzących" komputer), udało się go<br />

uśpić, jednak po przebudzeniu nie działały<br />

prawidłowo klawiatura i myszka<br />

PS/2. Komenda echo 3 >/proc/acpi/sleep<br />

działa dobrze z jednym wyjątkiem – nie<br />

wyłącza monitora. Wszystkie te problemy<br />

dotyczą jednak maszyny wyposażonej<br />

w bardzo wiele różnych kart PCI, niekoniecznie<br />

wykonanych przez renomowanych<br />

producentów.<br />

Swsusp2<br />

Dwa opisane powyżej mechanizmy usypiania<br />

komputera są zawarte w standardowym<br />

jądrze. Trzecie z nich, czyli<br />

swsup2, wymaga nałożenia łatek na źródła<br />

jądra. W zamian za to oferuje znacznie<br />

więcej możliwości. Spośród najważniejszych<br />

trzeba wymienić:<br />

• wygodny plik konfiguracyjny oraz<br />

gotowy zaawansowany skrypt do<br />

usypiania systemu, dzięki którym<br />

możemy ominąć problemy z niekompatybilnym<br />

sprzętem i programami;<br />

• możliwość kompresji "w locie" zapisywanego<br />

obrazu pamięci;<br />

• teoretyczna możliwość zapisywania<br />

obrazu pamięci nie tylko na partycję<br />

wymiany, ale również do pliku<br />

wymiany (swap file) – w momencie<br />

pisania tego artykułu (kwiecień 2004),<br />

obsługa swap file nie działała;<br />

• Swsup2 jest rozwijany również<br />

w wersji dla jąder z serii 2.4.x.<br />

Instalacja Swsusp2 nie jest trudna, gdy<br />

potrafimy samodzielnie skompilować<br />

jądro Linuksa. Można ją przeprowadzić<br />

następująco:<br />

• Ściągamy z http://swsusp.sourceforge.<br />

net/ najnowsze łaty dla jąder 2.6.x.<br />

Gdy pisałem ten artykuł, były to<br />

pliki software-suspend-linux-2.6.2-<br />

rev1-whole.bz2 oraz software-suspendcore-2.0-whole.bz2.<br />

Pierwszy z tych<br />

plików zawiera zmiany specyficzne<br />

dla konkretnej wersji jądra, dlatego<br />

jego nowsze wersje pojawiają się częściej<br />

(choć z pewnym opóźnieniem<br />

w stosunku do samych jąder), drugi<br />

zaś jest uaktualniany rzadziej. Ściągamy<br />

również jądro w tej samej<br />

wersji, którą oznaczona jest pierwsza<br />

z łatek – w tym przypadku 2.6.2.<br />

Instalacja dla jąder z serii 2.4.x wygląda<br />

analogicznie.<br />

• Rozpakowujemy łatki (bunzip2 [nazwa<br />

pliku]) oraz jądro (tar jxfvp linux-<br />

Rysunek 4. W jądrach z serii 2.4.x również znajdziemy obsługę APM oraz ACPI<br />

www.lpmagazine.org<br />

53


sprzęt<br />

Konfiguracja źródeł jądra<br />

Ten etap wielu użytkownikom wydaje się<br />

skomplikowany, choć wcale nie musi taki<br />

być. Konfigurację w praktyce przeprowadzamy<br />

przechodząc do katalogu /usr/src/<br />

linux i wydając jedno z poniższych poleceń:<br />

• make menuconfig - ukaże się nam tekstowe<br />

menu, które do działania wymaga<br />

bibliotek Ncurses (również pakietów<br />

–dev(el)). Jeśli po wydaniu tego polecenia<br />

zobaczymy błąd, musimy doinstalować<br />

te biblioteki z płyty z naszą dystrybucją.<br />

Ta metoda nie wymaga X Window<br />

i możemy ją przeprowadzać również<br />

zdalnie, np. przez ssh.<br />

• make xconfig - ukaże się nam menu<br />

w okienkach X Window. Ta metoda<br />

wymaga zainstalowanych bibliotek<br />

Tcl/Tk (w przypadku jąder 2.4.x) lub<br />

QT (w przypadku jąder 2.6.x). Aby<br />

okienka mogły pojawić się na ekranie<br />

w niektórych dystrybucjach, konieczne<br />

jest wcześniejsze wydanie komendy<br />

xhost + z konta tego użytkownika,<br />

który pracuje w X Window.<br />

• make bconfig - działa tylko w jądrach<br />

z serii 2.6.x i wymaga bibliotek<br />

GNOME.<br />

Niezależnie od tego, który z tych interfejsów<br />

uruchomiliśmy, przy rozpoczęciu swojej<br />

pracy przeczyta on ustawienia zapisane<br />

w pliku o nazwie /usr/src/linux/.config. Dobrze<br />

jest, jeśli plik .config pochodzi z pakietu<br />

z naszej dystrybucji, gdyż wtedy wiadomo na<br />

pewno, że zawiera on prawidłowe ustawienia.<br />

W takim przypadku możemy po uruchomieniu<br />

np. make xconfig skoncentrować<br />

się na wykonaniu tylko tych zmian w konfiguracji<br />

jądra, które są nam teraz potrzebne,<br />

np. włączenia obsługi ACPI.<br />

2.6.2.tar.bz2) i nakładamy łatki.<br />

Ważne, aby w pierwszej kolejności<br />

nałożyć łatkę specyficzną dla wersji<br />

jądra: cd linux-2.6.2; patch -p1<br />

terem.<br />

/proc/acpi/alarm,<br />

aby spowodować obudzenie się komputera<br />

1 maja tego roku, o godzinie trzynastej<br />

jeden. Budzenie powinno działać<br />

z trybów S1, S2 i S3.<br />

Problemy z zaśnięciem<br />

Najtrudniejszym do uzyskania trybem<br />

"uśpienia" komputera jest S3, czyli "Suspend<br />

to RAM". Równocześnie, zwłaszcza<br />

dla posiadaczy komputerów przenośnych,<br />

jest to tryb najbardziej pożądany,<br />

gdyż oferuje on najszybsze<br />

"uśpienie" i przywrócenie systemu.<br />

Dodatkowo, w przypadku "Suspend<br />

to RAM" komputer do zaśnięcia<br />

nie potrzebuje dodatkowej energii,<br />

Kompilacja jądra<br />

To zadanie jest przeznaczone bardziej<br />

dla naszego procesora niż dla nas.<br />

W przypadku jąder z serii 2.4.x wystarczy<br />

polecenie make bzImage (wielkość<br />

liter ma znaczenie!), a po zakończeniu<br />

jego działania – polecenie make modules.<br />

W jądrach z serii 2.6.x wszystko co<br />

potrzebujemy to polecenie make, oczywiście<br />

wydane w katalogu /usr/src/linux.<br />

54 czerwiec 2004


acpi<br />

sprzęt<br />

APM oraz ACPI<br />

Zaawansowane zarządzanie energią,<br />

czyli Advanced Power Management<br />

(APM), to starsza technologia, obecnie<br />

sukcesywnie wypierana przez Advanced<br />

Configuration and Power Interface<br />

(ACPI). APM służyło do oszczędzania<br />

energii elektrycznej przy pomocy szeregu<br />

różnych technik realizowanych na<br />

poziomie sprzętowym, bez udziału systemu<br />

operacyjnego. ACPI działa głównie<br />

na poziomie systemu operacyjnego,<br />

dzięki czemu nie tylko nie dotyczą<br />

go ograniczenia pamięci BIOS-u, ale<br />

również możliwe jest bardziej inteligentne<br />

i uniwersalne zarządzanie energią,<br />

np. aplikacja wyświetlająca prezentację<br />

może przekazać sprzętowi informację,<br />

iż monitor jest potrzebny i nie należy<br />

go wyłączać, czy też system operacyjny<br />

może zdecydować, iż procesor w danym<br />

momencie może zostać spowolniony.<br />

W jądrach Linuksa w serii 2.4.x, jak<br />

i 2.6.x, znajdziemy wsparcie zarówno dla<br />

APM, jak i ACPI. Należy jednak pamiętać,<br />

że te dwa systemy wykluczają się<br />

wzajemnie – w danej chwili możemy<br />

używać tylko jednego z nich.<br />

która w przypadku "Suspend to disk"<br />

jest niezbędna dla nagrania pamięci<br />

na twardy dysk. Ilość pobieranego prądu<br />

w czasie przebywania komputera w „S3”<br />

jest naprawdę znikoma – naładowana<br />

bateria powinna wystarczyć na kilkudniowy<br />

sen.<br />

Nie ma uniwersalnego przepisu gwarantującego<br />

udane przejście z i do trybu<br />

S3 na każdym komputerze. Jeśli bardzo<br />

zależy nam na działaniu tego trybu,<br />

możemy spróbować postąpić w następujący<br />

sposób:<br />

• Wyłączamy wszystkie usługi (demony),<br />

najlepiej przechodząc do "single<br />

mode" poleceniem init 1. Potem odłączamy<br />

zewnętrzny sprzęt i usuwamy<br />

tak wiele modułów jądra, jak to tylko<br />

możliwe. Listę załadowanych modułów<br />

uzyskamy poleceniem lsmod.<br />

Jako pierwsze powinniśmy usuwać<br />

te, które w trzeciej kolumnie raportu<br />

lsmod mają "0", czyli nie są używane<br />

przez inne moduły. Poszczególne<br />

moduły możemy usunąć komendą<br />

modprobe -r [nazwa modułu].<br />

• Próbujemy uśpić system poleceniem<br />

echo -n mem > /sys/power/state<br />

lub echo 3 >/proc/acpi/sleep. Jeśli<br />

żadna z metod nie zadziała, próbujemy<br />

zmieniać ustawienia BIOS-u komputera.<br />

Płyty główne posiadają często<br />

bardzo dziwne opcje dotyczące zarządzania<br />

energią – może okazać się, że to<br />

jest przyczyną problemu. Jeśli nic nie<br />

pomaga, pozostaje nam tylko czekać<br />

na nowe wersje jądra Linuksa – być<br />

może one przyniosą poprawki umożliwiające<br />

działanie "Suspend to RAM".<br />

• Jeśli któraś z powyższych metod prawidłowo<br />

"uśpiła" i przebudziła nasz<br />

komputer, ładujemy kolejne moduły<br />

jądra, uruchamiamy kolejne demony<br />

za każdym razem próbując ponownie<br />

"uśpić" i przebudzić nasz komputer,<br />

aż znajdziemy program lub<br />

sprzęt powodujący problemy. Na<br />

samym końcu próbujemy wykonać<br />

operację usypiania z działającym<br />

systemem X Window. Gdy znajdziemy<br />

feralny problem lub moduł jądra,<br />

możemy napisać sobie skrypt, który<br />

go usunie/wyłączy przed "uśpieniem"<br />

systemu. Bardzo prosty przykład<br />

zamieszczono na Listingu 1.<br />

Skrypt ten usunie moduły jądra<br />

odpowiedzialne za USB, ale po przywróceniu<br />

systemu załaduje je ponownie.<br />

W przypadku problemów z trybem "Suspend<br />

to disk", zarówno gdy korzystamy<br />

z pierwszej metody(Swsusp), jak i drugiej<br />

(Pmdisk), możemy postępować podobnie<br />

jak przy problemach z "Suspend<br />

to RAM". Polecam jednak wypróbowanie<br />

rozwiązania Swsusp2, gdyż jest szybsze<br />

i oferuje znacznie większe możliwości.<br />

Powinno ono również zadziałać<br />

sprawnie na większej gamie sprzętu.<br />

Nie oznacza to oczywiście, że zawsze<br />

funkcjonuje bez problemów. Spośród<br />

najczęstszych problemów trzeba wymienić:<br />

• Jeśli posiadamy kartę graficzną<br />

firmy NVidia, w pliku /etc/<br />

suspend.conf powinniśmy mieć linię<br />

Tabela 1. Porównanie metod „usypiania” Linuksa<br />

swsusp pmdisk swsusp2<br />

Dostępność w jądrze 2.6.x w jądrze 2.6.x łaty na jądra 2.4.x oraz 2.6.x<br />

Aktywacja echo 4 > /proc/acpi/sleep echo -n disk > /sys/power/<br />

state<br />

/usr/local/sbin/hibernate lub<br />

echo > /proc/swsusp/activate<br />

Dezaktywacja noresume pmdisk=off noresume2<br />

Potrzebny argument resume=/dev/hda# pmdisk=/dev/hda# resume2=swap:/dev/hda#<br />

uruchomienia jądra<br />

Wymagania konfiguracji swap<br />

swap<br />

swap<br />

jądra<br />

ACPI<br />

Zalety<br />

+dobrze przetestowane,<br />

standardowe rozwiązanie<br />

+dostępność w standardowym<br />

jądrze<br />

+nowa, wydaje się lepsza,<br />

implementacja<br />

+dostępność<br />

w standardowym jądrze<br />

+szybkie działanie<br />

+znacznie większe możliwości konfiguracyjne<br />

+najlepsza dokumentacja<br />

+wsparcie dla kompresji<br />

+ambitne plany rozwojowe<br />

+najszybsze działanie<br />

Wady<br />

- wymaga ACPI<br />

- relatywnie wolne działanie<br />

- nowe, krótko testowane<br />

rozwiązanie<br />

- służy wyłącznie do suspend to disk<br />

- wymaga nakładania łatek na jądra, które<br />

nie nadążają za nowymi wersjami<br />

www.lpmagazine.org<br />

55


sprzęt<br />

Instalacja jądra<br />

Najpierw instalujemy moduły jądra poleceniem<br />

make modules_install. Zostanie<br />

wtedy utworzony katalog /lib/modules/<br />

[wersja_jądra], np. /lib/modules/2.4.26,<br />

w którym zostaną umieszczone w kilku<br />

podkatalogach wszystkie moduły. Jeśli<br />

kompilujemy jądro w takiej samej wersji,<br />

jak obecnie używane w systemie, katalog<br />

ten już istnienie w systemie, a to niedobrze<br />

– powinniśmy w takiej sytuacji<br />

najpierw usunąć go albo lepiej zmienić<br />

jego nazwę, np. na 2.4.26-bak,<br />

a dopiero po tym wykonać make modules_install.<br />

Jądro po kompilacji znajdziemy<br />

w pliku /usr/src/linux/arch/i386/boot/<br />

bzImage. Plik ten powinniśmy skopiować<br />

do katalogu /boot/. Możemy przy<br />

okazji nadać mu nową nazwę, zwłaszcza<br />

jeśli w katalogu /boot/ jest już plik<br />

bzImage.<br />

Teraz przyszedł czas na najtrudniejszy<br />

element, czyli konfigurację LILO lub<br />

GRUB-a. Jeśli nasza dystrybucja używa<br />

LILO, znajdziemy w niej plik /etc/lilo.conf.<br />

W tym pliku musimy odnaleźć sekcję<br />

odpowiedzialną na uruchamianie naszego<br />

Linuksa. Poszczególne sekcje zaczynają<br />

się od linii image=[plik_ jądra]. Skopiujmy<br />

w tym pliku całą tą sekcję (tak<br />

trudniej o pomyłkę) i w skopiowanym<br />

S W S U SP_ L E AV E _ X _ BE F OR E _<br />

SUSPEND="nvidia" (zamiast "nvidia"<br />

domyślnie jest "no"). W ten sposób<br />

unikniemy problemu ze "znikającą"<br />

akceleracją 3D po obudzeniu komputera.<br />

• W przypadku Debiana czasem musimy<br />

zmodyfikować /etc/suspend.conf usuwając<br />

umountnfs.sh z listy usług uruchamianych<br />

przed i po hibernacji systemu.<br />

• Swsup2 nie wyłączy całkowicie komputera,<br />

jeśli jądro nie ma wkompilowanego<br />

ACPI lub APM. W tym przypadku,<br />

po zakończeniu procesu "usypiania",<br />

należy użyć przycisku na obudowie.<br />

fragmencie dokonajmy następujących<br />

modyfikacji:<br />

• zmieniamy argument w linii image= na<br />

właściwy dla pliku z naszym jądrem,<br />

np. image=/boot/bzImage;<br />

• usuwamy linię initrd=...;<br />

• zmieniamy argument w linii label= na<br />

jakiś inny, np. "moje_dzielo".<br />

Po zapisaniu tych zmian wydajemy z konta<br />

roota polecenie lilo. Jeśli program znajdzie<br />

jakieś błędy w /etc/lilo.conf, poinformuje<br />

o nich rzeczowo i zakończy działanie,<br />

nie uszkadzając sektora startowego.<br />

Gdy wszystko pójdzie dobrze, próbujemy<br />

zrestartować komputer, wybierając w menu<br />

LILO nowe jądro, np. "moje_dzielo". Gdy<br />

wystąpi jakiś problem z nowym jądrem,<br />

zawsze możemy uruchomić komputer<br />

ponownie, wybierając w menu LILO<br />

dotychczas używane jądro.<br />

Konfigurację GRUB-a można przeprowadzić<br />

podobnie jak w przypadku<br />

LILO. Składnia pliku /etc/grub.conf jest co<br />

prawda inna, jednak poszczególne sekcje,<br />

które tutaj zaczynają się od linii title..., również<br />

można skopiować i dokonać zmian<br />

analogicznych jak w przypadku lilo.conf.<br />

Po prostu zamiast label mamy tutaj title,<br />

a zamiast image – kernel.<br />

ne za w miarę stabilne, na wielu komputerach<br />

najlepiej może sprawdzać się starszy<br />

standard, czyli APM.<br />

Jądra Linuksa we wszystkich dystrybucjach<br />

mają obecnie domyślnie włączoną<br />

obsługę APM. Jeśli jednak konfigurujemy<br />

i kompilujemy jądro samodzielnie,<br />

w serii 2.4.x APM znajdziemy w dziale<br />

General setup pod nazwą Advanced Power<br />

Management BIOS support, zaś w serii 2.6.x<br />

w dziale Power Management support.<br />

Wszystkie dodatkowe opcje w dziale<br />

APM służą jedynie do unikania problemów<br />

przy różnym mniej kompatybilnym<br />

sprzęcie i nie musimy ich zaznaczać. APM<br />

również najlepiej jest wkompilować do<br />

jądra „na stałe”.<br />

Usypianie komputera przy pomocy<br />

APM jest o tyle prostsze, że w naszej<br />

dystrybucji powinniśmy znaleźć pakiet<br />

o nazwie apmd, a w nim programy apm<br />

oraz apmd. Przy pomocy pierwszego<br />

z nich możemy w dowolnym momencie<br />

posłać nasz komputer w stan „bez-<br />

Stary dobry APM?<br />

Opisywane powyżej rozwiązania są<br />

w mniejszym lub większym stopniu<br />

oparte na kodzie obsługującym ACPI.<br />

Chociaż działają one na szerokiej gamie<br />

sprzętu i mimo wszystko są już uznawaczynności”<br />

(standby) lub „wstrzymania”<br />

(suspend). Drugi z nich jest demonem, uruchamianym<br />

przy starcie systemu, który<br />

w momencie, gdy następują zdarzenia<br />

związane z zarządzaniem energią<br />

(np. żądanie przejścia w stan suspend lub<br />

zmiana zasilania z sieciowego na bateryjne)<br />

automatycznie wykonuje pewne<br />

akcje.<br />

Aby „uśpić” nasz komputer przy<br />

pomocy APM, możemy wykonać polecenie<br />

apm –standby lub apm –suspend. W tym<br />

momencie demon apmd zapisze stosowną<br />

informację do logów systemowych, zsynchronizuje<br />

twarde dyski, wykona polecenia<br />

zdefiniowane w skryptach w katalogu<br />

/etc/apm/ i dopiero wtedy przeprowadzi<br />

właściwą operację „usypiania”.<br />

Im starszy jest nasz sprzęt, tym większe<br />

szanse powodzenia takiej operacji.<br />

Wiele problemów przy APM sprawia<br />

system X Window, więc warto przed „usypianiem”<br />

przynajmniej przełączyć się na<br />

terminal tekstowy.<br />

Zakończenie<br />

Wstrzymywanie pracy komputera nie jest<br />

tak prostą operacją, jak mogło by się to<br />

wydawać. Biorąc to pod uwagę, nie powinno<br />

nas dziwić, że mamy w Linuksie kilka<br />

niemal całkiem niezależnych rozwiązań,<br />

realizujących to zadanie. Dzięki temu<br />

możemy samodzielnie wybrać to, które<br />

działa u nas najlepiej i jest dla nas najwygodniejsze.<br />

Jak już wspomniałem, szeroko pojęte<br />

zarządzanie energią w Linuksie rozwija<br />

się bardzo szybko. „Usypianie” komputerów<br />

to tylko jedno z wielu jego zastosowań.<br />

W następnym numerze opiszę<br />

między innymi, jak możemy skonfigurować<br />

różne zachowania komputera<br />

w przypadku naciśnięcia przycisków<br />

"Power" i "Sleep", zmieniać częstotliwość<br />

pracy procesora i wiele innych metod<br />

oszczędzania energii.<br />

W Internecie:<br />

• Battery Powered Linux Mini-HOWTO:<br />

http://www.faqs.org/docs/Linux-mini/<br />

Battery-Powered.html<br />

• Software Suspend (2) dla Linuksa:<br />

http://swsusp.sourceforge.net/<br />

• Strona domowa ACPI w Linuksie:<br />

http://acpi.sourceforge.net/<br />

• Informacje o działaniu Linuksa na<br />

notebookach wszystkich firm:<br />

http://www.tuxmobile.org/<br />

56 czerwiec 2004


dla programistów<br />

Książka teleadresowa<br />

w Mono<br />

Marek Sawerwain<br />

Na płycie CD/DVD<br />

Na płycie CD/DVD znajdują się<br />

pliki źródłowe i binarne Mono,<br />

kompletny kod omawianego programu<br />

oraz listingi z artykułu.<br />

O autorze<br />

Autor zajmuje się tworzeniem<br />

oprogramowania dla WIN32<br />

i Linuksa. Zainteresowania: teoria<br />

języków programowania oraz<br />

dobra literatura.<br />

Kontakt z autorem:<br />

autorzy@linux.com.pl.<br />

W<br />

informatyce<br />

wszelkie<br />

proroctwa, jak wiadomo,<br />

są „zabronione”.<br />

Zazwyczaj nie sprawdzają<br />

się, a jak już istotnie dojdą do<br />

skutku, to zazwyczaj na taką skalę,<br />

jakiej wcześniej nikt nie przewidywał.<br />

Jednak na polu języków programowania<br />

nie ma znaczących rewolucji. Od<br />

wielu lat najpopularniejsze języki to<br />

C/C++ czy Pascal (szczególnie w wydaniu<br />

Delphi/Kylix). Wspomnieć należy<br />

inne znane języki należące do kanonu,<br />

takie jak Prolog czy Scheme/Lisp, ale<br />

mają one inne przeznaczenie. Wymienić<br />

też trzeba PHP, Perl oraz Pythona,<br />

bo także cieszą się ogromną popularnością.<br />

Do tego grona z pewnością na<br />

stałe dołączyła także Java. Reprezentuje<br />

ona sobą ważną tendencję, która<br />

już od dłuższego czasu jest popularna,<br />

a mianowicie niezależność<br />

od sprzętu uzyskana dzięki maszynie<br />

wirtualnej (innym przykładem<br />

jest Python, ale także Perl zmierza<br />

w tym kierunku). Zapewnia to znacznie<br />

lepszą przenośność programu napisanego<br />

w Javie, choć trzeba pamiętać<br />

o związanych z tym kosztach. Oferuje<br />

także niezależność od języka programowania,<br />

gdyż ostatecznie można napisać<br />

kompilator innego języka działającego<br />

w ramach określonej maszyny wirtualnej.<br />

Wydaje się, że właśnie niezależność<br />

od sprzętu uzyskiwana po pierwsze<br />

przez maszynę wirtualną oraz niezwykle<br />

bogata biblioteka funkcji/procedur<br />

i obiektów, stanowiąca całą platformę<br />

programową, będzie decydować<br />

o popularności języka. Na tym polu<br />

obecnie mamy dwóch konkurentów:<br />

język Java od Suna oraz język C# (ang.<br />

C-Sharp, czyli w wolnym tłumaczeniu<br />

ostre C) wraz z platformą .NET firmy<br />

Microsoft. Firma Sun po dość długim<br />

czasie ostatecznie zadbała o implementację<br />

swojego języka dla Linuksa, ale<br />

oczekiwanie tego samego od autora C#<br />

i platformy .NET jest, jak każdy się domyśla,<br />

bezcelowe. Pomimo tego Microsoft<br />

zabiegał o ustalenie standardu języka<br />

i platformy, aby mógł stanowić konkurencję<br />

dla Javy. Umożliwiło to powołanie<br />

do życia projektów Open Source,<br />

które maja zapewnić dostarczenie<br />

odpowiednich narzędzi do platformy<br />

.NET oraz języka C#. I tak się stało – istnieją<br />

dwa główne projekty związane<br />

z platformą .NET: Mono oraz DotGNU.<br />

Autorzy pierwszego z nich postawili<br />

sobie za cel stworzenie narzędzi dla<br />

programistów, czyli kompilatora oraz<br />

niezbędny pakiet bibliotek. Autorzy<br />

drugiego projektu chcą dostarczyć całą<br />

kompletną platformę.<br />

W tym artykule zajmiemy się projektem<br />

Mono. Jednym ze sposobów<br />

poznania nowego języka czy platformy<br />

jest napisanie w nim jakiegoś większego<br />

programu. Mono, choć jest młodym<br />

projektem, oferuje już wsparcie<br />

Listing 1. Przysłowiowe „Hello World!”<br />

w C#<br />

using System;<br />

class Example1 {<br />

}<br />

static void Main() {<br />

Console.WriteLine("Hello S<br />

}<br />

World!\n");<br />

58 czerwiec 2004


mono<br />

dla programistów<br />

Kompilacja oraz instalacja<br />

środowiska Mono<br />

Głównymi autorami środowiska Mono<br />

oraz kompilatora są autorzy środowiska<br />

GNOME, dlatego Mono w przypadku<br />

kompilacji wymaga obecności pakietu<br />

pkg-config. Jednak sama kompilacja<br />

i instalacja jest podobna do wielu innych<br />

projektów na licencji GNU, gdzie znajdują<br />

się skrypty Automake i Autoconf, czyli<br />

zamyka się w trzech poleceniach:<br />

./configure –prefix=/opt<br />

make<br />

make install<br />

Rysunek 1. Przeglądarka dokumentacji środowiska Mono<br />

dla baz danych. Wykorzystamy tę<br />

możliwość i program, który zostanie<br />

przedstawiony w tym artykule,<br />

będzie nieskomplikowaną bazą danych<br />

zawierającą spis naszych znajomych,<br />

czyli coś w rodzaju książki telefonicznej.<br />

Coś małego na rozgrzewkę<br />

Nie znajdziemy gotowych pakietów<br />

z Mono w popularnych dystrybucjach<br />

Linuksa. Powód jest prozaiczny – Mono<br />

ciągle znajduje się w fazie rozwoju<br />

i choć można już pisać większe aplikacje,<br />

to aktualna wersja (0.31) wskazuje,<br />

że do „magicznej” wersji 1.0 daleka<br />

droga. Z tego powodu najlepszym<br />

wyborem jest kompilacja ze źródeł,<br />

choć na stronie projektu znajdują<br />

się binaria dla kilku dystrybucji.<br />

Kilka informacji o tym, w jaki sposób<br />

dokonać kompilacji, zawiera ramka<br />

Kompilacja oraz instalacja środowiska<br />

Mono.<br />

Gdy już dysponujemy działającym<br />

środowiskiem Mono, możemy pisać aplikacje.<br />

Listing 1 zawiera przykład programu<br />

wyświetlającego komunikat na<br />

konsoli. Język C# jest wręcz bliźniaczo<br />

podobny do Javy czy do C++, więc każdy<br />

kto zna jeden z tych języków, może<br />

natychmiast rozpocząć tworzenie większych<br />

programów.<br />

Dla osób, które po raz pierwszy<br />

widzą program w C#, zamieszczam<br />

kilka słów komentarza.<br />

Na samym początku za pomocą<br />

słowa using dołączamy definicje używanych<br />

przez nas dodatkowych klas<br />

czy funkcji. Moduł System zawiera<br />

klasy odpowiadające funkcjonalności<br />

klas czy funkcji pochodzących<br />

z plików nagłówkowych stdio.h czy<br />

iostream.h.<br />

Definicja klasy zawiera tylko jedną<br />

metodę Main i koniecznie musi ona zostać<br />

poprzedzona słowem static. Metoda ta<br />

zostaje wywołana jako pierwsza w naszej<br />

aplikacji, czyli jest to odpowiednik funkcji<br />

main z języków C/C++.<br />

Aby wyświetlić komunikat, stosujemy<br />

metodę WriteLine. Metoda ta wyświetla<br />

jedną linię tekstu, po czym przechodzi<br />

na początek następnej linii konsoli.<br />

Po przygotowaniu pliku źródłowego<br />

(jego nazwa jest dowolna, ale stosujemy<br />

rozszerzenie .cs), dokonujemy kompilacji:<br />

mcs Example1.cs<br />

Wynikiem będzie program w postaci<br />

pliku binarnego, ale w formacie EXE,<br />

dokładnie takim samym jak w przypadku<br />

platformy WIN32. Ów „exek” posiada<br />

w sobie „zaszyty” kod pośredni,<br />

ale ponieważ nie jest to plik w formacie<br />

ELF, więc nie jest możliwe jego bezpośrednie<br />

uruchomienie przez Linuksa.<br />

Korzystamy z dodatkowego programu o<br />

nazwie mono:<br />

mono Example1.exe<br />

Nasz program korzysta z bibliotek GTK+,<br />

więc musimy mieć je zainstalowane<br />

w systemie. Może to być wersji 2.2.x<br />

lub najnowsza 2.4.x. Ogólnie kolejność<br />

kompilacji jest następująca: jako pierwszy<br />

kompilujemy specjalny pakiet ICU,<br />

czyli „International Components for Unicode”.<br />

Choć ten pakiet nie jest niezbędny,<br />

to jego obecność jest rekomendowana<br />

przez autorów Mono. Następnie<br />

sam pakiet Mono, po nim kompilator<br />

oraz klasy, czyli pakiet MCS. Po tych<br />

dwóch pakietach mamy już gotowe środowisko<br />

do pracy, jednak ciągle nie są<br />

dostępne widgety GTK+, więc należy<br />

skompilować pakiet Gtk-Sharp. Z punktu<br />

widzenia naszej aplikacji, najważniejsze<br />

biblioteki, do których musimy posiadać<br />

dostęp, to GTK+ oraz LibGlade. Nie jest<br />

nam potrzebne wsparcie dla GNOME<br />

oraz GNOME-DB. Ten ostatni pakiet to<br />

tandem dwóch bibliotek, stanowiący uniwersalny<br />

system dostępu do baz danych<br />

w GNOME, który niestety ciągle nie jest<br />

dopracowany, więc dlatego nie został<br />

użyty w naszej aplikacji. Z pewnością<br />

w przyszłości temat GNOME-DB na<br />

łamach L+ zostanie poruszony. Po instalacji<br />

Gtk-Sharp szczerze polecam kompilację<br />

pakietu Monodoc, szczególnie<br />

osobom, które nie mają dostępu do Internetu.<br />

Monodoc to przeglądarka dokumentacji<br />

bibliotek Mono i oferuje wiele cennych<br />

informacji oraz przykładów stosowania<br />

poszczególnych klas. Do jej kompilacji<br />

trzeba posiadać skompilowaną<br />

Gtk-Sharp z obsługą biblioteki GtkHTML<br />

w wersji 3.0. Na koniec jeszcze<br />

jednak bardzo istotna uwaga. Do kompilacji<br />

programu osobiście stosowałem<br />

Mono i kompilator w wersji 0.31 oraz<br />

bibliotekę Gtk-Sharp w wersji 0.18. Jeśli<br />

stosujemy starsze wersje, to możemy<br />

niestety napotkać kłopoty podczas<br />

kompilacji.<br />

www.lpmagazine.org<br />

59


dla programistów<br />

Przyjmuje ona dwa argumenty: object,<br />

reprezentujący obiekt, z którego pochodzi<br />

zdarzenie, oraz EventArgs, gdzie<br />

zawarte są ewentualne dodatkowe<br />

parametry. Gtk-Sharp rozróżnia różne<br />

typy zdarzeń, dlatego w przypadku<br />

zdarzenia „deleted” posługujemy się<br />

inną klasą, a funkcja odpowiadająca<br />

na zdarzenie ma inny typ w przypadku<br />

drugiego argumentu.<br />

Inaczej przebiega kompilacja programu<br />

opartego o Gtk-Sharp. Wymaga<br />

podania nowych bibliotek, z których<br />

będzie korzystał program. Najlepiej przygotować<br />

prosty skrypt makefile, a przedstawia<br />

się on tak:<br />

all_assemblies=-r glib-sharp.dll -r S<br />

pango-sharp.dll -r atk-sharp.dll -r S<br />

Rysunek 2. Program „Spis osób” – okno przeglądania i edycji danych<br />

Listing 2. Niewielki program w GTK+,<br />

czyli etykieta plus przycisk<br />

Na ekranie zobaczymy oczywiście nasz<br />

komunikat.<br />

Można również zastosować program<br />

mint (interpreter kodu pośredniego), ale<br />

nie oferuje on tak dużej wydajności jak<br />

mono, który stosuje znacznie wydajniejszą<br />

kompilację typu JIT.<br />

GTK+, GNOME i nie tylko<br />

na ostro<br />

Obecnie Mono nie oferuje jeszcze<br />

w pełni gotowej biblioteki do obsługi<br />

aplikacji GUI, działającej np. na poziomie<br />

X Window (ciekawą alternatywą<br />

byłby system działający na poziomie<br />

podsystemu FBcon (konsoli) i istotnie<br />

obsługa FrameBuffera jest planowana<br />

przez autorów). Nie jest gotowy<br />

także system Windows.Forms. Jest to<br />

o tyle istotne, że jego obecność jest<br />

ważna dla bezpośredniego uruchamiania<br />

aplikacji pisanych na oryginalnym<br />

systemie .NET. Istnieje jednak bardzo<br />

dobra alternatywa, a jest nią pakiet<br />

Gtk-Sharp (funkcjonuje on także pod<br />

nazwą Gtk#), czyli wersja biblioteki<br />

GTK+ dla środowiska Mono oraz języka<br />

C#. Pakiet Gtk-Sharp nie ogranicza się<br />

tylko do biblioteki GTK+, ale daje nam<br />

możliwość tworzenia aplikacji dla środowiska<br />

GNOME. Musimy jednak pamiętać<br />

o jednym ważnym szczególe, jeśli planujemy<br />

uruchamiania naszego programu<br />

na platformie WIN32. Biblioteka GTK+<br />

nie sprawia kłopotów pod Windowsami,<br />

ale funkcje GNOME jak dotychczas<br />

nie doczekały się przeniesienia do tego<br />

systemu. Dlatego w naszym programie<br />

zakładamy, że będzie on korzystał tylko<br />

i wyłącznie z funkcji GTK+.<br />

Programy pisane w C# i C przy<br />

wykorzystaniu GTK+ są bardzo do siebie<br />

podobne pomimo różnic pomiędzy<br />

językami. Listing 2 zawiera krótki program<br />

tworzący okno oraz umieszczający<br />

w nim etykietę oraz przycisk, wykorzystując<br />

przy tym pudełko – vbox.<br />

Autorzy Gtk-Sharp skorzystali<br />

z obiektowych możliwości C#, dlatego<br />

do inicjalizacji aplikacji korzystamy<br />

z obiektu Application, wywołując metodę<br />

Init. Po zbudowaniu interfejsu uruchomienie<br />

aplikacji następuje po wywołaniu<br />

linii Application.Run(). Najbardziej<br />

elegancko przedstawia się proces podłączania<br />

zdarzeń. Wykorzystujemy operator<br />

przypisania zdarzenia +=. Przypisanie<br />

funkcji, która zostanie wywołana<br />

w momencie „kliknięcia”, polega na<br />

utworzeniu nowego obiektu EventHandler:<br />

btn_ok.Clicked += new S<br />

EventHandler(On_BtnClick);<br />

Funkcja odpowiadająca na zdarzenie,<br />

czyli On_BtnClick, musi posiadać odpowiednią<br />

postać:<br />

void On_BtnClick (object o, EventArgs a) {<br />

}<br />

Application.Quit ();<br />

using System;<br />

using Gtk;<br />

using Gdk;<br />

class Example1_gtk {<br />

}<br />

static Gtk.Window win = null;<br />

public static void Main(){<br />

}<br />

Application.Init ();<br />

win = new Gtk.Window S<br />

("Pierwszy program!");<br />

win.SetDefaultSize (200, 100);<br />

VBox box = new VBox (false,0);<br />

win.Add (box);<br />

box.Add (new Label("Witaj S<br />

Swiecie!!!"));<br />

Button btn_ok = new Button S<br />

(Stock.Ok);<br />

btn_ok.Clicked += new S<br />

EventHandler(On_BtnClick);<br />

box.Add ( btn_ok );<br />

win.DeleteEvent += new S<br />

DeleteEventHandler (On_Delete);<br />

win.ShowAll ();<br />

Application.Run ();<br />

static void On_Delete S<br />

(object o, DeleteEventArgs a){<br />

}<br />

Application.Quit ();<br />

a.RetVal = true;<br />

static void On_BtnClick S<br />

(object o, EventArgs a){<br />

}<br />

Application.Quit ();<br />

60 czerwiec 2004


mono<br />

dla programistów<br />

gdk-sharp.dll -r gtk-sharp.dll<br />

all:<br />

mcs $(all_assemblies) Example1_gtk.cs<br />

W zmiennej all_assemblies umieszczamy<br />

nazwy potrzebnych bibliotek poprzedzając<br />

każdą parametrem „-r”. Jak widać,<br />

mają one rozszerzenia dll, bowiem<br />

podobnie jak sam program, są to pliki<br />

o formacie zgodnym z platformą WIN32<br />

– nie są to typowe biblioteki dynamiczne<br />

o rozszerzeniu „so”. Wiele cennych informacji<br />

o różnicach oraz przykłady użycia<br />

wielu widgetów GTK+ i GNOME można<br />

odszukać w dokumentacji do Mono i<br />

Gtk-Sharp dostępnej on-line lub lokalnie<br />

dzięki programowi monodoc (Rysunek 1).<br />

Plan aplikacji<br />

Po tym wstępie (czytelnika początkującego<br />

w temacie środowiska Mono<br />

zachęcam do napisania kilku nieskomplikowanych<br />

aplikacji, takich jak<br />

choćby programu proszącego o podanie<br />

dwóch liczb i obliczającego ich sumę)<br />

możemy zastanowić się nad naszym<br />

głównym zadaniem, czyli napisaniem<br />

niewielkiej bazy danych, takiej jak na<br />

Rysunku 2.<br />

W każdym większym programie<br />

warto zastanowić się nad głównymi<br />

zdarzeniami/czynnościami, które<br />

będą występować w aplikacji. Dla naszego<br />

programu będzie ich zaledwie kilka:<br />

interfejsu. Oczywiście jest wiele innych<br />

bardziej formalnych metod prezentowania<br />

architektury, np. diagramy UML, ale<br />

nawet tak luźno podane najważniejsze<br />

zdarzenia oraz ich odniesienie do<br />

innych obiektów pozwoli szybciej napisać<br />

gotowy kod.<br />

Klasa DBOperation<br />

i tworzenie tabeli osoby<br />

Rysunek 3 pokazuje nam najważniejsze<br />

zdarzenia występujące w programie.<br />

Prawie wszystkie są związane z operacjami<br />

na danych. Łatwo wywnioskować, że<br />

zarządzanie bazą danych też warto przeanalizować.<br />

W naszej aplikacji wprowadzimy<br />

dodatkową klasę o nazwie DBOperation<br />

(umieścimy ją w tym samym<br />

pliku, co wspomnianą wcześniej klasę<br />

Simple_db). Jej metody będą realizować<br />

potrzebne czynności, takie jak dodatnie<br />

rekordu czy usunięcie rekordu o wskazanym<br />

identyfikatorze. Zadaniem naszej<br />

klasy będzie również utworzenie bazy<br />

i tabeli.<br />

W tym miejscu trzeba zastanowić<br />

się nad typem bazy danych. Wszystkie<br />

te operacje można zrealizować samodzielnie,<br />

ale lepiej skorzystać z gotowych<br />

systemów. Na potrzeby naszego programu<br />

nie potrzebujemy zbyt wyrafinowanej<br />

bazy danych, choćby dlatego, że<br />

w programie występuje tylko jedna<br />

tabela – osoby, ale korzystanie<br />

z języka SQL ułatwi nam pisanie programu.<br />

Możemy wybierać spośród kilku<br />

darmowych systemów, ale w naszej<br />

sytuacji najlepszym wyborem będzie<br />

• utworzenie nowej bazy;<br />

• otworzenie istniejącej bazy;<br />

• wpisanie (dodanie) nowych danych;<br />

• edycja danych;<br />

• szukanie;<br />

• zamknięcie programu.<br />

Pod każdą z tych czynności mogą kryć<br />

się następne zdarzenia, np. w edycji<br />

danych możemy usunąć rekord, uaktualnić<br />

i w końcu również zamknąć okno,<br />

przez które dokonujemy tych operacji.<br />

Wymienione powyżej są jednak najważniejsze.<br />

Na etapie planowania programu<br />

warto postarać się przygotować diagram,<br />

na którym wymienione zdarzenia będą<br />

powiązane między sobą. Diagram dla<br />

prostej bazy danych został przedstawiony<br />

na Rysunku 3.<br />

Z diagramu wynika, że mamy cztery<br />

główne okna, jednak juz teraz zakładamy,<br />

że napiszemy program, gdzie w<br />

klasie o nazwie Simple_db umieścimy<br />

wszystkie elementy związane z obsługą<br />

Rysunek 3. Schemat zdarzeń w programie „Spis osób”<br />

www.lpmagazine.org<br />

61


dla programistów<br />

Listing 3. Polecenie SQL tworzące<br />

tabelę osoby<br />

create table osoby (<br />

id integer primary key,<br />

imie char(20),<br />

nazwisko char(20),<br />

nr_domu char(5),<br />

nr_mieszkania char(5),<br />

ulica char(25),<br />

dzien_ur integer,<br />

miesiac_ur integer,<br />

rok_ur integer,<br />

telefon_st char(20),<br />

telefon_kom char(20),<br />

uwagi text);<br />

baza Sqlite, która oferuje dostęp do<br />

dużego podzbioru języka SQL, co<br />

znacznie ułatwi nam przygotowanie<br />

odpowiednich zapytań do bazy. Sqlite<br />

posiada jeszcze jedną ważną zaletę<br />

– nie wymaga oddzielnego serwera<br />

danych. Wszystkie tabele są zgromadzone<br />

zawsze w jednym pliku. Dodatkową<br />

zaletą jest fakt, że środowisko Mono<br />

ma gotowe klasy do obsługi tego systemu,<br />

więc nic nie trzeba dodatkowo kompilować<br />

oprócz naturalnie samej bazy.<br />

Tabela 1 zawiera spis metod, które<br />

zawiera klasa. W artykule zwrócimy<br />

szczególną uwagę na to, jak tworzymy<br />

nową bazę danych. Gdy użytkownik<br />

„kliknie” na przycisk „Nowa baza<br />

danych”, to po podaniu nazwy, kod<br />

wykonujący tę operację zamyka się<br />

w czterech liniach:<br />

DBOperation db=new DBOperation();<br />

db.OpenLink();<br />

db.CreateDB(db_file_name);<br />

db.CloseLink();<br />

Metody OpenLink oraz CloseLink w przypadku<br />

bazy Sqlite nie mają typowego<br />

znaczenia, bo w zamierzeniu mają one<br />

odpowiednio: nawiązywać połączenie<br />

z serwerem i je zamykać (Sqlite jest<br />

systemem osadzonym). Cały proces<br />

tworzenia bazy i tabeli zawiera metoda<br />

CreateDB. Zmienna db_file_name to naturalnie<br />

nazwa pliku reprezentującego bazę<br />

danych.<br />

Postać naszej tabeli określa Listing 3.<br />

Jest to nieskomplikowana tabela. Sqlite<br />

oferuje nam jedną cenną właściwość<br />

– jeśli pole posiada nazwę id oraz jego<br />

typ to liczba całkowita oraz dodatkowo<br />

stanowi klucz główny, to takie pole<br />

jest automatycznie numerowane przez<br />

system Sqlite.<br />

Wykonanie jakiejkolwiek operacji na<br />

bazie danych sprowadza się utworzenia<br />

zapytania w SQL i przesłania go do bazy<br />

danych. Proces ten rozpoczynamy od<br />

utworzenia połączenia:<br />

SqliteConnection dbcon=new S<br />

SqliteConnection();<br />

Następnie określamy parametry połączenia<br />

(w naszym przypadku będzie to tylko<br />

ścieżka do pliku z danymi) i nakazujemy<br />

połączenie się z bazą:<br />

dbcon.ConnectionString=”URI=file: S<br />

dbcon.Open();<br />

~/moje_dane.db”;<br />

Jeśli plik nie istnieje, to zostanie utworzony<br />

samoczynnie przez system Sqlite.<br />

Powinniśmy zadbać o obsługę błędów,<br />

jednak jeśli ją pominiemy, to jakikolwiek<br />

błąd będzie generował wyjątek.<br />

Gdy nie przechwycimy wyjątku, to<br />

w efekcie doprowadzi to do zakończenia<br />

pracy programu. I jest to zadanie<br />

dla Czytelnika, aby rozszerzyć program<br />

o poprawną obsługę błędów.<br />

Zakładamy optymistycznie, że błędów<br />

nie będzie, więc możemy w tym miejscu<br />

wykonywać różne operacje na<br />

danych, pamiętając naturalnie, że trzeba<br />

zamknąć połączenie: dbcon.Close();.<br />

Wykonanie zapytania tworzącego<br />

tabelę (Listing 4) polega na utworzeniu<br />

obiektu SqliteCommand wskazania<br />

połączenia (własność Connection) oraz<br />

podania treści zapytania SQL we własności<br />

CommandText. Wykonanie zapytania<br />

zależy od jego typu, bowiem uogólniając,<br />

istnieją dwa podstawowe rodzaje<br />

zapytań. Pierwszy rodzaj daje nam<br />

w wyniku rekordy zawierające jakieś<br />

dane, np. może to być wynik zapytania,<br />

w którym poszukujemy osób, które urodziły<br />

się w określonym miesiącu, choć<br />

wynik zapytania może być pusty. Drugi<br />

typ zapytań (czy raczej poleceń, bo nie<br />

są to już typowe zapytania) nigdy nie<br />

generuje nowych danych i create table<br />

jest przykładem takiego polecenia. Ten<br />

rodzaj poleceń wykonujemy wywołując<br />

metodę ExecuteNonQuery().<br />

W bardzo podobny sposób, jak na<br />

Listingu 4, postępujemy w przypadku<br />

metod: InsertData, UpdateData, Delete-<br />

Record, zmieniając oczywiście treść polecenia<br />

w języku SQL.<br />

Szukanie osób<br />

Wyszukiwanie danych w języku SQL to<br />

domena polecenia select. Jego wynikiem<br />

mogą być rekordy zawierające<br />

poszukiwane przez nas dane. Metody<br />

szukające danych według Tabeli 1 to:<br />

GetOtherData, GetBasicData, Search-<br />

Nazwisko, SearchTelefonSt, Search-<br />

TelefonKom. Wszystkie te metody są<br />

do siebie dość podobne, więc<br />

przedstawię tylko jedną: SearchNazwisko,<br />

odpowiedzialną za szukanie osób<br />

po nazwisku.<br />

Kod źródłowy metody Search-<br />

Nazwisko zawiera Listing 5, który<br />

został skrócony tylko w jednym miejscu.<br />

Zadaniem kodu jest wykonanie<br />

zapytania typu select i odszukanie<br />

osób, których nazwiska są podobne<br />

do nazwiska podanego w argumencie<br />

metody. Z tego powodu w warunku<br />

where mamy słowo kluczowe<br />

like. Odszukany rekord bądź<br />

rekordy zostaną wpisane do obiektu<br />

TreeStore, czyli do zbioru danych<br />

wyświetlanych przez komponent Gtk-<br />

TreeView.<br />

Utworzenie zapytania, podobnie<br />

jak w poprzednim przypadku, gdzie<br />

tworzyliśmy tabelę, rozpoczynamy od<br />

utworzenia obiektu typu SqliteCommand.<br />

Ustalamy połączenie oraz treść<br />

zapytania. Wykonanie zapytania typu<br />

select wymaga utworzenia dodatkowego<br />

obiektu o typie SqliteDataReader.<br />

Następnie wykonujemy zapytanie<br />

wywołując metodę ExecuteReader.<br />

Wyniki działania metody umieszczamy<br />

w utworzonym obiekcie, czyli w zmiennej<br />

reader:<br />

Listing 4. Kod tworzący tabelę osoby<br />

SqliteCommand dbcmd = new S<br />

SqliteCommand();<br />

dbcmd.Connection = dbcon;<br />

dbcmd.CommandText = "create tableS<br />

osoby ("+"id integer primary key,"S<br />

+"imie char(20)," + ...<br />

// dalsza treść polecenia S<br />

tworzącego tabelę<br />

dbcmd.ExecuteNonQuery();<br />

dbcmd.Dispose();<br />

62 czerwiec 2004


mono<br />

dla programistów<br />

SqliteDataReader reader;<br />

reader = dbcmd.ExecuteReader();<br />

Listing 5. Metoda szukająca osoby po podanym nazwisku<br />

Proces odczytywania uzyskanych<br />

danych jest iteracyjny, tzn. wywołujemy<br />

metodę Read obiektu typu SqliteDataReader<br />

tak długo jak zwraca<br />

ona prawdę, co oznacza, że są jeszcze<br />

rekordy do odczytania. Sam odczyt<br />

poszczególnych pól rekordu jest trywialny.<br />

Zmienną reader adresujemy<br />

tak jak tablicę. Przykładowo, pole<br />

imię zostało umieszczone pod indeksem<br />

1, więc odczytanie zawartości<br />

tego pola jest następujące: reader[1].ToString().<br />

Ogólnie, poszczególne<br />

pola są tak indeksowane,<br />

jak zostały wyszczególnione w poleceniu<br />

select. Gdy stosowany jest<br />

znak gwiazdki, to kolejność pól jest<br />

taka sama jak w poleceniu tworzącym<br />

daną tabelę. Musimy jednak zadbać<br />

o wartość null, która występuje, gdy<br />

dane pole jest puste. W takim przypadku,<br />

jak widać na Listing 5, gdy<br />

dane pole jest równe null, do zmiennej<br />

pomocniczej, np. imie, wpisujemy<br />

pusty ciąg znaków. Należy tak postępować,<br />

ponieważ ostatecznie wartości<br />

poszczególnych pól trafiają to obiektu<br />

store wywołaniem store.AppendValues,<br />

gdzie wartości null nie są dopuszczalne,<br />

a aby oznaczyć, że dane pole<br />

nie jest wypełnione, należy podać<br />

pusty ciąg znaków – "".<br />

Tworzymy interfejs<br />

użytkownika<br />

Interfejs naszej aplikacji to, jak widać na<br />

schemacie, cztery główne okna, które<br />

zawierają od kilku do kilkanastu widgetów.<br />

Z tego powodu można utworzyć<br />

ten interfejs samodzielnie z poziomu<br />

kodu. Biblioteka Gtk-Sharp oferuje<br />

jednak nie tylko widgety z biblioteki<br />

GTK+, ale również dostęp do formatek<br />

utworzonych w programie GLADE,<br />

więc interfejs utworzymy korzystając<br />

z tego narzędzia (Rysunek 4). Wszystkie<br />

widgety w oknach zostały rozmieszczone<br />

głównie za pomocą komponentu<br />

GtkFixed zamiast typowych<br />

w aplikacjach GTK/GNOME pudełek<br />

o zmiennych wymiarach. Stosowanie<br />

komponentu GtkFixed<br />

powoduje, że każdy komponent posiada<br />

swoje współrzędne i wymiary,<br />

a zmiana rozmiaru okna nie pociąga<br />

za sobą zmiany wymiarów widgetów.<br />

W końcowym efekcie cały interfejs<br />

tworzymy podobnie jak w programach<br />

Delphi/Kylix.<br />

Identycznie jak w oryginale, funkcje<br />

wczytujące formatki GLADE potrafią<br />

samodzielnie podłączyć sygnały do<br />

poszczególnych widgetów, jeśli tylko<br />

zostały one zadeklarowane podczas<br />

tworzenia interfejsu. Z tego powodu<br />

warto w GLADE do poszczególnych<br />

przycisków zdefiniować funkcje obsługi.<br />

Jeśli na formatce głównej o nazwie<br />

mainwin znajduje się przycisk, którego<br />

zadaniem jest zamknięcie okna<br />

i efekcie całego programu oraz posiada<br />

on podłączony sygnał do funkcji<br />

o nazwie on_Btn_CloseApp_clicked,<br />

to jeśli w klasie, która załaduje formatkę,<br />

znajduje się metoda o takiej samej<br />

nazwie, zostanie ona samoczynnie<br />

podłączona do obsługi zdarzenia.<br />

Dla tego konkretnego przykładu,<br />

treść metody odpowiadająca na<br />

sygnał jest bardzo krótka:<br />

public void on_Btn_CloseApp_clickedS<br />

(System.Object b, EventArgs e){<br />

Application.Quit ();<br />

}<br />

public bool SearchNazwisko(string _nazwisko, TreeStore store){<br />

}<br />

string id="", imie="", nazwisko="", nr_domu="", nr_mieszkania="",<br />

ulica="", dzien_ur="", miesiac_ur="", rok_ur="", telefon_st="",<br />

telefon_kom="";<br />

SqliteCommand dbcmd = new SqliteCommand();<br />

dbcmd.Connection = dbcon;<br />

dbcmd.CommandText = "select * from osoby " + S<br />

SqliteDataReader reader;<br />

reader = dbcmd.ExecuteReader();<br />

while(reader.Read()){<br />

}<br />

"where nazwisko like'" + _nazwisko + "%';";<br />

if(reader[0]!=null) id=reader[0].ToString(); else id="";<br />

if(reader[1]!=null) imie=reader[1].ToString(); else imie="";<br />

// pozostałe instrukcje przepisujące dane<br />

if(reader[10]!=null) telefon_kom=reader[10].ToString(); else telefon_kom="";<br />

store.AppendValues(id,<br />

imie, nazwisko, nr_domu, nr_mieszkania,<br />

ulica, dzien_ur, miesiac_ur, rok_ur,<br />

telefon_st, telefon_kom);<br />

reader.Close();<br />

dbcmd.Dispose();<br />

return true;<br />

Uogólniając, gdy mamy zdefiniowane<br />

sygnały, wystarczy odpowiednio zadeklarować<br />

metody, a podłączenie sygnałów<br />

„zrobi się samo”. Nie jest to jednak<br />

jedyne cenne ułatwienie, które oferuje<br />

nam język C# i biblioteka Gtk-Sharp.<br />

W naszym programie musimy<br />

także uzyskać referencje do poszczególnych<br />

widgetów, np. pól edycyjnych<br />

formatki „Dodaj Dane”, aby przesłać<br />

do bazy danych konkretne informacje,<br />

takie jak imię, nazwisko itd. Odwzorowanie<br />

widgetów z formatki wykorzystuje<br />

atrybuty i jest to element charakterystyczny<br />

dla języka C#, którego nie znajdziemy<br />

w C/C++. Jeśli w naszym programie<br />

zdefiniujemy np. zmienną okna w taki<br />

sposób:<br />

[Glade.Widget] Gtk.Window mainwin;<br />

to podczas operacji ładowania formatki<br />

system dzięki atrybutowi [Glade.Widget]<br />

odnajdzie obiekt reprezentujący widget o<br />

nazwie mainwin i podłączy go do naszej<br />

zmiennej. Uzyskamy w ten sposób referencję<br />

do okna głównego. W ten sposób<br />

odwzorujemy pozostałe potrzebne nam<br />

widgety.<br />

www.lpmagazine.org<br />

63


dla programistów<br />

basic_data_view.AppendColumn S<br />

("ID", new CellRendererText (), "text", 0);<br />

basic_data_view.AppendColumn S<br />

("Imie", new CellRendererText (), text",1);<br />

basic_data_view.AppendColumn S<br />

("Nazwisko", new CellRendererText(),S<br />

"text", 2);<br />

Wczytywanie formatki<br />

Uważny Czytelnik zauważył na Rysunku<br />

4, że wszystkie pięć okien (cztery podstawowe<br />

ze schematu oraz jedno dodatkowe<br />

okno dialogowe typu „About”)<br />

są zdefiniowane w pojedynczym pliku<br />

o rozszerzeniu .glade. Pozostaje problem<br />

wczytania pliku do aplikacji.<br />

Wykorzystamy tutaj tzw. assembly,<br />

czyli coś w rodzaju pliku z zasobami,<br />

które zostaną dołączone do naszego<br />

programu już podczas kompilacji.<br />

Kod ładujący formatki jest bardzo<br />

krótki:<br />

Glade.XML gmainwinxml = null;<br />

...<br />

Rysunek 4. Tworzenie interfejsu w GLADE<br />

gmainwinxml = new Glade.XML (null, S<br />

"mainwin.glade", null, null);<br />

gmainwinxml.Autoconnect(this);<br />

Pierwsza linia to utworzenie obiektu<br />

reprezentującego formatkę. Konstruktor<br />

Glade.XML posiada siedem przeciążonych<br />

wersji. Zastosowana powyżej wersja<br />

w pierwszym argumencie spodziewa<br />

się podania odniesienia do assembly.<br />

Podanie wartość null oznacza korzystanie<br />

z aktualnego assembly dostępnego<br />

dla danej klasy. Następnie podajemy<br />

identyfikator zasobu (w naszym przypadku<br />

jest on taki sam jak plik formatki).<br />

Trzeci argument to nazwa węzła,<br />

od którego chcemy utworzyć komponenty,<br />

czyli możemy w ten sposób wybierać<br />

konkretne okna. Podanie wartości null<br />

oznacza, że interesują nas wszystkie<br />

elementy zdefiniowane w pliku. Czwarty<br />

argument to nazwa dziedziny i domyślną<br />

wartością jest właśnie null.<br />

Po tych dwóch liniach mamy juz załadowane<br />

okna, podłączone sygnały oraz<br />

odwzorowane widgety. Pewną wadą Gtk-<br />

Sharp jest domyślne wyświetlanie wszystkich<br />

okien, ale możemy je ukryć wywołując<br />

metodę Hide, np. addwin.Hide();.<br />

Należy teraz dokończyć proces budowania<br />

interfejsu poprzez zdefiniowanie<br />

elementów list z okien lookwin (okno,<br />

w którym przeglądamy oraz edytujemy<br />

dane) oraz findwin (okno odpowiedzialne<br />

za wyszukiwanie danych). Dla<br />

okna lookwin, gdzie znajduje się lista<br />

o trzech kolumnach, w pierwszej kolejności<br />

określamy tzw. model danych. Polega<br />

to na utworzeniu obiektu TreeStore.<br />

W konstruktorze definiujemy typ poszczególnych<br />

kolumn dla tej listy. Upraszczając<br />

sobie zadanie, załóżmy, że każda z nich<br />

będzie zawiera ciąg znaków:<br />

basic_data_view.Model=new TreeStore<br />

(typeof (string), typeof (string), S<br />

typeof (string));<br />

Następnie nakazujemy wyświetlanie<br />

nagłówków w liście:<br />

basic_data_view.HeadersVisible = true;<br />

Pozostało tylko zdefiniować postać tych<br />

kolumn:<br />

Podobnie postępujemy dla drugiej<br />

listy DataViewFindWin, znajdującej się<br />

w oknie poszukiwania danych, ale tam<br />

mamy znacznie więcej kolumn, gdyż ta<br />

lista wyświetla również inne informacje<br />

o osobach, takie jak numer telefonu,<br />

adres itd.<br />

Cały kod związany z wczytywaniem<br />

formatki i definicją ostatecznego wyglądu<br />

okien jest zawarty w konstruktorze<br />

klasy Simple_db. Takie rozwiązanie<br />

pozwala nam na następujące zdefiniowanie<br />

metody Main, która, co trzeba pamiętać,<br />

jest statyczna, więc tak naprawdę<br />

w momencie uruchomienia naszego<br />

programu nie istnieje jeszcze obiekt<br />

o typie Simple_db. Jego utworzenie<br />

dokonuje się w Main:<br />

static public void Main(){<br />

}<br />

Application.Init();<br />

Simple_db w=new Simple_db();<br />

Application.Run();<br />

Od momentu uruchomienia pętli<br />

głównej, za sterowanie naszą aplikacją<br />

jest już odpowiedzialna biblioteka<br />

GTK+. Ostatnią niewiadomą jest sposób<br />

utworzenia assembly, które będzie<br />

zawierać dane xml naszej formatki.<br />

Dokonujemy tego poleceniem -resource<br />

w momencie kompilacji naszej<br />

aplikacji:<br />

mcs -unsafe $(all_assemblies) S<br />

Simple_db.cs -resource:mainwin.glade<br />

Utworzenie nowej bazy<br />

danych<br />

Zobaczmy, jak wygląda kod tworzenia<br />

nowej bazy, który już omawialiśmy od<br />

strony SQL. Proces ten pokazuje również<br />

Rysunek 5.<br />

Pełny kod metody zawiera Listing 6.<br />

W pierwszej kolejności zmiennej<br />

db_file_name (plik z bazą nadajemy<br />

pustą wartość danych). Następnie tworzymy<br />

nowe okno wyboru i podłączamy<br />

się pod zdarzenia dla przycisków OK<br />

i Zaniechaj. W tych zdarzeniach zmie-<br />

64 czerwiec 2004


mono<br />

dla programistów<br />

Listing 6. Obsługa sygnału dla przycisku „Nowa baza”<br />

public void on_Btn_NewDB_clicked (System.Object b, EventArgs e) {<br />

db_file_name="";<br />

FileSelection fs = new FileSelection ("Proszę podać nazwę nowej bazy:");<br />

file_sel=fs;<br />

fs.OkButton.Clicked += new EventHandler(OnFS_OkButton_Clicked);<br />

fs.CancelButton.Clicked += new EventHandler(OnFS_CancelButton_Clicked);<br />

fs.Run ();<br />

fs.Hide();<br />

Console.WriteLine("after fs.run "+db_file_name);<br />

file_sel=null;<br />

if(db_file_name!=""){<br />

DBOperation db=new DBOperation();<br />

db.OpenLink();<br />

db.CreateDB(db_file_name);<br />

db.CloseLink();<br />

}<br />

}<br />

niamy wartość zmiennej db_file_name<br />

w zależności, co wybrał użytkownik.<br />

Gdy użytkownik naszego programu<br />

wpisze nazwę nowej bazy oraz<br />

wybierze przycisk OK, to w zmiennej<br />

db_file_name znajdzie się nazwa<br />

pliku. Instrukcja if dopuści w takim<br />

przypadku do wykonania się kodu,<br />

który już omówiłem na początku tego<br />

artykułu. W każdym innym przypadku<br />

zmienna db_file_name pozostaje<br />

pusta, więc instrukcja if nie dopuści<br />

do wykonania kodu tworzącego nową<br />

bazę.<br />

Okno edycji i przeglądania<br />

danych<br />

Drugim elementem interfejsu, który<br />

chciałbym pokrótce przedstawić, jest<br />

okno edycji i przeglądania danych (lookwin).<br />

Gdy użytkownik wybierze<br />

odpowiednią opcję z menu bądź kliknie<br />

na przycisk, to zostanie wywołana<br />

metoda on_Btn_EditData_clicked.<br />

Metoda ta została przedstawiona na<br />

Listingu 7.<br />

W pierwszej kolejności sprawdzamy,<br />

czy została wybrana baza danych.<br />

Jeśli nie, to na ekranie zobaczymy<br />

komunikat o tym fakcie. Następnie<br />

wyświetlamy okno na ekranie:<br />

lookwin.Show(). Po tej czynności<br />

wykonujemy bardzo ważną czynność,<br />

a mianowicie otwieramy bazę<br />

danych i metodą GetBasicData<br />

wypełniamy listę (o trzech elementach:<br />

id, imie nazwisko) osobami,<br />

które są zapisane w bazie. Jak widać,<br />

baza po tej operacji zostaje od<br />

razu zamknięta, ale użytkownik<br />

ma już przed sobą okno edycji<br />

danych.<br />

Listing 7. Wyświetlenie okna edycji danych<br />

public void on_Btn_EditData_clicked (System.Object b, EventArgs e){<br />

if(db_file_name=="") {<br />

ShowMsg_DB_Not_Found();<br />

}<br />

else {<br />

lookwin.Show();<br />

DBOperation db=new DBOperation();<br />

db.OpenLink();<br />

db.OpenDB(db_file_name);<br />

db.GetBasicData( (TreeStore)basic_data_view.Model );<br />

db.CloseLink();<br />

}<br />

}<br />

www.lpmagazine.org<br />

65


dla programistów<br />

Tabela 1. Metody klasy DBOperation<br />

Metoda<br />

OpenLink<br />

CreateDB<br />

OpenDB<br />

CreateTable<br />

InsertData<br />

GetOtherData<br />

GetBasicData<br />

UpdateData<br />

DeleteRecord<br />

SearchNazwisko<br />

SearchTelefonSt<br />

SearchTelefonKom<br />

CloseLink<br />

Opis<br />

Z poziomu tego okna możemy<br />

przeglądać zgromadzone dane oraz<br />

nanosić poprawki. Gdy klikniemy<br />

na wiersz listy, to zostanie wywołana<br />

metoda on_basic_data_view_<br />

cursor_changed, co spowoduje, że<br />

w polach edycyjnych obok listy pojawią<br />

się pozostałe dane związane<br />

z wybraną osobą. Do uzupełnienia tych<br />

pól wykorzystujemy metodę<br />

GetOtherData, jednak wcześniej<br />

należy odczytać wartości id, imie<br />

i nazwisko z wiersza, który został<br />

wskazany.<br />

Ta operacja wymaga wbrew pozorom<br />

większej ilości kodu. Na początek tworzymy<br />

trzy zmienne:<br />

GLib.Value v0=new Glib.Value();<br />

GLib.Value v1=new Glib.Value();<br />

GLib.Value v2=new GLib.Value();<br />

Nawiązanie połączenia z bazą danych.<br />

Utworzenie nowe bazy danych (w tym tabeli osoby).<br />

Otwarcie istniejącej bazy danych.<br />

Metoda tworząca tabele osoby.<br />

Dołączenie nowego rekordu do tabeli.<br />

Odczytanie pozostałych informacji o określonej osobie,<br />

np. adresu, numeru telefonu itd.<br />

Pobranie listy imion i nazwisko (oraz numeru id) wszystkich<br />

osób w bazie.<br />

Uaktualnienie informacji o określonej osobie.<br />

Usunięcie rekordu o podanym numerze id.<br />

Odszukanie osoby (osób) o podanym nazwisku.<br />

Odszukanie osoby (osób) o podanym numerze telefonu.<br />

Odszukanie osoby (osób) o podanym numerze telefonu<br />

komórkowego.<br />

Zamknięcie połączenia z bazą danych.<br />

TreePath tp=new TreePath();<br />

TreeViewColumn tvc=new<br />

TreeViewColumn();<br />

Dzięki tym dwóm obiektom możemy<br />

skorzystać z metody GetCursor:<br />

basic_data_view.GetCursor S<br />

(out tp, out tvc);<br />

W zmiennej tp i tvc znajduje się wskazanie<br />

na konkretny wiersz komponentu<br />

basic_data_view. Proces odczytu<br />

wymaga dodatkowych zmiennych, gdyż<br />

GtkTreeView może przedstawiać również<br />

struktury drzewiaste, a nie tylko listy.<br />

Z tego powodu API tego komponentu<br />

jest „nieco” skomplikowane. Ostatecznie,<br />

aby „dobrać się” do potrzebnych danych,<br />

tworzymy iterator i wywołujemy metodę<br />

GetIter:<br />

Dane są zapisane w obiektach Glib.Value,<br />

ale bardzo prosta konwersja spowoduje,<br />

że mamy do czynienia ze zwykłymi łańcuchami<br />

znaków:<br />

id=(string)v0.Val;<br />

imie=(string)v1.Val;<br />

nazwisko=(string)v2.Val;<br />

Teraz już za pomocą GetOtherData<br />

pobieramy dodatkowe dane i przepisujemy<br />

poszczególne pola do widgetów<br />

np. dla numery domu wygląda to<br />

następująco: lk_nr_domu.Text=tmp_lk_<br />

nr_domu;.<br />

Przyszłość Mono<br />

Wydaje się, że środowisko Mono<br />

w przypadku Linuksa ma zapewnioną<br />

przyszłość. Już teraz jest to<br />

pakiet o sporych możliwościach,<br />

choćby dlatego, że oferuje dostęp do<br />

baz danych, tych darmowych, takich<br />

jak Sqlite, Mysql, Firebird, ale również<br />

i komercyjnych, takich jak Oracle czy<br />

DB2. Oferuje też bardzo dobrą<br />

wydajność oraz ułatwia przenoszenie<br />

już skompilowanego oprogramowania<br />

pomiędzy różnymi platformami,<br />

takimi jak Linux, Solaris czy<br />

Win32. Ostatecznie, ułatwia pisanie<br />

aplikacji opartych o GNOME<br />

i GTK+, bowiem zrealizowany projekt<br />

dzięki obiektom jest znacznie<br />

bardziej przejrzysty, a automatyczne<br />

zarządzanie pamięcią zwalnia<br />

nas z pilnowania operacji żmudnego<br />

usuwania widgetów.<br />

Zachęcam do zapoznania się z C#<br />

i Mono, bo z pewnością w przyszłości<br />

będą to liczące się technologie w systemie<br />

Linux.<br />

Potrzebne są nam jeszcze dwa obiekty,<br />

tzw. ścieżka i widok kolumn:<br />

Rysunek 5. Tworzenie nowej bazy<br />

w programie „Spis osób”<br />

TreeIter ti=new TreeIter();<br />

basic_data_view.Model.GetIter S<br />

(out ti, tp);<br />

Teraz już można odczytać dane<br />

z iteratora, pamiętając o tym, że są<br />

one indeksowane podobnie jak tablica<br />

od zera:<br />

basic_data_view.Model.GetValue S<br />

(ti, 0, v0);<br />

basic_data_view.Model.GetValue S<br />

(ti, 1, v1);<br />

basic_data_view.Model.GetValue S<br />

(ti, 2, v2);<br />

W Internecie:<br />

• Strona domowa projektu Mono:<br />

http://www.go-mono.org/<br />

• Polska wersja strony projektu Mono:<br />

http://www.go-mono.pl/<br />

• Strona biblioteki Gtk-Sharp:<br />

http://gtk-sharp.sourceforge.net/<br />

• Strona domowa systemy<br />

baz danych Sqlite:<br />

http://www.hwaci.com/sw/sqlite/<br />

• Strona domowa projektu ICU<br />

polecanego w kompilacji Mono:<br />

http://www-124.ibm.com/icu/<br />

66 czerwiec 2004


dla graczy<br />

Crimson Fields<br />

Piotr Truszkowski<br />

Gier strategicznych na Linuksa<br />

mamy wiele. Są to przeważnie<br />

tytuły, które wykorzystują<br />

zdobycze najnowszych<br />

technologii i wymagają do pracy<br />

ogromnych nakładów pamięci RAM<br />

i bardzo szybkich akceleratorów 3D.<br />

Co jednak mają zrobić Ci użytkownicy<br />

Linuksa, którzy nie posiadają takiego<br />

sprzętu, a chcą dobrze się bawić przy<br />

okazji wytężając swoje szare komórki?<br />

Odpowiedź jest prosta – zainstalować<br />

Crimson Fields.<br />

Omawiany tytuł należy do grona gier<br />

taktycznych. Nie cechuje go wspaniała<br />

grafika i ogromna ilość efektów specjalnych<br />

zasłaniających sens gry i ukrywających<br />

jej płytkość. Za podstawę zabawy<br />

autorzy postawili sobie tzw. „miodność”.<br />

Ci z Was, którzy grali w kultowy już cykl<br />

Battle Isle, poczują się przy Crimson Fields<br />

jak w domu. Te gry mają naprawdę wiele<br />

wspólnego, a autorzy opisywanej gry nie<br />

kryją fascynacji tym leciwym tytułem.<br />

Co więcej, Crimson Fields to niemalże<br />

dokładny klon Battle Isle. Możemy nawet<br />

wykorzystać mapy z oryginalnego tytułu.<br />

Znowu mamy do czynienia z planszą<br />

podzieloną na heksy, na której zmagają się<br />

wrogie oddziały wyposażone w pojazdy<br />

wojskowe najróżniejszego typu. Cała rozgrywka<br />

podzielona jest na tury.<br />

Gramy!<br />

Crimson Fields nie jest grą dla ludzi<br />

potrzebujących szybkiej rozgrywki. Akcja<br />

toczy się powoli – mamy dużo czasu<br />

na obmyślenie naszej strategii działania.<br />

Jeśli ktoś z Was grał w The Settlers czy<br />

wymieniony wcześniej Battle Isle, wie,<br />

o czym piszę. Wybieramy więc jedną<br />

DVD<br />

Po uruchomieniu dystrybucji Linux+ Live<br />

na pulpicie będzie dostępna pozycja do<br />

uruchomienia gry.<br />

Na płycie CD/DVD<br />

Na płycie CD/DVD znajduje się<br />

statyczny pakiet binarny z grą.<br />

Rysunek 1. Armia wroga nie jest zbyt liczna<br />

z 12 map i zaczynamy grę. Nasze zadanie<br />

będzie polegać na zniszczeniu jednostek<br />

wroga i tylko od naszej taktyki oraz<br />

przemyślenia akcji zależy, czy uda się to<br />

zadanie. A myśleć i planować będziemy<br />

musieli naprawdę sporo. Często przeciwnik<br />

dysponuje znacznie lepszym zapleczem<br />

technicznym niż my.<br />

Ogromną zaletą gry jest możliwość<br />

zapisania stanu gry. Bez tej możliwości<br />

perspektywa toczenia bitw, które mogą<br />

potrwać nawet kilka godzin, wydaje się<br />

średnio rozsądnym zajęciem nawet dla<br />

najlepszych strategów.<br />

Audio i wideo<br />

Crimson Fields nie rozpieszcza nas ani<br />

pod względem graficznym ani dźwiękowym.<br />

Można powiedzieć, że oprawa<br />

audiowizualna jest spartańska. Mimo<br />

wszystko jednak, oprawa graficzna jest<br />

czytelna i chyba właśnie o to chodzi. Gra<br />

wygląda najlepiej w średniej rozdzielczości.<br />

Wyższe rozdzielczości powodują, że<br />

rozgrywka staje się mniej czytelna i gra<br />

wyraźnie dostaje efektu „mikroskopu”<br />

– aby zauważyć jakąkolwiek jednostkę,<br />

trzeba naprawdę mocno wytężyć wzrok.<br />

Oprawę audio muszę przemilczeć, ponieważ<br />

prawie w ogóle jej nie ma. O ile<br />

spartańską grafikę można jakoś usprawiedliwić<br />

(chociażby ze względów sentymentalnych),<br />

o tyle spartańskie dźwięki<br />

z pewnością nie są tym, czego spodziewałem<br />

się po tym tytule.<br />

Podsumowanie<br />

Opisywany tytuł z pewnością zadowoli<br />

wytrawnych strategów i fanów serii Battle<br />

Isle. Jego ogromną zaletą jest... wyjątkowość.<br />

Gier tego typu na Linuksa nie ma<br />

zbyt wiele, a te, które są, Crimson Fields<br />

bije na głowę pod niemalże każdym<br />

względem. Dokładając do tego całkiem<br />

dobre AI komputerowego przeciwnika<br />

i klimat, tak rzadko obecny w ówczesnych<br />

produkcjach, można powiedzieć, że Crimson<br />

Fields jest tytułem, nad którym warto<br />

spędzić kilka dni i nocy. Czy poprowadzisz<br />

swoją armię ku chwale?<br />

W Internecie:<br />

●<br />

Strona domowa gry Crimson Fields:<br />

http://crimson.seul.org/<br />

68 czerwiec 2004


warto przeczytać<br />

aktualności<br />

piotrt@lpmagazine.org<br />

dział prowadzi: Piotr Truszkowski<br />

Serwery internetowe Red Hat Linux<br />

Autorzy: Paul G. Sery, Jay Beale<br />

Tłumaczenie: Rafał Szpoton (rozdz. 1 - 9, 19, dod. A - C), Marek Pętlicki (rozdz. 10 - 18)<br />

ISBN: 83-7361-415-X<br />

Tytuł oryginału: Red Hat Linux Internet Server<br />

Format: B5, stron: 536<br />

Data wydania: 03/2004<br />

Cena książki: 59.90 zł<br />

<br />

Hat to bez wątpienia najpopularniejsza dystrybucja Linuksa na świecie. Jest wykorzystywana zarówno<br />

na komputerach klasy desktop, jak i serwerach. Książka „Serwery internetowe Red Hat Linux” omawia<br />

w przystępny sposób aspekty wykorzystania systemu Red Hat Linux w środowisku serwerowym. W książce<br />

przeczytamy m.in. tematy związane z tworzeniem firewalla, uruchamianiem serwera WWW, DNS, poczty,<br />

FTP czy Samby. Dowiemy się również, jak stworzyć system detekcji włamań oraz jak kontrolować to wszystko,<br />

co dzieje się w naszym systemie. Książka z pewnością zadowoli początkujących administratorów sieci,<br />

jak również tych, którzy chcą szybko uruchomić przedstawione serwery bez głębszego zagłębiania się<br />

w arkana systemu.<br />

PC hardware. Almanach. Wydanie III<br />

Autor: Robert Bruce Thompson, Barbara Fritchman Thompsong<br />

Tłumaczenie: Michał Dadan (rozdz. 0 – 3, 14 – 16, 28), Zygmunt Wereszczyński (rozdz. 4 – 12),<br />

Radosław Meryk (rozdz. 13, 17 – 27)<br />

ISBN: 83-7361-342-0<br />

Tytuł oryginału: PC Hardware in a Nutshell, 3rd Edition<br />

Format: B5, stron: 1040<br />

Data wydania: 03/2004<br />

Cena książki: 99.90 zł<br />

Sprzęt komputerowy rozwija się bardzo dynamicznie. Wciąż jesteśmy wręcz zasypywani nowymi kartami<br />

graficznymi, procesorami czy płytami głównymi. Po zakupie nowego sprzętu często pojawia się pytanie, jak<br />

to podłączyć i zainstalować w systemie? Książka „PC hardware. Almanach”, wydana nakładem wydawnictwa<br />

Helion, to kompleksowe omówienie chyba wszystkich aspektów związanych z urządzeniami w komputerach<br />

PC. Co w tym jednak ciekawego dla użytkownika Linuksa? Już na okładce możemy zauważyć,<br />

że opisy dotyczą systemów Windows i Linux. Objaśniono zagadnienia związane z instalacją urządzeń na<br />

popularnych dystrybucjach Linuksa (Red Hat, Fedora, Mandrake). Gorąco polecam ten tytuł każdemu posiadaczowi<br />

komputera PC. To wspaniała biblia wiadomości, przydatna każdemu bez względu na posiadany<br />

system operacyjny.<br />

Bestsellery Merlina<br />

Lista najlepiej sprzedających się książek informatycznych<br />

w sklepie internetowym www.merlin.pl, w miesiącu kwietniu:<br />

1. J2EE. Wzorce projektowe (wydanie 2) – D. Alur, J. Crupi, D. Malks, Helion, 2004<br />

2. ABC grafiki komputerowej – R. Zimek, Ł. Oberlan, Helion, 2004<br />

3. Google dla praktyków – A. Szewczyk, Mikom, 2003<br />

4. Kompresja danych - wprowadzenie – K. Sayood, Read Me, 2002<br />

5. Delphi 7 – M. Cantu, Mikom, 2004<br />

6. Grafika 3D. Modelowanie i rendering od podstaw, Axel Spronger, 2004<br />

7. Notes Anty - hakera: Bezpieczeństwo Windows – M. O’Dea, Translator, 2004<br />

8. Praktyczny kurs Java + CD-ROM – M. Lis, Helion, 2004<br />

9. Organizacja i architektura systemu komputerowego. Projektowanie systemu a jego wydajność – W. Stallings, WNT, 2003<br />

10. ABC komputera 2004 – Z. Dec, R. Konieczny, Edition 2000, 2004<br />

www.lpmagazine.org<br />

69


Zainwestuj w siebie, zainwestuj w swojego pracownika<br />

PRENUMERATA TO NAJLEPSZY WYBÓR<br />

Z A M Ó W I E N I E<br />

Prosimy wypełnić czytelnie i przesłać faksem na numer: (22) 860 17 71 lub listownie na adres Software-Wydawnictwo Sp. z o.o.,<br />

Lewartowskiego 6, 00-190 Warszawa, e-mail: pren@software.com.pl. Przyjmujemy też zamówienia telefoniczne: (22) 860 17 67<br />

Imię i Nazwisko<br />

Stanowisko<br />

ID kontrahenta*<br />

* jeżeli jesteś już klientem firmy Software-Wydawnictwo Sp. z o.o. – wystarczy, że podasz swój numer<br />

ID kontrahenta; jeżeli nie posiadasz takiego numeru, podaj swe dane w tabeli Dane teleadresowe<br />

Upoważniam firmę Software-Wydawnictwo Sp. z o.o. do wystawienia faktury VAT bez podpisu odbiorcy<br />

Pieczęć firmy i podpis<br />

Dane teleadresowe<br />

Nazwa firmy<br />

Dokładny adres<br />

Telefon (wraz z numerem kierunkowym)<br />

Adres e-mail<br />

Faks (wraz z numerem kierunkowym)<br />

Numer NIP firmy<br />

Tytuł pisma<br />

Liczba<br />

kolejnych<br />

numerów<br />

Liczba<br />

zamawianych<br />

prenumerat<br />

Od numeru<br />

pisma<br />

lub miesiąca<br />

Opłata w zł<br />

Aurox<br />

Numery specjalne Linux+ Extra! z dystrybucją Aurox Linux<br />

4<br />

Oferta dla szkół: 99 zł<br />

Oferta standardowa: 119 zł<br />

Linux+<br />

Miesięcznik użytkowników systemów linuksowych<br />

12<br />

*<br />

Linux+ Extra!<br />

Numery specjalne z dystrybucjami Linuksa<br />

8<br />

Oferta dla prenumeratorów Linux+ lub Software 2.0: 198 zł<br />

Oferta standardowa: 232 zł<br />

Linux w szkole<br />

Kwartalnik o stosowaniu Linuksa w edukacji<br />

4 99 zł<br />

W sumie<br />

(liczba prenumerat * cena)<br />

* 180 zł – prenumerata roczna (12 numerów) Linux+ dla studentów i osób prywatnych<br />

* 250 zł – prenumerata roczna (12 numerów) Linux+ dla firm<br />

UWAGA! Nadesłanie zamówienia jest jednocześnie zobowiązaniem do zapłaty!<br />

SOFTWARE-WYDAWNICTWO SP. Z O.O.<br />

ul. Lewartowskiego 6, 00-190 Warszawa, e-mail: pren@software.com.pl

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!