środa, 15 maja 2013

Brzydkie czcionki w Linuksie

Na wielu forach internetowych można natknąć się na wpisy, w których użytkownicy systemów opartych na Linuksie narzekają na sposób renderowania czcionek. Biorąc pod uwagę liczbę możliwych konfiguracji kart graficznych i monitorów, nie powinno to dziwić. A propos, w systemie Windows (7, 8, ale nie pod XP(!)) również dzieją się takie rzeczy, np. w konfiguracjach zintegrowanej grafiki AMD ATI i niektórych monitorów (np. Samsunga) o natywnej rozdzielczości 1366x768.

Środowisko XFCE

W środowisku XFCE wybieramy Ustawienia/Wygląd/Czcionki. Włączamy, jeżeli nie zaznaczono, "Antyaliasing", i eksperymentujemy z ustawieniami "Przyciąganie do siatki" oraz "Układ podpikseli" – tu zazwyczaj ustawiamy "RGB". Jako czcionkę interfejsu polecić można "Liberation Sans" lub "Droid Sans".

Archlinux

Jeżeli ustawienia oferowane przez środowisko nie zaspokajają potrzeb, spróbujmy doinstalować pakiety dostępne w repozytorium AUR, zawierające biblioteki i konfiguracje czcionek z Ubuntu.
Na początku warto zainstalować menedżera pakietów obsługującego repo AUR, może to być np. packer (używany domyślnie np. w Bridge Linux) lub yaourt. Wybrany menedżer trzeba zainstalować ręcznie:
  • sudo pacman -S base-devel – instalujemy pakiet deweloperski
  • mkdir ~/builds – tworzymy katalog roboczy do zbudowania pakietu instalacyjnego
  • pobieramy archiwum (tarball) wybranego menedżera i zapisujemy w utworzonym powyżej katalogu
  • cd ~/builds; tar -xvzf packer(yaourt).tar.gz – rozpakowujemy pobrane archiwum
  • makepkg -s – tworzymy pakiet instalacyjny godząc się na zainstalowanie (-s) potrzebnych zależności
  • sudo pacman -U packer.x.pkg.tar.xz – instalujemy utworzoną paczkę
Od tej pory do instalacji pakietów z AUR (i nie tylko) możemy używać zainstalowanego menedżera. Aby zainstalować wspomniane wyżej pakiety do obsługi czcionek wydajemy polecenia:
  • sudo packer (yaourt) -S fontconfig-ubuntu freetype2-ubuntu cairo-ubuntu libxft-ubuntu
Podczas budowania pakietów wciskamy 'n' na pytania, czy chcemy przeglądać skrypty budujące, oraz 't' na pytanie, czy zainstalować pakiet i ewentualnie zastąpić pakiety standardowe (mają takie same nazwy, ale bez przyrostka "-ubuntu").
W razie problemów zawsze warto przeczytać artykuł nt. konfiguracji czcionek w Archu. Przywrócenie oryginalnych pakietów umożliwia polecenie:
  • sudo pacman -S --asdeps fontconfig freetype2 cairo libxft

Debian

Prostym sposobem na poprawę  jakości wyświetlania czcionek w jest podmienienie konfiguracji czcionek plikami z pakietu przygotowanego dla Ubuntu.
  • ściągamy pakiet fontconfig-config z ostatniego wydania Ubuntu (teraz: 13.04)
  • sudo cp -r /etc/fonts /etc/fonts.debian – archiwizujemy konfigurację Debiana
  • dpkg -x fontconfig-config_2.10.2-0ubuntu2_all.deb ~/tmp – rozpakowujemy pakiet instalacyjny do utworzonego wcześniej katalogu
  • sudo cp -r ~/tmp/etc/fonts /etc – kopiujemy pliki konfiguracyjne
  • sudo chown -R root:root /etc/fonts – ustawienie właściwych uprawnień
Dwie ostatnie operacje łatwiej wykonać za pomocą konsolowego menedżera Midnight Commander. Po ponownym zalogowaniu się i ewentualnym dostrojeniu ustawień (patrz wyżej), jakość czcionek powinna się poprawić.

środa, 8 maja 2013

Archlinux - brak ikon w Evince 3.8

