Instalacja Powerline w Debian 9

apt-get install python-setuptools python-pip
pip install wheel powerline-status

Dodajemy do `/etc/bash.bashrc`

# powerline
if [ -f /usr/local/lib/python2.7/dist-packages/powerline/bindings/bash/powerline.sh ]; then
        source /usr/local/lib/python2.7/dist-packages/powerline/bindings/bash/powerline.sh
fi

Ładujemy nową konfigurację:

. /etc/bash.bashrc

Automatyczne przełączanie dźwięku na HDMI

Najczęściej podłączam laptopa do telewizora, aby coś na nim wyświetlić. Chcę wtedy aby obraz i dźwięk szły po kablu HDMI. O ile z obrazem nie ma problemu większego, bo jest automatycznie przełączany, to dźwięk trzeba ustawić samemu.
Jako, że Linuksy mnie rozleniwiły, wolę by robiło sie to samo. Nie jest to skomplikowane.

Tworzymy wykonywalny plik /usr/local/bin/toggle_hdmi_sound z zawartością:

#!/bin/sh
 
USER=`who | grep " :0 " | cut -f1 -d' '`
HDMI_STATUS=`cat /sys/class/drm/card0/*HDMI*/status`
 
export PULSE_SERVER="`pactl info | grep -oE 'unix:.+'`"
 
if [ $HDMI_STATUS = "connected" ]
then
    su $USER -c"pactl --server $PULSE_SERVER set-card-profile 0 output:hdmi-stereo+input:analog-stereo" 
else
    su $USER -c"pactl --server $PULSE_SERVER set-card-profile 0 output:analog-stereo+input:analog-stereo" 
fi

Następnie tworzymy plik /etc/udev/rules.d/hdmi_sound.rules – regułę udev do uruchamiania powyższego polecenia:

KERNEL=="card0", SUBSYSTEM=="drm", ENV{DISPLAY}=":0",  RUN+="/usr/local/bin/hdmi_sound_toggle"

Na koniec wystarczy przeładowac reguły udev:

udevadm control --reload-rules

Dźwięk po HDMI w Arch

Podczas puszczania dźwięku po HDMI w Archu słychać “bzyknięcie” co 10-15 sekund. Bierze się to z różnego próbkowania dźwięku. System domyślnie operuje na 44100 kHz, natomiast po kablu HDMI musi iść dźwięk 48000 kHz.

Jako, że cały dźwięk w Arch obsługuje pulse, najłatwiej to poprawić w nim.  Otwieramy plik /etc/pulse/daemon.conf i odnajdujemy w nim linię:

; default-sample-rate = 44100

Zmieniamy ją na:

default-sample-rate = 48000

Po tym wystarczy uruchomić ponownie komputer i gotowe.

Aktualizacja firmware dysków Seagate Barracuda

Pierwszy wpis w tym blogu opisywał jak naprawić dysk Seagate z wadliwej serii Barracuda 7200.11. Dziś, po trzeciej takiej operacji, przypomniałem sobie o aktualizacji firmware. Operacja te jest szybka i bezbolesna.

Najpierw ściągamy obraz płyty z nowym firmware ze strony Seagate, po czym wypalamy go na płycie CD. Ostatnim punktem przygotowań jest ustawienie w BIOSie CD-ROMu jako pierwszego punktu startowego i odłączenie pozostałych dysków twardych.

Wkładamy płytę z nowym firmware i startujemy z niej system. O ile wszystko poszło dobrze, powinien się pojawić poniższy ekran.

Naciskamy F10, aby zaakceptować licencję (a raczej jej brak). Pojawi nam się ekran z listą operacji do wyboru. Klawisze A, B i C rozpoczynają wgrywanie firmware wybranego modelu.

Dobrze jednak najpierw wybrać S, by przeskanować system.

Zostanie wyświetlony model naszego dysku. Wciskając dowolny klawisz wracamy do poprzedniego menu i wybieramy nasz model. W moim przypadku jest to A. UPEWIJ SIĘ 13 RAZY ZANIM ROZPOCZNIESZ WGRYWANIE NOWEGO FIRMWARE. WYBRANIE ZŁEGO MODELU USZKODZI TRWALE DYSK, CZEGO NIE POKRYJE GWARANCJA SEAGATE!

Po około 30 sekundach aktualizacja się zakończy wyświetlając poniższy ekran.

Naciśnięcie dowolnego klawisza spowoduje wyłączenie komputera. Gotowe. Można podłączyć pozostałe diski i normalnie uruchomić komputer.

Apache vs Nginx: porównanie wydajności

Ogólnie przyjętą prawdą jest to, że Nginx jest wydajniejszy od Apache. Jednak czy warto stawiać osobny serwer do serwowania treści statycznych?

Aby to sprawdzić pobawiłem się trochę pobawić programem apachebench. Przeprowadziłem w sumie dwa testy. Dla strasznie dużego obciążenia, oraz drugi symulujący bardziej normalne użycie.

