Prawie rok nic nie napisałem. Po prostu nie mam na to siły, nie widzę sensu (blog nie przynosi korzyści i nie chodzi o zarabianie) i co gorsza, wszystkie pomysły wydają mi się takie banalne. Nie chodzi nawet o prostotę, ale o banalność właśnie. Rozwiązanie problemu możesz znaleźć w sieci w przeciągu kilku minut. Pisać po raz setny to samo? Not hacker way. Wtórność. Ale dziś mam pomysł, więc coś opiszę 🙂

Problematy

Problem trochę „licealny”, czyli porównywania wielkości swoich pokemonów. Chciałbym mieć spersonalizowany „ekran powitalny” terminala, ale tak, żeby było widać kilka podstawowych informacji o komputerze. Czasami nie potrzebuję nic ponad wersję kernela czy uptime. Samo odpalenie terminala niech da mi te informacje.
Kolejnym elementem jest moje lenistwo. Chcę, żeby okno terminala startowało zmaksymalizowane (fullscreen jak po naciśnięciu F11).

Część pierwsza

Rozwiązaniem pierwszej części zadania jest neofetch. Ta prosta biblioteka, którą można zainstalować za pomocą zwykłego

apt get install neofetch

Wyświetli mi wszystkie podstawowe informacje. W praktyce wystarczy zatem gdzieś pod koniec .bashrc dodać wywołanie neofetch i gotowe.

Część druga

Paradoksalnie znacznie bardziej „cwana”. Okazuje się, że w Ubuntu 20.04 można skonfigurować skrót do uruchamiania terminala, ale nie można skonfigurować polecenia. To znaczy, można dodać własne polecenie uruchomienia terminala i wyłączyć to domyślne. Jednak bez grzebania w głębokiej konfiguracji nie ma możliwości przedefiniowania tego polecenia. Można też pokombinować z konfiguracją samego terminala i ustawić odpowiedni rozmiar w kolumnach i wierszach… ale nie chcecie tego robić. No ale mamy .bashrc.

W pierwszej kolejności musimy zainstalować sobie xdotool. Jest to takie zabawne narzędzie, które pozwala na emulowanie naciśnięcia przycisków klawiatury z poziomu linii poleceń. Tutaj rozwiązanie wydaje się proste:

xdotool key F11

Umieszczone pod koniec .bashrc powinno rozwiązać problem…

I tu wchodzi tmux

Jako że używam tmuxa, to .bashrc będzie uruchamiany za każdym odpaleniem nowego tmuxowego okna (myśl o nim jak o zakładce w przeglądarce). Zatem za każdym razem będzie naciśnięty klawisz F11 i okno przeskoczy do/z pełnego ekranu. Rozwiązanie tego problemu jest trochę „prymitywne”:

CURRENT_SIZE=$(echo $(xwininfo -id $(xdotool getactivewindow) -stats | egrep '(Width|Height):' | awk '{print $NF}') | sed -e 's/ /x/')
MAX_SIZE="1920x1080"

if [ "$CURRENT_SIZE" != "$MAX_SIZE" ]; then
   xdotool key F11
fi 

Definiujemy dwie zmienne. Pierwsza, CURRENT\_SIZE, jest obliczona na podstawie wielkości aktualnego okna. Tak, święta trójca egrep, awk, sed znowu robi robotę. Druga, MAX\_SIZE, określa maksymalny rozmiar okna. Jeżeli nie są sobie równe, to naciskamy F11.

Co można jeszcze?

Można oczywiście trochę się pobawić. Na przykład instalując ascii-image-converter można wygenerować ascii art z obrazka i podmienić logo neofetch.

Kolejnym rozszerzeniem jest zmiana zahardkodowanej, maksymalnej rozdzielczości okna w drugiej części problemu na:

MAX_SIZE=$(xrandr | egrep \\* | awk '{print $1}' | head -n 1)

Generalnie powinno to „robić robotę”, bo jedynym przypadkiem gdy to nie będzie działać, jest ten, gdy:

  • Mamy 2+ monitorów o różnych rozdzielczościach;
  • Okno terminala otworzyło się w domyślnym rozmiarze równym rozdzielczości jednego z monitorów;
  • Monitor ten jest pierwszym na liście xrandr.

Zapobiec temu można konfigurując rozmiar okna terminala w ustawieniach na 10×10 (kolumny/wiersze) czy coś podobnie niedorzecznego.