Data stworzenia tekstu: 21.09.2011
Ostatnia weryfikacja tekstu: 22.09.2011

Gdzie zainstalował się program?

Masz Linuksa od niedawna, zainstalowałeś program, programu nie ma w menu? Zdarza się nawet najlepszym. Może poczekaj jeszcze chwilę, kilka sekund, aż się pojawi w odpowiedniej kategorii... nie? No dobra, a pamiętasz jak się nazywał? Więc wciśnij Alt+F2 i wpisz jego nazwę w okienko, które wyskoczyło. Zwykle od małej litery, bez spacji.

Ale te nazwy w Linuksie są takie dziwne!

No, trochę porąbane są. Czyli że nie wiesz jak właściwie się ten program nazywa :) Załóżmy więc taką sytuację: instalujesz Open/Libre Office Writera, najlepiej z ubuntowego Dodaj/Usuń programy, bo on oczywiście ukrywa przed użytkownikiem co robi i nie masz szans dowiedzieć się, że program uruchamia się poprzez libreoffice --writer. No bo niby skąd, prawda? LibreOffice to jeszcze pestka, bo on zawsze w menu się pojawi, gorzej na przykład z takim qtconfig, który ani nie posiada wpisu w menu, ani nie posiada pakietu od niego nazwanego, choć to zależy od dystrybucji. Jeszcze większy problem jest z programami nazwanymi lib-cośtam lub mającymi lib w nazwie – to biblioteki i raczej nie posiadają programów, które by można uruchomić. Nawet, jeśli coś nie ma lib w nazwie, może być biblioteką, wystarczy przeczytać opis: "allegro – Portable library mainly aimed at video game and multimedia programming". Tego czegoś nie uruchomimy. Podobnie jak pakietu audacious-plugins, chyba z oczywistej przyczyny – to wtyczki. Niektóre programy działają wyłącznie w interfejsie tekstowym, więc nie posiadają swoich pozycji w menu (chociaż niby by mogły). Programem takim jest bardzo przydatny convert z pakietu imagemagick. No i skąd w ogóle masz wiedzieć, że jakiś program jest w jakimś pakiecie? I że jest konsolowy?

Jak znaleźć zainstalowany program?

Zacznij od używania normalnego menedżera pakietów, takiego z pełnymi danymi o nich. W Ubuntu jest to Synaptic, a nie ta dziwna nakładka Dodaj/Usuń. Podobna nakładka jest w Fedorze. Jeśli nie wiesz, co jest menedżerem pakietów w Twojej dystrybucji, spytaj google. Tam włącz sobie wyszukiwanie po opisach lub, jeśli to nie wystarczy, po nazwach plików. Jeśli wpiszesz libreoffice (bez spacji, bo przecież to się nazywa LibreOffice, a wszystkie pakiety pisane są małymi literami), znajdziesz szereg dziwnych rzeczy:

	libreoffice-af 	
	libreoffice-ar
	libreoffice-as
	...

Być może bardziej znaczące byłoby tu wypisanie pakietu libreoffice-pl. Powyższe to po prostu wersje językowe. Jest ich najwięcej, więc będą zawadzać. Często można się też spotkać z pakietami i18n lub l10n np. kde-l10n-pl (l 10 znaków n – localization) lub firefox-i18n-pl (i 18 znaków n – internationalization).

	libreoffice-extension-*
	libreoffice-common

Wtyczki, pliki wspólne dla programów pakietu...

	libreoffice-base
	libreoffice-calc
	libreoffice-writer
	libreoffice-impress

A to programy. To nas interesuje. Po zaznaczeniu libreoffice-writer ukaże nam się lista plików w pakiecie, oczywiście pod warunkiem korzystania z porządnego menedżera pakietów. Czasem wymaga to, aby pakiet był zainstalowany. Na szybko uruchomione z płyty Ubuntu wskazuje na brak tej funkcjonalności w Synapticu. Aby wylistować pliki z zainstalowanego pakietu, można użyć konsolowego menedżera pakietów:

    usr/
    usr/bin/
    usr/bin/loweb
    usr/bin/lowriter
    usr/lib/
    usr/lib/libreoffice/
    usr/lib/libreoffice/basis3.4/
    usr/lib/libreoffice/basis3.4/program/
    usr/lib/libreoffice/basis3.4/program/libhwp.so
    usr/lib/libreoffice/basis3.4/program/liblwpftli.so
    usr/lib/libreoffice/basis3.4/program/libmswordli.so
    usr/lib/libreoffice/basis3.4/program/libmsworksli.so
    usr/lib/libreoffice/basis3.4/program/libswdli.so
    usr/lib/libreoffice/basis3.4/program/libswuili.so
    usr/lib/libreoffice/basis3.4/program/libt602filterli.so
    usr/lib/libreoffice/basis3.4/program/libwpftli.so
    usr/lib/libreoffice/basis3.4/program/libwriterfilterli.so
    usr/lib/libreoffice/basis3.4/share/
    usr/lib/libreoffice/basis3.4/share/registry/
    usr/lib/libreoffice/basis3.4/share/registry/writer.xcd
    usr/lib/libreoffice/program/
    usr/lib/libreoffice/program/swriter
    usr/share/
    usr/share/applications/
    usr/share/applications/libreoffice-writer.desktop
    usr/share/man/
    usr/share/man/man1/
    usr/share/man/man1/loweb.1.gz
    usr/share/man/man1/lowriter.1.gz

