OVH Cloud OVH Cloud

ZSH sans accent ni de symbole euro !

15 réponses
Avatar
FrekoDing
Bonsoir la liste.
J'ai décidé de remplacer le bon vieux bash par Zsh (j'ai vraiment été
bluffé par le systeme de completion !)
J'installe donc une version assez recente (4.3.2)
Encodage fr_FR@euro.
Impossible d'afficher le moindre accents (testé : é, è, à) ni le symbole
Euro, @ s'affiche correctement par contre.
Je précise que sous Bash, aucun soucis de cet ordre.
Tous ces caracteres s'affiche correctement dans n'importe quelle appli
(console ou X).
Testé avec aterm, rxvt, xterm...
J'ai beau epluché les forums, rien à faire.
Merci pour toute personne pouvant m'indiquer une piste ! ;-)
Bonne soirée.

10 réponses

1 2
Avatar
Stephane Chazelas
2006-12-02, 19:59(+01), FrekoDing:
Bonsoir la liste.
J'ai décidé de remplacer le bon vieux bash par Zsh (j'ai vraiment été
bluffé par le systeme de completion !)
J'installe donc une version assez recente (4.3.2)
Encodage
Impossible d'afficher le moindre accents (testé : é, è, à) ni le symbole
Euro, @ s'affiche correctement par contre.
Je précise que sous Bash, aucun soucis de cet ordre.
Tous ces caracteres s'affiche correctement dans n'importe quelle appli
(console ou X).
Testé avec aterm, rxvt, xterm...
[...]


Et qu'est-ce qui se passe quand tu tapes é ?

Que dit "locale charmap" ?

Et

ldd ºsh =zsh ${^module_path}/zsh/zle.*(N)

Essaie:

LC_ALL='' SHELL=zsh xterm

--
Stéphane

Avatar
FrekoDing
Stephane Chazelas ecrivait le 12/02/06 20:06:

Et qu'est-ce qui se passe quand tu tapes é ?


