Terminalowe potyczki – by żyło się lepiej

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.

3 myśli na temat “Terminalowe potyczki – by żyło się lepiej

  1. „Pisać po raz setny to samo?” – cannot agree more. Mam wrażenie, że 90% treści jest odtwórczych, zapewne dlatego, że aktywny blog jest niezłym atutem w cv, chociaż mogę się mylić. Na agregatorach jak jvm-bloggers i innych co tydzień widać „intro to „, ” basics”, itp. Trudno się dziwić, że jedną z większych trudności dla ludzi zaczynających z technologią albo ogólnie z programowaniem jest przekopanie się przez ten nadmiar informacji – a niby ma to im pomóc.

    Popieram podejście i czekam na dalsze kreatywne treści, nawet jeżeli zajmie to kupę czasu.

  2. A instalacja guake nie rozwiązuje problemu z F11 i fullscreen?

  3. @Dawciobiel, no nie, bo guake też wymaga konfiguracji w podobny sposób. Jego przewagą jest możliwość zapamiętania stanu sesji, co nie do końca jest bezpieczne.

Napisz odpowiedź

Twój adres e-mail nie zostanie opublikowany. Wymagane pola są oznaczone *

To create code blocks or other preformatted text, indent by four spaces:

    This will be displayed in a monospaced font. The first four 
    spaces will be stripped off, but all other whitespace
    will be preserved.
    
    Markdown is turned off in code blocks:
     [This is not a link](http://example.com)

To create not a block, but an inline code span, use backticks:

Here is some inline `code`.

For more help see http://daringfireball.net/projects/markdown/syntax