Wraz z aktualizacją środowiska Gnome do wersji 3.8, uaktualnieniu podlega również wykorzystywana również w instalacjach z innymi środwiskami przeglądarka plików pdf Evince, w wyniku czego program uruchamia się bez ikon, tzn. zamiast oznaczeń narzędzi na pasku widoczne są czerwone krzyżyki. Rozwiązanie jest proste, należy ponownie zainstalować bibliotekę librsvg: sudo pacman -S librsvg.

wtorek, 26 marca 2013

Nginx + php + userdir

W Nginx nie zaimplementowano mechanizmu userdir, znanego z serwera Apache, który w prosty sposób umożliwia uruchamianie skryptów php w katalogach użytkowników. Uczyniono tak ze względów bezpieczeństwa. Niemniej jednak czasami przydaje się taka funkcjonalność, np. do celów testowych, a więc nauki programowania w php. Poniżej konfiguracja działająca na Debianie/Ubuntu i Archu/Bridge'u:

server {
  listen   80;
  access_log  /var/log/nginx/localhost.access.log;
  index index.php index.html index.htm;

  server_name localhost;
  autoindex on;

  location ~ ^/~([^/]+)/(.+\.php)$ {
    include fastcgi_params;
    alias /home/$1/public_html/$2;
    fastcgi_pass unix:/var/run/php5-fpm.sock; # dla Debiana, Ubuntu
    fastcgi_pass unix:/run/php-fpm/php-fpm.sock; # dla Bridge'a
    fastcgi_index index.php;
  }

  location ~ ^/~(.+?)(/.*)?$ {
    alias /home/$1/public_html$2;
  }

  location ~ /\.ht { deny all; }
  location ~ /\. { deny all; }
}

W Debianie/Ubuntu powyższa konfiguracja powinna zostać zapisana w jakimś pliku (np. userdir) w katalogu /etc/nginx/sites-available, a następnie dowiązana w katalogu /etc/nginx/sites-enabled. W Archu/Bridge'u dopisujemy to w pliku /etc/nginx/nginx.conf.
Uwaga: powyższa konfiguracja nie jest bezpieczna, nadaje się wyłącznie do celów testowych. Jeśli chcesz więcej wiedzieć, zajrzyj na stronę wiki projektu Nginx.

wtorek, 5 lutego 2013

Archlinux - problemy z weryfikacją pakietów podczas instalacji