rien. la touche est comme morte. (par contre MAJ+é m'affiche bien 2)

Que dit "locale charmap" ?


% locale charmap
ANSI_X3.4-1968

ldd ºsh =zsh ${^module_path}/zsh/zle.*(N)


% ldd ºsh =zsh ${^module_path}/zsh/zle.*(N)
/bin/bash:
linux-gate.so.1 => (0xb7efa000)
libncurses.so.5 => /lib/libncurses.so.5 (0xb7ea7000)
libdl.so.2 => /lib/libdl.so.2 (0xb7ea3000)
libc.so.6 => /lib/libc.so.6 (0xb7d87000)
/lib/ld-linux.so.2 (0xb7efb000)
/bin/zsh:
linux-gate.so.1 => (0xb7fa7000)
libdl.so.2 => /lib/libdl.so.2 (0xb7f91000)
libnsl.so.1 => /lib/libnsl.so.1 (0xb7f7c000)
libncurses.so.5 => /lib/libncurses.so.5 (0xb7f3b000)
libm.so.6 => /lib/libm.so.6 (0xb7f16000)
libc.so.6 => /lib/libc.so.6 (0xb7dfa000)
/lib/ld-linux.so.2 (0xb7fa8000)
/usr/lib/zsh/4.3.2/zsh/zle.so:
linux-gate.so.1 => (0xb7ff6000)
libdl.so.2 => /lib/libdl.so.2 (0xb7faf000)
libnsl.so.1 => /lib/libnsl.so.1 (0xb7f9a000)
libncurses.so.5 => /lib/libncurses.so.5 (0xb7f59000)
libm.so.6 => /lib/libm.so.6 (0xb7f34000)
libc.so.6 => /lib/libc.so.6 (0xb7e18000)
/lib/ld-linux.so.2 (0x80000000)

LC_ALL='' SHELL=zsh xterm


Ca marche.
Bizarrement, locale me donne :
% locale
[...]
LC_ALL=""

Quelle méthode me suggerez-vous pour paramétrer proprement zsh ? (zshrc ?)
Etant sous Gentoo, mes locales sont forcées via /etc/env.d/02locale :

LANG=""
LANGUAGE=""
LC_ALL=""

Avatar
Stephane Chazelas
2006-12-02, 20:36(+01), FrekoDing:
Stephane Chazelas ecrivait le 12/02/06 20:06:

Et qu'est-ce qui se passe quand tu tapes é ?


rien. la touche est comme morte. (par contre MAJ+é m'affiche bien 2)

Que dit "locale charmap" ?


% locale charmap
ANSI_X3.4-1968


Rien d'etonnant alors. Ca c'est ASCII et ASCII n'a pas de é.

[...]
LC_ALL='' SHELL=zsh xterm


Ca marche.
Bizarrement, locale me donne :
% locale
[...]
LC_ALL=""


dans le xterm lancé par LC_ALL=... xterm? La c'est normal, c'est
ce qu'on lui a dit.

Quelle méthode me suggerez-vous pour paramétrer proprement zsh ? (zshrc ?)
Etant sous Gentoo, mes locales sont forcées via /etc/env.d/02locale :

LANG=""
LANGUAGE=""
LC_ALL=""
[...]


Je ne connais pas gentoo, mais j'ai l'impression que zsh y est
mal configuré.

Je pense que les fichiers dans /etc/env.d sont lus par
/etc/profile ou par ~/.bash_profile ce qui expliquerait pourquoi
ca marche avec bash et pas zsh.

Tu dois pouvoir faire en ln -s profile /etc/zprofile pour que
ces fichiers soient lus par zsh aussi. Attention, il faut que
ces fichiers soient compatibles avec la syntaxe zsh (en general,
c'est le cas, les gens ecrivent du zsh sans le savoir vu que sa
syntaxe est plus intuitive).

Sinon, tu peux dire a zsh de lire /etc/profile en emulation sh:

as-sh() {
emulate -L sh
eval "$@"
}

as-sh 'source /etc/profile'

À mettre dans /etc/zprofile

Si tu ne veux pas modifier la configuration du systeme, tu peux
metter ca dans ton ~/.zprofile.

(attention, .zprofile, .profile est lu une fois au login, donc
faut se relogguer pour que le changement affecte toute la
session de login).

--
Stéphane


Avatar
FrekoDing
Stephane Chazelas ecrivait le 12/03/06 01:17:

% locale charmap
ANSI_X3.4-1968


Rien d'etonnant alors. Ca c'est ASCII et ASCII n'a pas de é.


exact.

dans le xterm lancé par LC_ALL=... xterm? La c'est normal, c'est
ce qu'on lui a dit.


En suivant tes pistes, je parviens à avoir une console qui gere
correctement toutes les touches du claviers.
Soucis, je dois lancer une console depuis une autre console... Pas tres
pratique.
Je m'explique :
Dans XFCE, je cree un raccourci qui appelle aterm => aucun accent,
clavier délire du debut :s
je lance une console, puis lance aterm depuis cette console => la tout
est ok.
une astuce sur la maniere de gérer ce petit désagrement ?!

Je pense que les fichiers dans /etc/env.d sont lus par
/etc/profile ou par ~/.bash_profile ce qui expliquerait pourquoi
ca marche avec bash et pas zsh.


J'ai finalement forcé les locales via ~/.zshrc
Merci encore pour ton aide ! ;-)
@+


Avatar
Stephane Chazelas
2006-12-04, 00:08(+01), FrekoDing:
[...]
En suivant tes pistes, je parviens à avoir une console qui gere
correctement toutes les touches du claviers.
Soucis, je dois lancer une console depuis une autre console... Pas tres
pratique.
Je m'explique :
Dans XFCE, je cree un raccourci qui appelle aterm => aucun accent,
clavier délire du debut :s
je lance une console, puis lance aterm depuis cette console => la tout
est ok.
une astuce sur la maniere de gérer ce petit désagrement ?!

Je pense que les fichiers dans /etc/env.d sont lus par
/etc/profile ou par ~/.bash_profile ce qui expliquerait pourquoi
ca marche avec bash et pas zsh.


J'ai finalement forcé les locales via ~/.zshrc
Merci encore pour ton aide ! ;-)


Mauvaise idee. Ce qu'il faut, c'est que LANG soit positionné a
pour toutes les applis dans ta session, pas seulement
pour zsh. Or, .zshrc est juste le fichier de configuration de
zsh. Ce qu'il faut, c'est que ce parametrage soit pris en compte
par le processus qui lance ta session de login.

Quand tu te connectes par telnet ou sur une virtual console,
c'est ton shell de login qui s'en charge, c'est a ca que sert
~/.(z)profile, a configurer la session.

Quand tu te logues graphiquement (par xdm, gdm, kdm...), c'est
fait par le programme de lancement de session que lance
xdm/kdm/gdm... et la ca va dependre de ton environnement.

En general, ces outils essaient de lire le fichier de demarrage
du shell de login de l'utilisateur. Maintenant, peut-etre que
dans ton cas, elles ne connaissent pas zsh... As-tu un
~/.zprofile, il y a-t-il un /etc/zprofile ou /etc/zsh/zprofile?
Tu peux peut-etre commencer par la.


--
Stéphane


Avatar
FrekoDing
Stephane Chazelas ecrivait le 12/04/06 00:17:

Mauvaise idee. Ce qu'il faut, c'est que LANG soit positionné a
pour toutes les applis dans ta session, pas seulement
pour zsh. Or, .zshrc est juste le fichier de configuration de
zsh. Ce qu'il faut, c'est que ce parametrage soit pris en compte
par le processus qui lance ta session de login.


Les locales dans Gentoo sont paramétrées via des variables
d'environnement dans /etc/env.d
(le fameux fichier 02locale)
Mon environnement est quoiqu'il arrive en ce que me confirme
la commande locale.
Bizarrement, il a fallu que je force ces locales dans zshrc en plus des
variables d'environnement.

