Port ] [ Debian per PowerPC ] [ Installazione ] [ Documentazione ] [ Sviluppo ]

Avviso sui codici di tastiera con Linux PowerPC!

Se si usa un kernel compilato prima dell'Aprile 2001 e si vuole aggiornare il sistema a woody o si vuole aggiornare il kernel o si vuole cambiare la mappa di tastiera è ESSENZIALE essere a conoscenza del cambiamento avvenuto nei codici di tastiera in Debian woody per PowerPC.

Questo è cos'è successo: per inserire powerpc nel flusso di sviluppo principale di Linux ed eliminare gli attuali e i futuri conflitti, il pacchetto console-data di woody è stato modificato in modo da fornire mappe di tastiera con codici Linux al posto delle mappe di tastiera con codici ADB (usati dai normali kernel per powerpc). Le mappe di tastiera con codici ADB non sono più supportate ufficialmente da Debian.

Di conseguenza anche l'installazione del kernel è stata modificata e i nuovi kernel usano codici di tastiera Linux e non codici ADB. Questo è un cambiamento permanente. Un kernel compilato senza supporto per i codici ADB è incapace di usare le mappe di tastiera ADB. I codici di tastiera Linux sono una delle funzionalità del “New Input Layer” (nuovo livello di input), candidato a diventare lo standard per tutti i device di input su tutte le architetture durante il ciclo successivo al kernel 2.4.

Se si vuole continuare a usare i codici ADB ma il kernel in uso è stato compilato con CONFIG_MAC_ADBKEYCODES=n è necessario ricompilarlo con CONFIG_MAC_ADBKEYCODES=y e continuare a usare una mappa di tastiera ADB.

Le mappe di tastiera per mac/apple con codici dei tasti ADB e quelle con codici dei tasti Linux sono molto diverse, per questo motivo è necessario essere preparati: se non si coordinano le istruzioni all'avvio, il kernel e le mappe di tastiera può capitare di scrivere ”root“ al prompt di login e vedere ”sswj“. Una circostanza molto sconcertante.

Pianificazione

Una situazione molto comune in cui questo problema si verifica è l'aggiornamento da potato a woody. Per questo caso è stata aggiunta una speciale finestra di dialogo durante l'aggiornamento di console-data. Viene controllato il tipo di kernel in uso e se si sta usando un kernel ADB, si è avvisati del cambiamento in corso e viene chiesto di scegliere.

Una volta fornite le informazioni su ogni aspetto del problema, sarà facile fare la scelta migliore. Impostare la nuova mappa di tastiera, dopo aver completato l'aggiornamento (e PRIMA di riavviare), modificare la configurazione dell'avvio (quik.conf o yaboot.conf) aggiungendo un riga come la seguente nella sezione relativa all'immagine del kernel da avviare:

append="keyboard_sends_linux_keycodes=1"

Se è già presente una riga append= aggiungere un nuovo termine all'interno delle virgolette come in questo esempio:

append="video=ofonly keyboard_sends_linux_keycodes=1"

Ultimate le modifiche non scordarsi di eseguire quik o ybin per passare i cambiamenti dalla configurazione nei veri file del bootloader.

Un'altra situazione in cui si può verificare questo problema è durante l'aggiornamento di X da 4.0.x a 4.1.x con un kernel con i codici di tastiera ADB in uso. Probabilmente in XF86Config-4 la voce XkbModel è già impostata a "macintosh", putroppo nella nuova versione è cambiato il significato della voce e adesso assume che una tastiera macintosh usi i nuovi codici di tastiera Linux. Per continuare a usare i codici ADB è necessario modificare XkbModel in "macintosh_old".

Nuove installazioni di woody

Nel caso di una nuova installazione di woody, saranno installate una mappa di tastiera con codici Linux e un kernel con codici Linux. Quindi non si verificherà nessun problema, a meno che...

A meno che si cambi il kernel dopo l'installazione e quello nuovo sia un kernel ADB. Allora si ripresenterà, in modo opposto, lo stesso problema. O a meno che...

A meno che si cambi manualmente la mappa di tastiera, scegliendone una da /usr/share/keymaps/mac. Infatti quelle sono tutte mappe di tastiera ADB e non funzionano con un kernel preparato con i codici dei tasti Linux!

Non accadrà mai, ma se capita?

Cosa fare quando si scrive root appare sswj? Oppure, nel caso opposto, si digita (tab)ssw e appare root?

Gli utenti di Linux odiano spengere i loro computer, spesso comporta delle corruzioni del filesystem che possono o non possono essere riparate correttamente. Qui sono riportati dei suggerimenti per spengere il computer in modo corretto se è necessario.

Se sul sistema è installato ssh ed è possibile connettersi da un altro computer allora si può correggere il problema da remoto. Fare il login come utente root e eseguire i seguenti comandi:

cd /proc/sys/dev/mac_hid/
echo 0 > keyboard_lock_keycodes
echo 1 > keyboard_sends_linux_keycodes

Da adesso fino al riavvio la tastiera funzionerà normalmente. Sfruttare l'occasione per sincronizzare la mappa di tastiera, il kernel e il bootloader!

