Lubie sobie pograć w gry. Nie będzie to oczywiście zaskoczenie dla czytelników tego bloga. Gra jako interaktywne medium ma to do siebie że mogą wydarzyć się w niej nieoczekiwane rzeczy: od błędów czy różnego rodzaju glitchy, do strzelenia niemożliwych strzałów. Jak jeszcze – względnie – niedawno wymagało to albo specjalnego przygotowania albo sprzętu, tak teraz większość kart graficznych – czy konsol – posiada funkcje nagrywania. Teraz gdy wydarzy się nieoczekiwana akcja, należy nacisnąć dedykowany przycisk na padzie, lub odpowiednią kombinacje klawiszy i ostatnie parę minut rozgrywki będziemy mieli nagrane na dysku.
Rzadko się jednak zdarza że cały film będzie zawierał akcję którą będziemy chcieli pokazać. Dobrze by było film pociąć tak by nie było trzeba całego wrzucać na YouTube. I oszczędzimy sobie czas i transfer potrzebny na wysłanie. Taką prostą operacje można wykonać w jakimś wielkim kombajnie pokroju Adobe Premier (na którego mam nadzieje macie licencje), ale równie dobrze można skorzystać z darmowego i otwarto źródłowego ffmpeg.
Ktoś
kiedyś powiedział, że Linux jest darmowy dla ludzi których
czas nie jest nic warty. I mówiąc szczerze, jest w tym dość
dużo prawdy. Szczególnie jeśli chce się korzystać z tego systemu
do zastosowań „domowych” – czyli i do pracy i do
zabawy. A jedną z sytuacji gdzie to widać jest poprawne
skonfigurowanie karty graficznej w laptopie.
Zanim jednak przejdziemy do sedna sprawy musimy mieć kontekst. W „nowoczesnych laptopach” możemy często znaleźć dwie karty graficzne – szczególnie jeśli mówimy o high-endzie czy laptopach gamingowych – „wbudowaną” w procesor, często nazywaną kartą zintegrowaną, czy kartą dedykowaną / zewnętrzną. Takie rozdzielenie ma sens jeśli chodzi o laptopy i ich pracę na baterii. Karta zintegrowana jest wolniejsza i słabsza, ale dzięki temu pobiera o wiele mniej prądu czy też nie nagrzewa aż tak jak karta zewnętrzna. A karta dedykowana jest zaś silniejsza, ale skraca czas pracy na baterii i mocniej nagrzewa laptopa.
Idealnie by było gdybyśmy mogli uruchamiać gry czy inne aplikacje multimedialne na dedykowanej karcie graficznej, zaś całą resztę na zintegrowanej. I tak działa obsługa kart na Windowsie – przy uruchamianiu aplikacji możemy wybrać z którego procesora graficznego ma korzystać. A w niektórych przypadkach system sam wybierze najlepszą opcje.
Jak można się domyślić, tak to nie działa na Linuksie. Po części pewnie dlatego że system graficzny w każdej dystrybucji (czyli X Windows) pierwsze wydanie miał w 1984 roku, czyli 35 lat temu. Innym winowajcą będzie też słaba obsługa takiego mechanizmu przez sterowniki, dlatego że producenci kart graficznych nie uważają Linuksa za platformę gamingową czy też domową.
Kończąc wstęp, posiadam laptopa Dell Inspiron (którego nie
polecam) z dwoma kartami graficznymi: zintegrowaną od Intela i
dedykowaną od Nvidi.
Problem
Out of the box, zamknięte sterowniki do karty graficznej pozwalają na przełączanie się między nią a zintegrowaną. Takie rozwiązanie ma jednak trzy problemy, pierwsze – by zmienić kartę należy się co najmniej wylogować, drugie – gdy mam odpaloną kartę graficzną laptop się nagrzewa nawet gdy nic się nie jest uruchomione (na przykład jest wyświetlany tylko pulpit), trzeci – czas baterii jest mocno skracany.
Sterowniki otwarto źródłowe, czyli nouveau, nie są
wcale lepsze w tym względzie. Dlatego na potrzeby tego artykułu je
pominę i będę stosował tylko i wyłącznie oficjalne od Nvidii.
Co chcemy więc zrobić? Chcemy by można było uruchamiać per
aplikacja dedykowaną kartę graficzną bez obawy o to że laptop
będzie się niepotrzebnie nagrzewał czy skracał czas baterii.
Największym
plusem Linuksa jest to że można go mocno spersonalizować i
dostosować do swoich potrzeb. W tym wpisie opiszę konfiguracje z
której ja korzystam i która – mam nadzieje – ułatwi Wam w
jakiś sposób korzystanie z Linuksa.
GRUB
Jedną z pierwszych rzeczy którą pamiętam przy korzystaniu z
Linuksa było to że przy uruchamianiu go zawsze wyświetlał się
log zamiast tak zwanego splash screenu. Aktualnie nie jest to
jednak domyślna konfiguracja. By to zmienić należy zmodyfikować
plik: /etc/default/grub i zmienić
linie:
GRUB_CMDLINE_LINUX_DEFAULT="quiet splash"
na:
GRUB_CMDLINE_LINUX_DEFAULT=""
Po modyfikacji należy wykonać następujące polecenie:
sudo update-grub2
Snap
Snap jest jednym z wielu menedżerów paczek który jest dostępny
na Linuksa – głównie na Ubuntu i ich różnego rodzaju
dystrybucje. Jego plusem jest to że dystrybuuje aplikacje razem z
zależnościami i umieszcza je w stosownym sandboxie.
Nie miałem z nim problemów, do czasu aż nie zauważyłem że wrzuca wszystkie zainstalowane aplikacje do /var/snap: który u mnie jest na mniejszym – szybszym dysku. Jako że przez snapa zainstalowałem między innymi dockera, nie podobała mi się perspektywa by cały dockerowy cache, volumeny i tego typu pliki przetrzymywać na dysku systemowym. Ale jako że nie jest to windows, można ten katalog przenieść w inne miejsce.
By przenieść snapa, nie można po prostu przenieść katalogu i
zrobić symlinka, jako że snap korzysta z AppArmour które
tego typu zachowań nie lubi. By go przenieść, musimy więc
zamountować odpowiedni katalog.
Na samym początku należy wyłączyć samego demona snapa:
services snapd stop
Gdy już to zrobimy należy – jako root – skopiować zawartość katalogów: /var/lib/snapd i /var/snap do nowych lokalizacji – tam gdzie ich miejsce, przy okazji z oryginałów robiąc backup:
Bash jest domyślnym shellem w Ubuntu i wyłącznie z tego powodu jest tym z którego korzystam. A skoro już z niego korzystam, to miło jest go sobie spersonalizować. Tutaj jedyne co opiszę to jak zmodyfikować $PS1, czyli tak zwany prompt.
Najprostszą rzeczą przy modyfikacji promptu, jest skorzystanie z gotowych generatorów, na przykład z bashrcgenerator.com. Na tej stronie wystarczy wyklikać sobie wymarzonego prompta, i gdy skończymy to wystarczy wygenerowany kod dodać na końcu pliku: ~/.bashrc.
Ale skoro już upiększyliśmy sobie prompta, to fajnie byłoby
gdyby wyświetlał nam brancha jeśli jesteśmy w jakimś
repozytorium. By to zrobić, należy do $PS1
dodać następujące wyrażenie:
$PS1 +="\$(__git_ps1 '(%s) ')"
Ale nie zadziała to tak od razu, bo potrzebujemy mieć jeszcze definicje funkcji __git_ps1, można ją znaleźć na stronach githuba. By wszystko zadziałało, należy dodać przed skorzystaniem z w/w funkcji kod który dołączy ten plik do naszego ~/.bashrc.
Docker jest jednym z tych narzędzi które na stałe weszły do
zestawu narzędzi każdego dewelopera (czy tego chce czy nie), więc
dobrze jest go sobie poprawnie skonfigurować.
By nie było potrzeby przełączanie się na roota za każdym
razem gdy chcemy coś zrobić z naszymi kontenerami, warto dodać
naszego użytkownika jako zaufanego. By to zrobić należy dodać
siebie do grupy docker.
sudo usermod -a -G docker psychob
Przy czym może zdarzyć się to, że po zainstalowaniu dockera, nie
będziemy mieli takiej grupy. W takim wypadku należy ją stworzyć:
sudo groupadd docker
Docker domyślnie korzysta z sieci 172.12/16, może być to dość
niefortunne gdy w naszym domu lub pracy korzystamy z takiego zakresu,
na szczęście łatwo jest to zmienić w konfiguracji. W pliku
/etc/docker/daemon.json (lub jeśli
zainstalowaliście dockera przez snapa to:
/var/snap/docker/current/config/daemon.json),
należy dodać następującego json’a:
SSH jest wygodnym sposobem na uwierzytelnienie siebie w
komunikacji z innymi serwerami. W szczególności jeśli korzystamy z
szyfrowania asymetrycznego i kluczy RSA.
Zawsze gdy konfiguruje na nowo system, to nigdy nie pamiętam
jakie uprawnienia mają mieć pliki id_rsa i
id_rsa.pub:
chmod 0600 id_rsa # RW only for owner
chmod 0644 id_rsa.pub # RW for owner, Read for anyone else
Innym problem zaczyna się wtedy, gdy musimy korzystać z większej ilości kluczy, jak wtedy zarządzać nimi by ssh samo wiedziało który klucz służy do jakiego połączenia? Służy do tego plik ~/.ssh/config.
Należy w nim wymienić zapisać hosty z którymi się chcemy
łączyć, jak i kluczy z których powinien korzystać.
Host work.git.com
HostName work.git.com
User git
IdentityFile ~/.ssh/id_rsa_work
Host github.com
HostName github.com
User git
IdentityFile ~/.ssh/id_rsa
Bardzo dużo czasu spędziłem na Windowsie i przyzwyczaiłem się
do konfiguracji firefoxa która jest domyślnie na tym systemie. Co
prawda nie rozumiem dlaczego różni się ona między systemami, ale
pewnie jest to jedna z tych rzeczy które dawno temu zostały
ustalone i nikt nie chce ich teraz zmienić.
By zmienić niżej wymienione rzeczy należy wejść na stronę
about:config i zmienić następujące rzeczy:
Co
jest zmieniane
Klucz
Wartość
Klawisz
backspace odpowiada za cofnięcie się do poprzedniej strony
browser.backspace_action
2
Firefox
nie wyłącza się gdy zamkniemy ostatnią kartę
VIM jest jednym z tych narzędzi na którego ludzie lubią
psioczyć, nie bez powodu. Jest to trudne w obsłudze narzędzie
które ma tą zaletę że jest w zasadzie zainstalowane wszędzie.
Można je nawet ulepszyć stosując odpowiednią konfiguracje, a taka
znajduje się na wiki
vima. Dla mnie jest wygodniej jak wyłączy się obsługę myszy:
" Enable use of the mouse for all modes
" set mouse=a
Projekty przy których pracujemy mogą być bardzo duże, dlatego
środowiska programistyczne od jetbrains sugerują by dostosować
konfiguracje systemu. Dzięki zmianie konfiguracji PHPStorm czy
jakiekolwiek inne środowisko od nich będzie potrafiło szybciej
indeksować zmiany w naszym projekcie.
By zwiększyć maksymalną ilość obserwowanych plików należy utworzyć nowy plik: /etc/sysctl.d/60-jetbrains.conf, z zawartością:
# Set inotify watch limit high enough for IntelliJ IDEA (PhpStorm, PyCharm, RubyMine, WebStorm).
# Create this file as /etc/sysctl.d/60-jetbrains.conf (Debian, Ubuntu), and
# run `sudo service procps start` or reboot.
# Source: https://confluence.jetbrains.com/display/IDEADEV/Inotify+Watches+Limit
#
# More information resources:
# -$ man inotify # manpage
# -$ man sysctl.conf # manpage
# -$ cat /proc/sys/fs/inotify/max_user_watches # print current value in use
fs.inotify.max_user_watches = 524288
Z jakiegoś powodu, gdy zainstalowałem spotify przez snapa,
środowisko graficzne – u mnie jest to mate – nie potrafiło
wyświetlić go przy widgecie który odpowiadał za głośność
systemu.
Poprawienie tego było proste, należało zmienić nazwę jednego
pliku: