Sophie

Sophie

distrib > Mandriva > 2010.0 > i586 > media > contrib-release > by-pkgid > 7ce9f5a38ba3a7d20482e74d18086033 > files > 82

howto-text-it-2006-5mdv2010.0.noarch.rpm

  Linux Keystroke-HOWTO
  Zenon Fortuna(zenon@netcom.com) Traduzione a cura di
  Veronese Andrea (albero@maya.dei.unipd.it) (Aprile 1996)
  Versione 2.0, 4 Aprile 1995

  Questo documento descrive come assegnare macro (sequenze di tasti o
  esecuzione di script) ad alcuni tasti della tastiera. Il metodo pro­
  posto è quello di usare  llooaaddkkeeyyss((11)), oppure quello di modificare il
  file  defkeymap.c  e relinkare il Kernel.  Questo testo NON descrive
  la riconfigurazione dei tasti, come ad esempio [Backspace] o [Delete].
  Per informazioni su come rimappare i tasti leggere il BackSpace Mini-
  HOWTO scritto da Stephen Lee.  Il metodo descritto di seguito è stato
  testato sulla versione 1.2.1 di Linux e incluso nella distribuzione
  Slackware 2.2.0.



  11..  RReevviissiioonnii aa qquueessttoo ddooccuummeennttoo


  4 Aprile 1995   -   Versione 2.0
  Adattato per Linux 1.2.1:
  - semplici cambiamenti circa le modifiche proposte al file
  my_defkeymap.map.
  - modifiche all'esempio di macro con lo  ssccrreeeenn dduummppiinngg  di
  /dev/vcs* (riversamento della schermata di una console virtuale in un
  file o alla stampante).

  7 Maggio 1994   -   Versione 1.0
  Versione iniziale del "Keystroke-HOWTO", scritta per Linux 1.0.



  22..  BBrreevvee DDeessccrriizziioonnee


  I driver di terminale virtuale e di tastiera attribuiscono come valore
  di default alla mappa dei tasti quello definito nel file
  /drivers/char/defkeymap.c  presente nei sorgenti del Kernel. Si
  possono associare delle stringhe all'azione dei 12 tasti Funzione
  presenti sulla tastiera: dopo aver premuto uno di quei tasti, anche
  assieme a [Ctrl] o [Alt] (detti tasti modificatori), il terminale
  virtuale corrente aggiunge la stringa corrispondente ai suoi buffer
  d'ingresso e d'uscita, emulando quindi la digitazione di tale stringa
  dalla tastiera.

  Associando una stringa appropriata ad un determinato tasto Funzione
  possiamo semlificare l'esecuzione di certi comandi, per esempio la
  chiamata ad uno Shell-script  /usr/local/bin/key_macro  che ci
  possiamo creare e modificare a piacimento.



  33..  SSttrruummeennttii ppeerr llaa mmooddiiffiiccaa ddeell ddrriivveerr ddii ttaassttiieerraa


  Possiamo usare llooaaddkkeeyyss((11)), dduummppkkeeyyss((11)) e sshhoowwkkeeyy((11)).  L'utility
  llooaaddkkeeyyss((11))  aiuta a caricare nuove stringhe nei buffer di tastiera
  del Kernel, o anche a preparare nuovo codice C per modificare il
  Kernel.  dduummppkkeeyyss((11))  dovrebbe essere usata per visualizzare la mappa
  attuale della tastiera se si volesse poi ispezionarla o modificarla.
  sshhoowwkkeeyy((11))  può aiutarci per ottenere il codice del tasto Funzione
  selezionato.
  Se il vostro sistema Linux non ha queste utility potete ottenerle
  tramite ftp anonimo agli indirizzi

  sunsite.unc.edu:/pub/Linux/system/Keyboards, oppure
  tsx-11.mit.edu:/pub/linux/sources/system

  coi nomi  kbd-0.89.tar.gz  oppure  kbd-0.90.tar.gz . Usare lo GNU tar
  per scompattare i file desiderati.



  44..  MMooddiiffiiccaarree iill ffiillee ttaabbeellllaa ddii ccoonnvveerrssiioonnee ((kkeeyyttaabbllee))


  Il Kernel di Linux comprende il codice compilato defkeymap.c, il quale
  è generato con l'utility  llooaaddkkeeyyss((11))  partendo dal file
  defkeymap.map. Entrambi i file sono inclusi nella directory
  src/linux/drivers/char.

  Al fine di modificare il file  defkeymap.map  ce ne facciamo una copia
  locale con

     # cp defkeymap.map my_keytable.map ; oppure
     # dumpkeys > my_keytable.map

  C'è anche un'ampia raccolta di file di configurazione della tastiera
  nella directory  /usr/lib/kbd/keytables, dalla quale  defkeymap.map
  può essere copiato e usato come file
  src/linux/drivers/char/defkeymap.map  nel vostro sistema.

  Il metodo che usa l'utility  dduummppkkeeyyss((11))  è raccomandato perché può
  accadere che il vostro Kernel sia già stato modificato o creato per
  voi con un differente  defkeymap.map  rispetto a quello che potreste
  trovare nei sorgenti.

  Leggiamo ora il contenuto del file  my_defkeymap.map. Non ci sono più
  di 300 linee di codice e vi possiamo trovare 3 gruppi di
  dichiarazioni: il primo gruppo consiste in linee con la parola
  "keycode", anche preceduta da altre parole come "alt", "control",
  ecc.; nel secondo gruppo troviamo la parola "string"; il terzo ed
  ultimo gruppo consiste in linee con la parola "compose".

  Altre informazioni sulla sintassi di  kkeeyyttaabblleess((55))  possono essere
  reperite tramite il comando

     % man keytables



  44..11..  EEsseemmppiioo ddii mmooddiiffiiccaa ddeell ffiillee ttaabbeellllaa ddii ccoonnvveerrssiioonnee


  Come esempio dell'assegnazione di una stringa-macro alla pressione di
  un tasto Funzione facciamo in modo che la combinazione [Ctrl+F1]
  chiami l'esecuzione del nostro Shell-script
  "/usr/local/bin/key_macro".

  Prima di tutto dovremmo vedere qual è il codice del tasto Funzione
  [F1]. Possiamo usare l'utility  sshhoowwkkeeyy((11))  per trovare tale codice,
  premendo [F1]. Altrimenti possiamo cercare la stringa "F1" nel file
  my_keytable.map, col risultato di ottenere la seguente linea:

     keycode 59 = F1

  Questa suggerisce che il codice per il tasto Funzione [F1] è 59.
  Inoltre definisce il fatto che, dopo aver premuto [F1], il driver di
  tastiera manda in uscita la stringa denotata dal codice stringa "F1".
  Per vederne il contenuto si può cercare sempre all'interno di questo
  file "string F1" e si trova:

     string F1 = "\033[[A"

  Cioè, dopo aver premuto [F1], il driver di tastiera manda "Esc[[A"
  (senza spazi).

  Non bisognerebbe combiare questa stringa perché alcune applicazioni
  basano su di essa l'azione di [F1] come valore di default.

  Comunque possiamo definire una nuova macro per la combinazione
  [Ctrl+F1], la quale non è riservata dal Kernel per altri usi speciali.
  Per vedere i codici del tasto [F1] premuto assieme a [Ctrl], [Shift] o
  con altri modificatori, possiamo cercare nel file  my_keytable.map  il
  codice 59 tramite

     # grep 59 my_keytable.map

  Nel caso in cui non vi sia alcuna linea con "control keycode 59"
  allora possiamo usare [Ctrl+F1] senza problemi (si può procedere anche
  se è presente una linea con "shift control keycode 59").

  Aggiungiamo la seguente linea al file my_keytable.map:

     control keycode 59 = key_symbol

  dove "key_symbol" definirebbe l'azione della combinazione [Ctrl+F1].
  Linux 1.2.* ammette un'allocazione dinamica delle stringhe, ma la
  stringa "key_symbol" può essere scelta solo tra un insieme ben
  definito di nomi. Tra gli altri sono permessi i simboli-tasto F1-F246.
  Nel mio sistema F21 non era usato nel file  my_keytable.map  ma ognuno
  dovrebbe ispezionare il proprio e scegliere il simbolo-tasto
  opportuno. Nel nostro esempio si può quindi concludere con la linea


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


  Riassumendo, abbiamo apportato due cambiamenti al file di partenza
  my_keytable.map: abbiamo dichiarato la nuova stringa F21 e abbiamo
  deciso che la combinazione [Ctrl+F1] chiamerà l'esecuzione del con­
  tenuto della stringa 21.



  44..22..  MMooddiiffiiccaa tteemmppoorraanneeaa ddeellllaa ccoonnffiigguurraazziioonnee ddeellllaa ttaassttiieerraa


  Dopo aver opportunamente modificato il file  my_keytable.map  possiamo
  copiarne i cambiamenti al driver di tastiera del Kernel, usando
  l'utility  llooaaddkkeeyyss((11)):

     % loadkeys my_keytable.map

  La modifica al driver di tastiera del Kernel è concessa a chiunque
  abbia l'accesso in lettura al dispositivo "/dev/console".
  Per verificare che i cambiamenti voluti siano stati effettivamente
  installati possiamo usare l'utility dduummppkkeeyyss((11)) e controllare il
  valore di F21, ad esempio


     % dumpkeys |grep F21

  Si ottiene:

     keycode 59 = F1          F11       Console_13 F21
     string F21 = "/usr/local/bin/key_macro\012"

  la quale va bene perché "012", o LF, è equivalente a "\n".


  Ora, premendo [Ctrl+F1] dovrebbe avvenire la chiamata allo Shell
  script "/usr/local/bin/key_macro", come desiderato.



  44..33..  MMooddiiffiiccaa ppeerrmmaanneennttee


  I cambiamenti imposti da  llooaaddkkeeyyss((11))  al driver di tastiera del
  Kernel rimangono effettivi solo fino al successivo reboot (o fino alla
  successiva chiamata a loadkeys).

  (N.d.T.: Per una modifica permanente) possiamo aggiungere a
  /etc/rc.d/rc.local  la chiamata a  loadkeys  con argomento il nostro
  my_keytable.map. Altrimenti, è possibile modificare
  src/linux/drivers/char/defkeymap.c  e relinkare il Kernel con i nuovi
  valori di default.

  Non si dovrebbe modificare manualmente il file  defkeymap.c  ma,
  piuttosto, generarlo tramite l'utility  llooaaddkkeeyyss((11)):

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

  Poi si dovrebbe creare il nuovo Kernel essenzialmente ponendosi alla
  radice dei sorgenti di Linux e usando  mmaakkee((11)).
  Infine, per mezzo di lliilloo((11)) dovremmo installare e riavviare il nuovo
  Kernel.



  55..  EEsseemmppiioo ddii ssccrriipptt aasssseeggnnaattoo aa uunn ttaassttoo


  Uno script particolarmente utile come esempio di macro eseguibile
  premendo un tasto, può essere quello che riversa in un file o alla
  stampante la schermata del video (screen dumping).

  Questo esempio è stato cambiato rispetto a quello della versione 1.0
  di Linux a causa delle modifiche al Kernel, il quale non fornisce più
  la chiamata di sistema  ioctl(0,TIOCLINUX).

  Al fine di leggere le schermate delle console virtuali si dovrebbero
  prima preparare alcuni file di dispositivo. Come utente "root"
  possiamo creare i seguenti file:

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

  Naturalmente è sufficiente avere tanti file /dev/vcs* quante sono le
  console virtuali che si stanno usando.

  Il codice sotto riportato dovrebbe essere considerato come esempio di
  possibile file /usr/local/bin/key_macro:

  ______________________________________________________________________

          #!/bin/sh
          #
          # Questo è un esempio utile di script
          # eseguibile premendo un tasto
          #

          VT_NUMBER=`tty|cut -c9-`
          FILE=/tmp/vt$VT_NUMBER.dump
          cp /dev/vcs$VT_NUMBER $FILE
          echo SCREEN DUMP saved in $FILE
          #
          # Uncommenta la linea sotto se vuoi
          # stampare il file "schermata"
          #
          # lpr $FILE
  ______________________________________________________________________



  66..  CCoonnssiiddeerraazziioonnii


  Non c'è limite pratico alla somma delle lunghezze di tutte le stringhe
  che vorremmo caricare nel driver di tastiera. Il precedente buffer
  della lunghezza di FUNC_BUFSIZE, costante (posto a 512 byte), è stato
  rimpiazzato in Linux 1.2.* da una strategia di allocazione del buffer
  dinamica ... in pezzi di 512 byte ciascuno.

  La copia più recente del Keystroke-HOWTO può essere trovata
  all'indirizzo:

  ftp.netcom.com: /pub/ze/zenon/linux/howto



  77..  AAllttrree iiddeeee??


  Nel caso troviate qualsiasi cosa che valga la pena di aggiungere a
  questo documento, spedite i vostri suggerimenti a zenon@netcom.com -
  grazie (zf)