Następna strona Poprzednia strona Spis treści

3. 3. Ustawianie trybu tekstowego

Zasadniczo tryb tekstowy jest najprostszą metodą pokazywania i wprowadzania znaków cyrylicy. Istnieje jednak jedna zasadnicza komplikacja: fonty w trybie tekstowym i operacje na układzie klawiatury zależą od implementacji sterownika terminala. Nie ma więc przenośnej metody dla osiągnięcia tego celu między różnymi systemami.

Za chwilę opiszę sposób radzenia sobie ze sterownikiem konsoli Linuxa. Tak więc jeśli masz inny system, nie spodziewaj się że będzie to działać u ciebie. Zajrzyj raczej do dokumentacji swojego sterownika terminala. Poślij mi jednakże jakiekolwiek informacje jakie znajdziesz, tak aby mógł włączyć je do przyszłych wersji tego dokumentu.

3.1 4.1. Konsola

Sterownik konsoli Linuxa jest dość elastycznym kawałkiem software'u. Potrafi on zmieniać fonty oraz układy klawiatury. Aby to osiągnąć, będziesz potrzebował pakietu kbd. RedHat i Slackware instalują kbd jako część systemu.

Pakiet kbd zawiera narzędzia do kontrolowania klawiatury oraz znaczny zbiór fontów i układów klawiatury.

By ustawić cyrylicę, trzeba wykonać dwie rzeczy:

  1. Ustawienie czcionki ekranowej. Wykonywane jest to za pomocą programu setfont. Pliki z czcionkami umieszczone są w /usr/lib/kbd/consolefonts. UWAGA: Nigdy nie uruchamiaj programu setfont pod X, ponieważ zawiesi on twój system. Dzieje się tak ponieważ działa on z odwołaniami niskiego poziomu do karty graficznej, których nie lubi X.
  2. Załadować odpowiedni układ klawiatury programem loadkeys.

UWAGA: W RedHat 3.0.3 /usr/bin/loadkeys ma zbyt zawężone prawa dostępu, konkretnie 700 (rwx------). Nie ma powodu aby tak było, ponieważ każdy może skompilować swoją własną kopię i uruchomić ją (odpowiednie odwołania do systemu nie są zarezerwowane tylko dla administratora). Poproś więc swojego sysadmina aby ustawił dlań bardziej sensowne prawa dostępu (na przykład 755).

Oto wyciąg z mojego skryptu cyrload, który ustawia tryb cyrylicy dla konsoli linuxowej.

  if [ notset.$DISPLAY != notset. ]; then
      echo "`basename $0`:  nie działa pod X"
      exit
  fi

  loadkeys /usr/lib/kbd/keytables/ru.map
  setfont /usr/lib/kbd/consolefonts/Cyr_a8x16
  mapscrn /usr/lib/kbd/consoletrans/koi2alt
  echo -ne "\033(K"              # magiczna sekwencja
  echo "Użyj prawego Ctrl aby zmienić tryb"

Pozwól mi to nieco wyjaśnić. Ładujesz odpowiednie mapowanie klawiatury. Następnie ładujesz font odpowiadający zestawowi znaków Alt. Później, aby móc poprawnie wyświetlać tekst w KOI-8, ładujesz tablicę przekodowywania ekranowego. Dokonuje ona translacji niektórych znaków z górnej połówki kodowania na kodowanie Alt. Kluczowe znaczenie ma słowo 'niektóre' - nie wszystkie znaki podlegają translacji, dlatego też niektóre z nich, jak pseudograficzne znaki IBM, trafiają na ekran niezmodyfikowane i wyświetlają się poprawnie, ponieważ są one kompatybilne z kodowaniem Alt, w przeciwieństwie do KOI-8. Aby się upewnić, uruchom mc i udawaj że jesteś znów w MS-DOS 3.3...