Apache vs Nginx: requests per secondApache vs Nginx: Time per requestNa drugim wykresie można zauważyć wyraźny wzrost wydajności Apacha. Początkowo sądziłem, że to dziwny błąd pomiarowy, ale zawsze wyniki były takie same. Widocznie Apache dużo lepiej sobie radzi na wielordzeniowych procesorach niż Nginx. Innego wytłumaczenia nie potrafię znaleźć. Później jednak im więcej połączeń, tym większa przewaga Nginxa. Powyżej 800 równoległych żądań Apache już nie potrafił obsłużyć i generował błędy.

Osobiście powiem, iż spodziewałem znacznie większej przewagi nieskomplikowanego serwera. Okazuje się, że niewielkim obciążeniu praktycznie jej nie ma. Dlatego jeśli nie posiadasz gigantycznego serwera, nie warto osobno stawiać Nginxa do hostowania plików statycznych.

Podpisywanie emaili ważnym certyfikatem

Ostatnio opisałem jak zmusić Kmail do akceptacji prawidłowych certyfikatów na przykładzie mBanku. Teraz zapragnąłem czegoś więcej – własnego certyfikatu.
Jest wiele opisów jak utworzyć certyfikat podpisany przez samego siebie. Jednak takie certyfikaty są złe ponieważ nie będą oznaczane automatycznie jako zaufane. Niewiele osób wie, że można uzyskać darmowy certyfikat podpisany przez zaufanego wystawcę. W dalszej części opiszę jak można go uzyskać.

Continue reading

Drukarka Samsung ML-1660 a Linux

Jako, że stara drukarka przeszła do historii, musiałem sobie sprawić nową. Wybór padł na Samsung ML-1660. Bo jest mała, tania i działa pod Linuksem bez problemów.

Niestety, jak zwykle, rzeczywistość nie jest tak piękna. Mała i owszem. Jednak złącza USB i zasilania są na tylnym panelu, podłączane prostopadle do obudowy. Dzięki temu, aby zmieścić wystające wtyczki drukarka musi stać jakieś 5cm od ściany.

To co Samsumg napisał w specyfikacji jest szczerą prawdą. Drukarka działa pod Linuksem. Jednak jej instalacja jest drogą przez mękę. Oto jak tego dokonać, na podstawie systemu PCLinuxOS.

Przede wszystkim trzeba odinstalować pakiet libtmp. Koliduje on z drukarką i podczas jej instalacji powoduje jej nieprawidłowe wykrywanie i zawieszanie.

apt-get remove libmtp8

Zapewne poprosi w tym momencie o usunięcie paru przydatnych programów, jak na przykład VLC, Amarok lub Clementine. Trudno, trzeba się zgodzić, ale to tylko na chwilę.
Ze strony Samsunga ściągamy Unified Driver i rozpakowujemy. Nie będziemy uruchamiali instalatora. Drukarka i tak nie zostanie wykryta przez instalator, a sam program do zarządzania drukarkami nie wygląda na jakiś specjalnie przydatny.

wget "http://org.downloadcenter.samsung.com/downloadfile/ContentsFile.aspx?CDSite=PL&CttFileID=2745812&CDCttType=DR&ModelType=N&ModelName=ML-1660&VPath=DR/201001/20100121132724343/UnifiedLinuxDriver_0.86.tar.gz"
tar -xzf UnifiedLinuxDriver_0.86.tar.gz
 
# Dla i386:
cp cdroot/Linux/i386/at_root/usr/lib/cups/filter/rastertosamsung* /usr/lib/cups/filter/
# dla i64
cp cdroot/Linux/x86_64/at_root/usr/lib64/cups/filter/rastertosamsung* /usr/lib/cups/filter/
 
chmod 755 /usr/lib/cups/filter/rastertosamsung*
chown root:root /usr/lib/cups/filter/rastertosamsung*

Teraz podłącz i włącz drukarkę.
Przejdź do Centrum Sterowania -> Sprzęt -> Set up printer… Jeśli masz szczęście – drukarka pojawi się sama. Jeśli nie – trzeba dodać ją samemu. W takim wypadku jako urządzenie wybieramy /dev/usb/lp0.

Następnie jako typ drukarki należy wybrać własny plik PPD i wskazać na plik cdroot/Linux/noarch/at_opt/share/ppd/ML-1660spl.ppd.

Po instalacji drukarki można z powrotem zainstalować libmtp i usunięte aplikacje.

Oznaczanie certyfikatu mBanku jako zaufanego

Jestem… hmmm… powiedzmy, że szczęśliwym użytkownikiem mBanku. Niestety od zawsze kmail nie potrafił poprawnie zweryfikować ich podpisu. I co jak co, ale trochę dziwnie wyglądają maile od Twojego banku, które mają błędny certyfikat… Po kilku latach męczenia się z tym i paroma niemrawymi próbami w końcu wymyśliłem jak to rozwiązać.

Najpierw trzeba zainstalować wymagane pakiety:

apt-get install pinentry-qt4 kleopatra

Kleopatra nie jest konieczna do działania, ale przyda się, do podglądu, co się dzieje z certyfikatami.

Następnie w katalogu ~/.gnupg tworzymy pliki konfiguracyjne:
gpg-agent.conf:

pinentry-program /usr/bin/pinentry-qt
default-cache-ttl 86400   # be aware that the passphrases will be cached for 86400 seconds! set accordingly to your needs
max-cache-ttl 86400
disable-scdaemon
write-env-file ~/.gnupg/.gpg-agent-info
allow-mark-trusted
keep-display
display :0.0

verbose
debug-level advanced
log-file socket:///home/cyryl/.gnupg/log-socket

gpgsm.conf:

auto-issuer-key-retrieve
include-certs -1  # this will include all certificates in the chain up to the root
debug-level basic

disable-policy-checks
auto-issuer-key-retrieve
prefer-system-dirmngr
debug-level advanced
log-file socket:///home/cyryl/.gnupg/log-socket

Teraz importujemy certyfikaty najwyższego rzędu:

gpgsm --import /etc/pki/tls/certs/ca-bundle.pem

I oznaczenie je jako zaufane. Najprościej to zrobić automatycznie poleceniem:

gpgsm --list-keys 2>/dev/null | grep fingerprint | awk '{print $2 " S"}' >> ~/.gnupg/trustlist.txt

Po tej akcji Kleopatra będzie już widziała większość root certyfikatów jako zaufane.

Teraz wystarczy ponownie wyświetlić naszą podpisaną wiadomość, a jej certyfikat zostanie automatycznie zaimportowany.

I niestety, ale root certyfikat dla mBanku nie jest jeszcze widoczny jako zaufany mimo, że występuje już w pliku trustlist.txt. Na liście certyfikatów odnajdujemy certyfikat mBanku i wchodzimy w szczegóły certyfikatu najwyższego poziomu. Sprawdzamy odcisk palca.

W pliku ~/.gnupg.trustlist.txt odnajdujemy odcisk palca tego certyfikatu i na końcu linii dopisujemy słowo relax. Cała linia powinna wyglądać tak:

61:EF:43:D7:7F:CA:D4:61:51:BC:98:E0:C3:59:12:AF:9F:EB:63:11 S relax

Teraz wszystko powinno już działać. Jeśli Po odświeżeniu wiadomość nie jest zielona, można ubić proces pgp-agent dla odświeżenia konfiguracji.

Kolorowa linia poleceń w Bashu

Po tym jak ostatnio musiałem naprawiać linię poleceń pewnej wielce poważanej serwerowej dystrybucji postawiłem opisać, jak się to robi prawidłowo. Bo z przerażeniem odkryłem, że większość dostępnych opisów zawiera błędy.

Ale zacznijmy od początku. Linia poleceń o której mówię, zwykle wygląda tak:

Wiele osób mówi, jak można zdefiniować kolory. Jednak w większości przypadków taka zabawa kończy się mniej więcej tak:

Jak więc prawidłowo zdefiniować linię poleceń?

W pliku ~/.bashrc definiujemy zmienną

export PS1='tutaj nasza definicja'

Styl definiujemy pomiędzy \[\033[ a m\].

Kody kolorów czcionki (dla koloru tła dodaj 10 do tej liczby):

  • 30 – czarny
  • 31 – czerwony
  • 32 – zielony
  • 33 – brązowy
  • 34 – niebieski
  • 35 – fioletowy
  • 36 – jasnoniebieski
  • 37 – biały
  • 0 – usuń wszelkie formatowanie

Efekty czcionki:

  • 0 – czcionka normalna
  • 1 – pogrubienie
  • 4 – podkreślenie
  • 5 – mruganie
  • 7 – zamień kolory czcionki i tła

Jeśli chcemy połączyć razem kilka efektów, to rozdzielamy poszczególne kody średnikami. Na przykład pogrubiona fioletowa czcionka na białym tle to 1;35;47. Jeśli chcemy wyczyścić całe formatowanie, to wystarczy wpisać 0 (czyli zero).

Większość opisów w sieci zawiera zwykle takie błędy:

  • brak domknięcia definicji \]
  • \e to nie jest idealnie to samo co \[\033

W praktyce ja stosuję takie definicje:

# user
export PS1='\[\033[32m\]\u\[\033[33m\]@\[\033[1;36m\]\h\[\033[0;33m\]:\[\033[31m\]\w \[\033[1;32m\]\$\[\033[0m\] '

# root
export PS1='\[\033[41;1;32m\]\u\[\033[0;33m\]@\[\033[1;36m\]\h\[\033[0;33m\]:\[\033[31m\]\w \[\033[1;31m\]\$\[\033[0m\] '

Pogrubiony host przydaje się zwłaszcza gdy loguję się na wiele serwerów. Łatwo wtedy napsuć wpisując komendę nie w tym oknie, w którym się chce. A gdy jestem rootem dodatkowo podkreślam kolorem, by było to widać z daleka.