Szukany tag: Linux Susbsytem: Console ;-) Niekiedy spotykam się z "oskarżeniami" początkujących użytkowników, że muszą uruchomić konsolę, by wejść w nano lub mc. No cóż... Patrząc na ich doświadczenia z Windows, faktycznie mogą mieć pretensje. Tymczasem detekcja czy użytkownik może odbierać nasze komunikaty/wprowadzać informacje nie jest taka trudna. Każdy program mógłby mieć te kilka linijek kodu + trochę na utworzenie pseudoterminala i uruchomienie xterm-a.
W swoich podróżach zaczynałem od skryptów w Bash-u. Zauważyłem, że polecenie read, gdy nie może pobrać danych kończy się z kodem wyjątku. Problemem była jednak konieczność uruchomienia xterm-a z nową instancją naszej aplikacji(!!). Nie jest to bardzo złe, ale w niektórych przypadkach nasze rozwiązanie mogłoby zawieść. Zaraz po tym odkryłem, że programy w C przy read, jeżeli czytamy z wejścia nie kanonicznego zachowują się tak samo. Pozwoliło mi to na stosowanie podobnych praktyk w nich. Główną wadą wspomnianego rozwiązania jest zmuszanie użytkownika do podania jakiś znaków na samym początku działania aplikacji. Może da się skorzystać read z przełącznikiem timeout, lecz nie testowałem. W dodatku programista, chcąc przekazać jakieś dane naszemu programowi na samym początku musiałby wysyłać mu pustą linijkę.
Zaraz po tym dostrzegłem isatty, więc wszystkie programy dokonywały tego na standardowym wyjściu i wejściu, by odkryć prawdziwe swoje otoczenie(Bash 4, a może nawet i starsze korzysta z podobnej sztuczki, lecz w celu osiągnięcia innego celu - gdy wykryje, że nie ma dostępu do terminala, przełącza się w tryb nie interaktywny, lecz robił to na standardowym wyjściu i wyjściu błędów). Te rozwiązanie powoduje liczne problemy, gdy chcemy korzystać z narzędzia w jakimś skrypcie. Wystarczy tylko przekierować jeden z deskryptorów do wyjścia, aby program się zakończył i odpalił nową instancję w oknie.
Następnie odkryłem, że mamy szereg zmiennych środowiskowych pomocniczych, więc nowsze rozwiązania w Bash-u korzystały z nich. Jednak nadal uruchamiały swoją nową instancję w xterm-ie. Te rozwiązanie było już prawie idealne.
Z pomocą przyszedł mi przełącznik -S w xterm-ie. Na początku nie zrozumiałem jego znaczenia, więc nic mi nie wychodziło. Zamiast ładnego pseudoterminala, otrzymywałem pseudoterminal niepoprawnie obsługujący znak przejścia do nowej linii, wysyłający nadesłane mu dane, itd. Problem leżał w tym, że na siłę przekazywałem xterm-owi końcówkę slave(tak wydedukowałem ze strony man-a tego narzędzia), gdy chciał mieć końcówkę master. Jesteśmy już prawie u celu - wytrzymaj trochę ;-) .
Po zamianie master/slave i slave/master otrzymałem pięknie działający terminal... Jednak zaraz - w czym? No dobrze. Przed odkryciem, że mam mu dać master pracowałem nad dwoma rozwiązaniami tego samego problemu - jedno przez bibliotekę z własną procedurą init(więc działa tylko na Linuksie i może paru innych systemach), a drugie przez aplikację uruchamiającą dwa pseudoterminale. Te drugie rozwiązanie się nie sprawdziło, lecz jako pierwsze zaczęło działać.
Pierwsze rozwiązanie polegało/polega na detekcji przy pomocy odkrytych metody czy mamy dostęp do terminala. Jak to wygląda? Przede wszystkim stosujemy starą, sprawdzoną sztuczkę z isatty, a także zmiennymi środowiskowymi: is_x_server_up i WINDOWID. Po wykryciu, że dzieje się coś złego, otwieramy pseudoterminal, uruchamiamy xterm-a z końcówką master, a następnie podmieniamy otwarte deskryptory wejścia/wyjścia/błędów na slave. Jedynym problemem jest to, że nie ustawiamy zmiennej środowiskowej WINDOWID - nie wiem, skąd mam wziąć WINDOWID okna otwartego emulatora terminala(tzn. domyślam się, ale byłyby to sztuczki zakazane), a nie jestem maintainerem xterm-a. Rozwiązanie sprawdza się. Wiele programów w C zlinkowanych z moją bibliotekę po prostu działa. Bash 4 ładujący moją bibliotekę dynamicznie w trybie interaktywnym, a także po drobnych przeróbkach(usunięciu niewielkiej części - tego z detekcją czy ma dostęp do terminala) też działa. Nawet pokusiłem się o podmianę Bash-a w swoim systemie na ten zmodyfikowany, by ponownie się zalogować - okienko terminala nie wyświetliło mi się nawet na sekundę! Tak więc stworzyłem rozwiązanie nawet działające, które może umilić życie niektórym osobom. Wystarczy tylko zlinkować niektóre programy z moim rozwiązaniem(jak np. cat, mc, nano), niektóre powinny ładować moją bibliotekę dynamicznie w razie potrzeby(jak Bash, choć jemu nie jest to potrzebne), a inne lepiej zostawić w spokoju(jak cp, rm, mkdir, touch, itd. ).
Zdaję sobie sprawę, że pewnie jeszcze dużo pracy przede mną, lecz moja biblioteka powstawała bardziej dla zabawy. Dobrze byłoby, gdybym miał możliwość emisji jakiegoś sygnału, gdy aplikacja chce czytać ze standardowego wejścia(SIGSTOP w ustawieniach kontrolnych?) jednak sobie na razie odpuszczę. Czekam na wszelkie sugestie z waszej strony. Wiem, że mnie zabijecie za ten szatański pomysł - przecież jest opcja \"uruchom w terminalu\", ale nie odbierajcie mi radości z zabawy ;-).
Wyjaśnienie, co do tytułu. Rozwiązanie wygląda podobnie do tych z systemów Redmount. Mamy tam wartość w nagłówku pliku wykonywalnego, która określa podsystem(POSIX, GUI, Console, itd. ). W moim wypadku dodajemy nazwę mojej biblioteki do tabeli importów. Choć pierwotnie się na tym nie wzorowałem, to jednak mógłbym(aż dreszcz przechodzi po plecach, że jednak mają dosyć ładne rozwiązania niekiedy).
Pobierz źródła: http://slawek.lach.art.pl/cli2gui-lib.tar.gz
... nadal po macoszemu.
Od połowy grudnia Telewizja Polska
zintegrowała serwis interaktywny iTVP ze swoją stroną główną
www.tvp.pl . Kilka kosmetycznych
zmian w wyglądzie serwisu poprawia jego czytelność i pozwala
odetchnąć oczom od ciemnych barw jakie dominowały wcześniej.
Jednak nie wygląd jest celem moich
rozważań, a sama technologia zastosowana do transmisji, którą w
końcu należało by wymienić, a estetykę strony zostawić na
później. To co mnie wkurza najbardziej, to narzucanie użytkownikom
Jedynie Słusznego rozwiązania, jakim jest system Windows i jego
Media Player. Jak możemy przeczytać w wymaganiach dotyczących
systemu operacyjnego i oprogramowania, do odtwarzania materiałów na
stronie potrzebna jest „Legalna wersja Windows XP/SP2, 2003, Vista
oraz odtwarzacz Windows Media Player v10 (wraz z zalecanymi
aktualizacjami) lub v11”. Fajnie, przecież rozwiązania Microsoftu
są najlepsze...
Kiedyś w internecie czytałem na
temat przywiązania iTVP do jednej platformy i osoba wypowiadająca
się w tym artykule udowadniała, że skoro projekt ten nie jest
finansowany ze środków publicznych, to nie musi tak dbać o
interoperacyjność itd... No ale proszę, już nawet wielkie,
komercyjne firmy z zachodu lepiej traktują użytkowników innych
systemów... Spójrzmy na przykład www.hulu.com , którego właścicielem jest NBC Universal i News Corp. . W tym
serwisie każdy użytkownik internetu w USA ma dostęp do tysięcy
materiałów: od programów rozrywkowych, po najnowsze seriale i
wystarczy do tego tylko przeglądarka internetowa z pluginem flash,
więc jednak da radę... W Polsce jednak, jak to zwykle bywa, wspiera
się monopol... Dzięki wielkie...
Z FAQ na stronie: „Pod Linuxem filmy
TVP można oglądać używając np. oprogramowania mplayer, mozila
mplayer plugin i kodeków wmv. Niestety, nie można oglądać
programów materiałów zaszyfrowanych, zazwyczaj płatnych - jak
dotąd mplayer nie umie sobie z nimi poradzić”. Ciekawe czemu
mplayer nie potrafi sobie poradzić z DRMami? Może po prostu przez
to, że ciężko zaimplementować całkiem zamknięty standard bez
dokumentacji? Ale nie tylko to jest problemem - materiały, przed
którymi TVP zamieściło reklamy (jak np. „Boso przez świat” w chwili obecnej),
w ogóle nie chcą się odtworzyć na jakimkolwiek linuksowym
odtwarzaczu, mimo że kodowane nie są.
Mam nadzieję, że może jednak
ktoś kiedyś w TVP przejrzy na oczy i skorzysta z jakiejś bardziej
przyjaznej i niezależnej od platformy technologii dystrybucji materiałów
wideo...
lsmod - New GenerationProgram lsmod jest wręcz modelowym przykładem realizacji idei KISS. I jest to powodem dla którego za każdym razem, gdy trzeba mi wykonać nieco operacji na modułach, pisać muszę wiele wiele znaków nad tych 5 liter polecenia...
Jako człowiek leniwy uprościłem sobie życie, pisząc, rzecz jasna, skrypt "obudowujący" lsmod. Cóż z niego otrzymuję, w odpowiedzi na jakie parametry?
Pierwsza sprawa to fakt, że nazw sprawdzanych modułów możemy podać więcej niż jedną; w odpowiedzi na to uzyskujemy listę złożoną z sumy poszukiwań dla każdej z podanych nazw. Komu jak komu, ale mi to ułatwia życie.
Sprawa wręcz pierwszorzędna (mimo punktu powyżej) to oczywiście fakt, że podawane tzw. nazwy są w istocie wzorcami REGEXP (zgodnymi z grep -E).
Istotna rzecz to kod wyjścia: wynosi 0 jeśli nie podaliśmy żadnego wzorca, czyli otrzymaliśmy listę wszystkich modułów, lub gdy podaną listę wzorców spełnia nazwa przynajmniej jednego modułu. Właściwie to nie wiem czy słowo "spełnia" w poprzednim zdaniu ma sens, ale niech tak zostanie.
Inne parametry, to rzecz jasna "-i" oraz "-q" - bez nich czasem ciężko żyć. Pierwszy z nich odpowiada za ignorowanie wielkości znaków, drugi za "ciszę na planie", czyli za to, czy wyniki działania skryptu są w ogóle wypisywane na terminal - oczywiście dalej otrzymujemy "skrót odpowiedzi" w postaci kodu wyjścia.
Przykłady:
1. lsmod.sh -q ^option[[:blank:]]
Skrypt "kontroluje" czy mamy załadowany moduł o nazwie option.
2. lsmod -i option oss
Lista modułów o nazwach zgodnych z którymś ze wzorców lub też tych, które są przez moduły o nazwie zgodnej z choć jednym podanym wzorcem wykorzystywane.
######################################
#!/bin/bash IGNORE_CASE_PARAM='-i' unset IGNORE_CASE QUIET_PARAM='-q' OUT='/dev/stdout' FIFO=/tmp/$$ mkfifo $FIFO
# storage for exitcode RES=$(mktemp) echo 1 > $RES
PARAM='' while [[ $# != 0 ]]; do [[ $1 == $IGNORE_CASE_PARAM ]] && CASE='-i' && shift && continue [[ $1 == $QUIET_PARAM ]] && OUT='/dev/null' && shift && continue PARAM=$PARAM'|'$1 shift done PARAM=${PARAM:1} # one pipe too much at begining [[ "$PARAM" ]] || echo 0 > $RES # no pattern, co we exit with 0
lsmod > $FIFO &
cat $FIFO | while read L; do [[ "$PARAM" ]] && echo "$L" | grep -E $CASE "$PARAM" > $OUT [[ $? == 0 ]] && echo 0 > "$RES" # module found - we exit with 0 [[ "$PARAM" ]] || echo "$L" > $OUT; done
CODE=`cat $RES` rm $FIFO $RES exit $CODE
######################################
Kernelowy poślizgWydarzyła się dzisiaj rzecz ciekawa: numer najnowszej wersji jądra w jeden dzień przeskoczył z wersji 2.6.23.1 do 2.6.23.8. Co ciekawe, na serwerze FTP (ftp.eu.kernel.org) są również umieszczone wersje od 2.6.23.2 do 2.6.23.7 i wszystkie one zostały umieszczone tam w przeciągu... 2 godzin. Podobna różnica w wydaniu wersji widnieje również w Changelogach (wg informacji w nich zawartych wersja 2.6.23.2 została wydana 16 listopada o 17:19, a 2.6.23.8 o 19:14 czasu polskiego). Zapewne w najbliższym czasie poznamy bliższe informacje dotyczące tego niecodziennego zjawiska...
Artykuł Polityki o Linuksie"Świat bez okien i bram" - tak zatytułowany jest owy artykuł - w obiektywny sposób opisuje Linuksa. Uświadamia "niewtajemniczonych", że wcale nie są skazani na Windowsy. Przedstawia zalety systemu spod znaku pingwina do których autor artykułu zaliczył m.in. bezpieczeństwo i stabilność. Do wad zaliczono brak sterowników dla różnej maści sprzętu (wraz z wyjaśnieniem dlaczego tak jest) i brak wsparcia technicznego dla większości dystrybucji. Autor zwraca jednak uwagę, że pomoc można uzyskać na forach takich jak linux.pl oraz jakilinux.org. Zapraszam do lektury. Link do artykułu "Świat bez okien i bram"
Empetrójka z Linuksem Odtwarzacz multimedialny TurboLinux Wizpy, oprócz możliwości odgrywania plików audio i wideo, może służyć również jako przenośny system operacyjny Linux. Urządzenie zawiera bootowalną wersję Linuksa na komputery PC. Po podłączeniu do portu USB można uruchomić system, korzystając ze wszystkich ustawień, haseł i zakładek, jakie zawiera. Pozwala to na używanie tego samego systemu operacyjnego, niezależnie od sprzętu, na jakim się pracuje. Głównym założeniem jest to, żeby Linuksa mogły wypróbować osoby, które nie są do niego przekonane albo obawiają się problemów związanych z jego instalacją. Poza systemem operacyjnym produkt jest w pełni funkcjonalnym odtwarzaczem, wyposażonym w 1,7-calowy ekran OLED. TurboLinux Wizpy odtwarza pliki muzyczne w formatach: Ogg, MP3 i WMA. Filmy wyświetla w formatach XviD i MPEG4. Ponadto pozwala przeglądać tekst, zdjęcia w formacie JPEG oraz posiada wbudowany tuner radiowy FM. Wyposażony jest w 4GB pamięci. Przewidywana cena odtwarzacza to około 140£. Dostępny będzie już w tym miesiącu. (Źródło: 4Press.pl)
Linux goni WindowsJak twierdzi gazeta.pl, badania przeprowadzone przez firme badawczą Pentor, coraz wiecęj polskich firm przechodzi na system operacyjny linuks i wykorzystuje oprogramowanie oparte na otwartych standardach. Linuks najlepiej radzi sobie na serwerach (80% firm), niewiele mniej niż system Microsoftu (83%). Na stanowiskach roboczych jest jednak gorzej: 'co czwarta firma deklaruje, że korzysta z Linuksa, choć w większości system działa na nie więcej niż 30% komputerów w firmie i najczęściej są to stanowiska pracowników działów IT.' Lecz jednak są firmym które wpełni działaja na systemie Linuks, lecz niestety stanowią 1%. Podobnie jak przed rokiem raport opracowano na podstawie ankiet skierowanych do szefów działów IT w największych polskich firmach.
 | [1 - 7] |  |
|
|
| |