Home Dokumentacje Kodowanie UTF-8 w Gentoo
14 | 12 | 2019
Kodowanie UTF-8 w Gentoo

Kodowanie UTF-8 w Gentoo

Spis treści:

1. Kodowanie znaków

Czym jest kodowanie znaków?

Komputery nie rozumieją tekstu wprost. Zamiast tego każdy znak reprezentowany jest przez liczbę. Tradycyjnie każdy zestaw liczb wykorzystywany do reprezentacji alfabetów oraz znaków (znany jako system kodowania (ang. coding system), kodowanie (encoding) lub zestaw znaków (character set) był ograniczony w rozmiarze w wyniku ograniczeń sprzętowych.

Historia kodowania znaków

Najpopularniejszym (a w każdym razie najpowszechniej przyjętym) zestawem jest ASCII (American Standard Code for Information Interchange - Amerykański Standardowy Kod dla Wymiany Informacji). Powszechnie uważa się, że ASCII jest najskuteczniejszym standardem w oprogramowaniu. Współczesny ASCII został przyjęty w roku 1986 (ANSI X3.4, RFC 20, ISO/IEC 646:1991, ECMA-6) przez Amerykański Narodowy Instytut Standardów (ang. American National Standards Institute).

ASCII jest kodowaniem ściśle siedmiobitowym - to znaczy wykorzystującym liczby, które da się zapisać na siedmiu bitach, co daje zakres od 0 do 127 (dziesiątkowo). Wśród tych 128 znaków zawarte jest 32 znaki niedrukowalne, w większości zawarte między 0 i 31 oraz znak DEL (czyli skasuj, ang. delete) na pozycji 127. Znaki od 32 do 126 to znaki drukowalne: spacja, znaki przestankowe, litery łacińskie oraz cyfry.

Pierwotnie ósmy znak ASCII wykorzystywany był jako bit parzystości dla kontroli błędów. Jeśli nie było to potrzebne, pozostawiano go jako 0. To znaczy, że w ASCII każdy znak reprezentowany jest przez dokładnie jeden bajt.

Chociaż ASCII było wystarczające dla komunikacji w nowoczesnym angielskim, w innych językach europejskich, w których występowały znaki akcentowane, nie było to już takie proste. Standardy ISO 8859 zostały opracowane, aby sprostać temu problemowi. Były one zgodne z ASCII, ale zamiast pozostawiać ostatni bit pustym, wykorzystywały go, aby dopuścić dodatkowe 127 znaków w każdym kodowaniu. Niestety ograniczenia ISO 8859 stały się szybko widoczne i w chwili obecnej istnieje 15 wariantów tego standardu (od 8859-1 do 8859-15). Poza zakresem zgodnym z ASCII często występują konflikty pomiędzy znakami reprezentowanymi przez każdy bajt. Dodatkową komplikacją jest fakt, że niektóre wersje systemu Microsoft Windows wykorzystują standard Windows-1252 (dla wersji polskiej - Windows-1250). Jest to nadzbiór ISO 8859-1 (Windows-1250 jest podobny do ISO 8859-2), jednak na kilka sposobów odmienny. Wszystkie tet zbiory zachowują jednak zgodność z ASCII.

Niezbędne okazało się też wprowadzenie całkowicie odmiennych kodowań dla alfabetów innych niż łacińskie, takich jak EUC (Extended Unix Coding - Rozszerzone Kodowanie Uniksowe), który jest wykorzystywany w językach Japońskim i Koreańskim (oraz, w ograniczonym zakresie, w Chińskim) - co wprowadziło dodatkowe zamieszanie. Tymczasem inne systemy operacyjne wykorzystywały jeszcze inne kodowania dla tych samych języków, jak na przykład Shift-JIS czy ISO-2022-JP. Użytkownicy chcący oglądać znaki Cyrylicy musieli wybierać pomiędzy KOI8-R dla Rosyjskiego i Bułgarskiego, KOI8-U dla Ukraińskiego oraz innych kodowań Cyrylicy, takich jak nieudany ISO 8859-5 oraz popularny Windows-1251. Wszystkie te kodowania łamały kompatybilność z ASCII (aczkolwiek kodowania KOI8 ustawiają znaki cyrylicy w kolejności Łacińskiej, więc po odcięciu ósmego bitu tekst da się odczytać przez tzw. case-reversed transliteration.

Powstało w ten sposób zamieszanie niemal całkowicie uniemożliwiające komunikację wielojęzykową - szczególnie pomiędzy odmiennymi alfabetami. Problem ten rozwiązać ma Unikod.

Czym jest Unikod?

Unikod odrzuca tradycyjne ograniczenie kodowań jednobajtowych. Wykorzystuje 17 "płaszczyzn" po 65 536 znaków do opisu maksymalnie 1 114 112 znaków. Ponieważ pierwsza płaszczyzna, znana jako "Podstawowa Płaszczyzna Wielojęzykowa" (ang. BMP - Basic Multilangual Plane) zawiera niemal wszystko, co typowy użytkownik kiedykolwiek mógłby wykorzystać, wiele osób przyjmuje fałszywe założenie, że Unikod jest zbiorem 16-bitowym.

Unikod jest mapowany na wiele różnych sposobów, ale dwa najpopularniejsze to UTF (Unicode Transformation Format - Format Transformacji Unikodu) oraz UCS (Universal Character Set - Uniwersalny Zestaw Znaków). Numer za UTF oznacza liczbę bitów w jednej jednostce, natomiast numer za UCS oznacza liczbę bajtów. UTF-8 stał się najpopularniejszą formą wymiany tekstu w Unikodzie dzięki swojej naturze zgodnej z kodowaniami 8-bitowymi. Dlatego właśnie jemu poświęcony jest ten dokument.

UTF-8

UTF-8 jest kodowaniem o zmiennej długości znaku - oznacza to, że każdy znak może być opisany przez jeden do czterech bajtów. Tak więc pierwszy bajt UTF-8 wykorzystywany jest do kodowania ASCII, dzięki czemu jest on w pełni zgodny z ASCII. Znaki ASCII oraz Łacińskie daje się kodować z niewielką nadmiarowością, ponieważ wykorzystany jest tylko pierwszy bit. Użytkownicy alfabetów wschodnich, takich jak Japoński, którym przyznano wyższy zakres są niezadowoleni, ponieważ nadmiarowość osiąga nawet 50% dla ich danych.

Jakie korzyści daje UTF-8?

UTF-8 pozwala na pracę w zgodnym ze standardami i akceptowanym międzynarodowo środowisku wielojęzycznym przy stosunkowo niewielkiej nadmiarowości. UTF-8 jest najlepszym sposobem przekazywania znaków spoza ASCII przez Internet - dla poczty, IRC lub niemal każdego innego medium. Pomimo tego, wiele osób uważa wykorzystanie UTF-8 w komunikacji on-line za nadużycie. Dobrze jest być świadomym nastawienia społeczności danego kanału, listy mailingowej czy grupy usenetowej przed wykorzystaniem niezgodnej z ASCII części UTF-8.

2. Konfiguracja UTF-8 w Gentoo Linux

Znajdowanie lub tworzenie lokalizacji UTF-8

Teraz, gdy znana już jest zasada działania Unikodu, można przystąpić do wykorzystania go w systemie.

Wstępnym wymaganiem dla UTF-8 jest wersja glibc ze wsparciem dla języków narodowych (ang. NLS, National Language Support). Zalecanym sposobem uzyskania tego jest plik /etc/locale.gen i wpisanie polecenia locale-gen. Wykorzystanie tego pliku jest poza zakresem tego dokumentu. Jest opisany w tekście zatytułowanym Lokalizacja Gentoo Linux .

Następnie należy określić czy lokalizacja UTF-8 jest już dostępna dla wybranego języka czy też należy ją utworzyć.

Listing 2.1: Sprawdzanie dostępności lokalizacji UTF-8

("pl_PL" należy zastąpić nazwą oczekiwanej lokalizacji)
# locale -a | grep 'pl_PL'
pl_PL
pl_PL.UTF-8

Z wyjścia tego polecenia należy wybrać wynik z końcówką .UTF-8. Jeśli żaden z wierszy nie ma takiej końcówki to konieczne jest utworzenie lokalizacji zgodnej z UTF-8.

Uwaga: Poniższe polecenie należy wywołać tylko wtedy, gdy nie jest dostępna lokalizacja zgodna z UTF-8 dla wybranego języka.

Listing 2.2: Tworzenie lokalizacji UTF-8

("pl_PL" należy zamienić na oczekiwaną lokalizację)
# localedef -i pl_PL -f UTF-8 pl_PL.UTF-8

Innym sposobem uzyskania lokalizacji UTF-8 jest dodanie jej do pliku /etc/locale.gen.

Listing 2.3: Wiersz w /etc/locale.gen

pl_PL.UTF-8 UTF-8

Wybór lokalizacji

Zmienna środowiskowa LC_ALL musi być ustawiona, aby wybrać lokalizację UTF-8 więcej przy lokalizacjach (opcjonalnie możemy ustawić również zmienną LANG jeśli chcemy zmienić język systemu). Można to zrobić na wiele sposobów; niektórzy preferują kiedy UTF-8 działa tylko dla konkretnego użytkownika - w takim wypadku należy ją ustawić w pliku ~/.profile (jeżeli używa /bin/sh), ~/.bash_profile lub ~/.bashrc (jeśli używa /bin/bash). Więcej informacji i przykładów można znaleźć w Przewodniku lokalizacji.

Inni wolą rozwiązanie globalne. Konkretnym przypadkiem, w którym autor sugeruje takie rozwiązanie jest sytuacja, gdy wykorzystywany jest /etc/init.d/xdm, ponieważ skrypt ten uruchamia menedżer logowania oraz pulpit, zanim którykolwiek z plików zostanie odczytany, a tym samym zanim którakolwiek ze zmiennych w nim wymienionych znajdzie się w środowisku.

Globalną lokalizację powinno się konfigurować zatem przy użyciu pliku /etc/env.d/02locale. Plik ten powinien wyglądać podobnie do tego:

Listing 2.4: Przykładowy /etc/env.d/02locale

(Jak zwykle, "pl_PL.UTF-8" należy zmienić na właściwą lokalizację, jeśli ma być inna niż polska)
LANG="pl_PL.UTF-8"

Uwaga: Możliwe jest również zastąpienie LANG zmienną LC_ALL. Po więcej informacji na temat kategorii wymuszonych przez LC_ALL, należy zajrzeć na stronę lokalizacji GNU

Następnie środowisko musi zostać zaktualizowane.

Listing 2.5: Aktualizacja środowiska

# env-update
>>> Regenerating /etc/ld.so.cache...
* Caching service dependencies ...
# source /etc/profile

Teraz należy uruchomić locale bez żadnych parametrów, aby sprawdzić, czy właściwe zmienne znajdują się w środowisku:

Listing 2.6: Sprawdzanie czy nowa lokalizacja znajduje się w środowisku

# locale
LANG=pl_PL.UTF-8
LC_CTYPE="pl_PL.UTF-8"
LC_NUMERIC="pl_PL.UTF-8"
LC_TIME="pl_PL.UTF-8"
LC_COLLATE="pl_PL.UTF-8"
LC_MONETARY="pl_PL.UTF-8"
LC_MESSAGES="pl_PL.UTF-8"
LC_PAPER="pl_PL.UTF-8"
LC_NAME="pl_PL.UTF-8"
LC_ADDRESS="pl_PL.UTF-8"
LC_TELEPHONE="pl_PL.UTF-8"
LC_MEASUREMENT="pl_PL.UTF-8"
LC_IDENTIFICATION="pl_PL.UTF-8"
LC_ALL=

To wszystko. Lokalizacja UTF-8 jest już w użyciu. Następnym problemem jest skonfigurowanie potrzebnych aplikacji.

3. Wsparcie w aplikacjach

Kiedy Unikod zaczynał zdobywać popularność, kodowania wielobitowe nie były dobrze wspierane przez języki programowania takie jak C, w których napisane jest wiele popularnych programów. Nawet teraz niektóre programy nie potrafią prawidłowo obsłużyć UTF-8. Na szczęście większość potrafi!

Nazwy plików, NTFS oraz FAT

W konfiguracji jądra jest kilka opcji NLS i istotnym jest, aby się nie pogubić. Najważniejsze to pamiętać o wbudowaniu NLS UTF-8 w jądro i skonfigurowanie domyślnego NLS na utf8.

Listing 3.1: Konfiguracja UTF-8 w jądrze

File Systems -->
Native Language Support -->
(utf8) Default NLS Option
<*> NLS UTF8
(<*> również dla innych zestawów znaków, które będą
wykorzystywane na systemach plików FAT lub CD-ROM-ach zgodnych z Joliet).

Jeśli planowane jest montowanie partycji NTFS, koniecznym może okazać się określenie opcji nls= podczas montowania. Przy montowaniu partycji FAT potrzebne może okazać się określenie opcji codepage=. Opcjonalnie można ustawić domyślną stronę kodową dla FAT w konfiguracji jądra. Opcja codepage przy montowaniu jest bardziej znacząca od ustawienia w jądrze.

Listing 3.2: Ustawienia FAT w konfiguracji jądra

File Systems -->
DOS/FAT/NT Filesystems -->
(437) Default codepage for fat

Nie należy ustawiać opcji Default iocharset for fat na UTF-8, ponieważ może to sprawiać problemy. W zamian lepiej jest przekazywać do mount opcję utf8=true przy montowaniu partycji FAT. Więcej informacji można znaleźć w man mount oraz w dokumentacji jądra w /usr/src/linux/Documentation/filesystems/vfat.txt.

Do zmiany kodowania nazw plików można wykorzystać app-text/convmv.

Listing 3.3: Przykładowe wykorzystanie convmv

# emerge --ask app-text/convmv
(Składnia polecenia)
# convmv -f <aktualne-kodowanie> -t utf-8 <nazwa-pliku>
(iso-8859-2 należy zastąpić oryginalnym kodowaniem)
# convmv -f iso-8859-2 -t utf-8 nazwa-pliku

Do zmiany zawartości plików można użyć narzędzia iconv, dostarczanego razem z glibc:

Listing 3.4: Przykładowe wykorzystanie iconv

(iso-8859-2 należy zastąpić oryginalnym kodowaniem)
(Sprawdzenie czy wyjście jest prawidłowe)
# iconv -f iso-8859-2 -t utf-8 nazwa-pliku
(Konwersja pliku, trzeba utworzyć inny plik)
# iconv -f iso-8859-2 -t utf-8 nazwa-pliku > nowy-plik

app-text/recode też może być wykorzystany do tego celu.

Konsola systemowa

Ważne: Do obsługi Unikodu w konsoli potrzebny jest sys-apps/baselayout-1.11.9 lub nowszy.

Aby wykorzystać UTF-8 w konsoli należy wyedytować /etc/rc.conf i ustawić UNICODE="yes" oraz przeczytać komentarze w tym pliku. Użycie czcionki z właściwym zakresem znaków jest istotne, jeżeli chce się wykorzystać jak najwięcej możliwości Unikodu. Ustawienie to nie będzie działało dopóki, dopóty nie zbuduje się lokalizacji z UTF-8 zgodnie z instrukcjami z rozdziału pierwszego.

Zmienna KEYMAP, ustawiana w /etc/conf.d/keymaps, powinna wybierać mapę klawiatury zgodną z Unikodem.

Listing 3.5: Przykładowy fragment /etc/conf.d/keymaps

("pl2" należy zamienić na inny układ - jeśli ma być inny niż polski)
KEYMAP="pl2"
DUMPKEYS_CHARSET="ISO-8859-2"

Ncurses oraz Slang

Uwaga: Jeśli nie korzysta się ze Slang, to można zignorować dalszą część tekstu.

Rozsądnie jest dodać unicode do globalnych flag USE w /etc/make.conf, a następnie ponownie zainstalować sys-libs/ncurses oraz sys-libs/slang.

Listing 3.6: Instalowanie ncurses oraz slang

# emerge --update --deep --newuse world

Po zmianie flag USE należy też przebudować pakiety, które są z nimi zlinkowane. Narzędzie które wykorzystamy (revdep-rebuild) jest częścią pakietu gentoolkit.

Listing 3.7: Przebudowanie programów zlinkowanych z ncurses lub slang

# revdep-rebuild --soname libncurses.so.5
# revdep-rebuild --soname libslang.so.1

KDE, GNOME oraz Xfce

Wszystkie popularne środowiska użytkownika mają pełne wsparcie dla Unikodu i nie będą wymagały dalszej konfiguracji ponad to, co już zostało opisane. Wynika to z tego, że biblioteki graficzne, które są ich podstawą (Qt oraz GTK+2) mają wsparcie dla UTF-8. W rezultacie wszystkie aplikacje bazujące na tych bibliotekach powinny być zgodne z UTF-8.

Wyjątkami od tej zasady są biblioteki Xlib oraz GTK+1. GTK+1 wymaga ustawienia FontSpec iso-10646-1 w pliku ~/.gtkrc, na przykład -misc-fixed-*-*-*-*-*-*-*-*-*-*-iso10646-1. Aplikacje wykorzystujące Xlib lub Xaw również wymagają podobnego FontSpec, w przeciwnym wypadku będą działały nieprawidłowo.

Uwaga: Jeśli dostępne jest centrum sterowania gnome to należy w zamian skorzystać z niego. Wystarczy wybrać w nim dowolny font iso10646-1.

Listing 3.8: Przykładowy ~/.gtkrc (dla GTK+1) który wybiera font zgodny z Unikodem

style "user-font"
{
fontset="-misc-fixed-*-*-*-*-*-*-*-*-*-*-iso10646-1"
}
widget_class "*" style "user-font"

Jeżeli aplikacja ma wsparcie dla GUI opartego zarówno na QT jak i GTK+2, to wersja GTK+2 daje z reguły lepsze rezultaty dla Unikodu.

X11 oraz czcionki

Ważne: x11-base/xorg-x11 ma znacznie lepsze wsparcie dla Unikodu niż Xfree86 i jest bardzo zalecane.

Czcionki TrueType zawierają wsparcie dla Unikodu, podobnie większość czcionek rozpowszechnianych razem z Xorg ma bardzo obszerne (choć nadal niekompletne) zbiory znaków. Aby zbudować czcionki (włączając w to zestaw Bitstream Vera) ze wsparciem dla znaków Wschodnio-Azjatyckich w X należy upewnić się, że ustawiona jest flaga USE cjk. Wiele innych aplikacji wykorzystuje tę flagę, więc warto jest ją ustawić globalnie.

Część pakietów czcionek dostępnych w Portage również ma wsparcie dla Unikodu.

Listing 3.9: Opcjonalnie: instalacja dodatkowych fontów wspierających Unikod

# emerge terminus-font intlfonts freefonts cronyx-fonts corefonts

Menedżery okien oraz emulatory terminali

Menedżery okien, które nie są oparte na GTK lub Qt z reguły mają bardzo dobre wsparcie dla Unikodu, gdyż często wykorzystują do obsługi czcionek bibliotekę Xft. Jeżeli wybrany menedżer okien nie wykorzystuje Xft to nadal można skorzystać ze wspomnianego wcześniej ustawienia FontSpec.

Emulatory terminala, które wykorzystują Xft i wspierają Unikod są trudniejsze do znalezienia. Poza Konsole i gnome-terminal, najlepszymi wariantami dostępnymi w Portage są x11-terms/rxvt-unicode, xfce-extra/terminal, gnustep-apps/terminal, x11-terms/mlterm lub zwykły x11-terms/xterm, kiedy zostanie zbudowany z flagą USE unicode oraz wywołany jako uxterm. app-misc/screen również wspiera UTF-8 o ile zostanie wywołany jako screen -U oraz w ~/.screenrc znajduje się co następuje:

Listing 3.10: ~/.screenrc dla UTF-8

defutf8 on

Vim, Emacs, Xemacs oraz Nano

Vim ma pełne wsparcie UTF-8 oraz wbudowane rozpoznanie zakodowanych w nim plików. Dalsze informacje można znaleźć po wykonaniu w Vimie polecenia :help mbyte.txt.

Emacs 22.x oraz nowsze również mają pełne wsparcie dla UTF-8. Xemacs 22.x nie ma jeszcze wsparcia dla znaków kombinowanych.

Starsze wersje Emacsa oraz Xemacsa mogą wymagać instalacji app-emacs/mule-ucs oraz app-xemacs/mule-ucs oraz modyfikacji ~/.emacs dla uzyskania wsparcia języków CJK w UTF-8:

Listing 3.11: Emacs ze wsparciem CJK UTF-8

(require 'un-define)
(require 'jisx0213)
(set-language-environment "Japanese")
(set-default-coding-systems 'utf-8)
(set-terminal-coding-system 'utf-8)

Nano posiada obsługę UTF-8 od wersji 1.3.6.

Powłoki

Już teraz bash zapewnia pełne wsparcie Unikodu za pośrednictwem biblioteki GNU readline. Użytkownicy powłoki Z są w gorszej sytuacji, powłoka ta wcale nie obsługuje Unikodu, aczkolwiek podejmowane są zdecydowane próby zapewnienia wsparcia dla wielobajtowych zestawów znaków.

Powłoki C, tcsh oraz ksh nie zapewniają żadnego wsparcia dla UTF-8.

Irssi

Irssi ma pełne wsparcie dla UTF-8, wymaga tylko ustawienia opcji przez użytkownika.

Listing 3.12: Uruchamianie UTF-8 w Irssi

/set term_charset UTF-8

Na kanałach, w których znaki spoza ASCII nie są wymieniane w UTF-8 polecenie /recode może zostać użyte do konwersji znaków. Więcej informacji będzie dostępne po wpisaniu polecenia /help recode.

Mutt

Klient poczty Mutt ma bardzo dobre wsparcie dla Unikodu. Aby z niego skorzystać wystarczy zakodować wszystkie pliki konfiguracyjne (łącznie z sygnaturą) w UTF-8.

Uwaga: Nadal może się zdarzyć, że w odebranej przez Mutta poczcie znajdzie się znak "?" zamiast właściwego. Wynika to z tego, że niektórzy korzystają z klientów, które nie oznaczają wykorzystanego kodowania. Nie da się z tym wiele zrobić, poza poproszeniem ich o prawidłową konfigurację klienta.

Dalsze informacje są dostępne na Wiki Mutta.

Man

Strony man są istotną częścią każdego komputera z Linuksem. Aby zapewnić prawidłowe wyświetlanie znaków Unikodu należy zmodyfikować /etc/man.conf:

Listing 3.13: Modyfikacja man.conf dla wsparcia Unikodu

(To jest stary wiersz)
NROFF /usr/bin/nroff -Tascii -c -mandoc
(Powyższe należy zastąpić poniższym)
NROFF /usr/bin/nroff -mandoc -c

elinks oraz links

Są to powszechnie wykorzystywane przeglądarki tekstowe i można uruchomić w nich wsparcie dla UTF-8. Dla elinks oraz links są na to dwa sposoby. Jeden z nich polega na wykorzystaniu opcji Setup wewnątrz przeglądarki, drugi zaś na edycji pliku konfiguracyjnego. Aby ustawić opcję wewnątrz przeglądarki należy uruchomić elinks lub links, a następnie użyć Alt+S, aby wejść do menu Setup, wybrać pozycję Terminal options lub nacisnąć klawisz T. Następnie należy przewinąć w dół i zaznaczyć ostatnią opcję: UTF-8 I/O, zapisać i opuścić menu. Pod links może być potrzebne ponowne naciśnięcie Alt+S oraz naciśnięcie S, aby zapisać. Opcja w pliku konfiguracyjnym pokazana jest poniżej.

Listing 3.14: Uruchamianie UTF-8 dla elinks/links

(Dla elinksa należy wyedytować /etc/elinks/elinks.conf lub
~/.elinks/elinks.conf oraz dodać następujący wiersz)

set terminal.linux.utf_8_io = 1

(Dla linksa należy wyedytować ~/.links/links.cfg oraz dodać następujący wiersz)
terminal "xterm" 0 1 0 us-ascii utf-8

Samba

Samba to otwarta implementacja protokołu SMB (Server Message Block) dla systemów uniksowych takich jak Linux, Mac i FreeBSD. Protokół ten czasem jest nazywany CIFS (Common Internet File System). Częścią Samby jest również system NetBIOS używany do współdzielenia plików z systemami Windows.

Listing 3.15: Włączanie UTF-8 dla Samby

(Edytujemy plik /etc/samba/smb.conf i dodając poniższe wpisy do sekcji [global])
dos charset = 1255
unix charset = UTF-8
display charset = UTF-8

Testowanie całości

Jest wiele stron poświęconych testowaniu UTF-8. net-www/w3m, net-www/links, net-www/elinks, net-www/lynx oraz wszystkie przeglądarki oparte na Mozilli (włącznie z Firefoksem) wspierają UTF-8. Konqueror i Opera również mają pełne wsparcie UTF-8.

Korzystając z przeglądarek tekstowych należy upewnić się, że terminal obsługuje Unikod.

Jeżeli zamiast niektórych znaków widoczne są kwadraty z literami oraz cyframi w środku, oznacza to, że czcionka nie zawiera danego znaku UTF-8. Zamiast tego wyświetla pudełko z jego kodem szesnastkowym.

Metody wejściowe

Martwe klawisze mogą być wykorzystane do wpisywania w X znaków, których nie ma na klawiaturze. Działają one przez wciśnięcia prawego klawisza Alt (lub, w niektórych krajach, AltGr) oraz opcjonalnie klawisza z niealfabetycznej części klawiatury na lewo od klawisza return, puszczenia ich, a następnie naciśnięcia znaku. Martwy klawisz powinien go zmodyfikować. Dalsze modyfikacje są możliwe przez użycie klawisza Shift w tym samym czasie co AltGr oraz modyfikatora.

Aby wykorzystać martwe klawisze w X potrzebny jest układ klawiatury, który to wspiera. Większość układów europejskich zawiera martwe klawisze w domyślnym wariancie. Niestety nie dotyczy to układów północnoamerykańskich. Pomimo pewnego stopnia niekonsekwencji pomiędzy układami, najprostszym rozwiązaniem wydaje się wykorzystania układu w postaci "pl_PL" zamiast "pl". Układ wybierany jest w /etc/X11/xorg.conf w następujący sposób:

Listing 3.16: Fragment /etc/X11/xorg.conf

Section "InputDevice"
Identifier "Keyboard0"
Driver "kbd"
Option "XkbLayout" "pl_PL" # Zamiast zwyczajnego "pl"
(Tu inne opcje Xkb)
EndSection

Uwaga: Ta zmiana potrzebna jest tylko jeśli w użyciu jest układ północnoamerykański lub inny, w którym nie działają martwe klawisze. Użytkownicy europejscy nie powinni mieć problemu z martwymi klawiszami.

Ta zmiana zacznie działać dopiero po ponownym uruchomieniu serwera X. Aby zastosować te zmiany od razu należy skorzystać z narzędzia setxkbmap, na przykład setxkbmap pl_PL.

Najprościej jest opisać martwe klawisze za pomocą przykładów. Chociaż rezultaty są zależne od lokalizacji idea pozostaje zawsze taka sama. Te przykłady korzystają z UTF-8, więc aby z nich skorzystać należy albo skonfigurować przeglądarkę do pokazywania strony jako UTF-8 albo wykorzystać lokalizację z UTF-8.

Kiedy naciśnie się AltGr oraz [ jednocześnie, puści je, a następnie naciśnie a, wyświetlone zostaje 'ä'. Kiedy naciśnie się AltGr oraz [, następnie e, wyświetlone zostaje 'ë'. Kiedy naciśnie się AltGr oraz ;, wyświetlone zostaje 'á'. Kiedy naciśnie się AltGr oraz ; a następnie e wyświetlone zostanie 'é'.

Kiedy naciśnie się jednocześnie AltGr, Shift oraz [, puści się je, a następnie naciśnie a, wyświetlone zostanie Skandynawskie 'å'. Podobnie, po naciśnięciu altGr, Shift oraz [, puszczeniu wyłącznie [, następnie naciśnięciu go ponownie, wyświetlone zostanie '°'. Wprawdzie znak ten (U+02DA) wygląda podobnie, ale nie jest on tym samym co symbol stopnia (U+00B0). Działa to również dla innych akcentów produkowanych przez martwe klawisze - AltGr oraz [, puszczenie tylko [ oraz naciśnięcie go ponownie da '¨'.

AltGr może też zostać użyty z samym klawiszem alfabetycznym. Na przykład, AltGr i m dadzą w rezultacie małą literę mu: 'µ'. AltGr oraz s dadzą scharfes s: 'ß'. Zgodnie z oczekiwaniami AltGr oraz 4 daje symbol Euro, '€'.

Zasoby

 

 
Linki sponsorowane

W celu realizacji usług i funkcji na witrynach internetowych ZUI "ELPRO" stosujemy pliki cookies. Korzystanie z witryny bez zmiany ustawień dotyczących plików cookies oznacza, że będą one zapisywane w urządzeniu wyświetlającym stronę internetową. Więcej szczegółów w Polityce plików cookies.

Akceptuję pliki cookies z tej witryny.