Pacman, domyślny menedżer pakietów w Archu, umożliwia weryfikowanie pakietów na podstawie podpisów, niestety niekiedy mechanizm ten sprawia problemy. Co można zrobić?
Pierwsza rzecz to wydać polecenie pacman-key --refresh-keys, które powinno zaktualizować lokalną bazę kluczy. Notabene odświeżenie kluczy zapewnia również instalacja pakietu archlinux-keyring. Jeżeli to nie pomoże, spróbuj zmienić repozytorium w /etc/pacman.d/mirrorlist. Jeżeli i to nie pomoże, można spróbować następujących kroków:

  1. W pliku konfiguracyjnym pacman.conf tymczasowo wyłączamy weryfikację pakietów dla repozytoriów core, extra i community, czyli wpisujemy SigLevel = Never,
  2. rm -R /etc/pacman.d/gnupg - usunięcie katalogu z kluczami,
  3. rm /var/cache/pacman/pkg/* - opróżnienie cachu pakietów, wymagane, gdyż w przeciwnym razie mogą wystąpić błędy mówiące o uszkodzonych pakietach,
  4. w tym miejscu trzeba czasem zmienić serwer, z którego pobierane są pakiety (zajrzyj do pliku /etc/pacman.d/mirrolist),
  5. pacman -Syu archlinux-keyring - instalujemy aktualne klucze Archa,
  6. pacman-key --init - przygotowanie lokalnej bazy kluczy, podczas tej operacji warto w innych konsolach wydać polecenie ls -R / oraz poruszać i poklikać myszą, co przyśpieszy generowanie entropii; można też zainstalować pakiet haveged i poprzedzić inicjalizację poleceniem haveged -w 1024,
  7. pacman-key --populate archlinux - inicjalizacja kluczy, podczas której należy potwierdzić zaufanie dla kluczy głównych deweloperów wciskając "T" + Enter (samo Enter nie wystarczy!),
  8. W pliku pacman.conf przywracamy weryfikację podpisów, czyli ustawiamy SigLevel = PackageRequired dla poszczególnych repozytoriów,
  9. pacman -Syyu - odświeżenie list pakietów i aktualizacja systemu.

Jeżeli powyższe kroki nie umożliwią bezproblemowej instalacji pakietów, pozostaje wspomniana opcja SigLevel = Never. To rozwiązanie ostateczne, wyłącza przecież weryfikację podpisów pakietów, nie jest więc polecenie, ale czasem przydaje się, żeby "awaryjnie" zainstalować jakiś pakiet.

Niestety, zdarzyło się ostatnio kilka razy po zainstalowaniu najnowszego Bridge Linuksa, że powyższe porady nie przyniosły oczekiwanego skutku. Ciągle pozostawał jeden pakiet, co do którego pojawiała się informacja mówiąca o jego uszkodzeniu. Rozwiązanie było następujące: usunięcie problematycznego pakietu wg sugestii pacmana, tymczasowa zmiana serwera, zainstalowanie opornego pakietu, przywrócenie poprzedniego serwera (notabene niekonieczne, ale był szybszy) i dalsza instalacja (aktualizacja).

czwartek, 10 stycznia 2013

Problemy z Dnsmasq

Opis konfiguracji Dnsmasq na serwerze Ubuntu 12.04 LTS znajduje się tutaj. Czasem jednak nie wszystko do końca działa, jak trzeba. Dobrze skonfigurowany Dnsmasq powinien zapewniać rozwiązywanie nazw hostów podpiętych do lokalnej sieci. Można to osiągnąć stosując adresowanie statyczne IP oraz dopisując aliasy hostów w pliku /etc/host na serwerze. Plik ten jest następnie propagowany do hostów w sieci lokalnej. Jeżeli jednak chcemy korzystać z adresowania dynamicznego (co nie przeszkadza oczywiście adresować wybranych hostów statycznie) i mieć możliwość rozwiązywania lokalnych nazw, musimy sprawdzić kilka rzeczy, na co zwraca uwagę m.in. FAQ Dnsmasqa.
  1. Upewniamy się, że na interfejsie, na którym nasłuchujemy żądań z sieci lokalnej jest dobrze ustawiony adres broadcast, który w systemach opartych na debianie ustawiamy w /etc/network/interfaces; polecenie sudo ip addr pozwoli sprawdzić poprawność ustawień.
  2. Porty 67 i 68 dla protokołu UDP oraz ruch dla pakietów broadcast z adresem źródłowym 0.0.0.0 i adresem przeznaczenia 255.255.255.255 powinny być odblokowane w firewallu na interfejsie lokalnym. Jeżeli w sieci mamy MS Vistę, to do firewalla dodajemy:
    iptables -A OUTPUT -o $INTIF -p udp -s $INTIP --sport 67 -d $UNIVERSE --dport 68 -j ACCEPT
    - gdzie $INTIF to nazwa interfejsu LAN, np. eth1, $INTIP - adres IP naszego serwera DHCP, $UNIVERSE - dowolny adres, czyli 0.0.0.0/0 (zobacz przykładową konfigurację firewalla).
  3. W przypadku systemów Windows XP zaleca się we właściwościach lokalnego połączenia sieciowego podać nazwę lokalnej domeny, czyli Panel sterowania / Połączenia sieciowe, prawy klik na połączeniu lokalnym i Właściwości / Protokół internetowy TCP/IP / Właściwości / Zaawansowane / DNS / Sufiks DNS dla tego połączenia: .mojadomena.org.
  4. Dystrybucje linuksa korzystają zazwyczaj z dwóch różnych klinetów dhcp. Jest to albo dhcpcd - z nim nie ma problemu, tzn. domyślnie wysyła do serwera nazwę hosta, albo dhclient, który jest również domyślnie wykorzystywany przez ostatnie wersje Network Managera, np. w Archu. W tym ostatnim przypadku musimy utworzyć plik /etc/dhclient.conf i wpisać w nim linię: send host-name = pick-first-value(gethostname(), "ISC-dhclient"); lub po prostu: send host-name = mojhost;.
  5. Warto dodać, że Network Manager na stacjach roboczych z Archem, podpiętych do sieci lokalnej za pomocą kabla, nie jest potrzebny. Możemy go odinstalować za pomocą polecenia: pacman -Rns networkmanager network-manager-applet. Pamiętać tylko trzeba, żeby uruchamiać domyślnie usługę dhcpcd, czyli: systemctl enable dhcpcd@eth0.service.