W końcu, owa magiczna sekwencja jest ważna, ale nie mam żadnego pojęcia co takiego robi [resetuje konsolę i mapy odwzorowań; patrz Keyboard-HOWTO - przyp. GSN]. Pożyczyłem/podkradłem ją z German-HOWTO jeszcze w 1994, kiedy było no chyba jedynym HOWTO zorientowanym na języki narodowe. Jeśli masz jakiś pomysł co do tej magicznej sekwencji, powiadomij mnie, proszę.

Dla tych purystów którzy nie chcą próbować kodowania Alt dołączam jeszcze jedną wersję powyższego skryptu, używającą rdzennych fontów KOI-8.

  if [ notset.$DISPLAY != notset. ]; then
      echo "`basename $0`:  cannot run under X"
      exit
  fi

  loadkeys /usr/lib/kbd/keytables/ru.map
  setfont /usr/lib/kbd/consolefonts/koi-8x16
  echo "Użyj prawego Ctrl aby zmienić tryb"

Nie spodziewaj się jednak ładnych ramek w swoich okienkowych aplikacjach tekstowych.

Chcesz to pewnie teraz wypróbować. Ustaw bash lub tcsh jak trzeba, uruchom je ponownie, potem naciśnij prawy klawisz Ctrl i upewnij się że otrzymujesz prawidłowe znaki cyrylicy. Klawisz 'q' musi dawać rosyjskie 'krótkie i', w generować 'c' itd.

Jeśli coś pokręciłeś, najlepszą rzeczą jest przywrócenie ustawień oryginalnych (tj. amerykańskich). Wykonaj następujące komendy:

  loadkeys /usr/lib/kbd/keytables/defkeymap.map
  setfont /usr/lib/kbd/consolefonts/default8x16

UWAGA: niestety sterownik konsoli nie jest w stanie zachować swojego statusu (a przynajmniej nie w prosty sposób) podczas uruchamiania X Windows. Dlatego, kiedy wyjdziesz z X (albo przełączysz zeń na konsolę), będziesz musiał ponownie załadować rosyjski font konsolowy.

3.2 Konsola FreeBSD

Nie używam FreeBSD, tak więc nie mogłem przetestować poniższej informacji. Trzeba zacząć od tego że wszystkie dane w tej sekcji należy traktować jako wskaźniki. Strona domowa projektu FreeBSD może mieć jakieś informacje na ten temat. Innym dobrym źródłem jest grupa newsowa relcom.fido.ru.unix. Sprawdź także zasoby wyliczone w sekcji 11.

W każdym razie, oto co Ilja K. Orechow sugeruje zrobić aby konsola FreeBSD mówiła po rosyjsku:

  1. dodaj w /etc/sysconfig:
         keymap=ru.koi8-r
         keyrate=fast
         # UWAGA: ^[ poniżej to pojedynczy znak kontrolny [ESC]
         keychange="61 ^[[K"
         cursor=destructive
         scrnmap=koi8-r2cp866
         font8x16=cp866b-8x16
         font8x14=cp866-8x14
         font8x8=cp866-8x8
    
  2. w /etc/csh.login:
         setenv ENABLE_STARTUP_LOCALE
         setenv LANG ru_SU.KOI8-R
         setenv LESSCHARSET latin1
    

3.3 System X Window

Podobnie jak tryb konsoli, środowisko X również wymaga nieco konfiguracji. Zawiera się w niej ustawienie trybu wprowadzania i Xowych czcionek. Oba aspekty omówione są poniżej.

Xowe czcionki

Po pierwsze zdobyć musisz kolekcję czcionek posiadających znaki cyrylicy w odpowiednich miejscach.

Jeśli używasz najnowszej dystrybucji X (lub XFree86), istnieje szansa że masz już takie czcionki. W końcu 1995 X Windows System włączył zestaw czcionek cyrylicowych, stworzonych przez Cronyxa. Zapytaj swojego administratora systemu, albo jeśli to ty nim jesteś, sprawdź swój system, to jest:

  1. Uruchom xlsfonts | grep koi8. Jeśli wyliczono jakieś czcionki, twój X-serwer już o nich wie.
  2. W przeciwnym razie wykonaj
    find /usr -name crox\*.pcf\*
    
    aby znaleźć miejsce czcionek cyrylicowych na serwerze. Będziesz musiał włączyć te czcionki dla X-serwera, jak wyjaśniam poniżej.

