Urządzenia

Adrian Pawlik niedziela, 26 wrzesień 2004
Linux od początku był pisany, aby można było w nim obsłużyć wiele urządzeń różnego typu. Dlatego też powinieneś wiedzieć jak system je traktuje. Z rozdziału tego dowiesz się przede wszystkim jak są one reprezentowane i jak system się z nimi komunikuje... Jak reprezentowane są urządzenia w Linuksie?

W /dev (skrót od devices - urządzenia) znajdują się pliki, przez które następuje komunikacja ze sprzętem. Widoczne są tu takie pliki, jak modem, mouse itp. Tak właśnie Linux traktuje urządzenia. W ww. katalogu znajdują się jakby informacje, gdzie nasz sprzęt jest zainstalowany.
W konfiguracji wielu programów musimy właśnie podać ścieżki do urządzeń z tego katalogu.

A więc aby przesłać komunikat jakiemuś urządzeniu wystarczy przesłać go do odpowiedniego pliku. Sytuacja jest identyczna w przypadku odczytu komunikatów zwracanych przez sprzęt. Aby lepiej się temu przyjrzeć wystarczy na przykład napisać prosty program w c++:

#include <iostream>
#include <fstream>
#include <string>

using namespace std;

int main()
{
  ofstream modem("/dev/modem");
  ifstream od_modemu("/dev/modem");
  string odpowiedz;
  modem << "ATZ\n";
  while(getline(od_modemu, odpowiedz))
  {
    cout << odpowiedz << endl;
    exit(1);
  }
}


Program kompilujemy za pomocą g++:

$ g++ modem.cpp -o modem

Opcja -o określa plik wyjściowy (przekompilowany).

I uruchamiamy:

$ ./modem

Inną metodą, właściwie dużo łatwiejszą i szybszą, jest przesłanie komunikatu do modemu z poziomu Basha:

$ echo "ATZ" > /dev/modem

Modem w odpowiedzi na pytanie powinien po prostu piknąć. Jeśli jednak tego nie wykonał, to bardzo prawdopodobne, że widnieje on pod innym adresem. Nie zapominajmy, że /dev/modem to tylko dowiązanie symboliczne, czyli "odsyłacz". Modem tak naprawdę jest (prawdopodobnie) pod /dev/ttySx, gdzie x to numer portu modemu ( UWAGA: w Uniksach liczenie zaczyna się od 0). Tak więc możesz poprawić dowiązanie:

# ln -s /dev/ttySx /dev/modem

bądź po prostu zmienić w programie czy poleceniu echo adres...

I tak na przykład możesz za pomocą echo odtwarzać muzykę! Tak, tak - trochę dziwnie to brzmi, ale to prawda... Jest tylko jedno ale - odtwarzane pliki nie mogą być kodowane, tak jak sławne ogg, czy mp3. A więc jak?

cat /home/imoteph/sound.au > /dev/audio &

Na koniec tego tematu wytłumaczę jeszcze dwa symbole, które się tu pojawiły: ">" i "&". Pierwszy z nich oznacza przekierowanie standardowego wejścia na dany plik z jego nadpisaniem. ">>" także oznacza przekierowanie, tylko z tą różnicą, że plik docelowy nie jest nadpisywany, lecz dane są do niego dopisywane.
"&" oznacza pracę procesu (programu) w tle. Dzięki temu będziemy mogli wykonywać inne czynności podczas słuchania muzyki (oczywiście mowa o pracy na konsoli, z której został uruchomiony proces).

Na temat urządzeń nie musisz wiedzieć zbyt dużo. Na początek wystarczy Ci miejsce ich pobytu i sposób komunikacji z nimi, a wraz z każdym krokiem na przód sam poznasz tajniki obsługi sprzętu przez Linuksa.

Winsprzęt - kłopot?

Za pewne z samej nazwy domyślasz się co oznacza owa nazwa... No właśnie dziś sprzęt komputerowy tanieje na naszych oczach. Ale czy tanieje, bo wychodzą coraz to nowsze urządzenia? I tak, i nie...  Producenci często wydają na rynek tak zwany winsprzęt - urządzenia "przystosowane" do pracy z Windows. Bardzo często widać to w modemach, które nabyć można już nawet za 60 zł! Z racji, że na dołączonej płycie znajdziemy tylko sterowniki dla Windows, możemy mieć kłopoty z zainstalowaniem sprzętu w Linuksie. W najlepszym wypadku możemy poszukać nieoficjalnych sterowników w Internecie, często się jednak zdarza, że zakupiony przez nas sprzęt będziemy musieli odłożyć na półkę.

