Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 25/01/2021, à 18:21

Hizoka

[Contourné] Changer locale de la date dans /etc/update-motd.d/script

Résumé :

Au final, le souci semble spécifique à la commande date.
En effet les autres commandes se francisent bien via des modifications de LANG, LC_*...
La solution la plus simple semble être celle-ci :
Créer une nouvelle commande /usr/bin/dateFR (qu'il faut rendre exécutable) :

#!/bin/bash
LC_TIME=fr_FR.UTF-8 date "${@}"

et l'appeler depuis le script.
En effet, écrire son contenu directement dans le script ne change pas la locale...

L'autre solution (si pas droits sudo) serait de faire un truc du genre :

case "$(date -d 1984-10-12 +%a)" in
    Sun*) jrs='Dim.' ;;
    Mon*) jrs='Lun.' ;;
    Tue*) jrs='Mar.' ;;
    Wed*) jrs='Mer.' ;;
    Thu*) jrs='Jeu.' ;;
    Fri*) jrs='Ven.' ;;
    Sat*) jrs='Sam.' ;;
esac

date -d "1984-10-12" +"${jrs} %d/%m"



Bonsoir,

je suis en train de me créer ma petite version perso du script d'arrivée sur un serveur en ssh.

Tout fonctionne bien... ou presque big_smile

Je ne comprends pas du tout le fonctionnement des langues des commandes que j'appelle.

Pour faire simple, en mettant les commandes :

date
who

j'obtiens :

Mon Jan 25 18:13:33 CET 2021 
hizo pts/0        Jan 25 17:38 (XX.XX.XX.XX)

date est en anglais et who en français.

j'ai testé de jouer avec les variables LANG et LANGUAGE mais aucune différence...

Quand je lance ces commande une fois arrivé sur le terminal distant, c'est l'inverse, date est en français mais pas who.
Par contre les variables LANG me permettent d'obtenir ce que je veux.

Pour le coup je voudrais :
date en FR (pour pouvoir utiliser %a et %A)
who en US (plus facile pour gérer mon script)
dans mon script /etc/update-motd.d/00-hizo

Une idée ?

Merci bien

EDIT : Précision :
A la connexion ssh :

hizo pts/0        Jan 25 17:38 (XX.XX.XX.XX)

Une fois dans le terminal :

hizo-j pts/0        2021-01-25 17:38 (XX.XX.XX.XX)

Mais si je fais :

LANG=fr who

Alors j'ai le même format que lors de la connexion ssh.
Je voudrais le format 2021-01-25 17:38.

Dernière modification par Hizoka (Le 26/01/2021, à 12:31)


KDE Neon 64bits
Tous mes softs (MKVExtractorQt, HizoSelect, HizoProgress, Qtesseract, Keneric, Services menus...) sont sur github

Hors ligne

#2 Le 25/01/2021, à 19:15

bruno

Re : [Contourné] Changer locale de la date dans /etc/update-motd.d/script

Tu fais erreur les deux premiers retours, de date et who, sont en anglais.

Pour remettre en français c'est plutôt :

LANG=fr-FR.UTF-8

#3 Le 25/01/2021, à 19:33

Hizoka

Re : [Contourné] Changer locale de la date dans /etc/update-motd.d/script

En effet, les 2 sont en anglais.

Malheureusement, même avec ta variable, pas de changement.


KDE Neon 64bits
Tous mes softs (MKVExtractorQt, HizoSelect, HizoProgress, Qtesseract, Keneric, Services menus...) sont sur github

Hors ligne

#4 Le 26/01/2021, à 08:32

bruno

Re : [Contourné] Changer locale de la date dans /etc/update-motd.d/script

Cela devrait :

[bruno@aboulafia:~]$ LANG=C; who
bruno    tty1         Jan 26 08:14 (:0)

[bruno@aboulafia:~]$ LANG=fr_FR.UTF-8; who
bruno    tty1         2021-01-26 08:14 (:0)

Quoiqu'il en soit cela ne me paraît pas une bonne idée du tout de jouer avec la variable d'environnement LANG  juste pour mettre en forme des dates. La commande date fait cela parfaitement, exemple :

$ date +'%F %R' --date="Jan 25 17:38"
2021-01-25 17:38

Dernière modification par bruno (Le 26/01/2021, à 08:32)

#5 Le 26/01/2021, à 09:14

Hizoka

Re : [Contourné] Changer locale de la date dans /etc/update-motd.d/script

C'est justement le problème, c'est que le comportement n'est pas le même entre le terminal et le script d'arrivée.
Ça passe avec who mais pas avec date :

LANG=fr_FR.UTF-8 who
who
LANG=fr-FR.UTF-8 date
date

à la connexion j'ai :

hizo pts/0        2021-01-26 09:09 (...)
hizo pts/0        Jan 26 09:09 (...)
Tue Jan 26 09:11:19 CET 2021
Tue Jan 26 09:11:19 CET 2021

Merci, je n'avais testé qu'avec date alors que ça semble venir de cette commande...


C'est ce que j'ai fait avec date mais 2 problèmes :
- Il déduit que c'est 2021 même si c'est dans le futur.

date +'%F %R' --date="Jan 28 17:38"
2021-01-28 17:38

- Je voulais utiliser %a et %A pour afficher le jour de la semaine.
Du coup, je dois faire une fonction pour franciser le résultat...

EDIT :
J'ai même testé :

cp /usr/share/zoneinfo/Europe/Paris /etc/localtime

Quand je fais la commande suivante dans le script :

localectl status
   System Locale: LANG=fr_FR.UTF-8
       VC Keymap: n/a
      X11 Layout: us
       X11 Model: pc105