Jeśli nie znalazłeś takich fontów zainstalowanych, będziesz musiał to sam zrobić.

Istnieje pewna rozbieżność co do czcionek. XFree86 twierdzi że kolekcję czcionek rosyjskich zamieszczonych w dystrybucji stworzył Cronyx. Niemniej na sieci znaleźć można inne czcionki cyrylicowe Cronyxa (np. na ftp.klae.su), znane jako pakiet xrus (nie myl go z programem xrus, który używany jest do ustawienia układu klawiatury cyrylicy). Na szczęście ten drugi został ostatnio przemianowany na xruskb. xrus ma mniej czcionek niż kolekcja w XFree86 (38 wobec 68), ale te drugie czcionki nie chciały działać z moim ustawieniem Netscape - dawały mi jakąś strasznie dużą czcionkę w pasku menu. Pakiet xrus nie stwarzał tego problemu.

Sugerowałbym ściągnięcie i wypróbowanie obydwu. Wybierz ten który bardziej ci się podoba. Mam także zamiar wkrótce stworzyć pakiety RPM dla obu kolekcji i podładować je do ftp.redhat.com oraz mojego FTP.

Istnieją także starsze rzeczy, na przykład pakiet VakuFonts, stworzony przez Sergieja Wakulenko ( mailto:vak@cronyx.ru), który tworzył podstawę dla tego w dystrubucji X. Istnieją też inne. Ważną rzeczą jest to że nazwy czcionek w starszych kolekcjach nie całkiem ściśle stosowały się do standardów. Późniejsze są w zasadzie w porządku, ale czasami wywołać mogą różne dziwne błędy. Miałem na przykład niemiłe doświadczenia z Maple V dla Linuxa, który wykładał się tajemniczo z pakietem VakuFonts, ale działał bez zarzutu ze "standardowymi".

Zacznijmy więc od czcionek:

  1. Ściągnij odpowiednią kolekcję czcionek. Pakiet dla XFree86 można znaleźć w każdym FTP zawierającym dystrybucję Xa, na przykład możesz ją ściągnąć] bezpośrednio z FTP XFree86. Pakiet xrus znaleźć można na ftp.klae.su.
  2. Teraz kiedy masz czcionki, stwórz dla nich jakiś katalog. Zwykle złym pomysłem jest wsadzanie nowych czcionek do już istniejącego katalogu. Umieść je więc w, powiedzmy, /usr/lib/X11/fonts/cyrillic dla instalacji całosystemowej, albo po prostu utwórz katalog prywatny dla użytku osobistego.
  3. Jeśli nowe czcionki są w formacie BDF (pliki *.bdf), musisz je skompilować. Wykonaj dla każdej czcionki
           bdftopcf -o name.pcf name.bdf
    
    Jeśli twój serwer obsługuje czcionki skompresowane, skompresuj je używając programu compress
           compress name.pcf
    
    Jeśli chcesz wsadzić nowe czcionki do już istniejącego katalogu, będziesz musiał połączyć stary i nowy font.alias. w przypadku gdy oba istnieją, np.
    cat font.alias.new >> font.alias
    
    Teraz, żeby wszystko ustawić, powinieneś wykonać trzy rzeczy:
  4. Każda katalog z czcionkami w X musi zawierać listę znajdujących się w nim czcionek. Lista ta przechowywana jest w fonts.dir. Nie musisz jej tworzyć ręcznie. Zamiast tego, wykonaj
    cd <katalog_z_nowymi_czcionkami>
    mkfontdir
    
  5. Musisz teraz powiadomić X-serwer o tym katalogu z czcionkami. Masz tu kilka opcji:

Aby klienci X używali czcionek cyrylicowych, musisz ustawić odpowiednie X-zasoby. Na przykład, ustawiam czcionkę rosyjską jako domyślną w swoim  /.Xdefaults:

*font           6x13

Ponieważ moje czcionki cyrylicowe są pierwsze na liście ścieżek do czcionek (patrz rezultaty [xinit, wybrana zostanie pierwsza czcionka o aliasie 6x13)]

To prostszy przykład. Jeśli chcesz ustawić odpowiednią część X-klienta by używała czcionek cyrylicowych, musisz znaleźć nazwę zasobu (np. za pomocą editres(1x) i ustalić go albo w bazie danych zasobów, albo w linii komend. Oto kilka przykładów:

  $ xterm -font '-cronyx-*-bold-*-*-*-19-*-*-*-*-*-*-*'

  $ xfontsel -xrm '*quitButton.font: -*-times-*-*-*-*-13-*-*-*-*-*-koi8-*'

Tłumaczenie danych wprowadzanych

W najnowszych wersjach X (X11R61 i wyższych) istnieją dwie "standardowe" metody wprowadzania znaków: pierwotna, działająca z użyciem programu xmodmap, oraz nowa, zwana (Xkb) XKeyBoard. Pierwsze co powinieneś zrobić to wyłączyć metodę Xkb! Nie daj się oczarować jej możliwościami ustawienia "cyrylicznej klawiatury". Wygląda na to że ta metoda używa klawsymów zdefiniowanych w keysymdef.h. Plik ten definiuje klawsymy dla wielu języków. Jednym problemem jest to że te definicje nie mają nic wspólnego z rozszerzonym zestawem znaków ASCII - jedynym na którym potrafi wyłącznie operować większość programów! Ledwie wiem o jakiś programach które zdolne są przetworzyć klawsymy z keysymdef.h różne od ośmiobitowego ASCII. Jednakowoż naszym celem jest sprawienie żeby obsługa KOI-8 zadziałała.

Aby wyłączyć obsługę Xkb, przeglądnij sekcję Keyboard w swoim pliku XF86Config i wykomentuj wszystkie linie zaczynające się od Xkb (wielkość liter bez znaczenia). Zamiast nich, wstaw następującą linię:

  XkbDisable

Program xmodmap pozwala na dopasowanie kodów które wysyłają różne znaki i ich kombinacje. Ustawia on to opierając się na pliku zawierającym tabelę tłumaczeń.

Jeśli nie chcesz zajmować się wszystkimi tymi trikami i wolisz rozwiązanie od ręki, [bądź to] ściągnij odpowiednią tablicę xmodmapową, dostępną na wielu ftpach zajmujących się cyrylicą, na przykład ftp.kiae.su albo ftp.funet.fi. Sam sporządziłem również mapę opisaną poniżej, dostępną przez mój ftp.

Bardziej odpowiednią alternatywą jest instalacja pakietu xruskb, który pozwala ci skonfigurować większość parametrów translacji wejściowej bez potrzeby obeznania się z xmodmap.

Poniżej uproszczony opis przystosowania wejścia. Jeśli chcesz jakiś bardziej wyrafinowanych trików, zajrzyj do xmodmap(1) lub, jeszcze lepiej, poczekaj na następną wersję główną X, która miejmy nadzieję zajmie się bieżącymi problemami ze wprowadzaniem danych.

W naszym przypadku, tablica tłumaczeń powinna definiować dwie rzeczy:

Tablica znaków

Jest to w zasadzie sekwencja dyrektyw które przypisują pewne klawsymy określonym kodom klawiszy. Ogólna składnia to:

keycode kod = sym1 sym2 sym3 sym4

gdzie kod to numeryczny kod określonego klawisza na klawiaturze (zajrzyj do tablicy standardowej dla twojego systemu. W moim przypadku znajduje się ona w pliku /usr/lib/X11/etc/xmodmap.std). "Symy" definiują klawsymy wysyłane przez ten klawisz w różnych stanach. Sym1 jest klawsymem wysyłanym w stanie normalnym, sym2 odpowiada klawiszowi z naciśniętym Shift (zwykle), Sym3 i sym4 definiują klawsymy wysyłane przy aktywnym Mode_switch dla stanów normalnych i ze Shiftem odpowiednio (grupa 2, zgodnie z X Protocol Specification). W naszym przypadku aktywny Mode_switch odpowiada wprowadzaniu w trybie cyrylicy.

Wartościami powinny być albo kody szesnastkowe, albo stałe symboliczne z /usr/include/X11/keysymdef.h (bez początkowego "XK_").

Tak więc jeżeli chcielibyśmy aby klawisz odpowiadający łacińskiemu "a" wypisywał "a" rosyjskie w trybie alternatywnym, napisalibyśmy jak niżej:

keycode 38  =  a  A  0xC1 0xE1

Czytelnik ciekaw być może dlaczego nie użyłem stałych Cyrillic_a oraz Cyrillic_A, odpowiednio. Odpowiedż brzmi: nie działają one dla mnie. Nie jestem zbyt obeznany z wnętrznościami specyfikacji systemu X Windows, ale mam następujące wytłumaczenie: symboliczne stałe powyżej mają wartości 0x6C1 oraz 0x6E1 odpowiednio. Oznacza to że w rzeczywiście multijęzykowym środowisku możnaby używać ich bez ich nakładania się na inne zestawy znaków. Jednak standard KOI-8 nie jest szczególnie przystosowany do takiego środowiska. Ponieważ więc chcemy pozostać kompatybilni z przeszłością, naruszymy reguły obsługi wielu języków w systemie X Windows.

Oto tabela dla najbardziej popularnej rosyjskiej klawiatury w układzie JCUKEN (tabele te pochodzą od tych z pakietu VakuFonts).

  keysym  4             = 4               dollar          4       quotedbl
  keysym  5             = 5               percent         5       colon
  keysym  6             = 6               asciicircum     6       comma
  keysym  7             = 7               ampersand       7       period
  keysym  q             = q               Q               0xCA    0xEA
  keysym  w             = w               W               0xC3    0xE3
  keysym  e             = e               E               0xD5    0xF5
  keysym  r             = r               R               0xCB    0xEB
  keysym  t             = t               T               0xC5    0xE5
  keysym  y             = y               Y               0xCE    0xEE
  keysym  u             = u               U               0xC7    0xE7
  keysym  i             = i               I               0xDB    0xFB
  keysym  o             = o               O               0xDD    0xFD
  keysym  p             = p               P               0xDA    0xFA
  keysym  bracketleft   = bracketleft     braceleft       0xC8    0xE8
  keysym  bracketright  = bracketright    braceright      0xDF    0xFF
  keysym  a             = a               A               0xC6    0xE6
  keysym  s             = s               S               0xD9    0xF9
  keysym  d             = d               D               0xD7    0xF7
  keysym  f             = f               F               0xC1    0xE1
  keysym  g             = g               G               0xD0    0xF0
  keysym  h             = h               H               0xD2    0xF2
  keysym  j             = j               J               0xCF    0xEF
  keysym  k             = k               K               0xCC    0xEC
  keysym  l             = l               L               0xC4    0xE4
  keysym  semicolon     = semicolon       colon           0xD6    0xF6
  keysym  apostrophe    = apostrophe      quotedbl        0xDC    0xFC
  keysym  grave         = grave           asciitilde      0xA3    0xB3
  keysym  z             = z               Z               0xD1    0xF1
  keysym  x             = x               X               0xDE    0xFE
  keysym  c             = c               C               0xD3    0xF3
  keysym  v             = v               V               0xCD    0xED
  keysym  b             = b               B               0xC9    0xE9
  keysym  n             = n               N               0xD4    0xF4
  keysym  m             = m               M               0xD8    0xF8
  keysym  comma         = comma           less            0xC2    0xE2
  keysym  period        = period          greater         0xC0    0xE0

Dla używających rosyjskiego układu JAWERTY dołączyłem następującą tabelę:

  keysym  q             = q               Q               0xD1    0xF1
  keysym  w             = w               W               0xD7    0xF7
  keysym  e             = e               E               0xC5    0xE5
  keysym  r             = r               R               0xD2    0xF2
  keysym  t             = t               T               0xD4    0xF4
  keysym  y             = y               Y               0xD9    0xF9
  keysym  u             = u               U               0xD5    0xF5
  keysym  i             = i               I               0xC9    0xE9
  keysym  o             = o               O               0xCF    0xEF
  keysym  p             = p               P               0xD0    0xF0
  keysym  bracketleft   = bracketleft     braceleft       0xDB    0xFB
  keysym  bracketright  = bracketright    braceright      0xDD    0xFD
  keysym  a             = a               A               0xC1    0xE1
  keysym  s             = s               S               0xD3    0xF3
  keysym  d             = d               D               0xC4    0xE4
  keysym  f             = f               F               0xC6    0xE6
  keysym  g             = g               G               0xC7    0xE7
  keysym  h             = h               H               0xC8    0xE8
  keysym  j             = j               J               0xCA    0xEA
  keysym  k             = k               K               0xCB    0xEB
  keysym  l             = l               L               0xCC    0xEC
  keysym  z             = z               Z               0xDA    0xFA
  keysym  x             = x               X               0xD8    0xF8
  keysym  c             = c               C               0xC3    0xE3
  keysym  v             = v               V               0xD6    0xF6
  keysym  b             = b               B               0xC2    0xE2
  keysym  n             = n               N               0xCE    0xEE
  keysym  m             = m               M               0xCD    0xED
  keysym  backslash     = backslash       bar             0xDC    0xFC
  keysym  grave         = grave           asciitilde      0xC0    0xE0
  keysym  equal         = equal           plus            0xDE    0xFE
  keysym  3             = 3               numbersign      3       0xDF
  keysym  4             = 4               dollar          4       0xFF

Zasady przełączania trybów

Jest to zasadniczo część konfiguracji Xowej cyrylicy wymagająca najwięcej wiedzy. Zdefiniować powinieneś warunki w których tryb bieżący przełączany jest między trybem zwykłym i cyrylicy. Dzięki mądremu zaprojektowaniu translacji wejścia w X, jest ona nieprzenośna, nieelastyczna, niekompletna i ogólnie mówiąc do kitu. Nic dziwnego że ludzie przenoszą się na MS Windows.

Obecnie dużo się dzieje w rozwijaniu XFree86 w ogólności i modelu wejścia w X w szczególności. Rezultat jest taki że twoja konfiguracja może działać z jedną wersją XFree86 i nie działać z inną. Co gorsza, czasami rzeczy różnią się między różnymi serwerami w tej samej dystrybucji.

Najpierw opiszę moje ustawienia, które w obecnej chwili działają dla mnie. Pracuję w XFree86 3.3, serwer SVGA. W moim pliku XF86Config (w dystrybucji RedHata umieszczony jest on w /etc/X11, w sekcji "Keyboard" mam następujące dyrektywy:

Istnieją dwa sposoby osiągnięcia tego w Linuxie. Jedna jest specyficzna dla XFree86, podczas gdy druga jest bardziej ogólna (nie za bardzo może, jak i pokażę niżej).

     LeftAlt         Meta
     RightAlt        ModeShift
     ScrollLock      ModeLock
     RightCtl        Control

UWAGA: Metoda ustawiania reguł przełączania trybów poprzez plik XF86Config jest specyficzna dla XFree86. Nie będzie ona działać w innych wersjach X.

Teraz ładuję tabelę opisaną w poprzedniej sekcji i zachowaną w jakimś pliku używając narzędzia xmodmap(1x):

  xmodmap  <plik_z_tabelą>

Teraz mam możliwość zaznaczenia trybu wprowadzania cyrylicy używając prawego klawisza Alt oraz przełączenia na cyrylicę i z powrotem używając ScrollLock. Zdziwisz się jeśli zobaczysz że ani CapsLock ani klawisze Control nie działają w trybie wprowadzania cyrylicy. Cóż, powiem to raz jeszcze: model wejścia X jest do kitu!

Resztę tej sekcji zajmuje zwięzły opis zwykłej konfiguracji translacji wejścia w X. Działała ona dla starszych wydań XFree86, ale teraz wykazuje rozmaite problemy. Pozostawiłem ją tutaj, tak aby co bardziej ciekawi z was mogli spróbować części tego i zużytkować to.

Powinieneś zrobić co następuje:

Teraz klawisz do którego przypisany jest ModeShift będzie działał jako przełącznik trybów. Oznacza to że gdy jest przyciśnięty, klawiatura znajduje się w trybie alternatywnym.

Co więcej, jeśli dodasz klawsym Mode_lock do tego układu, będzie on ustawiał na stałe tryb alternatywny.

Uwaga: są jednak pewne problemy. Siergiej Wakulenko (vax@cronyx.com) wskazał że różne implementacje X-serwerów mają różne zasady przypisywania przełączników trybu (np. niektóre serwery ograniczają zestaw klawiszy które mogą działać w trybie przełącznika do, powiedzmy, CapsLock, NumLock oraz ScrollLock). Na szczęście ma się to zmienić w następnym wydaniu systemu X Windows. Po szczegóły patrz specyfikacja X Protocol.

Niestety nie udało mi się zmusić CapsLock aby miał tą samą funkcjonalność w trybie alternatywnym, konkretnie aby na stałe włączał duże litery. Wydaje mi się że nie można tego dokonać z powodu idiotycznego zaprojektowania translacji wejścia w X. Jeśli się mylę, proszę mnie poprawić.

Zobaczmy przykład. Załóżmy że chce się używać prawego Alt jako przełącznika trybów i ScrollLock do ustawiania trybu na stałe. Najpierw powinno się sprawdzić domyślny układ modyfikatorów. Osiąga się to uruchamiając xmodmap bez argumentów.

       $ xmodmap

       xmodmap:  up to 2 keys per modifier, (keycodes in parentheses):

       shift       Shift_L (0x32),  Shift_R (0x3e)
       lock        Caps_Lock (0x42)
       control     Control_L (0x25)
       mod1        Alt_L (0x40),  Alt_R (0x71)
       mod2        Num_Lock (0x4d)
       mod3
       mod4
       mod5

Zgodnie z powyższym, plan ataku wygląda jak następuje:

  1. usunąć klawisz Alt_R z klawsymu mod1
  2. przypisać klawsym Mode_switch klawiszowi Alt_R
  3. przypisać klawsym Scroll_Lock do kodu klawisza 78 (kodu rzeczywistego ScrollLock)
  4. dodać Mode_switch do nieużywanego klawsymu mod3 i
  5. dodać klawsym Scroll_Lock do mod3

Oto więc rozwiązanie:

  remove mod1 = Alt_R
  keysym Alt_R = Mode_switch
  keycode 78 = Scroll_Lock
  add mod3 = Mode_switch
  add mod3 = Scroll_Lock

Jeśli użyjesz tego drugiego rozwiązania, możesz połączyć tabelę i dyrektywy dotyczące trybów w swoim pliku ~/.Xmodmap.

Pliki takie dostarczane są przeważnie razem z różnymi pakietami do obsługi cyrylicy pod X. Dobrym przykładem są tabele w doskonałym pakiecie Siergieja Wakulenki, opisanym wyżej.

Gdy już masz taki plik zawierający tabelę, powinieneś wykonać komendę:

xmodmap filename

Plik dla całego systemu to /usr/lib/X11/xinit/xinitrc; osobisty to albo ~/.xinitrc, albo ~/.Xclients, albo ~/.xsession, zależnie od tego co masz [zainstalowane].

UWAGA: Jeśli xmodmap narzeka na twoją tabelę, spróbuj załadować najpierw domyślną. Tabela domyślna znajduje się zwykle w /usr/lib/X11/etc/xmodmap.std.


Następna strona Poprzednia strona Spis treści