Kupując nowe urządzenia powinniśmy zapoznać się z informacją, z jakimi systemami sprzęt jest w pełni kompatybilny. Informację taką możemy uzyskać choćby od sprzedawcy w sklepie lub na oficjalnej stronie producenta. Dobrze jest także spytać na grupach dyskusyjnych (adresy na końcu), czy miał ktoś problemy, z wybranym przez nas sprzętem.

Instalacja urządzeń

Większość urządzeń wykryło odpowiednio juz skonfigurowane jądro Linuksa, bądź instalator dystrybucji. Zdarza się jednak, że instalator nie zainstaluje naszych wszystkich urządzeń, a jądro nie ma wkompilowanych odpowiednich modułów (czytaj dział Jądro Linuksa). W tym rozdziale pomogę zainstalować Ci kartę dźwiękową, modem, klawiaturę multimedialną i drukarkę.

Dźwięk w Linuksie
Rzadko zdarza się, że w systemie nie działa nasza karta dźwiękowa. Wiele częściej występuje problem praw dostępu do tych urządzeń, przez co programu nie mogę korzystać ze sprzętu. Pierwszym krokiem, który wykonamy, to właśnie sprawdzenie praw. W tym celu logujemy się na konto roota i sprawdzamy do jakiej grupy należą pliki urządzenie dźwięku:

woody:/home/imoteph# cd /dev/
woody:/dev# ls -al | less

Ujrzymy długą listę... teraz skupimy się na lini z plikem audio:

crw-rw----    1 root     audio     14,   4 mar 14  2002 audio

Widać, że właścicielem pliku jest root. Plik należy także do grupy audio. Najlepszym sposobem jest teraz dodanie swojego użytkownika do tej grupy. Służy do tego polecenie adduser:

# adduser imoteph audio

Powinniśmy ujrzeć komunikat o dodaniu użytkiownika do grupy. Jeśli jednak adduser zwrócił informację, że użytkownik należy już do tej grupy, prowdopodobne jest, że to nie w prawach dostępu, lecz w sterownikach leży  problem.

Neleży teraz sprawdzić na jakim chipsecie jest nasza karta dźwiękowa. Najlepiej jest to zrobić przy pomocu polecenie lspci:

imoteph@woody:~$ lspci -vvv

Program wyświetli informacje o naszym sprzęci podłączonym do PCI, a także zintegrowanym z płytą główną. W moim przypadku podał, że kontroler dźwięku obsługuje chipset nvidii - nForce2.
Teraz musimy sprawdzić jakie moduły mamy dostępne w jądrze. Wpisujemy:

woody:/dev# lsmod

Oto wyniki na moim Debianie, z rekompilowanym jądrze 2.4.20:

Module                  Size  Used by    Tainted: P
ppp_deflate             3008   0  (autoclean)
zlib_deflate           18048   0  (autoclean) [ppp_deflate]
zlib_inflate           18688   0  (autoclean) [ppp_deflate]
bsd_comp                4032   0  (autoclean)
ppp_async               7008   0  (autoclean)
ppp_generic            18732   0  (autoclean) [ppp_deflate bsd_comp ppp_async]
slhc                    4736   0  (autoclean) [ppp_generic]
hcfpciserial           17952   0  (autoclean)
hcfpciengine          637944   0  (autoclean) [hcfpciserial]
hcfpciosspec           15272   1  (autoclean) [hcfpciserial hcfpciengine]
i810_audio             22464   1
ac97_codec             10304   0  [i810_audio]
nvnet                  25824   2
dummy                   1088   0  (unused)
nvidia               1467808  10

Teraz wystarczy załadować odpowiedni moduł: i810_audio i możemy cieszyć się dźwiękiem. Zdarza się nieraz jednak, że nie mamy do dyspozycji modułów ze terownikami do naszego sprzętu. Rozwiązaniem okazuje się rekompilacja jądra (jak w moim przypadku). Oto lista dostępnych opcji w sekcji Sound jądra 2.4.20:

ALi5455 audio support
BT878 audio dma
C-Media PCI (CMI8338/8738)
Creative SBLive! (EMU10K1)
Crystal SoundFusion (CS4280/461x)
Crystal Sound CS4281
Ensoniq AudioPCI (ES1370)
Creative Ensoniq AudioPCI 97 (ES1371)
ESS Technology Solo1
ESS Maestro, Maestro2, Maestro2E driver
ESS Maestro3/Allegro driver (EXPERIMENTAL)
ForteMedia FM801 driver (EXPERIMENTAL)
Intel ICH (i8xx), SiS 7012, NVidia nForce Audio or AMD 768/811x
RME Hammerfall (RME96XX) support
S3 SonicVibes
Trident 4DWave DX/NX, SiS 7018 or ALi 5451 PCI Audio Core
Support for Turtle Beach MultiSound Classic, Tahiti, Monterey
Support for Turtle Beach MultiSound Pinnacle, Fiji
VIA 82C686 Audio Codec
OSS sound modules