Quand tu te connectes par telnet ou sur une virtual console,
c'est ton shell de login qui s'en charge, c'est a ca que sert
~/.(z)profile, a configurer la session.


je vais me documenter : zshenv, zprofile, zshrc... ca fait beaucoup de
fichier de conf de session !
Merci zsh !

En general, ces outils essaient de lire le fichier de demarrage
du shell de login de l'utilisateur. Maintenant, peut-etre que
dans ton cas, elles ne connaissent pas zsh... As-tu un
~/.zprofile, il y a-t-il un /etc/zprofile ou /etc/zsh/zprofile?
Tu peux peut-etre commencer par la.


Aucun de ces fichiers sur mon systeme.
Je continue ma recherche.
Merci encore, bonne soirée.

Avatar
Stephane Chazelas
2006-12-04, 00:40(+01), FrekoDing:
Stephane Chazelas ecrivait le 12/04/06 00:17:

Mauvaise idee. Ce qu'il faut, c'est que LANG soit positionné a
pour toutes les applis dans ta session, pas seulement
pour zsh. Or, .zshrc est juste le fichier de configuration de
zsh. Ce qu'il faut, c'est que ce parametrage soit pris en compte
par le processus qui lance ta session de login.


Les locales dans Gentoo sont paramétrées via des variables
d'environnement dans /etc/env.d
(le fameux fichier 02locale)


Ok, mais qui lit ce fichier? Si ce ne sont que les shells bash,
ca ne va pas t'aider.

Mon environnement est quoiqu'il arrive en ce que me confirme
la commande locale.
Bizarrement, il a fallu que je force ces locales dans zshrc en plus des
variables d'environnement.
[...]


Ah ben non, tu as dit que "locale charmap" retournait ASCII.

Ca veut dire que au moins LC_CTYPE n'est par


--
Stéphane


Avatar
FrekoDing
Stephane Chazelas ecrivait le 12/04/06 00:43:

(le fameux fichier 02locale)


Ok, mais qui lit ce fichier? Si ce ne sont que les shells bash,
ca ne va pas t'aider.


Merci pour la colle ;-)
J'ai creusé la question en repartant d'une config clean.
Mes locales, en effet, ne sont pas mises à jour au demarrage.
Le comportement par defaut de Gentoo est de lire /etc/profile.env
qui contient les variables d'environnement. (basé sur Bash)

J'ai en effet un zprofile (j'avais tapoté trop vite !) que j'ai copié
dans /etc et /etc/zsh des fois que...
/etc/zsh/zprofile contient ceci :

# /etc/zsh/zprofile

[...]

[[ -e "/etc/profile.env" ]] && source /etc/profile.env

[...]

Ce qui signifie que zsh devrait sourcer /etc/profile.env, chose qu'il ne
fait pas !
Je le verifie tres simplement en le sourçant, mes locales sont
automatiquement mises à jour !
Donc comment dire à zsh de prendre en charge ce/ces fameux fichier ?
Je continue mes tests.


Avatar
Nicolas George
FrekoDing wrote in message <457375cb$0$1062$:
Donc comment dire à zsh de prendre en charge ce/ces fameux fichier ?


Comment te logues-tu ?

Avatar
Stephane Chazelas
2006-12-04, 02:13(+01), FrekoDing:
[...]
J'ai en effet un zprofile (j'avais tapoté trop vite !) que j'ai copié
dans /etc et /etc/zsh des fois que...
/etc/zsh/zprofile contient ceci :

# /etc/zsh/zprofile

[...]

[[ -e "/etc/profile.env" ]] && source /etc/profile.env

[...]

Ce qui signifie que zsh devrait sourcer /etc/profile.env, chose qu'il ne
fait pas !
Je le verifie tres simplement en le sourçant, mes locales sont
automatiquement mises à jour !
Donc comment dire à zsh de prendre en charge ce/ces fameux fichier ?
[...]


Si zsh est ton shell de login (si le 7e champ de ta ligne dans
/etc/passwd contient zsh), comme dans

chazelas:x:1000:1000:Stephane Chazelas,,,:/home/chazelas:/bin/zsh

alors zprofile sera lu par zsh, quand il est "de login".

Maintenant, peut-etre que gdm/xdm/kdm/xinit/dtlogin/Xsession, ne
lance pas un shell de login. Peut-etre que si ton shell est
bash, il sait qu'il faut aller lire /etc/profile et
~/.bash_profile, mais peut-etre qu'il ne sait pas quoi faire
quand zsh (qu'il ne supporte pas zsh). Il te faudra peut-etre
alors toi-meme rajouter un ". /etc/zprofile" et ". ~/.zprofile"
dans ton ~/.xsession|~/.xinitrc|~/.dtprofile...

Regarde ce qui se passe quand le shell est bash et essaie
d'adapter. Tu peux peut-etre rajouter dans ton /etc/profile
un "(ps -p "$$"; ps -Hejf) > /tmp/test" pour voir qui source ce
fichier quand ton shell est bash.

--
Stéphane

1 2