Keystroke-HOWTO.pl.txt

(9 KB) Pobierz
  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):


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

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

  o  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).


















































Zgłoś jeśli naruszono regulamin