Jak sprawić, by z terminala korzystało się wygodniej?

Przeczytasz to w: 13 minut
Ładny PowerShell w Windowsie i ładny zsh w Linuksie. O tak!

Wbrew pozorom nie trzeba wiele, by zacząć lubić korzystanie z shella. Kilka prostych czynności może sprawić, że możemy wykonywać zadania szybciej, bo często zamiast wyklikać parę okienek możemy wykonać 1 polecenie, które za wszystko załatwia sprawę, lecz decydujemy się na te okienka, bo w końcu już kiedyś to klikaliśmy, to może w trakcie się jakoś przypomni jak to się robiło…nie?

Zmiany, o których będę pisał niżej sprawią, że to, co widzimy w terminalu będzie też przyjaźniejsze dla oka. Niestety, czasami niektóre czynności czy dobór kolorów w tych oknach jest kiepski i to może sprawiać taki odpychający efekt od terminali. Niezależnie czy to jest Windows czy Linux.

Windows + PowerShell + oh-my-posh + PSReadLine = ❤

Tak, Windows też potrafi zaskoczyć obsługą terminala przez PowerShell. W sumie to piszę tego posta, bo właśnie zaskoczył mnie. Od lat korzystam z dobroci zsh i nie miałem okazji mieć takich pozytywnych wrażeń w Windowsie, aż do teraz.

Zacznijmy od Chocolatey – to jest darmowe otwarto-źródłowe narzędzie, które jest menedżerem pakietów dla Windowsa. Działa ono tak samo jak menedżery pakietów w Linuksie, a ich założenie jest proste, na przykład menedżer apt (występuje w Ubuntu, Debianie i pochodnych) instaluje pakiet poprzez polecenie apt install gparted (instaluje program GParted). W Chocolatey instaluje się programy tak samo, na przykład Notepad++ instaluje się poleceniem choco install notepadplusplus.

Instalacja jest prosta – wykonaj te polecenie w Windows PowerShell z uprawnieniami administratora:

Set-ExecutionPolicy Bypass -Scope Process -Force; [System.Net.ServicePointManager]::SecurityProtocol = [System.Net.ServicePointManager]::SecurityProtocol -bor 3072; iex ((New-Object System.Net.WebClient).DownloadString('https://chocolatey.org/install.ps1'))

I voilà – mamy zainstalowane Chocolatey. Zainstalujmy więc tego Notepada++ w ten sposób, co opisałem powyżej:

choco install notepadplusplus

Na dobrą sprawę to musiałem tylko kilka razy zatwierdzić i gotowe:

Sprawmy, by ten shell wyglądał trochę lepiej. Zainstalujemy do tego conemu poleceniem choco install conemu:

PS C:\Users\Administrator> choco install conemu
Chocolatey v0.10.15
Installing the following packages:
conemu
By installing you accept licenses for the packages.
Progress: Downloading ConEmu 19.10.12.0... 100%

ConEmu v19.10.12.0 [Approved]
conemu package files install completed. Performing other installation steps.
The package ConEmu wants to run 'chocolateyInstall.ps1'.
Note: If you don't run this script, the installation will fail.
Note: To confirm automatically next time, use '-y' or consider:
choco feature enable -n allowGlobalConfirmation
Do you want to run the script?([Y]es/[A]ll - yes to all/[N]o/[P]rint): y

Downloading ConEmu 64 bit
  from 'https://github.com/Maximus5/ConEmu/releases/download/v19.10.12/ConEmuSetup.191012.exe'
Progress: 100% - Completed download of C:\Users\Administrator\AppData\Local\Temp\chocolatey\ConEmu\19.10.12.0\ConEmuSetup.191012.exe (6.86 MB).
Download of ConEmuSetup.191012.exe (6.86 MB) completed.
Hashes match.
Installing ConEmu...
ConEmu has been installed.
  conemu may be able to be automatically uninstalled.
 The install of conemu was successful.
  Software installed as 'exe', install location is likely default.

Chocolatey installed 1/1 packages.
 See the log for details (C:\ProgramData\chocolatey\logs\chocolatey.log).

Następnie zainstalujemy moduły z projektu oh-my-posh, który jest odpowiednikiem oh-my-zsh, lecz dla Windowsa:

Install-Module posh-git -Scope CurrentUser
Install-Module oh-my-posh -Scope CurrentUser