Se il sistema prevede l'uso di una combinazione di tasti per riavviare o spengere si può provare a usare le tabelle sotto per capire come applicare la combinazione sulla mappa. Su PowerPC la normale combinazione di tasti è Control-Shift-Delete, con una mappa di tastiera con codici ADB caricata e interpretata da un kernel con codici Linux corrisponde a Control-F6-F12. Con una mappa di tastiera con codici Linux e interpretata da un kernel con codici ADB invece corrisponde a Shift-AltGr-Uguale. Buona fortuna!

Se la tastiera non ha il tasto Delete quando si usa una mappa di tastiera con codici Linux con un kernel configurato per ADB si capisce dalla tabella sotto come per fare il login come root (2==3 seguito da F5), la stessa tabella va utilizzata anche per la password di root. Per il comando reboot digitare 21Tab==3 seguito da F5, invece per il comando halt digitare p]j3 seguito da F5.

Alcuni caratteri non possono essere immessi con una mappa di tastiera non corretta, questi caratteri sono lasciati in bianco o sono mancanti nelle tabelle.

Mappa di tastiera con codici Linux e kernel configurato per codici ADB

 

Per ottenere: a b   c d e f g h i j      k l m n     o p q r s t u v w
Digitare:     ] TAB m u 1 [ i p 5 Return l j ` Space = 9 y 2 o 3 6 . t

               x y z 0 1 2 3 4 5 6 7 8 9 *   /  [ ] ,         = - ` \ ;
               n 4 / b d f h g z x c v   Alt F7 7 - Backspace w q ; , '

              Control Shift     Enter Tab Backspace Fwd-Del Space
              F6      Ctrl or \ F5, 8 r   e         F12     CapsLock

              Home   NumLock   Clear  AltGr =(numkpd) Escape F11 F12
              Clear  +(numkpd) F6-6   Shift Fwd-Del   s      kp-5 kp-6

              F1         F2          F3         F4       F7   F9
              Left-Arrow Right-Arrow Down-Arrow Up-Arrow kp-. kp-*

              Left-Arrow Right-Arrow Up-Arrow Down-Arrow
              F13                    F11

Kernel configurato per codici dei tasti Linux e mappa con codici ADB

Per ottenere: a b c d e         f g h i j k l m n o p q r   s   t u v w
Digitare:       0 7 1 Backspace 2 4 3 g l ' k c x s h - Tab Esc w d 8 =

              x y z 0       1 2 3 4 5 6 7 8      9 * /  [ ] , = - ` ;
              6 q 5 Control e r t y i u [ Return p   z  f a \ o ] m `

              Control Shift Return Tab Backspace Fwd-Del   \     Space
              Shift   AltGr j      b   ,         =(numkpd) Shift n

              Clear  AltGr    =(numkpd) CapsLock Escape Alt
              Home   CapsLock Fwd-Del   Space    /       kp-*

              F1 F2 F3 F4 F5    F6   F7 F8 F9 F0 F11 F12
                          Enter Ctrl /               Fwd-Del

              Left-Arrow Right-Arrow Up-Arrow Down-Arrow
              F1         F2          F4       F3

Come capire qual è lo stato attuale

Attualmente le mappe di tastiera non contengono al loro interno dei commenti. Per sapere che tipo di mappa è attiva si può controllare la riga che indica il keycode 1 usando:

zgrep 'keycode *1 =' /etc/console/boottime.kmap.gz

Se keycode 1 = Escape, la mappa usa i codici Linux. Se invece keycode 1 = s allora usa i codici ADB (fa eccezione il codice ADB dvorak che usa keycode 1 = o).

I file config-XXXX in /boot sveleranno se il kernel in uso è stato compilato con il supporto per i codici ADB o no. Per scoprirlo, usare:

grep MAC_ADB /boot/*

Si otterà l'elenco dei file di configurazione dei kernel che si possono avviare, se è presente un elemento tipo

/boot/config-2.4.12-powerpc:CONFIG_MAC_ADBKEYCODES=y

allora il kernel è compilato con il supporto per i codici ADB, se invece l'ultimo carattere è una n allora il kernel usa codici Linux.

Come correggere il problema

Una volta che il sistema in aggiornamento è stato spento è necessario fare le impostazioni per correggerlo. Ma come si può fare? Si potrebbe usare il disco di ripristino o avviare un'altra partizione per sistemare le cose.

Se il problema consiste in un kernel compilato per i codici ADB e l'uso di una mappa di tastiera con codici Linux, aggiungere

keyboard_sends_linux_keycodes=1

al prompt boot: dopo aver specificato l'etichetta dell'immagine del kernel. Questa correzione ha effetto solo per un avvio, per renderla permanente modificare il file di configurazione del boot loader.

Invece per risolvere il problema opposto (kernel con codici Linux e uso di una mappa di tastiera ADB) è necessario sbarazzarsi della mappa di tastiera ADB. Si può copiare una qualsiasi delle molte mappe di tastiera dalla directory /usr/share/keymaps/i386. Per esempio:

cd /usr/share/keymaps/i386/qwerty/
cp mac-usb-us.kmap.gz /etc/console/boottime.kmap.gz