Mon Macintosh est une veille machine (un
powerbook G3/250, ou 3500) sur lequel on ne peut
pas installer MacOS X. Toutes les évolutions majeures de MacOS me
sont donc interdites (iTunes, iPhoto, iDVD, et j'en passe...). De plus
les matériels récents ne sont pas supportés: ma
carte PCMCIA USB n'est pas reconnu par le firmware et donc pas par MacOS
9.1 (MacOS 9.2 n'est pas supporté). Heureusement, une bidouille
le permet (insérer la carte une fois le système
démarré, après avoir installé les extensions
USB à partir du site WEB d'Apple).
Linux étant relativement bien supporté sur cette machine,
il est plus intéressant d'utiliser cet environnement de travail.
Les difficultés que l'on recontre se trouvent notamment au
niveau de la configuration du clavier et du contrôleur
d'écran.
Ma distribution est une Mandrake 9.1 PPC.
Le clavier:
La gestion du clavier est configurable au niveau du noyau:
Le noyau peut soit renvoyer les codes de touche spécifiques au
Mac, soit des codes de touche génériques.
Dans le premier cas, il faut utiliser des descriptions de clavier
spécifiques au Macintosh (il en existe peu, et varie entre les
Macs avec clavier USB, newworld, et les Macs avec clavier ADB,
oldworld), dans le deuxième cas on pourra utiliser les
descriptions de clavier courantes (de type PC) avec
l'inconvénient que les claviers Macintosh ne correspondent pas
exactement.
Je pense que ce paramètre à été introduit
dans un but d'unicité, de simplification de la gestion du
clavier. Son impact se situe aussi bien au niveau console que X, puisque
son action se trouve à la source: le noyau.
Ce paramètre est activé en écrivant
1
dans
/proc/sys/dev/mac_hid/keyboard_sends_linux_keycodes, et
peut être activé automatiquement en plaçant
dev.mac_hid.keyboard_sends_linux_keycodes
= 1 dans
/etc/sysctl.conf.
La gestion clavier de la console:
A partir de ce moment, n'importe quelle description de clavier PC peut
être utilisée. Elles se trouvent sous
/usr/lib/kbd/keymaps/i386/.
Si nous avions gardé le mode par défaut il aurait fallu
utiliser celles sous
/usr/lib/kbd/keymaps/mac. Celle qui
convient le mieux est
fr-latin1. Elle peut être
chargé grace à la commande
loadkeys. La
configuration automatique du système se fait grâce au
fichier de configuration
/etc/sysconfig/keyboard:
KEYBOARD=fr
KEYTABLE=fr-latin1
DISABLE_WINDOWS_KEY=yes
Mais comme je l'ai dit auparavant, ceci est un clavier PC, et ne
correspond pas tout à fait à mon clavier Macintosh de type
"AppleDesign" (Le clavier de type "Extended" est aussi
différent). Le clavier intégré de mon powerbook est
un sous-ensemble de ce clavier.
Je suis donc parti d'une description de clavier Macintosh dans lequel
j'ai remplacé les keycodes "Macintosh" par des keycodes "Linux"
(excusez les anglicismes). Pour plus de détails voir les man de
keymaps,
loadkeys
et
dumpkeys.
showkey permet aussi de verifier le
keycode de la touche pressée.
Le fichier créé
fr-AppleDesign.kmap
peut être placé dans
/usr/lib/kbd/keymaps/i386/azerty/
et défini dans
/etc/sysconfig/keyboard.
KEYBOARD=fr
KEYTABLE=fr-AppleDesign
DISABLE_WINDOWS_KEY=yes
La gestion clavier de X11 (xkb)
La définition du clavier est donnée dans
/etc/X11/XF86XConfig-4,
dans une section
InputDevice.
La commande qui nous permet de tester les différents fichiers de
configuration en temps-réel est
setxkbmap. La commande xev
nous permet de connaître les codes des touches comme
showkey
en mode console. Tous les fichiers de définitions xkb se trouvent
sous
/etc/X11/xkb.
Le premier fichier (et le moins utile) est celui qui décrit la
géométrie de votre clavier. Il permet juste au serveur X
d'avoir une représentation physique du clavier (taille, position
des touches, des LEDs). Cette description se trouve dans le
répertoire
xkb/geometry. Le fichier "
macintosh"
nous concerne, il décrit un clavier de type "Extended II".
Pour visualiser ce clavier, on peut utiliser xkbprint à partir
d'un fichier généré par
xkbcomp.
Exemple:
cd /etc/X11/xkb/geometry
xkbcomp "macintosh(ExtendedII)"
xkbprint ExtendedII.xkm -color -level2
En imprimant ou en visualisant le résultat avec
ghostscript, on obtient:
On peut générer dans un fichier jpeg l'image du clavier
courant avec les commandes suivantes:
setxkbmap -print | xkbcomp - - | xkbprint -color -level2 -kc - - |
ghostscript -sDEVICE=jpeg -sOutputFile=appledesign.jpg -g2048x2048
Nous allons maintenant décrire le clavier Apple Design et
associer des symboles à des codes de touche.
Pour faire prendre en compte le clavier par X, j'ai éditer le
fichier
XF86Config-4, pour définir mon InputDevice:
Section "InputDevice"
Identifier "Keyboard1"
Driver "Keyboard"
Option "XkbModel" "appledesign"
Option "XkbLayout" "fr"
EndSection
Ceci explique tout simplement que j'ai un clavier de type Apple Design
au format français.
L'altération à apporter au clavier macintosh US pour
passer en français n'est pas standard comme celle d'un clavier
PC. Il a donc fallu que je modifie les règles de correspondance
décrites dans
/etc/X11/xkb/rules/xfree86.
[...]
! model
= geometry
appledesign =
macintosh(appledesign)
[...]
! model layout
= symbols
appledesign $oldlayouts
= en_US(%m)+%l%(v)(%m)
[...]
! $pcmodels = pc101 pc102 pc104 pc105 appledesign
La première partie décrit que pour le "layout" "
appledesign"
pour définir la géométrie du clavier, on utilise
l'entrée "
appledesign" du fichier
xkb/geometry/macintosh.
La deuxième partie explique comment associer les keycodes aux
symboles des touches.
La troisième partie permet d'appliquer les règles
standards associées au clavier PC sur notre clavier Apple Design.
Le fichier map généré à partir du fichier
XF86Config-4
est (seulement pour information):
xkb_keymap {
xkb_keycodes { include
"xfree86+aliases(azerty)" };
xkb_types { include
"complete" };
xkb_compat
{ include "complete" };
xkb_symbols {
include "en_US(appledesign)+fr(appledesign)" };
xkb_geometry { include
"macintosh(appledesign)" };
};
Chaque touche (identifiée par un scancode) est nommée
(c'est le nom qui apparait sur le dessin) grâce au fichier de
description que l'on trouve dans
/etc/X11/xkb/keycodes. Comme
les keycodes sont ceux génériques de linux, on peut
utiliser les valeurs (par défaut) définies dans
keycodes/xfree86.
A chacun de ces noms, il faut associer les symboles correspondants,
ceci est fait dans
/etc/X11/xkb/symbols. Le clavier du
Macintosh étant différent, il faut définir un
nouveau fichier. J'ai pour cela rajouté une entrée
"appledesign" dans les fichiers
xkb/symbols/us,
xkb/symbols/en_US
et surtout
xkb/symbols/fr. Le clavier français est
défini dans les règles précédentes
("en_US(appledesign)+fr(appledesign)")comme
une altération du clavier US (en effet la plupart des touches ne
bougent pas). La description de l'altération est donnée
par l'entrée "
appledesign" du fichier
xkb/symbols/fr.
Le clavier français étant décrit par rapport
à
en_US, je décris donc une entrée "
appledesign"
dans
xkb/symbols/en_US. Je suppose (je n'en ai pas sous la
main) qu'un clavier Apple Design US est identique à un clavier PC
standard (la touche "Apple" est assimilée à la touche
"Windows"):
[...]
xkb_symbols "appledesign" {
include "us(appledesign)"
replace key <RALT> { [ Mode_switch ] };
replace key <LALT> { [ Mode_switch ] };
replace key <LWIN> { [ Alt_L, Meta_L ] };
include "iso9995-3(basic)"
modifier_map Mod1 { Alt_L, Alt_R, Meta_L, Meta_R };
modifier_map Mod3 { Mode_switch };
};
[...]
J'ai décrit
en_US en fonction de
xkb/symbols/us
pour faire comme cela est fait pour le clavier PC:
[...]
xkb_symbols "appledesign" {
include "us(pc105)"
};
[...]
L'écran
Driver FrameBuffer
Une configuration simple qui marche toujours est d'utiliser le driver
Framebuffer du noyau :
Section "Device"
Identifier "Device1"
Driver "fbdev"
EndSection
Si votre chipset n'est pas supporté par le
noyau (comme pour mon powerbook, le Chips&Technologies CT65554),
assurez-vous bien qu'il utilise alors le driver FrameBuffer OpenFirmware
qui récupère l'écran déja initialisé
et se contente d'écrire en mémoire graphique.
Ceci correspond en fait à donner au kernel le paramètre: video=ofonly
Driver Chips
Pour que le driver Chips fonctionne correctement (taille maximum et
fréquence maximum correctes), les deux lignes suivantes en gras
doivent être présentes dans la section "
Device":
Section "Device"
Identifier "device1"
VendorName "C&T"
BoardName "Chips & Technologies CT65554"
Driver "chips"
BusID "PCI:0:17:0"
Option "DPMS"
VideoRam 2048
DacSpeed 157.5
EndSection
La raison d'être du paramètre
DacSpeed est
expliquée sur le site de XFree86 dans la documentation du driver
chips. Ma version de X est "
XFree86 Version 4.3.0", je crois
que le driver chips ne fonctionne pas correctement dans les versions
précédentes.
Si vous avez compilé le noyau avec l'émulation APM pour
Macintosh (
apm_emu) le serveur X sera alors capable de
passer l'écran en mode veille. S'il est présent sous
forme de module, rajoutez dans
/etc/modules.conf:
alias char-major-10-134 apm_emu
La Configuration
Voila le fichier de configuration que j'utilise (driver chips):
/etc/X11/XF86Config-4