Kodowanie UTF-8 w Gentoo
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 |
# 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 |
# 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 LANG musi być ustawiona, aby wybrać lokalizację
UTF-8 więcej przy lokalizacjach (zmienna ta może zostać nadpisana przez
LC_ALL). 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).
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 |
LANG="pl_PL.UTF-8"
|
Uwaga:
Możliwe jest również zastąpienie LANG zmienną LC_ALL. Ustawi to
lokalizację dla wszystkich kategorii, włączając w to wartości numeryczne oraz
waluty. W niewielkiej ilości przypadków, może to powodować pewne problemy.
Jednak większość użytkowników może bezproblemowo używać 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=
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=pl_PL.UTF-8
|
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
|
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
# convmv -f <aktualne-kodowanie> -t utf-8 <nazwa-pliku>
# 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 |
# iconv -f iso-8859-2 -t utf-8 nazwa-pliku
# 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 |
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 |
NROFF /usr/bin/nroff -Tascii -c -mandoc
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 |
set terminal.linux.utf_8_io = 1
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 |
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"
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
Zawartość tego dokumentu jest rozpowszechniana na podstawie licencji Creative Commons -
Attribution / Share Alike.
|