Modem
Modem to podstawowe drzwi na świat Internetu. Linux bez sieci, nie jest już tym samym Linuksem, dlatego w systemie powinieneś skonfigurować także swój modem.
Linux powinien bezproblemowo wykryć wszystkie modemu zewnętrzne, z racji, iż są to prawdziwe sprzętowe urządzenie, nie potrzebujące sterowników do swojej obsługi. Inaczej jest jednak z modememi wewnętrznymi. Bardzo często zdarza się, że są to urządzenia, które potrzebują wykorzystywać procesor głowny, zamiast swoich układów. Pisane są wtedy dla nich sterowniki, aby system mógł z nich korzystać.  Niestety tylko pod jeden system zazwyczaj pisane są takie sterowniki - pod Windows, przez co inne systemy, w tym Linux nie mogą używać takich modemów.

Na szczęście jest na rynku kilka modemów wewnętzrnych, które działąją pod Linuksem. Obecnie chyba tylko firma Pentagram produkuje tanie modemy, do których dołączają także starowiniki dla Linuksa.
Innymi modemami dość dobrze pracującymi pod Linuksem są modemy firmy Zoltrix. Ta co prawda nie dostracza żadnych sterowników, ale znalazły się osoby, które napisały takie dla modemów pracyjących na chuipsecie Connexant. W ten sposób możemy łączyć się z Internetem modemami na tych układach.

Przed pobraniem sterowników musimy sprawdzić jakim modemem jest nasz modem. Oczywiście posłużu nam do tego lspci. Oto wyniki na moim komputerze:

Communication controller: Conexant HCF 56k Data/Fax/Voice/Spkp (w/Handset) Modem (rev 08)

Widać, że modem pracuje pod tym chipsetem. Dodatkowa informacja to typ - HCF. Udajemy się teraz pod www.linuxant.com i pobieramy najnowsze starowniki cla modemów Connexant HCF. Instalcja jest dziecinnie prosta. Musimy wykonać tylko parę poleceń i możemy sprawdzać modem. Najpierw upenijmy się ze w katalogu /usr/src/linux mamy źródła, bądź nagłówki obecnego jądra. Jeśli okaże się, że nie, sterowniki nie skompilują się. Dlatego też musimy wcześniej zainstalować paczkę z odpowiednimi plikami. Włączamy w tym celu dowolny manedżer pakietów i przeszukujemy listę ciągami: "kernel", "header" bądź "source". Po znalezieniu odpowiedniego pakietu oczywiście go instalujemy. Musimy sprawdzić jeszcze, czy napewno źródła dostępne będą w /usr/src/linux. Jeżeli tak nie jest tworzyly dowiązanie symboliczne:

# ln -s /usr/src/linux/ /usr/src/katalog_jądra/

Przechodzimy następnie do samej już instalacji sterowników:

  1. rozpakowujemy pobrany plik,
  2. przechodzimy do katalogu z rozpakowanymi sterownikami poleceniem 'cd',
  3. wydajemy polecenie z roota 'make install'
Po chwili będziemy mieli już gotowe moduły w jądrze. Teraz należy je odpowiednio skonfigurować. My posłużymy się automatyczną konfiguracją modemu przez program hcfpciconfig. Uruchamiamy program i odpowiadamy twierdząco na pytania. Na samym końcu program zapyta nas o ścieżkę do jądra. Podajemy oczywiście /usr/src/linux/.

Od tej chwili nasz modem powinien już bezproblemowo działać. Jedyne co powinniśmy teraz zrobić to odpowiedni link do niego:

# rm /dev/modem
# ln -s /dev/modem /dev/ttySHCF0

Sprawdzamy czy wszytsko jest w porządku:

$ echo "ATZ" >> /dev/modem

Urządzenie w odpowiedzi powinno piknąć. Teraz możemy już surfować po sieci, używając do tego aplikacji z naszej dystrybucji!