locale
LANG=
LANGUAGE=
LC_CTYPE="POSIX"
LC_NUMERIC="POSIX"
LC_TIME="POSIX"
LC_COLLATE="POSIX"
LC_MONETARY="POSIX"
LC_MESSAGES="POSIX"
LC_PAPER="POSIX"
LC_NAME="POSIX"
LC_ADDRESS="POSIX"
LC_TELEPHONE="POSIX"
LC_MEASUREMENT="POSIX"
LC_IDENTIFICATION="POSIX"
LC_ALL=

c'est étonnant...

On voit bien que c'est en anglais :

locale -k LC_TIME

abday="Sun;Mon;Tue;Wed;Thu;Fri;Sat"
day="Sunday;Monday;Tuesday;Wednesday;Thursday;Friday;Saturday"
abmon="Jan;Feb;Mar;Apr;May;Jun;Jul;Aug;Sep;Oct;Nov;Dec"
mon="January;February;March;April;May;June;July;August;September;October;November;December"
am_pm="AM;PM"
d_t_fmt="%a %b %e %H:%M:%S %Y"
d_fmt="%m/%d/%y"
t_fmt="%H:%M:%S"
t_fmt_ampm="%I:%M:%S %p"
era=
era_year=""
era_d_fmt=""
alt_digits=
era_d_t_fmt=""
era_t_fmt=""
time-era-num-entries=0
time-era-entries=""
week-ndays=7
week-1stday=19971130
week-1stweek=4
first_weekday=1
first_workday=2
cal_direction=1
timezone=""
date_fmt="%a %b %e %H:%M:%S %Z %Y"
time-codeset="ANSI_X3.4-1968"
alt_mon="January;February;March;April;May;June;July;August;September;October;November;December"
ab_alt_mon="Jan;Feb;Mar;Apr;May;Jun;Jul;Aug;Sep;Oct;Nov;Dec"

Même avec un export

export LC_ALL=fr-FR.UTF-8

locale -k LC_TIME # Reste en anglais

locale
LANG=
LANGUAGE=
LC_CTYPE="fr-FR.UTF-8"
LC_NUMERIC="fr-FR.UTF-8"
LC_TIME="fr-FR.UTF-8"
LC_COLLATE="fr-FR.UTF-8"
LC_MONETARY="fr-FR.UTF-8"
LC_MESSAGES="fr-FR.UTF-8"
LC_PAPER="fr-FR.UTF-8"
LC_NAME="fr-FR.UTF-8"
LC_ADDRESS="fr-FR.UTF-8"
LC_TELEPHONE="fr-FR.UTF-8"
LC_MEASUREMENT="fr-FR.UTF-8"
LC_IDENTIFICATION="fr-FR.UTF-8"
LC_ALL=fr-FR.UTF-8

Pas de changement avec :

localectl set-locale LC_TIME=fr-FR.UTF-8
update-locale LC_TIME=fr-FR.UTF-8

j'ai même essayé de modifier $day et $abday lol

PS : Oui c'est une prise de tête pour comprendre ce qu'il se passe.
Car je peux faire un case sur le nom du jour.

SOLUTION :
Il faut hacker la matrice du serveur via un bond dans le futur !
Ou simplement en créant une nouvelle commande /usr/bin/dateFR :

#!/bin/bash
LC_TIME=fr_FR.UTF-8 date "${@}"

puis un petit

chmod +x /usr/bin/dateFR

et quand je l'appelle depuis mon script d'arrivée, j'ai bien une date en français smile

Dernière modification par Hizoka (Le 26/01/2021, à 10:42)


KDE Neon 64bits
Tous mes softs (MKVExtractorQt, HizoSelect, HizoProgress, Qtesseract, Keneric, Services menus...) sont sur github

Hors ligne

#6 Le 26/01/2021, à 11:13

bruno

Re : [Contourné] Changer locale de la date dans /etc/update-motd.d/script

Évidemment le comportement n'est pas le même dans une console où tu es connecté en tant qu'utilisateur lambda et un script update-motd exécuté dans uns shell non connecté, non interactif (non-login). Avec ce dernier les variables d’environnement (LANG, PATH, etc.) ne sont pas définies, donc rien d'étonant à voir leur valeur par défaut "POSIX".

Si je comprends bien ce qui te pose problème c'est que la commande who n'affiche pas l'année avec les locales par défaut.
Je ne sais pas résoudre ce problème avec who. Il y a peut-être un moyen de filtrer la sortie de la commande ou utiliser d'autres outils comme last -F qui affichent la date complète.

Une autre solution (qui ne me plaît pas) est effectivement de modifier la variable de langue temporairement dans le scriipt motd, exemple :

export LC_ALL=fr_FR.UTF-8
users_logged=$(who)
echo "Users logged: $users_logged"
unset LC_ALL

#7 Le 26/01/2021, à 12:30

Hizoka

Re : [Contourné] Changer locale de la date dans /etc/update-motd.d/script

Ce qui ne fonctionne pas pour date qui me sert à plein d'autres trucs.

Et quitte à modifier la langue, autant ne le faire que pour la commande qui en a besoin :

users_logged=$(LC_ALL=fr_FR.UTF-8 who)

Je n'ai réussi à contourner le problème qu'en créant une commande dateFR.

Oui ce n'est pas étonnant que ce soit POSIX mais il y a en même temps System Locale: LANG=fr_FR.UTF-8.

Dernière modification par Hizoka (Le 26/01/2021, à 12:32)


KDE Neon 64bits
Tous mes softs (MKVExtractorQt, HizoSelect, HizoProgress, Qtesseract, Keneric, Services menus...) sont sur github

Hors ligne