aeb@cwi.nl
Les paquetages suivants contiennent des programmes en rapport avec le clavier ou la console.
kbd-0.90.tar.gz
contient loadkeys
,
dumpkeys
, showkey
,
setmetamode
, setleds
,
setfont
, showfont
, mapscrn
,
kbd_mode
, chvt
, resizecons
,
disalloc
, getkeycodes
,
setkeycodes
.
util-linux-2.5
contient setterm
,
kbdrate
.
shellutils-1.8
(ou stty.tar.gz
)
contient stty
.
open-1.1.tgz
contient open
. (Voir
aussi dynamic-vc-1.1.tar.gz
.)
SVGATextMode-0.9.tar.gz
contient
SVGATextMode
.
La distribution standard de X contient xmodmap
,
xset
, kbd_mode
. (Voir aussi
X386keybd(1).)
Quand on appuie sur une touche, le contrôleur clavier
envoie des scancodes au pilote clavier du noyau. Certains claviers
sont programmables, mais en général les scancodes
sont fixes. Quand le pilote clavier est en mode scancode
(dit aussi mode raw), le noyau se contente de transmettre
les codes tels quels à l'application, c'est ce qui se passe
sous X
. Sinon le flux de scancodes est
décomposé en keycodes correspondant à l'appui
ou au relâchement d'une touche. (Le simple fait d'appuyer sur
une touche peut produire jusqu'à 6 scancodes, réduits
ici en un seul keycode.) Si le pilote clavier est en mode
keycode (ou mode mediumraw), l'application
reçoit les keycodes (ce mode est utilisé, par
exemple, par showkey
). Sinon, les keycodes sont
traduits d'après une table (keymap), ensuite, soit un
caractère (ou un chaîne) est envoyé à
l'application, soit une action est déclenchée.
(Exemple: si on appuie et relâche la touche q
,
le clavier envoie les scancodes 0x1E et 0x9E, ce qui est converti
en keycodes 30 et 158, puis en la valeur 113, qui est le code ASCII
ou Latin-1 de q
(avec un clavier Azerty et une keymap
adaptée). Si on appuie et relâche la touche
Suppr
, le clavier envoie les scancodes 0xE0 0x53 0xE0
0xD3, convertis en keycodes 111 et 239, ce qui donne finalement la
séquence ESC [ 3 ~
. Ctrl-Alt-Suppr est une
combinaison de touches qui déclenche une action.)
La conversion de scancodes exotiques en keycodes peut être
programmée avec l'utilitaire setkeycodes
, mais
peu de gens ont besoin. La table de traduction des keycodes en
caractères, chaînes ou actions, i.e. la keymap, se
manipule grâce à loadkeys
. Pour plus de
détails, voir getkeycodes(8), setkeycodes(8), dumpkeys(1),
loadkeys(1).
Dans ce paragraphe, le terme `envoyé à
l'application' signifie en fait `transmis au pilote du terminal'.
Le texte est ensuite traité de la même façon
que s'il venait d'une ligne série. Les détails de ce
traitement sont ajustés par le programme
stty
.
A l'inverse, quand on envoie des caractères à la
console, ils subissent un traitement standard (réglé
par stty
), puis sont envoyés au pilote de la
console. Le pilote de la console émule un terminal VT100, et
scrute les données reçues pour intercepter les
séquences escape (du genre déplacement du curseur,
effacement de l'écran, etc.). Les autres octets sont,
après une éventuelle conversion par la table de
conversion de la console, écrits dans la mémoire
vidéo. La carte vidéo affiche ces caractèrs en
utilisant une police stockée dans sa mémoire. On peut
changer cette police en utilisant setfont
, et la table
de conversion de la console peut être modifiée avec
mapscrn
. Pour plus de détails, voir plus
bas.
L'écran est plein de cochonneries, tout ce qu'on tape apparaît sous forme de petits dessins. Que faire ?
De nombreux programmes retracent l'écran quand on tape
^L, ce qui peut être utile en cas de modem bruité ou
de messages intempestifs à l'écran. La commande
clear
efface l'écran.
La commande reset
réinitialise le pilote de
la console. Elle est bien utile quand l'écran est plein de
ces jolis caractères graphiques illisibles, ou quand
l'affichage est réduit à la ligne du bas. Si vous ne
disposez pas de cette commande, ou si elle fait autre chose, voici
le remède: mettez ces deux lignes dans un fichier
exécutable reset
quelque part dans votre
PATH:
ce qui envoie la séquence ESC c à la console. Si vous avez chargé une police bizarre et que vous voulez revenir à la police par défaut,#!/bin/sh echo -e \\033c
fera l'affaire (à condition que la police par défaut soit à sa place). Sur de vieux terminaux, l'utilisation de tabs peut demander un délai, exécuter alors% setfont
(voir stty(1)). Pour changer de mode vidéo, utiliser% stty tab3
resizecons
ou SVGATextMode
. Ceci
règle généralement la partie affichage.
Côté clavier, il peut y avoir encore pas mal de
problèmes. Si X
, DOOM
ou tout
autre programme travaillant en mode raw (ou mediumraw) se plante,
le clavier peut rester dans ce mode et il est alors difficile
d'exécuter la moindre commande. (Voir "Comment sortir du
mode raw" plus loin.)
Le problème peut parfois se situer à un niveau encore plus bas. Il y a au moins deux niveaux (le clavier et le contrôleur clavier) où l'on peut envoyer la commande "désactiver le clavier" au matériel. De plus les claviers ont souvent trois tables de scancodes utilisables au choix.
Je n'ai cependant jamais entendu parler de cas où cela ait posé un problème.
Certains claviers ont une fonction de reprogrammation des
touches. Stormy Henderson (stormy@Ghost.Net
)
écrit:
`Si votre clavier a été accidentellement reprogrammé, vous pouvez (avec un clavier Gateway AnyKey) appuyer sur control-alt-suspend_macro pour remettre les choses en place.'
Si le caractère est effacé, mais d'une manière bizarre, c'est que les paramètres du terminal sont mauvais. Si% stty erase ^?
echoprt
est activé, les caractères
effacés s'affichent entre \
et /
.
Si echoe
est désactivé, les
caractères ne sont plus effacés à
l'écran, mais leur effacement est signalé par
l'affichage du caractère d'effacement, exemple:
Libux###nux
(avec # comme caractère
d'effacement).
On utilisera donc généralement stty echoe
-echoprt
. La commande stty sane
activera ces
paramètres et bien d'autres. La commande stty
-a
affiche les paramètres actuels. Pourquoi ces
paramètres ne sont pas activés par défaut ? Il
suffit d'utiliser le bon getty
.
Il est à noter que beaucoup de programmes (comme
bash
, emacs
etc.) ont leur propres
assignations de touches (définis dans
~/.inputrc
, ~/.emacs
, etc.) et ne
tiennent pas compte de ces paramètres de terminal.
Jadis, la console traduisait DEL (\177
) en BS
Espace BS (\010\040\010
).
Les DEL sont désormais ignorés (comme le devrait toute émulation vt100 fidèle). Choisissez un meilleur getty, i.e., qui n'affiche pas les DEL.
Au premier essai, on parle à getty
, au
deuxième à login
, deux programmes
distincts qui peuvent se comporter différemment.
Quand on utilise la console, ou plus précisément, quand le clavier n'est pas en mode (medium)raw, il faut utiliser:
Sous X, utiliser:% loadkeys monclavier.map
Remarque: depuis XFree86-2.1, X initialise son clavier à partir de la configuration du clavier de la console. Bien que les deux systèmes ne soient pas 100% compatibles, cette technique rend généralement l'utilisation de% xmodmap monclavier.xmap
xmodmap
superflue.
Si, par exemple, si vous voulez que la touche Backspace génère le code BackSpace (^H), au lieu du code par défaut (Delete), faites:
% loadkeys keycode 14 = BackSpace %
(i) Parce que les terminaux VT100 ont une touche Delete au dessus de la touche Entrée.
(ii) Parce que Linus en a décidé ainsi.
Ou, si vous voulez juste que Backspace génère le code BackSpace:% xmodmap -e "keysym BackSpace = Delete" -e "keysym Delete = BackSpace"
Ou, si vous voulez juste que Delete génère le code Delete:% xmodmap -e "keycode 22 = BackSpace"
(mais généralement c'est déjà la disposition par défaut).% xmodmap -e "keycode 107 = Delete"
Mettez dans votre .emacs
les lignes:
Bien sûr, vous pouvez associer d'autres commandes à d'autres touches de la même manière.(global-set-key "\?" 'delete-backward-char) (global-set-key "\C-h" 'help-command)
Mettez dans votre .emacs
les lignes:
(setq keyboard-translate-table (make-string 128 0)) (let ((i 0)) (while (< i 128) (aset keyboard-translate-table i i) (setq i (1+ i)))) (aset keyboard-translate-table ?\b ?\^?) (aset keyboard-translate-table ?\^? ?\b)
Mettez dans votre .kermrc
les lignes:
set key \127 \8 set key \8 \127
Normalement xterm hérite des modes de terminal du
processus qui l'appelle. Pour xdm
, les
caractères erase et kill sont #
et
@
, comme sur les bons vieux Unix Version 6. Si
ça ne vous plaît pas, vous pouvez mettre
dansXTerm*ttymodes: erase ^? kill ^U intr ^C quit ^\ eof ^D susp ^Z start ^Q stop ^S eol ^@
/usr/lib/X11/app-defaults/XTerm
ou dans
$HOME/.Xresources
, à condition
d'exécuter la commande
dans votrexrdb $HOME/.Xresources
$HOME/.xinitrc
.
Mettre
dans votre*XmText.translations: #override\n\ <Key>osfDelete: delete-previous-character() *XmTextField.translations: #override\n\ <Key>osfDelete: delete-previous-character()
$HOME/.Xresources
devrait faire l'affaire.
Cependant, la FAQ de netscape dit:
Pourquoi ma touche Backspace ne marche pas dans les boites texte ? Par défaut, Linux et XFree86 ont leur touches Backspace et Delete mal configurées. Tous les programmes Motif (y compris Netscape Navigator) auront les mêmes problèmes. Les spécifications Motif disent que Backspace doit effacer le caractère précédent et Delete le caractère suivant. Par défaut sous Linux et XFree86 Backspace et Delete génèrent le code DEL. Le problème peut être résolu en utilisant un programme tel que xmodmap, xkeycaps, ou loadkeys pour que la touche Backspace génère le code BackSpace au lieu de Delete. Une autre solution consiste à avoir un fichier .motifbind; voir la page de manuel de VirtualBindings(3). Note: n'utilisez pas les ressources *XmText.translations ou *XmTextField.translations pour essayer de résoudre ce problème. Si vous le faites, vous annulez toutes les autres programmations de touches dans les boites textes de Netscape Navigator.
Les gens qui ont des problèmes avec backspace ont
tendance à aller voir dans leur fichier termcap (ou
terminfo), et effectivement la ressource kb
(ou
kbs
) décrit le code généré
par la touche Backspace. Cependant peu de programmes utilisent ces
bases de données pour rechercher le code envoyé par
backspace, donc, à moins de n'avoir des problèmes
qu'avec certains programmes, il faut en général
chercher ailleurs. Cela dit, il vaut mieux de toute façon
avoir un termcap (ou terminfo) correct. Voir aussi "La variable
TERM" plus loin.
Le noyau a quatre tables de conversion des octets en symboles écran: a) Latin1 -> PC, b) VT100 graphique -> PC, c) PC -> PC, d) utilisateur.
Il y a deux tables de caractères, appelées G0 et G1, dont l'une est la table courante. (Initialement G0.) Taper ^N fait passer à la table G1, ^O à la table G0.
Ces variables G0 et G1 pointent sur des tables de conversion et peuvent êtres changées par l'utilisateur. Initialement, elles pointent respectivement sur les tables a) et b). Les séquences ESC ( B , ESC ( 0 , ESC ( U et ESC ( K font respectivement pointer G0 sur les tables de conversion a), b), c) et d). Les séquences ESC ) B , ESC ) 0 , ESC ) U et ESC ) K font respectivement pointer G0 sur les tables de conversion a), b), c) et d).
La séquence ESC c provoque une réinitialisation
complète du terminal, ce qui peut être
nécessaire si l'écran est tout brouillé. La
commande echo ^V^O
, souvent conseillée, ne fera
que rappeler la table G0, mais rien ne garantit que G0 pointe sur
la table a). Certaines distributions ont un programme reset(1) qui
fait juste un echo ^[c
. Si votre termcap pour la
console est correcte (et a une entrée
:rs=\Ec:
), alors vous pouvez utiliser setterm
-reset
.
La table de conversion d) peut être définie par
mapscrn(8). Le résultat est que si un symbole c est
affiché, c'est le symbole s = map[c]
qui est
mis dans la mémoire vidéo. L'image du
caractère s
se trouve dans la mémoire de
la carte vidéo et peut être modifiée avec
setfont(8).
Par défaut, le changement de console se fait par Alt-Fn
ou Ctrl-Alt-Fn. Sous X
(ou les versions
récentes de dosemu
), seule la combinaison
Ctrl-Alt-Fn marche.
XFree86 1.3 ne sait pas que la touche Alt est enfoncée quand on rappelle la fenêtre X. Il faut donc relâcher Alt avant de pouvoir rechanger de console. Pourtant, ça pourrait marcher: le noyau mémorise toujours l'état appuyé/relâché des touches. (Autant que faire se peut: certains clavier n'émettent pas de scancode quand on appuie dessus (ex: les touches PFn d'un FOCUS 9000) ou quand on les relâche (ex: la touche Pause de la plupart des claviers).)
XFree86 1.3 sauve les polices chargées sur la carte
vidéo quand il est démarré, et les restaure
lors d'un changement de console. Donc le résultat d'un
setfont
sur une console virtuelle est annulé
par un aller retour dans la fenêtre X. L'utilisation de
setfont
sous X donne des résultats
bizarres...
Le changement de console par programme est possible grâce
à la commande chvt
.
Cette question est toujours posée de temps en temps, mais
la réponse est: il y en a déjà suffisament.
Depuis la version 1.1.54 du noyau, il y a entre 1 et 63 consoles
virtuelles. Une nouvelle console est créée dès
qu'elle est ouverte. Elle peut être supprimée avec
disalloc
(mais il faut que plus aucun processus ne lui
soit associé).
Pour les vieux noyaux, changer la ligne
dans#define NR_CONSOLES 8
include/linux/tty.h
(ne pas dépasser 63),
et recompiler. Il est possible que vous ayez à créer
le périphérique correspondant avec
MAKEDEV
ou mknod tty
N c 4
N
où N est le numéro du terminal. Si vous voulez avoir
des getty
sur ces nouvelles consoles, ajoutez des
lignes dans /etc/inittab
.
Quand les consoles sont allouées dynamiquement, il est
généralement plus simple de n'avoir qu'un ou deux
getty
. D'autres consoles sont ouvertes par open
-l -s bash
. Les consoles inutilisées (sans processus
associé) sont désallouées par
disalloc
.
Si vous disposez de spawn_login
(inclus dans
kbd-0.90.tar.gz
) et que vous mettez
dansloadkeys << EOF alt keycode 103 = Spawn_Console EOF spawn_login &
/etc/rc.local
, taper Alt-FlècheHaute
créera (et affichera) une nouvelle console avec un
login
. Voir aussi open-1.3.tgz
.
Vous ne pouvez vous loger sous "root" que sur les terminaux
listés dans /etc/securetty
.
Quand on appuie sur Ctrl-Alt-Del (ou toute autre combinaison
à laquelle loadkeys associe le keycode Boot), soit la
machine reboote immédiatement (sans sync), soit le signal
SIGINT est envoyé à init
(ce qui est le
comportement par défaut, changeable par l'appel
système reboot(), voir ctrlaltdel(8)). Certains
init
changent le défaut. Ce qui se produit
quand init
reçoit SIGINT dépend de la
version du init
utilisée et est souvent
déterminé par le ligne pf
du fichier
/etc/inittab
(on peut dans ce cas lancer n'importe
quel programme). Dans les versions actuelles du noyau
Ctrl-AltGr-Del n'est plus assigné par défaut à
Boot.
Combinaisons par défaut avant utilisation de loadkeys, donc en qwerty.
Nom du keycode Combinaison ------------------------------- Show_Memory Shift-Scrollock Show_Registers AltGr-ScrollLock Show_State Ctrl-ScrollLock Console_n Alt-Fn and Ctrl-Alt-Fn (1 <= n <= 12) Console_{n+12} AltGr-Fn (1 <= n <= 12) Incr_Console Alt-FlècheDroite Decr_Console Alt-FlècheGauche Last_Console Alt[Gr]-ImprEcran Scroll_Backward Shift-PgPrec Scroll_Forward Shift-PgSuiv Compose Ctrl-. (Ctrl-: sur clavier azerty) Caps_On <pas défini> (Par défaut CapsLock est un va-et-vient, Caps_Shift <pas defini> ces Keycodes servent à recréer le désagréable comportement MS-Keyb Fr)
Ctrl-Alt-Fn Affiche la console virtuelle n Ctrl-Alt-KP+ Résolution suivante Ctrl-Alt-KP- Résolution précédente Ctrl-Alt-Backspace Tue le serveur XSur certaines cartes-mères, Ctrl-Alt-KP- et Ctrl-Alt-KP+ émulent le bouton Turbo. Ces séquences produisent les scancodes 1d 38 4a ca b8 9d et 1d 38 4e ce b8 9d, et toutes deux changent la vitesse de Turbo (>= 25MHz) à non-Turbo (8 or 12 MHz) et vice-versa. (souvent ce comportement peut être désactivé par un cavalier sur la carte-mère.)
Perry F Nguyen (pfnguyen@netcom22.netcom.com
)
écrit:
Les BIOS AMI permettent de bloquer le clavier et de faire clignoter les LEDs quand on appuie sur Ctrl-Alt-Backspace et qu'un mot de passe BIOS est défini, et ce jusqu'à ce que celui-ci soit tapé.
Ctrl-Alt-Fn Rappelle la console n (versions >0.50; avant Alt-Fn) Ctrl-Alt-PgDn Tue dosemu (quand le calvier est en mode RAW) (et bien d'autres, voir la documentation de dosemu)
Un symbole peut être construit en utilisant plusieurs frappes.
accent keycode mort keycode normal ------------------------------------------------------ accent grave dead_grave grave accent aigu dead_acute apostrophe accent circonflexe dead_circumflex asciicircum tilde dead_tilde asciitilde tréma dead_diaeresis diaeresisPar défaut aucune touche du clavier n'est morte. Le résultat est celui de Compose + accent + lettre (et est donc redéfinissable, cf plus bas).
NDT: pour des francophones utilisant un clavier Azerty, il vaut généralement mieux se contenter de définir comme touches mortes l'accent circonflexe et le tréma de la touche à droite du `P'. Il est sinon fastidieux voire parfois impossible (en particulier sous X) de taper les symboles tilde et apostrophe, bien utiles sous Unix. Or les tables standard pour clavier Latin-1 activent en général toutes les touches mortes possibles. Il faut donc pour ressusciter ces touches, remplacer le keycode mort par le keycode normal dans la table chargée au démarrage par loadkeys.
dumpkeys | grep compose
.Il est à noter qu'il existe au moins trois mécanismes de composition distincts:
/usr/X11R6/lib/X11/locale/iso8859-1/Compose
.iso-insert.el
.Voir loadkeys(1), setleds(1), setmetamode(1) pour les codes générés par les diverses touches et l'utilisation des leds quand on n'est pas sous X. Sous X, voir xmodmap(1).
Voir setterm(1), kbdrate(8) pour les propriétés telles que les couleurs de l'écriture et du fond, l'économiseur d'écran et la vitesse de répétition des touches quand on n'est pas sous X. Sous X, voir xset(1), qui s'occupe aussi du clic des touches et du volume des bips.
Le fichier /etc/termcap
définit les
séquences escape utilisées par de nombreux programmes
utilisant la console (ou tout autre terminal). Une version plus
moderne se trouve dans /usr/lib/terminfo
. (voir
terminfo(5). Les fichiers terminfo sont créés par le
compilateur terminfo /usr/lib/terminfo/tic
, voir
tic(1).)
(Sur ma machine) /dev/console
est lien symbolique
sur /dev/tty0
, et le noyau considère
/dev/tty0
comme un synonyme de la console virtuelle
courante. XFree86 1.3 change le propriétaire de
/dev/tty0
, mais ne le restaure qu'à la sortie.
Or dumpkeys risque de ne pas marcher si quelqu'un d'autre est
propriétaire de /dev/console
; dans ce cas,
lancer X et en sortir peut arranger les choses.
Si un programme utilisant le mode K_RAW
du clavier
se termine sans remettre le calvier en mode K_XLATE
,
alors il est très difficile de faire quoi que ce soit -
même Ctrl-Alt-Del. Cependant il est parfois possible
d'éviter d'appuyer sur Reset (et même souhaitable: vos
utilisateurs risquent de ne pas apprécier qu'on leur tue
leur Nethack, et surtout il est possible d'endommager le
système de fichiers). Les solutions simples consistent
à se loger à partir d'un autre terminal ou une autre
machine et faire kbd_mode -a
. La procédure
suivante suppose que X ne tourne pas, que l'écran est en
mode texte, que vous êtes à un prompt shell, que
Ctrl-C est le caractère d'interruption et que vous n'avez
pas un clavier trop exotique (i.e. la touche `=' est 2 touches
à droite de `0').
1ère étape: Lancer X. Appuyez sur la combinaison 2-F12-= : appuyez sur 2 puis F12 (sans lâcher 2) et puis = (sans lâcher les deux autres), le tout assez rapidement! Ça lance X. (Explication: si l'appui sur une touche produit le keycode K, alors son relâchement produit K+128. Votre shell risque de na pas apprécier ces caractères, donc on évite de les lui envoyer en ne lâchant pas les touches. `2' produit un ^C qui annule tout ce qui a été tapé avant. F12 produit un X et `=' le code entrée. Et tout ça vite fait avant que la répétition des touches ne commence...)
Votre écran est alors probablement gris, puisqu'aucun
.xinitrc
n'a été spécifié.
Cependant Ctrl-Alt-Fn marche, et vous pouvez appeler une autre
console. (Ctrl-Alt-Backspace marche aussi, mais ça restaure
l'état initial du clavier qui justement n'est pas bon.)
2ème étape: Programmer le changement de mode du
clavier. (Par exemple, avec sleep 5; kbd_mode -a
.)
3ème étape: Quitter X. Alt-Fx (souvent Alt-F7) retourne sous X, ensuite Ctrl-Alt-Backspace tue X. Dans les 5 secondes le clavier redevient utilisable.
Si vous voulez vous préparer pour cette occasion, faites
de \215A\301
(3 symboles) un alias de kbd_mode
-a
. Désormais, l'appui sur F7 en mode RAW remettra
tout en ordre.
De nombreux programmes utilisent la variable TERM
et la base de données /etc/termcap
ou
/usr/lib/terminfo/*
pour trouver quelle chaîne
de commande efface l'écran, déplace le curseur, etc.,
et parfois pour savoir quelle chaîne est envoyée par
la touche backspace, ou les touches de fonction, etc. Cette
variable est d'abord définie par le noyau (pour la console).
Généralement elle est redéfinie par
getty
, en utilisant /etc/ttytype
ou
l'argument spécifié dans /etc/inittab
.
Parfois elle est encore changée par
/etc/profile
.
Les anciens systèmes utilisent TERM=console
ou TERM=con80x25
. Les plus récents (avec
ncurses 1.8.6) utilisent la valeur plus spécifique
TERM=linux
ou TERM=linux-80x25
.
Cependant, les vieilles versions de setterm
cherchent
une valeur du type TERM=con*
et ne marchent donc pas
avec TERM=linux
.
Depuis la version 1.3.2 du noyau, la valeur par défaut
est TERM=linux
.
Si votre termcap n'a pas d'entrée `linux', il suffit d'ajouter l'alias linux dans la description de `console':
et de copier (ou faire un lien symbolique)console|con80x25|linux:\
/usr/lib/terminfo/c/console
en
/usr/lib/terminfo/l/linux
.
Il manque, dans le fichier terminfo de la console linux fourni
avec ncurses 1.8.6, la ligne: kich1=\E[2~
,
nécessaire à certains programmes. Editez ce fichier
et compilez-le avec tic
.
C'était jadis un véritable calvaire. Il fallait
convaincre individuellement chaque programme de travailler en 8
bits. Les choses ne sont pas encore idéales, mais
récemment de nombreux utilitaires GNU ont appris à
reconnaître les variables LC_CTYPE=iso_8859_1
ou
LC_CTYPE=iso-8859-1
. Essayez d'abord ça, et si
ça ne suffit pas essayez les trucs ci-dessous.
Tout d'abord, le huitième bit doit survivre au processus
d'entrée du noyau, assurez-vous-en donc avec stty cs8
-istrip -parenb
.
A. Pour emacs
, mettez les lignes
et peut-être aussi(standard-display-european t) (set-input-mode nil nil 1) (require 'iso-syntax)
dans votre(load-library "iso-insert.el") (define-key global-map [?\C-.] 8859-1-map)
$HOME/.emacs
. (Cette dernière ligne
marche dans un xterm
, en utilisant emacs
-nw
, mais il faut alors mettre
dans votreXTerm*VT100.Translations: #override\n\ Ctrl <KeyPress> . : string("\0308")
.Xresources
.) NDT: fichiers pour clavier
Qwerty, à vérifier pour azerty.
B. Pour less
, mettez
LESSCHARSET=latin1
dans l'environment.
C. Pour ls
, mettez l'option -N
. (A
priori en faisant un alias.)
D. Pour bash
(version 1.13.*), mettez
et, selon le Danish-HOWTO,set meta-flag on set convert-meta off
dans votreset output-meta on
$HOME/.inputrc
.
E. Pour tcsh
, définissez les variables:
Sisetenv LANG fr_FR (ou fr_CA, fr_CH, fr_BE...) setenv LC_CTYPE iso_8859_1
nls
est installé, les routines
correspondantes sont utilisées. Sinon tcsh
agit
en iso_8859_1, quelle que soit les valeurs données à
LANG et LC_CTYPE. voir la section NATIVE LANGUAGE SYSTEM de
tcsh(1). (d'après le Danish-HOWTO: setenv LC_CTYPE
ISO-8859-1; stty pass8
)
F. Pour flex
, donnez l'option -8
si
l'analyseur généré doit accepter les
entrées 8-bits. (Bien sur qu'il doit le faire !)
G. Pour elm
, mettez displaycharset
à ISO-8859-1
. (Danish HOWTO:
LANG=C
et LC_CTYPE=ISO-8859-1
)
H. Pour les programmes utilisant curses (comme
lynx
) David Sibley dit:
La version standard de curses utilise le huitième bit pour la vidéo inversée (voir le flag _STANDOUT défini dans/usr/include/curses.h
). Cependantncurses
semble fonctionner en 8-bits et affiche le iso-latin-8859-1 correctement.
I. Pour les programmes utilisant groff
(comme
man
), utilisez le -Tlatin1
au lieu de
-Tascii
. Les vieilles versions de man
utilisent aussi col
, et le point suivant s'applique
aussi.
J. Pout col
, assurez-vous 1) qu'il a
été corrigé et fait un
setlocale(LC_CTYPE,"");
et 2) de définir
LC_CTYPE=ISO-8859-1
dans l'environment.
K. Pour rlogin
, utilisez l'option
-8
.
L. Pour joe
,
sunsite.unc.edu:/pub/Linux/apps/editors/joe-1.0.8-linux.tar.gz
devrait marcher après édition du fichier de
configuration. J'ai aussi lu: joe
: mettez l'option
-asis
dans /usr/lib/joerc
en
première colonne.
M. Pour LaTeX:
\documentstyle[isolatin]{article}
.
Pour LaTeX2e:
\documentclass{article}\usepackage{isolatin}
ou
isolatin.sty
est disponible à ftp://ftp.vlsivie.tuwien.ac.at/pub/8bit
.
Une belle discussion sur le thème de l'ISO-8859-1 et sur
comment manipuler les caractères 8-bits est disponible dans
ftp://grasp.insa-lyon.fr/pub/faq/fr/accents
(en français). Une autre, en anglais, peut être
trouvée à
ftp://rtfm.mit.edu/pub/usenet-by-group/comp.answers/character-sets/iso-8859-1-faq
.
Encore une autre(?):ftp://ftp.vlsivie.tuwien.ac.at/pub/8bit/FAQ-ISO-8859-1
.
Depuis la version 2.1, XFree86 initialise sa keymap d'après celle de Linux, dans les limites du possible. Linux a 16 entrées par touches (une pour chaque combinaison de Shift, AltGr, Ctrl, Alt; en fait il en a même 256), alors que X n'en a que 4 (une pour chaque combinaison de Shift et Mod), il y a donc forcément des informations perdues.
D'abord X
lit le fichier Xconfig
,
où il trouve les correspondances entre les touches Control,
Alt et ScrollLock avec les codes X Meta, ModeShift, Compose,
ModeLock et ScrollLock - voir X386keybd(1), ou XFree86kbd(1).
Par défaut, c'est la colonne LeftAlt qui sert pour Mod,
sauf si CtlDroit est défini comme ModeShift ou ModeLock,
dans ce cas ce sont les entrées RightCtl qui servent pour
Mod. (Sauf si AltGr est défini comme Mod dans Xconfig,
auquel cas c'est la colonne RightAlt qui sert.) Ceci
détermine comment les 4 entrées de XFree86 sont
choisies parmi les 16 de Linux. Notons que par défaut Linux
ne fait pas la différence entre les deux touche Control ou
Shift. X
fait la dufférence.
Les touches "action" Show_Memory, Show_State, Show_Registers, Last_Console, Console_n, Scroll_Backward, Scroll_Forward, Caps_On et Boot sont ignorées, de même pour les touches mortes, NumLock, ScrollLock et Alt+code-ASCII.
Ensuite, les définitions de Xconfig
sont
utilisées. (Donc une définition de Compose dans
Xconfig
annulera celle trouvée dans la keymap
du noyau.)
Que deviennent les chaînes associées aux touches
des fonctions ? Rien, ce concept n'existe pas sous X. (Mais il est
possible de définir des chaînes associées aux
touches de fonction dans xterm
- mais elles ne doivent
pas être interceptées par le gestionnaire de
fenêtres.)
Je ne sais pas comment convaincre xterm
qu'il
devrait utiliser la keymap de X quand Alt est enfoncé. Il
semble qu'il ne réagisse qu'en fonction de sa ressource
eightBitInput
, et selon qu'elle est à vrai ou
faux, soit il met à 1 le huitième bit, soit il
génère un caractère escape devant le
caractère (comme le fait setmetamode(1) pour la
console).
Les deux touches ImprEcran/Syst et Pause/Attn sont spéciales car elles ont deux keycodes: la première produit le keycode 84 quand Alt est enfoncé et 99 sinon; la seconde 101 si Ctrl est enfoncé, 119 sinon. (Il est donc inutile d'assigner des fonctions à Alt-Keycode99 ou Ctrl-Keycode119.)
Si votre clavier a des touches étranges qui ne
génèrent aucun code sous Linux (ou
génèrent des messages du genre "unrecognized
scancode"), vous pouvez, à partir du noyau 1.1.63, utiliser
setkeycodes(1) pour dire au noyau quel keycode assigner à
ces touches. (Leur utilisation sous X sera cependant impossible.)
Une fois qu'elles ont un keycode grâce à
setkeycodes
, on peut leur associer une fonction avec
loadkeys
.
Permuter ScrollLock et Control (en suposant que vous utilisez
les keymaps 0-15; vérifiez avec dumpkeys | head
-1
)
Les permuter sous X seulement:% loadkeys keymaps 0-15 keycode 58 = Control keycode 29 = Caps_Lock %
où% xmodmap .xmodmaprc
.xmodmaprc
contient les lignes
Qu'en est-il de la numérotation des touches? Backspace a le numéro 14 sous Linux et 22 sous X... En fait, la numérotation est plus ou moins arbitraire. Le numéro sous Linux peut être visualisé avec showkey(1), et le numéro sous X avec xev(1). Souvent le numéro sous X est 8 de plus que le numéro sous Linux.remove Lock = Caps_Lock remove Control = Control_L keysym Control_L = Caps_Lock keysym Caps_Lock = Control_L add Lock = Caps_Lock add Control = Control_L
Les touches Shift, Ctrl et Alt peuvent-elles être des commutateurs stables ? Oui, en faisant:
les Control, Shift et Alt de gauche deviennent stables. Les numéros à utiliser sont donnés par showkey (et sont généralement 29 et 97 (Control), 42 et 54 (Shift), 56 et 100 (Alt)) et les fonctions possibles sont Control_Lock, Shift_Lock, Alt_Lock, ALtGr_Lock.% loadkeys keycode 29 = Control_Lock keycode 42 = Shift_Lock keycode 56 = Alt_Lock %
Et le touches `collantes'? Il n'y a pas encore eu de nouvelle version du paquetage kbd depuis leur introduction dans le noyau 1.3.33, il faut donc utiliser leurs codes hexa, par example:
rend les Shift, Ctrl et Alt de droite collantes.% loadkeys keymaps 0-15 keycode 54 = 0x0c00 keycode 97 = 0x0c02 keycode 100 = 0x0c03 %
Pour autant que je sache, il y a 6 manières de changer de mode résolution:
1. A la compilation: changer la ligne
dansSVGA_MODE= -DSVGA_MODE=NORMAL_VGA
/usr/src/linux/Makefile
.
1A. Après la compilation: utiliser rdev -v
-
une affreuse magouille, mais bon, ça marche.
2. Au démarrage: mettre vga=ask
dans le
fichier de config de lilo, qui demandera au boot le mode voulu. Une
fois décidé, remplacer par
vga=
LePlusJoliMode.
3. En cours de route: A. Utiliser la commande
resizecons
. (C'est un programme très primitif
utilisant l'ioctl VT_RESIZE.) B. Utiliser
SVGATextMode
. (C'est une version moins primitive)
4. Pas "sur la console": Sous dosemu
, ou avec
svgalib etc. on peut changer le mode vidéo de la carte
écran sans que le pilote de la console s'en
aperçoive. C'est parfois utile pour configurer
resizecons
ou SVGATextMode
:sous
dosemu
se mettre dans le mode vidéo voulu
grâce à un programme DOS utilisant ce mode, puis dans
une autre console, récupérer les paramètres de
ce mode. Il ne reste plus qu'à utiliser ces données
pour l'initialisation de resizecons
et
SVGATextMode
. Dans certains cas la carte vidéo
se retrouve dans un mode inutilisable, le moyen le plus simple pour
se sortir de là est de lancer dosemu
, laisser
le BIOS mettre un mode vidéo correct, puis tuer
dosemu
(avec kill -9
).
Récupérer svgalib et compiler le programme
restoretextmode
. Booter la machine dans tous les modes
vidéo possibles (en mettant vga=ask
dans le
fichier config de lilo), et sauvegarder les registres vidéo
dans des fichiers CxL (C=Colonnes, L=Lignes), par exemple 80x25,
132x44, etc. Placer ces fichiers dans
/usr/lib/kbd/videomodes
. Désormais
resizecons 132x44
changera le mode vidéo (et
enverra le signal SIGWINCH à tous les processus qui ont
besoin de savoir que la résolution a changé, et
chargera une nouvelle police si nécessaire).
A présent, resizecons
ne change de mode que
s'il y a assez de mémoire pour contenir à la fois
l'ancienne et la nouvelle console.
Au démarrage, le noyau met la vitesse de répétition à sa valeur maximale. Pour la plupart des claviers c'est raisonnable, mais sur certains il devient quasiment impossible d'effleurer une touche sans avoir trois fois le même caractère. Dans ce cas utiliser le programme kbdrate(8) pour changer la vitesse de répétition ou si ça ne suffit pas supprimer la section:
! set the keyboard repeat rate to the max mov ax,#0x0305 xor bx,bx ! clear bx int 0x16
/usr/src/linux/[arch/i386/]boot/setup.S
.
setterm -blank
nn règle le
délai d'extinction de l'écran à nn
minutes d'inactivité. (Avec nn = 0,
l'économiseur d'écran est
désactivé.)
L'option s
de xset(1) règle les
paramètres de l'économiseur d'écran de X.
Les modes d'économie d'énergie du moniteur peuvent
être activés/désactivés par le programme
setvesablank
donné dans les commentaires au
début du fichier
/usr/src/linux/drivers/char/vesa_blank.c
.
: Parfois les touches de curseur produisent des codes bizarres?
Quand le terminal est en mode application
, les
touches de curseur produisent les codes Esc O x et sinon Esc [ x,
avec x = A,B,C ou D. Certains programmes mettent le termnial en
mode application et si on les tue avec un kill -9
, ou
s'il se plantent, le terminal restera dans ce mode.
% echo -e '\033c'réinitialise les propriétés du terminal courant. Si on veut passer en mode application:
% echo -e '\033[?1h'et si on veut en sortir:
% echo -e '\033[?1l'
Quelques personnes ont noté des pertes de caractères tapés lors d'un accès disquette. Il semblerait que ce soit un problème avec les cartes mères Uni-486WB. (SVP envoyez moi un mail pour confirmer [Oui, j'ai le même problème], infirmer [Non, tout va bien avec ma carte Uni-486WB], ou modifier [Ma machine Xyzzy a le même problème].)
Certaines personnes ont eu des blocages aléatoires du clavier - parfois associés à une activité disque dur ou une autre entrée/sortie.
ulf@rio70.bln.sni.de (Ulf Tietz) écrit:
`J'avais ce genre de problèmes quand ma carte mère avait des réglages trop rapides. En remettant les délais (CLK, wait-states, etc.) à des valeurs plus raisonnables, tout est rentré dans l'ordre.'
bhogan@crl.com (Bill Hogan) écrit:
`Si vous avez un BIOS AMI, vous pouvez essayer de mettre le paramètre Gate A20 emulation sur 'chipset' (si cette option existe). Quand cette option était sur n'importe quoi d'autre ('fast', 'both', 'disabled') j'avais souvent des blocages du clavier.'--------------------------------------------------------------------
Additions et corrections sont les bienvenues.
Andries Brouwer - aeb@cwi.nl
(Bruno Viaris - Viaris@Yoko.ENS-Cachan.Fr pour la traduction)