Klawiatura multimedialna
Klawiatury multimedialne bardzo przydają się podczas słuchania muzyki, oglądania filmów, a także pracy w sieci. Dlatego też powinniśmy mieć dostępną obsługę tago urządzenia w Linuksie.
Dość dobrym narzędziem do konfiguracji dodatkowych klawiszy jest program HotKeys. Powiniem być on dostępny w większości dystrybucji, więc uruchamiamy manadżer paketów i instalujemy go.  Jedynum minusem programu jest fakt, że działa tylko z serwerem X, czyli w graficznym środowisku pracy, choć konfiguruje się go z poziomy powłoki. Za każdym razem, gdy zostaje uruchmowiany trzeba podawać mu nazwę klawiatury do obsługi. Lista obsługiwanych modeli dostępna jest pod opcją '-l'. Szybko zoriętujesz się ze program ma dostępnych zaledwie kilka modeli, a Twojej klawiatury prawdopodobnie wśród nich nie ma. Jedyne co nam pozostaje to stworzenie własnych definicji. Na początek może trochę ionformacji na  temat plików HotKeys. Program posuada plik konfiguracyjny hotkeys.conf w /etc/. W /usr/share/hotkeys/ znajdują się pliki z definicjami różnych modeli. Pliki te mają postać zbliżoną do:

<Opcja keycode="numer"/>

Czyli abyśmy mogli kożystać z dodatkowych klawiszy, potrzebujemy ich kody. Pomoże nam teraz program Xev. Jeśli nie mamy go zainstalowaneg, to znajdziemy go na płytkach dystrybycji. Uruchamiamy program i wciskamy interesujące nas klawisze. Program następnie wyświetli potrzebne nam kody.
Następnie edytujemy dowolny plik z katalogu z definicjami. W miejsca starych kodów podstawiamy, nowe. Zmieniamy jeszcze sekcję 'model', gdzie podajemu nazwę naszej klawiatury. Definicje dla mojej klawiatury przedstawiają się następująco:

<?xml version="1.0"?>
<CONFIG model="IBM kb99-30">

<!-- Traki -->

<PrevTrack keycode="164"/>
<Play keycode="162"/>
<Pause keycode="160"/>
<NextTrack keycode="146"/>

<!-- Audio -->

<VolUp keycode="163" adj="1"/>
<VolDown keycode="161" adj="1"/>
<Mute keycode="158"/>

<!-- Internet -->

<Email keycode="178"/>
<Search keycode="166"/>
<WebBrowser keycode="165"/>


</CONFIG>

Plik zapisujemy do katalogu w postaci znawa.def. W moim przypadku - IBMkb-9930.def. Jeśli nic nie pomyliliśmy, to po wpisaniu w powłoce:

$ hotkeys -l IBM-kb9930

Powinniśmy ujrzeć ekran powitalny HotKeys, a system powinien reagować na wciskane klawisze dodatkowe.

HotKeys posiada bardzo wygodny sposób definiowania skrótów. Dzieki temu mamy możliwość wykonywania operacji, których autor nie zawarł w programie. Definicji dokonuje się bardzo prosto, np:

<userdef keycode="230" command="/usr/bin/mozilla -remote 'openURL(http://google.com)'">Go to URL</userdef>

Linię taką oczywiście dołączamy do pliku definiującego.

Jesli wszytsko działa tak jak chcieliśmy pora zabrać się za globalny plik konfiguracyjny. Edytujemy więc /etc/hotkeys.conf.  W sekcji 'Kdb' warto podać naszą klawiaturę, dzięki czemu nie będziemy musieli podawać jej podczas startu programu. Opcje ustawiamy wedle naszych upodobań. Zatrzymajmy się jednak przy opcjach OSD (wytświetlania na ekranie). Domyślny kolor zielony lekko razi, proponuję więc wybrać inny, np. pomarańczowy. Kolor ustawiamy w sekcji osd_color. Wartość powinna być w postaci #xxxxxx.
 Także wyświetlanie na dole ekranu to nienajlepsze rozwiązanie. Aby to zmienić ustawiamy opcję osd_offset na 1/2 wysokości ekrany, czyli np. na 384.
 Zmienić możemy także czas wyświatlania. Dokonujemy tego za pomocą osd_timeout. Tak wygląda mój plik hotkeys.conf:

Kbd=IBMkb-9930
CDROM=/dev/cdrom
 
PrevTrack=xmms --rew
Play=xmms --play
Stop=xmms --stop
Pause=xmms --pause
NextTrack=xmms --fwd
 
WebBrowser=mozilla
Email=evolution
Search=mozilla -remote 'openURL(http://google.com)'
 
#czerwony:
#osd_color=#aa0000
 
#niebieski:
#osd_color=#005cad
 
#pomaranczowy
osd_color=#ff9400
 

osd_timeout=2
osd_position=bottom
osd_offset=384

Ostatnim krokiem, jaki wykonamy, to utworzenie skryptu startowego, dzięki czemu program włączy sie automatycznie po starcie np. KDE. Uruchamiamy dowolny edytor umieszczamy w pliku:

#!/bin/bash 
hotkeys

Skrypt zapisujemy do .kde/Autostart w naszym katalogu domowym. Restartujemy KDE i możemy cieszyć się naszą klawiaturą w Linuksie.

Instalacja drukarki
Drukarka jest bardzo przydatnym urządzeniem, czy to w biurze, czy tez w zwykłym domu. W instalacji pomoże nam system drukowania CUPS. Powstał w 1999 roku i oferuje mnustwo funkcji, zaczynając na sprawnym drukowaniu dokumentów na naszej maszynie, kończąc na bardzo dobrej obsłudze zadań drukowania w sieci lokalnej.

Będziemy potzrebowali kilka pakietów, aby drukowanie było jak najbardziej wygodne. Uruchamiamy więc manadżer pakietów i instalujemy:

cupsys
cupsys-client
qtcups

Po instalacji system CUPS powinien być już gotowy do pracy. Możemy to sprawdzić wpisując w dowolnej przeglądarce adres http://127.0.0.1:631. Wszystkie opcje drukarmi możemy ustawić właśnie tutaj.

Kolejny nasz krok, to instalacja drukarki w systemie. Najlepiej teraz udać się na stronę www.linuxprinting.org . Znajduje się tam ogromna baza sterowników do drukarek dla systemu CUPS. Możemy także sprawdzić jak nasza drukarka sprawuje się w Linuksie, czy może sprawia kłopoty, itp.
Po odnalezieniu naszego modelu pobieramy odpowiedni dla niego plik PPD. Dla mojej drukarki HP 640c jest to plik HP-DeskJet_640C-hpijs.ppd. Następnie kopiujemy go do odpowiedniego katalogu z plikami CUPSa:

# cp HP-DeskJet_640C-hpijs.ppd /usr/share/cups/model/

i zmieniamy prawa na odczyt-zapis, odczyt, odczyt:

# chmod 644 HP-DeskJet_640C-hpijs.ppd

Teraz plik powinien być już dostępny w menu sterowników drukarek. Restarujemy jeszcze tylko CUPSa poleceniem

# /etc/init.d/cupsys restart

i możemy przejść do dodawania drukarki.
W przeglądarce otwieramy panel CUPSa i przechodfzimy do zakładki Printers, następnie Add printer. W oknie podajemy login root i oczywiście hasło administratora.
W polu Name podajemy nazwę dla drukarki, np. HP. Pozostałe pola możemy zostawić puste. Przechodzimy dalej. Z listy Device wybieramy typ podłączenia drukarki. W moim przypadku jest to port równoległy, więc wybieram Parallel Port#1.
Jeśli nic nie pomyliliśmy podczas dodawania pliku PPD, to teraz na liście drukarek powinien być widoczny także nasz sprzęt. Po jego wybraniu i zatwierdzeniu nasz adrukarka powinna być już gotowa do pracy.
Z powrotem przechodzimy do zakładki Printer, gdzie możemy wydrukować stronę testową. Dodatkowo w zakładce Configure printer możemy dokonać ustawień jakośći wydruku itp rzeczy. Jeśli coś pomyliliśmy podczas dodawania drukarki, możemy to poprawić w zakładce Modify Printer.

Aby sprawnie drukować użyjemy dodatkowo prograu qtcups, dzieki któremu będziemy mogli odwoływać się do CUPSa z innych programów, takich jak OpenOffice, czy Mozilla.
Wystarczy tylko zmianić polecenie drukowania w tych programach z lp lub lpr na qtcups z opcją -d określającą nazwę drukarki. Przykładowo może być to:

qtcups -d HP

Jak widać instalacja drukarki przy pomocy systemu CUPS nie jest taka trudna. System ten potrafi obsłużyć wiele modeli, także nie powininieneś mieć problemu z instalają swojej drukarki.

Ten artykuł jest częścią dużego artykułu pod tytułem Wprowadzenie do systemu Linux. Pełny dokument Wprowadzenie do systemu Linux

     
Nie ma nowych wpisów.
Witek dn. 2007-02-21
Urzadzenia
TO WĄTEK DYSKUSJI O: : Urzadzenia Rewelacja. Właśnie dzisiaj zastanawiałem się czy można w Linuksie wykorzystać dodatkowe przyciski na klawiaturze. Teraz...
Odpowiedzi: 0
Odsłon: 1541
Do góry