  Linux Keystroke HOWTO
  Zenon Fortuna zenon@netcom.com
  v2.0, kwiecie 1995

  Wersja polska: Gwidon S. Naskrent naskrent@hoth.amu.edu.pl
  v1.0, 29 X 1997

  1.  Co to jest Keystroke-HOWTO?


  Dokument ten napisany zosta dla uytkownikw ktrzy chc przypisa
  specjalne czynnoci niektrym klawiszom na klawiaturze. Sugerowana
  metoda to uycie loadkeys(1) bd zmiana defkeymap.c i zbudowanie na
  nowo jdra.

  Tekst ten NIE omawia przemapowywania klawiszy klawiatury, np. Delete
  czy BackSpace. Co do informacji na temat przemapowywania klawiszy
  przeczytaj Backspace Mimi-HOWTO autorstwa Stevena Lee.

  Metod opisan poniej przetestowano na jdrze 1.2.1, zamieszczonym w
  dystrybucji 2.2 Slackware.


  2.  Historia zmian


  4 IV 95 - wersja 2.0 Przystosowana do wersji jdra 1.2.1; -proste
  zmiany w sugerowanych modyfikacjach pliku "my_keytable.map"
  -zmodyfikowany przykad "key_macro" ze zrzutami ekranu przez /dev/vcs*

  7 V  94 - wersja 1.0 Wersja wyjciowa Keystroke-HOWTO, oparta w
  dziaaniu na wersji jdra 1.0


  3.  Krtki opis


  Wirtualny terminal Linuxa oraz sterowniki klawiatury przyjmuj
  domylny ukad klawiatury taki jak zdefiniowany w pliku
  /drivers/char/defkeymap.  c rde jdra. Dwunastu klawiszom
  funkcyjnym PC przyda mona acuchy przypisane wykonywanym przez nie
  czynnociom. Po naciniciu ktrego z tych klawiszy, by moe z
  dodanymi klawiszami Alt lub Ctrl, biecy wirtualny terminal dodaje
  okrelony acuch do swoich buforw danych wejciowych i wyjciowych,
  emulujc w efekcie wprowadzenie owego acucha tak jakby zosta
  wpisany z klawiatury.

  Ustawieniem odpowiedniego acucha dla danego klawisza funkcyjnego
  moemy uproci wykonywanie wybranych komend, na przykad wywoujc
  skrypt powoki /usr/local/bin/key_macro, ktry moemy utworzy i
  modyfikowa wedle wasnego uznania.

  3. Narzdzia do modyfikacji sterownika klawiatury.

  Moemy uy loadkeys(1), dumpkeys(1) oraz showkey(1):


    narzdzie loadkeys(1) pomaga zaadowa nowe cigi znakw do buforw
     klawiatury jdra, lub przygotowuje nowy kod w C modyfikujcy jdro,

    dumpkeys(1) powinno by uywane dla wydostania biecego ukadu
     klawiatury do obejrzenia lub modyfikacji,

    showkey(1) moe nam pomo w otrzymaniu kodu klawisza okrelonego
     klawisza funkcyjnego.

  Jeli twj system linuxowy nie posiada tych narzdzi, moesz je zdoby
  poprzez ftp jako pakiet kbd-0.89.tar.gz lub kbd-0.90.tar.gz z
  sunsite.unc.edu:/pub/Linux/system/Keyboards, lub
  tsx-11.mit.edu:/pub/linux/sources/system Powiniene uy GNUsowskiego
  tar aby wypakowa potrzebne pliki.


  4.  Zmiana pliku ukadu klawiatury


  Jdro Linuxa zawiera skompilowany kod defkeymap.c, ktry tworzony jest
  narzdziem loadkeys(1) z pliku defkeymap.map. Oba pliki umieszczone s
  w katalogu src/linux/drivers/char.

  Potrzebujemy zmodyfikowa plik defkeymap.map, tak wic zrbmy jego
  lokaln kopi przez



       # cp defkeymap.map my_keytable.map




  lub



       # dumpkeys > my_keytable.map




  Istnieje take duy zbir rnych plikw z ukadami klawiatury w
  katalogu /usr/lib/kbd/keytables, z ktrych defkeymap.map moe zosta
  uyty w twoim systemie w miejsce src/linux/drivers/char/defkeymap.map.

  Poleca si metod uywajc dumpkeys(1), poniewa zdarzy si moe i
  twoje jdro byo ju modyfikowane lub utworzony dla ciebie z innym
  plikiem defkeymap.map ni ten ktry moesz znale.

  Przeczytajmy zawarto pliku my_keytable.map: znajduje si tam ponad
  300 linii kodu, i moemy tam znale trzy grupy deklaracji: pierwsza
  skada si z linii zawierajcych sowo "keycode", by moe z
  doczonymi dodatkowymi sowami w rodzaju "alt", "control", itd. Druga
  grupa skada si z linii ze sowem "string", trzecia z linii ze sowem
  "compose".

  Wicej o skadni tego pliku mona przeczyta w keytables(5)


  4.1.  Przykad modyfikacji pliku ukadu klawiatury


  Jako przykad przypisania makroacucha naciniciu klawisza
  funcyjnego, kamy Ctrl-F1 wywoywa nasz skrypt
  /usr/local/bin/key_macro.

  Po pierwsze powinnimy dowiedzie si jaki jest kod klawisza
  funkcyjnego F1. Moemy narzdzia uy showkey(1) i pozna kod
  naciskajc F1.

  Zamiast tego moemy poszuka cigu "F1" w pliku my_keytable.map i
  znale nastpujc lini:


               keycode  59 = F1




  Sugeruje to e kodem klawisza dla F1 jest 59. Linia ta okrela rwnie
  e po naciniciu F1 sterownik klawiatury powinien wysa acuch
  oznaczony kodem "F1". Aby zobaczy zawarto tego acucha, poszuka
  mona wzoru "string F1" i znale



               string F1 = "\033[[A"




  Oznacza to e po naciniciu klawisza F1 sterownik klawiatury wysya
  "Esc [ [ A" (bez spacji).

  Nie powinnimy zmienia tego acucha, poniewa niektre aplikacje
  polegaj na nim jako na domylnej czynnoci klawisza F1.

  Moemy jednak zdefiniowa now czynno dla Ctrl-F1, zaoywszy e nie
  jest ona zarezerwowana przez jdro dla innych specjalnych czynnoci.
  Aby obejrze przypisania klawisza F1 razem z Ctrl, Shift i innymi
  trybami, moemy zagldn do pliku my_keytable.map uywajc:



       # grep 59 my_keytable.map




  W przypadku gdy nie ma tam linii z "control keycode 59", moemy uy
  Ctrl-F1 bez problemw (gdy istnieje linia z "shift control keycode 59
  nadal wszystko jest ok).

  Dodajmy nastpujc lini do pliku my_keytable.map:



       control keycode 59 = key_symbol




  gdzie "key_symbol" okrela bdzie czynno klawisza Ctrl-F1. Jdro
  1.2.* pozwala na dynamiczn alokacj acuchw, ale nazwa dla
  "key_symbol" musi zosta wybrana tylko z ustalonego zbioru nazw.
  Midzy innymi dozwolone s symbole F1-F246. Dla my_keytable.map w moim
  systemie nieuywane byo F21, ale powiniene obejrze swj plik i
  wybra odpowiedni klawsym. Moemy wic dopisa lini:



            control keycode 59 = F21




  Teraz musimy zdefiniowa zawarto F21, dodajc lini



       string F21 = "/usr/local/bin/key_macro\n"




  Podsumowywujc, uczynilimy dwie zmiany w stosunku do oryginalnego
  my_keytable.map: zadeklarowalimy nowy acuch F21 oraz to e Ctrl-F1
  bdzie wywoywa zawarto F21.


  4.2.  Czasowe zmiany w ustawieniach klawiatury


  Zmieniwszy waciwie my_keytable.map moemy skopiowa zmiany do
  sterownika klawiatury jdra uywajc narzdzia loadkeys(1):



       % loadkeys my_keytable.map




  Pozwolenie modyfikacji sterownika klawiatury jdra dawane jest kademu
  kto posiada prawa odczytu urzdzenia /dev/console.

  Aby sprawdzi czy zamierzone zmiany zostay zainstalowane, moemy uy
  narzdzia dumpkeys(1) by sprawdzi warto F21, na przykad:



       % dumpkeys | grep F21




  Moemy zobaczy:



       keycode 59 = F1         F11     Console_13      F21

       string F21 = "/usr/local/bin/key_macro\012"




  co jest ok, bowiem "\012", lub LF, odpowiada \n

  Teraz nacinicie Ctrl-F1 powinno wywoa skrypt
  /usr/local/bin/key_macro, tak jak zamierzalimy.


  4.3.  Zmiany na stae


  Zmiany w sterowniku klawiatury jdra narzucone loadkeys(1) trwaj do
  nastpnego przeadowania systemu (albo nastpnego odwoania do
  loadkeys).

  Moemy zmieni plik /etc/rc.d/rc.local aby wywoa loadkeys z naszym
  plikiem my_keytable.map jako argumentem. Zamiast tego zmodyfikowa
  moemy src/linux/drivers/char/defkeymap.c i ponownie skompilowa jdro
  z nowymi wartociami domylnymi.


  Nie powinnimy zmienia pliku defkeymap.c rcznie, lecz raczej
  wygenerowa go narzdziem loadkeys(1):



       # mv defkeymap.c defkeymap.c.ORIG
       # loadkeys --mktable my_keytable.map > defkeymap.c




  Nastpnie powinnimy wygenerowa nowe jdro, zasadniczo zmieniajc
  katalog na bazowy katalog rde jdra, i uywajc make(1).

  W kocu, powinnimy uy lilo(1) aby zainstalowa i zaadowa nasze
  nowe jdro.


  5.  Przykad skryptu key_macro


  Szczeglnie uytecznym skryptem dla prostych operacji zwizanych z
  naciskaniem klawiszy moe by skrypt powoki przygotowywujcy, bd
  drukujcy, zrzut ekranu.

  Przykad ten uleg zmianie od czasw wersji 1.0 Linuxa, z powodu zmian
  w jdrze, ktre nie udostpnia ju wywoania systemowego
  ioctl(0,TIOCLINUX).

  Aby przeczyta zrzuty ekranu wirtualnej konsoli naley wpierw
  przygotowa par plikw urzdze. Jako root moemy stworzy co
  nastpuje:



       # mknod /dev/vcs1  c 7 1
       # mknod /dev/vcs2  c 7 2
       ...
       # mknod /dev/vcs63 c 7 63




  Oczywicie wystarczy mie tylko pliki /dev/vcs* odpowiednie dla
  wirtualnych konsoli ktrych si uywa.

  Kod poniej powinien by uwaany za przykad moliwego pliku
  /usr/local/bin/key_macro:



       #!/bin/sh
       #
       # Oto przykad uytecznego skryptu key_macro
       #

       VT_NUMBER=`tty|cut -c9-`
       FILE=/tmp/vt$VT_NUMBER.dump
       cp /dev/vcs$VT_NUMBER $FILE
       echo zrzut ekranu zachowany w $FILE
       #
       # Odkomentuj ponisz lini gdy chcesz by zrzut by drukowany
       # lpr $FILE



  6.  Uwagi


  Nie ma praktycznego limitu sumy dugoci wszystkich acuchw ktre
  moglibymy chcie zaadowa do sterownika klawiatury. Poprzedni stay
  bufor dugoci FUNC_BUFSIZE (ustawiony na 512 bajtw) zosta w Linuxie
  1.2.* zastpiony strategi dynamicznego przydzielania buforw w
  kawakach po 512 bajtw kady.

  Najwiesz kopi Keystroke-HOWTO znale mona w

  <>"ftp.netcom.com:/pub/ze/zenon/linux/howto"
  name="ftp.netcom.com:/pub/ze/zenon/linux/howto">


  7.  Dalsze pomysy?


  W razie gdyby znalaz co wartego dodania do tego dokumentu, przelij
  prosz swoje uwagi na adres  <>"mailto:zenon@netcom.com" name=
  "zenon@netcom.com"> - dziki (zf).













