Jak widać, to nie było skomplikowane:

PS C:\Users\Administrator> Install-Module posh-git -Scope CurrentUser

NuGet provider is required to continue
PowerShellGet requires NuGet provider version '2.8.5.201' or newer to interact with NuGet-based repositories. The NuGet
 provider must be available in 'C:\Program Files\PackageManagement\ProviderAssemblies' or
'C:\Users\Administrator\AppData\Local\PackageManagement\ProviderAssemblies'. You can also install the NuGet provider by
 running 'Install-PackageProvider -Name NuGet -MinimumVersion 2.8.5.201 -Force'. Do you want PowerShellGet to install
and import the NuGet provider now?
[Y] Yes  [N] No  [S] Suspend  [?] Help (default is "Y"): y

Untrusted repository
You are installing the modules from an untrusted repository. If you trust this repository, change its
InstallationPolicy value by running the Set-PSRepository cmdlet. Are you sure you want to install the modules from
'PSGallery'?
[Y] Yes  [A] Yes to All  [N] No  [L] No to All  [S] Suspend  [?] Help (default is "N"): y
PS C:\Users\Administrator> Install-Module oh-my-posh -Scope CurrentUser

Untrusted repository
You are installing the modules from an untrusted repository. If you trust this repository, change its
InstallationPolicy value by running the Set-PSRepository cmdlet. Are you sure you want to install the modules from
'PSGallery'?
[Y] Yes  [A] Yes to All  [N] No  [L] No to All  [S] Suspend  [?] Help (default is "N"): y

Teraz możesz wykonać polecenie Set-Prompt i masz możliwość korzystania z oh-my-posh. Jeśli polecenie się nie wykonało, najprawdopodobniej nie masz zdefiniowanej polityki względem wykonywania skryptów powershellowych (Get-ExecutionPolicy daje wynik Undefined). Zmień tą politykę na Unrestricted poleceniem Set-ExecutionPolicy Unrestricted. Dzięki temu polityka zmieni się jedynie dla komputera z którego jest wykonywane te polecenie:

Get-ExecutionPolicy -List

        Scope ExecutionPolicy
        ----- ---------------
MachinePolicy       Undefined
   UserPolicy       Undefined
      Process       Undefined
  CurrentUser       Undefined
 LocalMachine    Unrestricted

Moduł posh-git wymaga zainstalowanego gita, warto go zainstalować poleceniem choco install git:

C:\Users\Administrator> choco install git
Chocolatey v0.10.15
Installing the following packages:
git
By installing you accept licenses for the packages.
Progress: Downloading git.install 2.25.1... 100%
Progress: Downloading git 2.25.1... 100%

git.install v2.25.1 [Approved]
git.install package files install completed. Performing other installation steps.
The package git.install wants to run 'chocolateyInstall.ps1'.
Note: If you don't run this script, the installation will fail.
Note: To confirm automatically next time, use '-y' or consider:
choco feature enable -n allowGlobalConfirmation
Do you want to run the script?([Y]es/[A]ll - yes to all/[N]o/[P]rint): a

Using Git LFS
Installing 64-bit git.install...
git.install has been installed.
git.install installed to 'C:\Program Files\Git'
  git.install can be automatically uninstalled.
Environment Vars (like PATH) have changed. Close/reopen your shell to
 see the changes (or in powershell/cmd.exe just type `refreshenv`).
 The install of git.install was successful.
  Software installed to 'C:\Program Files\Git\'

git v2.25.1 [Approved]
git package files install completed. Performing other installation steps.
 The install of git was successful.
  Software install location not explicitly set, could be in package or
  default install location if installer.

Chocolatey installed 2/2 packages.
 See the log for details (C:\ProgramData\chocolatey\logs\chocolatey.log).

Teraz zaimportujmy sobie polecenia z tych modułów, które zainstalowaliśmy i odpalmy w końcu nasz nowy shell:

Import-Module posh-git
Import-Module oh-my-posh
Set-PoshPrompt -Theme Agnoster

W efekcie dostajemy to:

Trochę to odbiega od tego, co widać na moim początkowym zrzucie ekranu, więc popracujemy nad tym, by wyglądem się to nie różniło. Na początku musimy zainstalować czcionki Nerd Font. Znajdziemy je w tym ogromnym repozytorium czcionek. Czcionki Nerd Font różnią się od swoich oryginalnych odpowiedników tym, że mają dodanych kilka znaków, które sprawiają, że ten schemat (nazywający się Agnoster) wygląda lepiej. Ja osobiście bardzo lubię czcionkę Ubuntu Mono w terminalu i z niej też skorzystam. Jeśli podoba Ci się wygląd terminala jak w screenshocie nagłówkowym, zrób to samo co ja (opisałem poniżej):

Wejdź na tą podstronę repozytorium, otwórz folder Regular, następnie complete, i pobierz czcionkę Ubuntu Mono Nerd Font Complete Windows Compatible.ttf. Powtórz to dla folderów Regular-Italic, Bold i Bold-Italic. Jak pobierzesz wszystkie, zaznacz czcionki, kliknij na jedną PPM i wybierz Zainstaluj dla wszystkich użytkowników.

Następnie w oknie Windows PowerShell klikamy na pole tytułowe PPM i Właściwości. W zakładce Czcionka wybieramy naszą nową czcionkę i rozmiar. W moim przypadku to jest UbuntuMono NF z rozmiarem 16.

W ten sposób shell już wygląda lepiej:

Nadal, on może wyglądać lepiej. Zmienimy nieco kolorystykę tego okna, bo jednak ten niebieski trochę razi w oczy. Jeden z najpopularniejszych tematów znalazłem tutaj, w tym repozytorium. My skorzystamy z tematu Solarized-Dark. Instalacja jest prosta: na samym początku klonujemy repozytorium (przed pójściem dalej zrestartowałem terminal, bo nie miał świadomości tego, że ja już zainstalowałem gita):

git clone https://github.com/neilpa/cmd-colors-solarized
cd cmd-colors-solarized
reg.exe import .\solarized-dark.reg
.\Update-Link.cmd "$env:APPDATA\Microsoft\Windows\Start Menu\Programs\Windows PowerShell\Windows PowerShell.lnk"
.\Update-Link.cmd "$env:APPDATA\Microsoft\Windows\Start Menu\Programs\Windows PowerShell\Windows PowerShell (x86).lnk"

Okej, teraz otwórz PowerShella jeszcze raz. Voilà, kolory zmienione! Ale nie ma tego nowego wyglądu shella, dlaczego? Dlatego, bo nie zdefiniowaliśmy go w profilu shella. Profil shella to nic innego jak prosty skrypt, który wykonuje się, gdy otwieramy terminal. Zanim zapiszemy sobie do niego to, co potrzebujemy to chciałem pokazać jeszcze jedną rzecz, która moim zdaniem jest niezbędna.

W terminalu niesamowicie istotną rzeczą jest autouzupełnianie składni polecenia. Robi się to naciskając tabulator (przycisk Tab). Naciśnięcie powoduje autouzupełnienie polecenia jeśli, następne naciśnięcia zmienią nasze polecenie na następną opcję, np. jeśli jest polecenie Restart- i my wciśniemy tabulator to za pierwszym razem otrzymamy pierwszą propozycję uzupełnionego polecenia, za drugiem drugą opcję (jeśli istnieje) i tak dalej. Problem w tym, że w jednym czasie widzisz tylko 1 polecenie, bo to jest domyślne ustawienie w PowerShella. Wygodniej by było widzieć opcje i nawet sterować strzałkami, by wybrać interesujące dla nas rozwiązanie. Mało tego, jeszcze lepiej będzie jeśli od razu przy tym wszystkim będziemy mieli drobną podpowiedź jakie np. parametry są dostępne w danym poleceniu czy też jakie wartości oczekują dane parametry. Naszym remedium jest te polecenie:

Set-PSReadlineKeyHandler -Key Tab -Function MenuComplete

Dzięki niemu propozycje autouzupełnienia polecenia widzimy tak:

Okej, jak już mamy takie fajne ustawienia to zapiszmy sobie je tak, by wyświetlały się na stałe, co?

Okej, by otworzyć edycję profilu, z którego korzystamy w PowerShellu wykonaj polecenie:

if (!(Test-Path -Path $PROFILE )) { New-Item -Type File -Path $PROFILE -Force } .$env:SystemRoot/System32/notepad.exe $PROFILE

Wklejmy do niego to, co nas interesuje:

Dzięki temu teraz już od razu uruchamia się nam ten nowy wygląd shella:

Zmienialiśmy czcionki w oknie PowerShella, ale powinniśmy je też zmienić w Wierszu polecenia. Klikamy prawym na tytuł okna, następnie Właściwości.

Następnie podobnie jak poprzednio w zakładce Czcionka zmieniamy czcionkę na tą, którą wybraliśmy z serii Nerd Font (w moim przypadku to UbuntuMono NF) i dajemy okej. W ten sposób możemy się cieszyć ładnym wyglądem terminala w Windowsie. Te zmiany dotyczą głównie wyglądu, ale myślę, że najważniejszym przy nauce jakiegokolwiek terminala jest nauka obsługi skrótów klawiaturowych. To one sprawiają, że piszemy w nim coraz szybciej dzięki czemu nasza efektywność rośnie.

Na koniec zostawię Wam w postaci zajawki ciekawy wykład na temat szybkiej obsługi PowerShella z użyciem PSReadLine, naprawdę mi się bardzo podobał:

Linux + zsh + oh-my-zsh = ❤

Co prawda mowa tutaj o Linuksie, ale nie każdego Linuksa obsługuje się z poziomu Linuksa – w końcu serwery często nie mają zainstalowanego interfejsu graficznego i obsługuje się je poprzez SSH (secure shell). Tam też warto sprawić, by pracowało nam się z nim wygodnie.