Jak widać możliwości graficznych nakładek są upośledzone i warto przeczytać dokumentację narzędzi tekstowych, aby poznać różne przydatne funkcje.

Na podstawie tej listy wiemu już, gdzie szukać programu wykonywalnego. Przyda się nam także opis struktury katalogów w Linuksie. Dzięki niemu wiemy, że plików wykonywalnych należy spodziewać się w katalogach bin, czyli /usr/bin, /usr/local/bin, /usr/sbin, /sbin, /opt/nazwa_programu/bin lub /opt/nazwa_programu/usr/bin i tym podobne.

*.so to wtyczki, share/* to najróżniejsze pliki programu, lib/ to biblioteki, *.desktop to skrót dla środowiska graficznego (tam także można podejrzeć, co jest uruchamiane – pliki .desktop są tekstowe), man/ to pomoc w konsoli tekstowej.

Jak widać z powyższego przykładu, w pakiecie zawarte są pliki lowriter czyli LibreOffice Writer oraz loweb, uruchamiający Writera w widoku Web. Teraz w okienko Alt+F2 lub konsolę wystarczy wpisać lowriter. Ale zaraz, na górze strony powiedziane jest libreoffice --writer! Po odnalezieniu na dysku pliku lowriter przekonujemy się, że jest on skryptem, włączającym program soffice --writer, zaś program libreoffice to kolejny skrypt, odnoszący się do soffice, który też jest skryptem, który dopiero uruchamia pakiet. Po co to wszystko? Względy kompatybilności i inne bliżej nieznane decyzje projektowe. Dla nas ważne jest, że plik w /usr/bin musi uruchamiać program.

Command not found

Jeśli po wpisaniu lowriter wyświetli nam się bash: lowriter: nie odnaleziono polecenia, pomimo że plik na pewno istnieje i nie zrobiliśmy literówki, wpiszmy go z pełną ścieżką:

Gdyby to pomogło, sprawdź czy ścieżka /usr/bin znajduje się w zmiennej PATH. Oczywiście mało prawdopodobne, żeby się tam nie znajdowała, ale jest to tylko przykład dla innych ścieżek, szczególnie często problem ten ma /opt:

Jeśli ścieżka się tam nie znajduje (w powyższym przykładzie jest dobrze), sprawdź w dokumentacji swojej dystrybucji, gdzie się to naprawia. U mnie jak widać brakuje /opt/program/bin, ale dla tego jednego programu, który jest tam zainstalowany, nie chce mi się kombinować.

Gdyby to nie pomogło, plik może nie mieć praw do uruchomienia. Wtedy najczęściej zobaczymy komunikat brak dostępu. Nadanie praw do uruchomienia:

Zainstalowany program nie działa

To się czasem zdarza. Najczęstszą przyczyną jest brak uprawnień lub brak zależności, mimo że wg menedżera pakietów wszystko zostało zainstalowane. Rozwiązywanie takiego problemu należy rozpocząć od uruchomienia programu w konsoli i odczytania komunikatów. Poniższy przykład pokazuje brak biblioteki SDL przy uruchomieniu mplayera:

Raczej jest mało prawdopodobne, że SDL rzeczywiście nie zostało zainstalowane. Wystarczy zajrzeć do menedżera pakietów, żeby się przekonać, że ono tam jest. Lepiej sprawdzić czy plik żądany przez mplayera istnieje. Najczęściej biblioteki znajdziemy w /usr/lib, co zostało już powiedziane w rozdziale o hierarchii katalogów linuksowych. Pliki biblioteki SDL w /usr/lib:

/usr/lib/libSDL

Na tym zrzucie ekranu plik, o który ma pretensje mplayer, znajduje się na samej górze. Jego tam nie powinno być, jeśli mplayer ma nie działać, ale przecież co by to był za zrzut, prawda?... Wyobraźmy sobie, że tego pliku tam nie ma, a mplayer nie działa. Czemu miałoby go tam nie być? Jest to częsta przypadłość starych programów, że wymagają wersji bibliotek, których już nie ma w systemie. Podstawienie nowszej wersji, jak będzie za chwilę to pokazane, często rozwiązuje problem. Nie zawsze. Jeśli spojrzymy na zrzut ponownie, widać że to tak naprawdę nie jest plik, tylko dowiązanie symboliczne (kursywa). Dowiązanie symboliczne to taki jakby skrót. SDL wychodzi w coraz nowszych wersjach i odzwierciedla to numerek wersji: 1.2. Numerem wydania libSDL-1.2.so.0.11.3 jest 0.11.3 i nie zawsze zgadza się on z wersją pakietu biblioteki, to znaczy może być starszy, gdyż akurat ten plik mógł nie być modyfikowany w stosunku do poprzednich wersji. Należy jednak przyjąć, że mplayer, odwołując się do wersji 1.2 i wydania 0.*, może skorzystać również z naszego wydania. W tym celu należy wykonać właśnie takie dowiązanie symboliczne, którego nie powinno być na zrzucie:

mplayer uruchomi nam się po tej operacji, jednak pamiętajmy – jest to program konsolowy. Jeśli chcemy zobaczyć cokolwiek w okienku graficznym, musimy włączyć nakładkę. Będzie nią smplayer.

Przyczyn niedziałania programu może być wiele i zawsze należy dokładnie czytać komunikaty wyrzucane przez konsolę. W razie niezrozumienia, warto problem wpisać w google, gdzie znajdują się już gotowe rozwiązania. Na tej stronie niestety nie można wyczerpać wszystkich przypadków.