Download: Sysadmin_emailvid
Transkrypt
Download: Sysadmin_emailvid
SYSADMIN Nagrywanie wideo przy użyciu poczty e-mail Nagrywanie programów telewizyjnych za pomocą poczty elektronicznej Przyszłość telewizji Linux to czysta przyjemność. Multi- # usermod -G audio,video video media to czysta zabawa. Ale czy Aby to przetestować, nadaj użytkownikowi video hasło, zaloguj się i uruchom wybraną aplikację TV. Może to być przykładowo xawtv. Kiedy system będzie już gotowy, usuń hasło, uniemożliwiając w ten sposób innym osobom logowanie się w charakterze użytkownika video i wykorzystanie potencjalnych dziur w zabezpieczeniach. Dobrym pomysłem jest wysyłanie zwrotnych wiadomości e-mail. Mogą to być informacje, że nagrywanie zostało rozpoczęte lub że nie można wykonać polecenia. Należy przy tym pamiętać o wpisaniu w polu użytkownika tekstu, który będzie się pojawiać we wszystkich mailach. W przeciwnym razie nadawca wiadomości będzie widoczny jako „,,,”! można połączyć ze sobą razem dwie tak odmienne dziedziny, jak poczta elektroniczna i nagrywanie programów telewizyjnych? A co ważniejsze, czy uda się opracować rozwiązanie zapewniające rozrywkę? Steven Goodwin uważa, że tak... STEVEN GOODWIN L udzie zapytani o swoją wizję przyszłości zwykle mówią coś o latających pojazdach zastępujących tradycyjne auta i inteligentnych odkurzaczach. Jednak możliwość przesyłania do magnetowidu lub karty telewizyjnej wiadomości e-mail to nie science fiction! Dzięki Linuksowi jest to możliwe, w dodatku za darmo! Mając do dyspozycji popularne narzędzia, nieco cierpliwości i wolnego czasu, możesz stworzyć własne rozwiązanie. Przygotowania Podstawowe wymagania można podzielić na trzy kategorie. Zostały one przedstawione zgodnie z zasadami programowania zstępnego: 1. Dane wejściowe: dostajesz wiadomość e-mail (na adres [email protected]) ■ Kto ją odbiera? ■ Czy dany użytkownik ma prawa do sterowania nagrywaniem? 2. Przetwarzanie: wiadomość wywołuje o żądanej godzinie skrypt nagrywający. ■ W jaki sposób można zweryfikować nadawcę wiadomości e-mail? ■ Jaki format ma wiadomość? ■ Określanie czasu rozpoczęcia, zakończenia oraz kanału nagrywania. 3. Dane wyjściowe: nagrywanie sygnału TV ■ Uzyskanie dostępu do karty TV. ■ Wysłać maila z potwierdzeniem? Każdy z powyższych etapów składa się z kilku kroków i wiąże się z określonymi 72 Kwiecień 2004 trudnościami, które należy rozwiązać. Z uwagi na ograniczenia dotyczące objętości niniejszego artykułu nie omówię wszystkich możliwości i potencjalnych rozwiązań. Postaram się jednak przedstawić kolejne etapy tworzenia systemu oraz efekt końcowy naszej pracy. Oczywiście istnieje więcej niż jedno rozwiązanie. W artykule przedstawię jedno z nich jako przykład. Aby rozpocząć pracę, musisz mieć do dyspozycji komputer z zainstalowanym Linuksem i kartą TV oraz dostęp do Internetu. Zaczynamy pracę Pierwsze zadanie polega na utworzeniu konta użytkownika, z którego będą wysyłane wiadomości e-mail z poleceniami sterującymi nagrywaniem. Dla administratora to drobiazg: adduser video Użytkownik video musi mieć dostęp do karty TV (/dev/video) i miksera audio (/dev/mixer), aby mógł nagrywać za pomocą tych urządzeń. Dla urządzeń trzeba ustawić w tym celu odpowiednie uprawnienia. Często uprawnienia te zostały już skonfigurowane na potrzeby innych użytkowników. W takim przypadku należy przypisać użytkownika video do odpowiednich grup (przykładowo grupy video dla urządzenia /dev/video device i grupy audio dla urządzenia /dev/mixer). www.linux-magazine.pl usermod -c „Nagrywanie wideo” video Automatyczne przetwarzanie poczty e-mail jest łatwe dzięki programowi procmail, instalowanemu domyślnie w większości systemów. Procmail to filtr działający między agentem przesyłania (np. Exim, Sendmail lub Postfix) a skrzynką pocztową, który przetwarza każdą wiadomość zanim zostanie ona dostarczona. Można go zaprogramować w taki sposób, aby przenosił wiadomości (np. spam) do określo- Listing 1: /home/video/.procmailrc PATH=$HOME/bin:/usr/bin:/usr/U local/bin: MAILDIR=$HOME/Mail DEFAULT=$MAILDIR/inbox LOGFILE=$MAILDIR/log LOCKFILE=$MAILDIR/.lockmail :0 * ^Subject: help | formail -s emailvideo.plU help; :0 * ^Subject: record | formail -s emailvideo.plU record; Nagrywanie wideo przy użyciu poczty e-mail nych folderów lub przesyłał dalej na inne konta e-mail. Podobnie jak w przypadku wielu innych narzędzi, Procmail ma jeden globalny plik konfiguracyjny (/etc/procmailrc) i kilka lokalnych – znajdują się one w katalogach głównych użytkowników i mają nazwę.procmailrc. Te pliki składają się z wielu reguł. Każda reguła określa sposób postępowania z wiadomością e-mail, gdy spełnione są określone warunki. Na przykład: przenoś wszystkie wiadomości od nadawcy Dawid do folderu Curry. Procmail analizuje wszystkie reguły w kolejności, w jakiej występują one w pliku.procmailrc. Gdy odnajdzie regułę spełniającą dane warunki, przetwarza zgodnie z nią wiadomość i kończy pracę, nie analizując pozostałych reguł. W przypadku tego projektu musimy wywoływać zewnętrzny skrypt każdorazowo po odebraniu wiadomości e-mail przez użytkownika video. Jeżeli wiersz tematu wiadomości zawiera słowo „help”, wtedy wysłany zostanie mail zawierający instrukcję obsługi systemu. Jeżeli wiersz zawiera słowo „record”, system rozpocznie nagrywanie programu telewizyjnego. W związku z tym należy stworzyć dwie reguły dla wiersza tematu w celu rozróżnienia poleceń oraz odpowiednio określić parametr przekazywany do skryptu. Patrz Listing 1. Domyślnie Procmail nie rozróżnia wielkości liter, zatem słowo help może mieć postać zarówno „HELP”, jak i „hElP”. Strukturę pliku.procmailrc można znaleźć w dokumentacji systemowej i instrukcjach dostępnych w Internecie, na przykład pod adresem [1]. Przed wywołaniem skryptu cała wiadomość jest przepuszczona przez dodatkowy program o nazwie formail. Powoduje to skonwertowanie jej na format skrzynki odbiorczej. Jest to bardzo proste, ale jednocześnie bardzo użyteczne narzędzie, kompatybilne z funkcjami RFC 822 (opisującymi format wiadomości e-mail) i tworzące wiadomości o ujednoliconym układzie. Dzięki temu mamy do czynienia tylko z jednym formatem wiadomości, a nie z kilkoma. Użytkownik przesyła do programu Formail wiadomość e-mail i otrzymuje w rezultacie wiadomość w formacie skrzynki odbiorczej. Musimy zatem napisać skrypt emailvideo.pl współpracujący poprawnie z wejściem stdin. W pliku.procmailrc można również umieścić regułę odnoszącą się do wszystkich wiadomości przychodzących. Najlepiej umieścić ją na końcu pliku, ponieważ procmail kończy przetwarzanie po znalezieniu pierwszej reguły, której warunki są spełnione dla danej wiadomości. Oznacza to, że powyższa reguła będzie stosowana dla wszystkich wia- domości, dla których żadna reguła nie była prawdziwa. Każdą z wiadomości nieodpowiadającą żadnemu z powyższych dwóch szablonów można wysłać do kosza na bity (bit-bucket). Domyślnie wiadomości tego typu byłyby dostarczane do skrzynki odbiorczej użytkownika. Jest to zbędne, ponieważ video nie jest rzeczywistym użytkownikiem. System przyjazny użytkownikowi odpowiedziałby nadawcy wiadomością zawierającą kod błędu. Jednak bez odpowiednich zabezpieczeń użytkownik video może próbować przesyłać odpowiedzi na nieistniejące adresy pocztowe lub „zawieszać się” podczas niekończącej się procedury wysyłania odpowiedzi samemu sobie. Dlatego warto dokładnie określić temat „help” i „record” – w ten sposób można odrzucić wiadomości z tematem „re: help”, które często okazują się być spamem. :0 * /dev/null Wszystkie programy narzędziowe można uruchomić z wiersza polecenia przy użyciu standardowych strumieni wejścia i wyjścia, dlatego procedura testowania jest prosta. Najpierw wyślij do nowego użytkownika video wiadomość e-mail, wpisując jako temat słowo „help”. Powinien on w miarę szybko znaleźć się w katalogu /var/mail/video. Jeżeli przepuścimy ten plik przez program formail, okaże się, że wynik działania całej opisanej procedury znalazł się w skrypcie Perl. Ma on nienaruszony nagłówek wiadomości e-mail i jest gotowy do przetwarzania. Prześlij go następnie do pliku i zachowaj w bezpiecznym miejscu. Za chwilę będzie on nam potrzebny do przetestowania skryptu Perl. SYSADMIN formail -s </var/mail/video U >testmail Przyjaciele nigdy Cię nie opuszczą, kiedy jesteś w potrzebie I właśnie teraz potrzebny nam będzie skrypt w Perl! Musi on pobrać wiadomość e-mail z wejścia stdin oraz przygotować naszą kartę TV do procedury nagrywania. Z pozoru może się wydawać, że to właśnie skrypt Perl powinien służyć do nagrywania programu telewizyjnego, ale w praktyce jest jednak nieco inaczej. Prawdopodobnie między wysłaniem wiadomości e-mail a uruchomieniem programu pojawi się pewne opóźnienie. Stworzymy zatem drugi skrypt, który będzie sterować procesem nagrywania, i za pomocą Perla przeanalizujemy wiadomość e-mail celem określenie kiedy ten drugi skrypt ma zostać uruchomiony. Przy pomocy Perla można również sprawdzić wiadomość e-mail i natychmiast odpowiedzieć na nią w razie wykrycia problemu lub błędu w konfiguracji. Drugi skrypt napiszemy, wykorzystując bash – pomoże nam to rozróżnić oba skrypty. Analizę wiadomości e-mail w Perl najlepiej przeprowadzać przy pomocy istniejącego modułu. CPAN [2] udostępnia tak wiele modułów przeznaczonych do wykonywania rozmaitych zadań, że dla wielu użytkowników problemem jest określenie, który moduł najlepiej nadaje się do wykonania konkretnego zadania. Osobiście używam Mail::Internet [3]. Zdecydowałem się na ten moduł, ponieważ robi dokładnie to, czego od niego wymagam. Inni użytkownicy mają z pewnością swoich własnych faworytów. Mail::Internet można zainstalować z wiersza polecenia w następujący sposób: # perl -MCPAN -e 'install U Bezpieczeństwo Zapewnienie odpowiedniego poziomu bezpieczeństwa to bardzo istotny problem.. Wszystkie udostępniane porty, programy i usługi mogą stanowić potencjalną lukę w systemie zabezpieczeń, która może być wykorzystana do zaatakowania systemu. Niektóre usługi mogą wydawać się nieszkodliwe, jeżeli jednak nasz komputer będzie umożliwiał nagrywanie sekwencji wideo, haker będzie miał możliwość wykorzystania naszej całej przestrzeni dyskowej. Zwiększenie poziomu bezpieczeństwa można osiągnąć między innymi poprzez następujące działania: ■ Nagrywaj pliki na oddzielnej partycji. system wciąż ma miejsce na dysku niezbędne do zapisu plików. ■ Używaj algorytmów PGP w celu autoryza- cji nadawcy. ■ Wyślij wiadomość do nadawcy i żądaj po- twierdzenia przed dodaniem go do kolejki. ■ Nie odpowiadaj na wiadomości e-mail, jeśli nie ma takiej potrzeby. Spamerzy mogą wykorzystać wtedy Twój serwer do rozsyłania spamu. ■ Używaj haseł, których ważność wygasa po upływie określonego czasu. Ograniczy to możliwość niepowołanego wykorzystywania systemu do kilku dni a nawet godzin. Nawet w przypadku jej przepełnienia www.linux-magazine.pl Kwiecień 2004 73 Nagrywanie wideo przy użyciu poczty e-mail SYSADMIN E-mail $ bzip2 -cd proftpd-1.2.9.tar.bz2 | tar xf $ cd proftpd-1.2.9 $ ./configure -sysconfdir=/etc/proftpd -localstatedir=/var/run [...] $ make [...] $ su Password: # make install #!/usr/bin/perl use Mail::Internet; use strict; my $mail = Mail::Internet->U new( <STDIN> ]); Ten obiekt pozwoli nam uzyskiwać dostęp do wiadomości. Wszystkie operacje wykonywane na wiadomości e-mail mogą być realizowane za pomocą $mail lub przynależnych mu funkcji. Następnie kodu modułu można użyć do pracy z nagłówkami: my $headers = $mail->head->U header_hashref; my $from = $headers->{From}[0]; Mail::Internet' nie nowego nagłówka ze wszystkimi odpowiednimi informacjami. Jest to często używana funkcja, dlatego moduł Mail::Internet zawiera metodę do realizacji tego zadania. Jak można było się spodziewać, nosi ona nazwę reply. my $REPLY = $mail->reply(); $REPLY->body('A new body'); $REPLY->send(); Możemy zatem wykonać nasz pierwszy test. Przekaż stworzoną wcześniej testową wiadomość e-mail do bieżącego skryptu – wiadomość powinna zostać dostarczona do skrzynki odbiorczej. ./emailvideo.pl <testmail Oczywiście należy pamiętać, żeby pracować jako root. Jeżeli po raz pierwszy instalujesz oprogramowanie, używając modułu CPAN, będziesz musiał odpowiedzieć na serię pytań w celu skonfigurowania go. Na szczęście konfiguracja domyślna umożliwia bezproblemową pracę. Po zainstalowaniu Mail::Internet udostępnia całe swoje bogactwo rozmaitych funkcji związanych z obsługą poczty elektronicznej. My jednak skorzystamy jedynie z kilku z nich. Na podstawie informacji zawartych w nagłówku musimy określić nadawcę oraz odczytać treść wiadomości e-mail w celu określenia parametrów nagrywania. Najpierw musimy stworzyć odpowiedni obiekt: Sprawdzenie wiersza from nie daje nam zbyt wiele, jeżeli chodzi o zapewnienie bezpieczeństwa. Wiersz ten może być, i najczęściej jest, podrabiany przez spamerów. Najlepszą metodą weryfikacji zapytania jest umieszczenie w treści wiadomości e-mail hasła zapisanego w zwykłym tekście. Hasło będzie zmieniane – użyte raz straci ważność i nie będzie możliwości jego powtórnego wykorzystania. Nie jest to idealne rozwiązanie, ale na początek wystarczy. Inne formy zabezpieczeń przedstawiono w ramce Bezpieczeństwo. Korzystając z informacji zapisanych w pliku $headers, można utworzyć odpowiedź na tę wiadomość e-mail przez stworze- Listing 2: Skrypt nagrywający 1 #!/bin/bash 2 # Parametry oznaczają w kolejności: Stację telewizyjną. Czas trwania (w minutach). Adres zwrotny. 3 4 TVNAME[0]=SVideo; TVMAP[0]=0 5 TVNAME[1]=BBC1; TVMAP[1]=55 6 TVNAME[2]=BBC2; TVMAP[2]=62 7 TVNAME[3]=ITV1; TVMAP[3]=59 8 TVNAME[4]=Ch_4; TVMAP[4]=65 9 TVNAME[5]=Five; TVMAP[5]=37 10 11 TARGETDIR=/media/tv 12 13 DURATION=$2 14 CHANNEL=${TVMAP[$1]} 15 NAME='Vid_`/bin/date +%Y%m%d_%H%M`_`echo ${TVNAME[$1]} | tr [.] [_]`'.avi 16 74 Kwiecień 2004 17 if [ $CHANNEL -eq 0 ]; then 18 INPUT='input=1'; 19 else 20 FREQ=$[($CHANNEL*8)+303] 21 FREQ=$FREQ.25 22 23 INPUT='input=0:freq=$FREQ'; 24 fi 25 26 mencoder -o $TARGETDIR/$NAME -tv on:driver=v4l:$INPUT:width=320:heig ht=240 -oac copy -ovc lavc -endpos $DURATION >/dev/null 2>/dev/null 27 28 REPLY=$REPLY'$NAME czeka na Ciebie w domu:)' 29 30 echo '$REPLY' | mail -s 'Nagrywanie zakończone!' $3 www.linux-magazine.pl Zawartość odpowiedzi jest określana treścią przychodzącej wiadomości. Może to być zapytanie o pomoc (to, że sami stworzymy ten system wcale nie znaczy, że zawsze będziemy wszystko pamiętać) lub polecenie nagrywania wideo. Reguła procmail przesyła dodatkowy argument do skryptu Perl, którego można użyć do określenia celu wiadomości. Argument ten można pobrać w następujący sposób: my $ARGUMENT = shift; if ($ARGUMENT=~/help/i)U { $reply = do_help(); } elsif ($ARGUMENT=~/record/i)U { $reply = do_record($FREQ, U $DURATION, $TIME); } else { $reply = do_error(); } Parametry podprocedury do_record należy określić na podstawie treści wiadomości e-mail. Niestety nie ma łatwego sposoby na zrobienie tego – chyba, że lubisz wyrażenia regularne. Na szczęście potrzebne nam wyrażenia nie są zbyt skomplikowane, ponieważ możemy zaprojektować najlepszy dla nas układ pod kątem przetwarzania. Przy tworzeniu każdego z wyrażeń zastosujemy taką samą konwencję składni: NAME:VALUE W nazwie nie będzie rozróżniana wielkość liter, a wartość będzie interpretowana dosłownie jako liczba lub ciąg tekstowy. Tekst będzie przekazywany bezpośrednio do innych narzędzi. Przykład takiej wiadomości e-mail znajduje się w ramce E-mail. Pętla analizująca odczyta kilka pierwszych wierszy wiadomości (w ten sposób rozwiązujemy problem długich sygna- Nagrywanie wideo przy użyciu poczty e-mail LIRC W ramach projektu LIRC (Linux Infra-red Remote Control) [6] opracowano sterownik i zestaw narzędzi do komunikacji przez podczerwień. Umożliwiają one odbieranie na komputerach z Linuksem sygnałów wysyłanych przez podczerwień, których można użyć do kontrolowania aplikacji (takich jak Mozilla) lub przesyłania wiadomości do innych urządzeń. Do większości kart TV są dołączane pilot oraz port na podczerwień odbierający sygnały. Są one obsługiwane przez LIRC, jednak zazwyczaj pracują przy użyciu innego protokołu transmisji w podczerwieni niż standardowe piloty telewizyjne i dlatego też nie można stosować ich wymienne. Jednak w ramach LIRC stworzono proste układy elektroniczne, które służą do budowy tur) w następujący sposób: Hasło musi być sprawdzone i zweryfikowane przed przekazaniem kontroli podprocedurze do_record, która ustawi licznik czasu. W tym przypadku szukamy pliku o identycznej nazwie, znajdującego się w specjalnym katalogu.pass.d, a następnie usuwany go. Bardziej zaawansowane rozwiązanie (takie jak przedstawione w ramce: Bezpieczeństwo) byłoby wymagane w zastosowaniach komercyjnych. Powyższe rozwiązanie odpowiada jednak w zupełności naszym potrzebom. sub is_password_valid() { if (-f '$HOME/.pass.d/$_[0]')U { return 1; } return 0; } W kodzie zamieszczonym w witrynie internetowej Linux Magazine rozbudowaliśmy naszą koncepcję o opcję żądanie hasła dla każdego polecenia. W ten sposób można na przykład zezwolić wszystkim użytkownikom na bezproblemowe korzystanie z systemu pomocy. Wizja i fonia Najczęściej używanym narzędziem do uruchamiania oprogramowania o określonej godzinie jest at. To proste narzędzie działa w tle, uaktywnia się co minutę i sprawdza, jakie zadania są do wykonania. Cron działa w podobny sposób, ale obsługuje zdania wykonywane co określony czas. Za pomocą at można uruchomić tylko jeden program (z opcjonalnymi argumentami), więc do bardziej zaawansowanego zadania, jakim jest nagrywanie programu TV, mu- urządzeń podłączanych bezpośrednio do portu szeregowego w celu obsługi dwukierunkowej transmisji w paśmie podczerwonym. Oznacza to, że za pomocą LIRC można wysyłać przez podczerwień sygnały do zwykłych magnetowidów używanych w domu. Niestety sprzężenie zwrotne sygnału nie istnieje, wiec nie ma możliwości uzyskania potwierdzenia czy magnetowid odebrał wysłane do niego sygnały. Jednak nie sposób nie zauważyć korzyści płynących ze sterowania magnetowidem – można go wykorzystać, jeżeli Twój komputer nie jest wyposażony w kartę TV lub w przypadku braku miejsca na dysku twardym. Ponieważ powyższe rozwiązane jest oparte na modułach, musimy zmienić jedynie mały fragment kodu w skrypcie getvid.sh. simy użyć skryptu bash. Parametry dostarczane w wiadomościach email można podzielić na dwie kategorie: te, które określają czas rozpoczęcia nagrywania, oraz te, które określają jego przebieg. Pierwsza kategoria parametrów jest używana w połączeniu z poleceniem at w celu wywołania skryptu i obejmuje godzinę rozpoczęcia nagrywania (sprawdź format polecenia at w dokumentacji systemowej). Druga kategoria, określająca sposób nagrywania, obejmuje informacje o kanale, czasie trwania i przebiegu procesu nagrywania. Będą one stanowić parametry naszego skryptu. Do polecenia kończącego nagrywanie dołączymy także adres e-mail. Jeżeli chcesz uruchomić skrypt natychmiast, wpisz: getvid.sh 2 25 U [email protected] Spowoduje to nagranie 25 minutowego programu, przykładowo na TVP 2. Aby rozpocząć nagrywanie w określonym momencie w przyszłości, użyj następujących poleceń: $ at 18:00 warning: commands will be U executed using /bin/sh at> /home/video/bin/getvid.sh U 2 25 [email protected] at> <EOT> # this is produced byU closing the input stream by U pressing ctrl+d Należy zauważyć, że w skrypcie użyto pełnej ścieżki. Warto zwrócić także uwagę na to, że parametry pobrane z wiadomości e-mail nie są sprawdzane i są przesyłane bezpośrednio do SYSADMIN skryptu. Polecenie at jest obsługiwane ze standardowego wejścia, czyli domyślnie z klawiatury. Prosty mechanizm pipe pozwoli zautomatyzować pracę: echo $cmd | at $when Szlifowanie szczegółów Większość kodu jest już gotowa, możemy zatem przejść do ostatniego etapu, czyli nagrywania programu TV. W tym celu przyda nam się skrypt bash. Ta część pracy jest wyjątkowo prosta. W tej wersji nagrywamy program bezpośrednio z karty TV zainstalowanej w lokalnym komputerze. Nagrywanie z magnetowidu jest również możliwe, ale w takim przypadku potrzebne jest oprogramowanie omówione w ramce LIRC. Najpierw można przygotować mikser (aby nagrywać dźwięk z wejścia liniowego), a następnie przetestować go za pomocą niezależnej aplikacji, takiej jak xawtv, i sprawdzić, czy prawa dostępu dla użytkownika video zostały poprawnie ustawione. Obejmują one także katalog docelowy dla pliku wynikowego. Do kontroli nagrywania programu telewizyjnego wybrałem narzędzie mencoder. Jest on częścią pakietu MPlayer dostępnego pod adresem [4]. Umożliwia on kontrolę wielu niskopoziomowych parametrów związanych z dostrajaniem kanału, pozwala określać poziom kompresji oraz czas nagrywania. Wszelkie niezbędne informacje na jego temat można znaleźć w dokumentacji systemowej. Parametry podane można stosować w większości systemów. W zależności od mocy obliczeniowej procesora należy dobrać odpowiednią rozdzielczość, w jakiej nagrywana będzie sekwencja video. mencoder -o /media/tv/filename.U avi -tv on:driver=v4l: input=0U :freq=799.25:width=320:height=2U 40 -oac copy -ovc lavc -endpos U 25 >/dev/null 2>/dev/null Najprawopodobniej zauważysz parametry, które zostaną zmienione z poziomu naszego skryptu bash: nazwa pliku (filename), pozycja końcowa (endpos) lub czas trwania (duration) oraz parametry dotyczące wybranego wejścia i częstotliwości (input i freq). Jedynie znaczenie dwóch ostatnich nie zostało jeszcze dokładnie objaśnione. input określa, czy źródłem sygnału ma być tuner (0) czy też sygnał ma być pobrany ze złącza S-Video (1). Twoja karta TV może być również wyposażona w inne wejścia. Parametr freq wymaga podania częstotliwości nagrywanego sygnału (w MHz). Nie podajemy www.linux-magazine.pl Kwiecień 2004 75 SYSADMIN Nagrywanie wideo przy użyciu poczty e-mail natomiast numeru kanału ani identyfikatora stacji. Określanie częstotliwości jest procesem dwuetapowym. Najpierw musimy określić numer kanału (który zazwyczaj mieści się w zakresie między 21 i 68) interesującej nas stacji telewizyjnej (np. TVN, POLSAT, itd.). Następnie musimy przekonwertować numer kanału na odpowiednią częstotliwość. Numer kanału, na którym transmitowana jest dana stacja, zmienia się w zależności od regionu kraju i jest ściśle związana z konkretnym przekaźnikiem telewizyjnym. Każdy posiadacz karty TV posiada zapewne numery dostępnych mu kanałów telewizyjnych w pliku.xawtv. Jeżeli nie, może przeskanować pasmo częstotliwości za pomocą programu scantv. Czytelnicy mieszkający w Wielkiej Brytanii są w lepszym położeniu – dane dotyczące częstotliwości nadawania programów telewizyjnych znajdują się w witrynie internetowej telewizji BBC pod adresem [5]. Jedynie częstotliwość, na której transmitowany jest kanał „Five” nie została podana, ale z doświadczenia wiadomo, że jest to zazwyczaj przedział częstotliwości między kanałem 37 a 39. Nie ma żadnych narzuconych z góry prawidłowości w rozmieszczeniu poszczególnych programów w paśmie częstotliwości. Trzeba je po prostu wyszukać, na chybił trafił lub też żmudnie skanując całe pasmo częstotliwości. Numer kanału można konwertować na częstotliwość przy użyciu prostego wzoru. Obliczenia te są niezależne od regionu kraju, w którym transmitowany jest dany program. częstotliwość = (numer_kanału * 8) + 303.25. Powyż- sza zależność odnosi się do programów kodowanych w standardzie PAL, w którym kolejne kanały ulokowane są w paśmie częstotliwości w odstępach 8 MHz. Prowadzenie obliczeń w bash wymaga wprawdzie nieco syntaktycznych kombinacji, takich jak w wierszu 20, jednak dodawanie części ułamkowej (0,25) przebiega bezproblemowo. Dane zestawione w Tabeli 1 można sprawdzić za pomocą przedstawionego algorytmu. Po za tym w skrypcie bash nie ma zbyt wielu poleceń. Do określania nazwy pliku wykorzystujemy datę i godzinę, eliminując w ten sposób konieczność użycia funkcji 'get_unique_filename', a następnie zapisujemy plik AVI w katalogu /media/tv directory, który jest zwykle dostępny dla innych użytkowników. Istnieje również możliwość nagrywania zespolonego sygnału wizyjnego, który może pochodzić przykładowo z zewnętrznego odtwarzacza DVD lub nawet kamery stanowiącej część systemu zabezpieczeń. Kilka uwag Teraz możemy poświecić się już wyłącznie testowaniu i wdrażaniu oprogramowania. Do tego celu będzie nam potrzebna nasza testowa wiadomość e-mail. Gotowy skrypt składa się z 143 wierszy i można go pobrać z witryny Linux Magazine. Jednak wszystkie ważne szczegóły zostały omówione w niniejszym artykule. Oto tylko propozycja (i jedno z możliwych rozwiązań) dla zautomatyzowanych systemów poczty elektronicznej. Większość kart telewizyjnych pozwala odbierać także radio. Dostosowanie istniejącego systemu do na- Listing 3: Getradio.sh – odpowiednik getvid.sh 1 #!/bin/bash 2 3 FREQ=$1 4 DURATION=$2 5 EMAIL=$3 6 7 FILEPATH="/media/radio/" 8 9 NAME="Radio_`/bin/date +%Y%m%d_%H%M`_`echo $FREQ | tr [.] [_]`" 10 11 FILENAME=$FILEPATH$NAME 12 echo "$NAME" | mail -s "Rozpoczęto nagrywanie audycji radiowej..." $EMAIL 13 14 BODY="" 76 Kwiecień 2004 15 BODY=$BODY`fm $FREQ $VOL` 16 BODY=$BODY`sound-recorder -S $DURATION -f=wav $FILENAME.wav 2>&1` 17 18 # Encode and send 19 lame $FILENAME.wav $FILENAME.mp3 >/dev/null 2>&1 20 21 uuencode $FILENAME.mp3 $FILENAME.mp3 | mail -s "Program radiowy ($FILENAME)!" $EMAIL >/dev/null 2>&1 22 23 # Clean up 24 /bin/rm $FILENAME.wav 25 /bin/rm $FILENAME.mp3 www.linux-magazine.pl Tabela 1: Lista stacji dostępnych na terenie Wielkiej Brytanii. Stacja Wejście Kanał Częstotliwość BBC 1 0 55 743,25 BBC 2 0 62 799,25 ITV 0 59 775,25 Channel 4 0 65 823,25 Five 0 37 599,25 Composite 1 1 grywania programów radiowych wymaga niewiele wysiłku. Potrzebujemy w tym celu nowego użytkownika (np. o nazwie radio) do odbierania wiadomości e-mail. Ponadto musimy zastąpić narzędzia związane z nagrywaniem wideo, ale na to trzeba przeznaczyć nie więcej niż godzinę czasu. Zobacz Listing 3. Osobiście korzystam z jednego pakietu do sterowania radiem (fmtools) oraz z drugiego do nagrywania plików WAV (sound-recorder). Następnie wywoływany jest enkoder MP3 w celu zapisania w formacie MP3 żądanej audycji radiowej. Plik MP3 ma znacznie mniejszą objętość od pliku z filmem, dlatego można go wysłać pocztą e-mail do użytkownika, który zażądał nagrania audycji. Wymaga to jednak poprawnego skonfigurowania miksera audio. Użytkownik może także pokusić się o zrealizowanie kilku innych ciekawych pomysłów. Na przykład może spróbować opracować sposób przechwytywania stron telegazety przez kartę TV. Albo dodawać pliki do kolejki pobierania w programach peer2peer. Albo zmierzyć się z usługą „piosenki na żądanie”. Oprogramowanie do realizacji powyższych zadań jest dostępne za darmo. Informacje na ten temat znajdują się powyżej. Baw się dobrze! ■ INFO [1] Podręcznik do Procmail: http://www. perlcode.org/tutorials/procmail/proctut/ [2] Archiwum informacji o Perl: http://www.cpan.org [3] Moduł Mail::Internet: http://search.cpan.org/~markov/ MailTools-1.60/Mail/Internet.pm [4] MPlayer: http://www.mplayerhq.hu/ [5] Częstotliwości nadawania programów BBC: http://www.bbc.co.uk/reception/ tv_transmitters/ [6] Projekt LIRC: http:///www.lirc.org 6 ZALET PRENUMERATY UŻYWASZ LINUKSA? CZYTAJ LINUX MAGAZINE! 1 NISKA CENA 2 STAŁA CENA 3 UNIKALNY UPOMINEK W prenumeracie rocznej – 3 numery ZA DARMO! W półrocznej – 1 numer ZA DARMO! Linux Magazine to najtańsze polskie czasopismo o Linuksie. Gwarancja stałej ceny Linux Magazine przez cały okres trwania prenumeraty. Wszyscy prenumeratorzy otrzymują unikalny prezent – linuksową podkładkę pod mysz z logo Linux Magazine. 4 GWARANCJA ZWROTU PIENIĘDZY 5 BĄDŹ PIERWSZY 6 PRENUMERATA NA PRÓBĘ Jeśli będziesz chciał zrezygnować z prenumeraty, otrzymasz zwrot pieniędzy za numery, których jeszcze nie otrzymałeś. Do naszych prenumeratorów pismo Linux Magazine dociera, zanim ukaże się w sprzedaży detalicznej. Prenumeratorzy otrzymują Linux Magazine w specjalnej kopercie, chroniącej pismo przed uszkodzeniem. Wypróbuj prenumeratę Linux Magazine. TRZY KOLEJNE NUMERY za jedyne 30 zł. Zamów przez Internet: www.linux-magazine.pl/Subs WWW. LINUX-MAGAZINE.PL/SUBS