Domyślnym interpreterem poleceń w Linuksie w dzisiejszych czasach jest Bash (/bin/bash), a w tych starszych lub w okrojonych dystrybucjach sh (/bin/sh). Mają one pewne możliwości, ale też ograniczenia konfiguracyjne, przez co na codzień korzystam z zsh (/bin/zsh). Nie jest on w standardzie w systemach (przynajmniej nie spotkałem się z dystrybucją mającą ją jako domyślny shell, choć jest on dostępny w MacOS (na ten moment korzystałem tylko z 10.15 i tam był). Pokażę tutaj jak zainstalować zsh oraz w jaki sposób można z niego zrobić fajny użytek.

UWAGA: instrukcje poniżej są ogólne dla wszystkich dystrybucji Linuksa, ale są polecenia, które są specyficzne dla dystrybucji (np. w Debianie/Ubuntu menedżerem pakietów jest apt/apt-get, w Arch Linuksie jest pacman, w Red Hat/CentOS/Fedora yum/dnf, a w Gentoo…w sumie to, co chcesz, ale przeważnie Portage (polecenie emerge). Weź pod uwagę też to, że nazwy pakietów w repozytoriach mogą się różnić.

Zaczynamy od instalacji gita, zsh i podkreślania składni zsh

sudo apt install git zsh zsh-syntax-highlighting -y

Okej, teraz odpalmy one-liner, którym zainstalujemy zsh:

sh -c "$(wget -O- https://raw.githubusercontent.com/ohmyzsh/ohmyzsh/master/tools/install.sh)"

Następnie musimy zatwierdzić zmianę shella na zsh i jesteśmy w domu.

--2020-03-15 11:47:42--  https://raw.githubusercontent.com/ohmyzsh/ohmyzsh/master/tools/install.sh
Translacja raw.githubusercontent.com (raw.githubusercontent.com)... 151.101.0.133, 151.101.192.133, 151.101.128.133, ...
Łączenie się z raw.githubusercontent.com (raw.githubusercontent.com)|151.101.0.133|:443... połączono.
Żądanie HTTP wysłano, oczekiwanie na odpowiedź... 200 OK
Długość: 8445 (8,2K) [text/plain]
Zapis do: `STDOUT'

-                   100%[===================>]   8,25K  --.-KB/s    w 0s       

2020-03-15 11:47:42 (215 MB/s) - zapisano na standardowe wyjście [8445/8445]

Cloning Oh My Zsh...
Cloning into '/home/supra/.oh-my-zsh'...
remote: Enumerating objects: 1137, done.
remote: Counting objects: 100% (1137/1137), done.
remote: Compressing objects: 100% (1102/1102), done.
remote: Total 1137 (delta 22), reused 926 (delta 17), pack-reused 0
Receiving objects: 100% (1137/1137), 750.06 KiB | 2.13 MiB/s, done.
Resolving deltas: 100% (22/22), done.

Looking for an existing zsh config...
Using the Oh My Zsh template file and adding it to ~/.zshrc.

Time to change your default shell to zsh:
Do you want to change your default shell to zsh? [Y/n] y
Changing the shell...
Hasło: 
Shell successfully changed to '/usr/bin/zsh'.

         __                                     __
  ____  / /_     ____ ___  __  __   ____  _____/ /_
 / __ \/ __ \   / __ `__ \/ / / /  /_  / / ___/ __ \
/ /_/ / / / /  / / / / / / /_/ /    / /_(__  ) / / /
\____/_/ /_/  /_/ /_/ /_/\__, /    /___/____/_/ /_/
                        /____/                       ....is now installed!


Please look over the ~/.zshrc file to select plugins, themes, and options.

p.s. Follow us on https://twitter.com/ohmyzsh

p.p.s. Get stickers, shirts, and coffee mugs at https://shop.planetargon.com/collections/oh-my-zsh

➜  ~ 

Tak czy siak ten shell jeszcze wymaga drobnych poprawek (przynajmniej w moim przekonaniu). Dodałbym lub zmieniłbym następujące linijki:

export TERM=xterm-256color

Dzięki temu możemy wykorzystywać więcej kolorów (256 zamiast 8), gdy korzystamy z SSH. Naprawdę bardzo przydatne, przynajmniej ja dzięki temu mam ładnego Vima, a o tym później. Tej linijki nie ma, musimy ją dodać.

ZSH_THEME="agnoster"

W tym polu definiujemy styl terminala, czyli jak on wygląda. Możemy korzystać z motywów, które są w oh-my-zsh, możemy ściągać niestandardowe, a możemy też tworzyć własne.

Niżej mamy też sekcję pluginów, w której możemy po prostu wzbogacić nasz shell o dodatkowe polecenia (ja dodałem polecenia do systemd, ufw i dockera, bo od pewnego czasu z niego korzystam):

plugins={
   git
   systemd
   ufw
   docker-compose
   docker-machine
   docker
)

Następnie dodajmy syntax highlighting do naszego shella, które zainstalowałem wcześniej:

source /usr/share/zsh-syntax-highlighting/zsh-syntax-highlighting.zsh

Dzięki temu shell zmienia kolor poleceń na czerwono, gdy są nieprawidłowe i usuwa podkreślenia ze ścieżek, gdy są nieprawidłowe:

Ponadto dodałbym to:

blk=$'\x1b[90m' # Sets text to black
red=$'\x1b[31m' # Sets text to red
grn=$'\x1b[92m' # Sets text to green
ylw=$'\x1b[93m' # Sets text to yellow
blu=$'\x1b[94m' # Sets text to blue
pur=$'\x1b[95m' # Sets text to purple
cyn=$'\x1b[96m' # Sets text to cyan
wht=$'\x1b[97m' # Sets text to white
rst=$'\x1b[0m'  # resets to default terminal color
bindkey "\033[1~" beginning-of-line
bindkey "\033[4~" end-of-line
export EDITOR="/usr/bin/vim"

Te polecenia ustawiają kolor shella w terminalu graficznym (czyli pracując w trybie bez interfejsu graficznego bezpośrednio na maszynie), poza tym te polecenia bindkey są fixem na niedziałające przyciski Home/End w niektórych środowiskach. Na koniec dodałem zmienną EDITOR i wartością jest ścieżka do Vima, bo to jest edytor tekstu, z którego korzystam najczęściej. Poza tym możemy też ustawić na koncie root wykorzystywanie zsh wykonując polecenia:

sudo chsh -s /bin/zsh root
sudo cp ~/.zshrc /etc/zsh/zshrc

Poprawa wyglądu terminala w interfejsie graficznym Linuksa

W efekcie końcowym nasz shell wygląda tak:

Niezbyt fajnie. By to poprawić musimy tak samo jak w Windowsie zainstalować odpowiednie czcionki. Możemy posłużyć się czcionkami, które też tam wykorzystaliśmy, czyli z repozytorium Nerd Font. Tak samo jak poprzednio posłużę się czcionkami dla Ubuntu Mono:

#!/bin/bash
mkdir -p ~/.local/share/fonts
wget https://github.com/ryanoasis/nerd-fonts/raw/master/patched-fonts/UbuntuMono/Regular/complete/Ubuntu%20Mono%20Nerd%20Font%20Complete.ttf -P ~/.local/share/fonts/
wget https://github.com/ryanoasis/nerd-fonts/raw/master/patched-fonts/UbuntuMono/Regular-Italic/complete/Ubuntu%20Mono%20Italic%20Nerd%20Font%20Complete.ttf -P ~/.local/share/fonts/
wget https://github.com/ryanoasis/nerd-fonts/raw/master/patched-fonts/UbuntuMono/Bold/complete/Ubuntu%20Mono%20Bold%20Nerd%20Font%20Complete.ttf -P ~/.local/share/fonts/
wget https://github.com/ryanoasis/nerd-fonts/raw/master/patched-fonts/UbuntuMono/Bold-Italic/complete/Ubuntu%20Mono%20Bold%20Italic%20Nerd%20Font%20Complete.ttf -P ~/.local/share/fonts/
fc-cache -f -v

Sprawdźmy, czy czcionki się pojawiły w naszym systemie dzięki poleceniu fc-list | grep "Nerd":

/home/supra/.local/share/fonts/Ubuntu Mono Bold Italic Nerd Font Complete.ttf: UbuntuMono Nerd Font:style=Bold Italic
/home/supra/.local/share/fonts/Ubuntu Mono Bold Nerd Font Complete.ttf: UbuntuMono Nerd Font:style=Bold
/home/supra/.local/share/fonts/Ubuntu Mono Nerd Font Complete.ttf: UbuntuMono Nerd Font:style=Regular
/home/supra/.local/share/fonts/Ubuntu Mono Italic Nerd Font Complete.ttf.1: UbuntuMono Nerd Font:style=Italic
/home/supra/.local/share/fonts/Ubuntu Mono Bold Italic Nerd Font Complete.ttf.1: UbuntuMono Nerd Font:style=Bold Italic
/home/supra/.local/share/fonts/Ubuntu Mono Italic Nerd Font Complete.ttf: UbuntuMono Nerd Font:style=Italic
/home/supra/.local/share/fonts/Ubuntu Mono Nerd Font Complete.ttf.1: UbuntuMono Nerd Font:style=Regular

Jak widać jest wszystko okej, dlatego zmieńmy sobie czcionkę na nową w taki sposób, jak przedstawiłem na animacji:

Pozostają jedynie te kiepskie kolory. Te możemy zmienić za pomocą gotowych plików, które możemy znaleźć na tym blogu. Z faktu, że w różnych środowiskach graficznych są różne programy pełniące rolę emulatora terminala (w moim ulubionym Xfce4 jest to xfce4-terminal), metoda na zmianę jest inna i pokażę jak to się robi w Xfce. Skorzystamy z tematu Solarized Dark, jak w przykładzie z PowerShellem.

#!/bin/bash
git clone https://github.com/sgerrand/xfce4-terminal-colors-solarized.git
mkdir ~/.config/Terminal
cp xfce4-terminal-colors-solarized/dark/terminalrc ~/.config/Terminal/

Następnie musimy w ustawieniach wybrać ten motyw i to tyle. Ja dodatkowo zmieniam sobie kolor zielonego na trochę bardziej przypominający zielony, bo tak po prostu lubię.

Poprawa wyglądu terminala w konsoli tekstowej Linuksa

Zsh działa per konto użytkownika, co oznacza, że będzie nam działać niezależnie czy połączymy się przez emulator terminala, fizyczny terminal czy SSH, lecz z drugiej strony my w motywie wykorzystujemy czcionki z niestandardowymi znakami, dlatego też pokażę Wam jak skorzystać z tych czcionek w terminalu i jak sprawić, by działały one z automatu.

Na początku musimy pobrać czcionki, które nas interesują. Ja korzystam z pogrubionych czcionek Terminus, bo po prostu takie mi się podobają. Możemy je też znaleźć w repozytorium Powerline. Warto zaznaczyć, że te czcionki muszą być w formacie .psf, a nie .ttf. Możemy pobrać i umieścić wszystkie czcionki za pomocą jednego prostego skryptu:

#!/bin/bash
sudo wget https://github.com/powerline/fonts/raw/master/Terminus/PSF/ter-powerline-v{12n,14b,14n,14v,16b,16n,16v,18b,18n,20b,20n,22b,22n,24b,24n,28b,28n,32b,32n}.psf.gz -P /usr/share/consolefonts/

Teraz musimy wybrać czcionkę, która nam się podoba bardziej. Nic bardziej prostego, robimy to poleceniem setfont /usr/share/consolefonts/<nazwa-pliku>, na przykład:

setfont /usr/share/consolefonts/ter-powerlinev16b.psf.gz

W ten sposób pojawi nam się nowa czcionka (przy okazji tutaj pokazuję jak można łatwo uzupełniać opcję tabulatorem w terminalu, gdy ma się zsh):

Na samym końcu sprawimy, że taka czcionka będzie na każdym terminalu w naszym komputerze i to będzie się działo automatycznie po restartach. Musimy edytować plik /etc/default/console-setup, zmieniamy tutaj wartości pól CODESET, FONTFACE i FONTSIZE. Ogólnie pliki czcionek są wczytywane w składni pliku <CODESET>-<FONTFACE><FONTSIZE>.psf.gz, dlatego też w <FONTFACE> na końcu lub w <FONTSIZE> na początku trzeba dopisać myślnik. Poniżej uzupełniłem plik względem pliku czcionki, który wykorzystywałem powyżej.

# CONFIGURATION FILE FOR SETUPCON

# Consult the console-setup(5) manual page.

ACTIVE_CONSOLES="/dev/tty[1-6]"

CHARMAP="UTF-8"

CODESET="ter"
FONTFACE="powerline-"
FONTSIZE="v16b"

VIDEOMODE=

# The following is an example how to use a braille font
# FONT='lat9w-08.psf.gz brl-8x8.psf'

Po zmienieniu tego pliku można sprawdzić efekt wykonując polecenie setupcon. Jeśli czcionka się zmieniła poprawnie to po restarcie też się zmieni. Tutaj też chciałbym podziękować Tenebreosowi za znalezienie ominięcia problemu w poleceniu setupcon w nazwach plików, naprawdę to się przydało!

Poprawa wyglądu terminala w SSH

Na koniec część dla tych, którzy administrują serwerami Linuksa zdalnie, przez SSH. Pewnie większość z Was korzysta z PuTTY. Ja akurat korzystam z trochę bardziej wypasionej wersji, która nazywa się KiTTY i można ją pobrać tutaj.

Zaczniemy od zmiany kolorów terminala. Docelowo ma wyglądać jak te wszystkie poprzednie oraz będzie korzystał z tej samej czcionki (Ubuntu Font NF), co w sekcji z ustawianiem czcionek dla PowerShella. Zamiast wyklikiwać w opcjach wszystkie kolory, możemy zastosować ten jeden pliczek, który za nas zrobi całą robotę, poniżej zawartość:

Windows Registry Editor Version 5.00

[HKEY_CURRENT_USER\Software\9bis.com\KiTTY\Sessions\Default%20Settings]
"Colour0"="131,148,150"
"Colour1"="147,148,161"
"Colour2"="0,43,54"
"Colour3"="7,54,66"
"Colour4"="0,43,54"
"Colour5"="238,232,213"
"Colour6"="7,54,66"
"Colour7"="0,43,56"
"Colour8"="220,50,47"
"Colour9"="203,75,22"
"Colour10"="0,187,0"
"Colour11"="88,255,117"
"Colour12"="181,137,0"
"Colour13"="101,123,131"
"Colour14"="38,139,210"
"Colour15"="131,148,150"
"Colour16"="211,54,130"
"Colour17"="108,113,196"
"Colour18"="42,161,152"
"Colour19"="147,161,161"
"Colour20"="238,232,213"
"Colour21"="253,246,227"
"Colour22"="187,187,187"
"Colour23"="0,0,0"
"Colour24"="0,0,0"
"Colour25"="187,0,0"
"Colour26"="0,187,0"
"Colour27"="187,187,0"
"Colour28"="0,0,187"
"Colour29"="187,0,187"
"Colour30"="0,187,187"
"Colour31"="187,187,187"
"Colour32"="0,0,0"
"Colour33"="187,187,187"

Poza tym warto zmienić w profilu domyślnym czcionkę, więc otwierając ustawienia w sekcji Window > Appearance, w sekcji Font settings klikamy przycisk Change… i wybieramy czcionkę, którą chcemy ustawić. Na zrzucie poniżej macie jak to wygląda u mnie:

Następnie musimy taką zmianę zapisać, najlepiej to zrobić w domyślny profilu (Sekcja Session), klikamy nazwę sesji i przycisk Save:

Gotowe. W ten sposób mamy shell przygotowany do pracy: