Aller au contenu principal
Bienvenue sur Forum Puppy Linux - Toutou Linux - Astuces - Aides !
Lorsque vous n'êtes pas connectés vous pouvez visiter la totalité du forum mais avec certaines restrictions : cf le règlement pour les visiteurs non connectés. Vous êtes chaleureusement conviés à vous inscrire afin de bénéficier de toutes les fonctionnalités du forum et de participer aux échanges.
Messages récents
21
Fourre-tout ! / antiX 26 full Stephen Kapos
Dernier message par Rantanplan -
.Bonjour toutes et tous,

Chez antiX, il est une tradition de baptiser les distributions d'une personne qui résiste.
La version 26 perpétue cette tradition avec Stephen Kapos, survivant de la shoah.
Pas d'entrée dans fr.wikipedia.org, ni le wikipédia anglais, pas plus que le hongrois.
Pour connaître le bonhomme, il faut passer par son moteur de recherches préféré, puis faire son opinion.

Ceci dit, antiX-26 peut être obtenu depuis la page antixlinux.com ou depuis https://sourceforge.net/projects/antix-linux/files/Final/antiX-26/
Choisissez la version 32 ou 64 bits et la saveur qui vous convient (full ou core).

Pour moi, pas de mystère, c'est du 32 bits et la saveur full, soit une ISO de 2 Go.
Installation frugale, comme la précédente version.
La machine est toujours un Packard-Bell Easynote avec 1 Go de RAM et 2 Go de swap.
Un µprocesseur qui va lentement le matin et pas vite l'après-midi.
Tout ça pour dire que le démarrage est poussif, mais c'est mon matériel.

Déjà, ça parle une langue que je comprends : le français.
Côté applis, on est bien servi :
  • LibreOffice (sans le gestionnaire de base de données) en version récente puisqu'il s'agit de la 26.2.1.2. ;
  • Firefox ESR 140.8.0 et Links 2 comme navigateur ;
  • celluloid, mpv, asunder, xmms, xine entre autres pour le multimédia ;
  • muPDF et evince pour les pdf ;
  • sdraw et mtpaint entre autres pour travailler les images ;
  • mirage et feh entre autres pour regarder ses photos ;
  • plusieurs gestionnaires de réseau pour se connecter à internet... ;
  • des utilitaires pour le partage de fichiers ;
  • la dent bleue n'est pas oubliée ;
  • le numériseur de doc.  est prévu ;
  • un centre de contrôles bien doté ;
  • claws-mail, transmission, gFtp, HexChat pour la partie internet ;
  • gpg[2] version 2.4.7  ;
  • cherrytree pour la prise de notes ;
  • yad est là ainsi que dialog (mais pas Xdialog) et gtkdialog ;
  • ufw comme pare-feu activé à la demande ;
  • en option firejail qui installe le paquet firetools à la demande ;
  • etc.

On peut regretter que sqlite3 n'ait pas été inclus compte tenu du volume de l'ISO et ce d'autant plus qu'il n'y a pas de gestionnaire de base de données. Qu'une version plus récente de xmessage n'ait pas été installée.

antiX-26 peut être personnalisé à loisir, cependant soyez attentive ou tif à ce que vous faites :).

Billet écrit depuis antix-26 Full Stephen Kapos.

Amusez-vous bien !


PS : je ne vais plus sur le site officiel d'antiX (y compris le forum) qui s'est placé sous la férule de clou-d'flair dont les agissements sont contraires aux directives européennes et notamment au RGPD.
Vous ne direz plus que vous ne saviez pas. Na ! :P
22
Sécurité / Re : SuperGenPass de Polo l'asticot
Dernier message par Rantanplan -
Olà l'As Ticot,

merci pour tes explications pour les cancres : j'en avais besoin.

Alors donc youpi si ça fonctionne.

Peut-être faudrait-il une invite dans le cas où il n'y a pas au moins un paramètre.
Qu'en dis-tu ?
Je fais partie des distraits qui oublient vite.

Je vais faire un ch'ti artik pour annoncer la sortie du dernier antiX et mon avis de chien le plus bête de l'ouest (de la France).

À plus camarade du coing.
23
Sécurité / Re : SuperGenPass de Polo l'asticot
Dernier message par Polo l’asticot -
@Rantanplan‍ 

En enlevant les " des lignes susnommées, cela fonctionne toujours chez moi. Le code est donc compatible Bash 2013 ?
Dommage qu'on ne puisse pas s'enlever les guillemets et rajeunir de treize ans !

Nouvelle explication pour les étourdis qui n'ont pas tout enregistré. Pour le deuxième test du sieur Rantanplan :

pXOT → troisième majuscule dans la chaîne : on remplace le T par un caractère spécial.
pXO!

pXOT52Xo → deuxième minuscule dans la chaîne : on remplace le o par un caractère spécial.
pXO!52X<

pXOT52Xon4O1 → quatrième chiffre dans la chaîne : on remplace le 1 par un caractère spécial.
pXO!52X<n4O(

3 substitutions ont été faites : on garde la suite sans changements.

pXOT52Xon4O1NSUK
pXO!52X<n4O(NSUK

Cela m'étonne un peu, mais cela semble fonctionner du premier coup. J'obtiens exactement la même chose que toi pour les deux exemples. Avec les trois chaînes de caractères spéciaux tirées au hasard et un mot de passe général solide, cela devrait sérieusement compliquer la tâche d'un hackeur.

Merci à toi pour ces essais.
J'espère que ton coin de coing est aussi frais que mon coin de coing. Pas coin-coin parce que je me méfie des canards.

Polo l'asticot
24
Bureautique - Comptabilité / SQLite3 et les conteneurs .zip
Dernier message par Rantanplan -
Bonjour les addictos,

un membre du forum qui connaît mon inclinaison pour les base de données (ou BDD) signalait à ma curiosité un article en pas français, et je l'en remercie encore une fois ici.
Ce membre me taquinait, car je ne l'avais pas traduit.
C'est chose faite grâce à un traducteur un ligne dont je tairais le nom (non, ce n'est pas deepl.com).

Voici cet article dont la source peut être consultée sur https://distrowatch.com/weekly.php?issue=20251006#tips :
Citer
Utiliser SQLite pour gérer des fichiers ZIP

SQLite est un logiciel de base de données incroyablement portable, puissant et léger qui fonctionne partout, des serveurs aux smartphones. Ce qui rend SQLite si populaire, c'est qu'il fonctionne avec des fichiers de base de données autonomes qui peuvent être stockés ou transférés n'importe où. De nombreuses technologies de base de données utilisent plusieurs fichiers et nécessitent la mise en place de services réseau pour permettre aux clients d'accéder aux bases de données à distance. Contrairement à cette approche traditionnelle, une base de données SQLite est stockée dans un seul fichier qui peut exister n'importe où et être accessible sans démon dédié. Le projet SQLite fournit des bibliothèques et des outils en ligne de commande pour travailler avec ces fichiers de base de données, ce qui facilite l'accès et le partage de la base de données sans mettre en place d'infrastructure supplémentaire. Cela rend SQLite idéal pour une utilisation dans les applications de bureau, les applications téléphoniques et les petits sites web. Il y a de fortes chances que le navigateur web que vous utilisez pour lire cet article utilise des bibliothèques SQLite et une base de données SQLite.

Le site web de SQLite explique ensuite son logiciel comme suit :

SQLite est une bibliothèque en langage C qui implémente un moteur de base de données SQL petit, rapide, autonome, très fiable et complet. SQLite est le moteur de base de données le plus utilisé dans le monde. SQLite est intégré dans tous les téléphones mobiles et la plupart des ordinateurs, et est inclus dans d'innombrables autres applications que les gens utilisent tous les jours.

Aujourd'hui, je veux parler d'une fonctionnalité de SQLite qui est moins connue, mais étonnamment flexible et pratique dans certaines situations. Plus précisément, je veux parler de la façon dont l'outil en ligne de commande de SQLite peut fonctionner, non seulement avec des fichiers de base de données, mais aussi avec des fichiers ZIP.

Habituellement, lorsque nous travaillons avec des archives ZIP, c'est soit via un simple outil en ligne de commande avec une syntaxe cryptique qui crée et extrait les fichiers ZIP, soit via une application de bureau dédiée à cette tâche. SQLite offre une troisième option : un outil en ligne de commande qui peut utiliser des instructions SQL pour créer des archives, afficher des informations sur les archives et extraire des fichiers.

Je veux partager quelques exemples de SQLite en action, en travaillant avec une archive ZIP simple pour montrer à quel point SQLite est agréablement flexible. De plus, je trouve que l'utilisation des commandes de base de données SQL pour gérer un fichier ZIP est agréablement étrange et que ce genre de chose est tout simplement amusant.

Tout d'abord, créons une archive ZIP super simple à l'ancienne, via la ligne de commande. Je commence par créer quatre fichiers texte : abc, def, xyz et mnop :

$ echo "Line one" > abc; echo "Line two" > def; echo "Line three" > xyz; echo "Line four" > mnop

Maintenant que nous avons quatre fichiers texte, chacun avec une ligne de texte, nous pouvons créer notre archive ZIP et y stocker les trois premiers fichiers texte. Cela se fait avec la commande zip, comme son nom l'indique :

$ zip myarchive.zip abc def xyz
      adding: abc (stored 0%)
      adding: def (stored 0%)
      adding: xyz (stored 0%)
     
Nous pouvons confirmer que l'archive a été créée avec succès en listant son contenu dans le terminal avec le programme unzip :

$ unzip -l myarchive.zip
Archive: myarchive.zip
Length Date Time Name
--------- ---------- ----- ----
9 2025-08-12 15:21 abc
9 2025-08-12 15:21 def
11 2025-08-12 15:21 xyz

Maintenant que nous avons notre petite archive ZIP, explorons comment SQLite peut nous aider à parcourir et gérer cette archive. Nous pouvons le faire en lançant le programme sqlite et en lui passant le nom de notre fichier ZIP :

$ sqlite3 myarchive.zip
SQLite version 3.46.1 2024-08-13 09:16:08
Enter ".help" for usage hints.
sqlite>

Maintenant, le programme SQLite a ouvert notre archive ZIP et nous pouvons commencer à explorer. Comme nous allons traiter l'archive comme une base de données, SQLite attribue aux différentes fonctionnalités du fichier des noms de champs de base de données, comme nous pouvons le voir ici en utilisant la commande ".schema" :

sqlite> .schema
    CREATE VIRTUAL TABLE zip USING zipfile('myarchive.zip')
    /* zip(name,mode,mtime,sz,rawdata,data,method) */;
   
Comme on peut le voir à partir du résultat de notre commande ".schema", chaque entrée (fichier ou dossier) dans l'archive a un nom, un mode (type de fichier et permissions), une date de modification et une taille. Chaque entrée a aussi des rawdata (les informations compressées), data (les informations décompressées) et method (le niveau de compression). La plupart du temps, nous serons probablement intéressés seulement par les champs nom, taille et données.

Disons que nous voulons voir une liste des fichiers dans l'archive avec la taille décompressée de chaque fichier. Nous pouvons voir tous les fichiers dans l'archive avec leurs tailles (en octets) en utilisant une commande "select" :

sqlite> SELECT name, sz FROM zip;
abc|9
def|9
xyz|11

Dans la commande ci-dessus, nous demandons à SQLite de nous montrer (select) le nom et la taille de chaque fichier de notre archive ZIP. Le résultat est une liste des trois fichiers que nous avons placés initialement dans l'archive, avec la taille décompressée de chaque fichier.

Ensuite, que faire si nous voulons voir le contenu d’un seul de nos fichiers texte sans l’extraire de l’archive ? Nous pouvons le faire avec une autre commande "select", en indiquant que nous voulons voir les données contenues dans un fichier. Dans ce cas, nous allons demander le contenu du deuxième fichier, def :

sqlite> SELECT data FROM zip WHERE name='def';
Line two

Le résultat est le texte "Line two" que nous avions initialement mis dans le fichier texte.

Peut-être que nous voulons supprimer un des fichiers de notre archive. Dans ce cas, nous pouvons utiliser la commande SQL "delete" pour l’effacer de notre fichier ZIP. Dans cet exemple, nous supprimons le fichier def de l’archive avec la commande "delete" puis nous vérifions qu’il a disparu avec une commande "select" :

sqlite> DELETE FROM zip WHERE name='def';
sqlite> SELECT name FROM zip;
abc
xyz

Comme nous pouvons le voir dans la liste des noms ci-dessus, le fichier def a été supprimé avec succès.

Je voudrais mentionner à ce moment que les commandes SQL ne sont pas sensibles à la casse. Cela signifie que la commande "SELECT name FROM zip;" et "select name from zip;" fonctionneront toutes les deux. Les mots-clés comme "select" et "delete" sont souvent affichés en majuscules dans les exemples pour rendre les différents éléments de la commande plus visibles.

Ensuite, que faire si nous voulons ajouter un nouveau fichier à notre archive ? Nous pouvons le faire en spécifiant le nom du nouveau fichier et son contenu. Cela signifie que nous pouvons inventer le contenu sur le moment, mais il est plus probable que ce que nous voulions faire est de lire les données d'un fichier. Nous pouvons charger un fichier dans l'archive en utilisant la fonction "readfile". Ici, nous lisons le fichier mnop en mémoire et l'insérons dans l'archive :

sqlite> INSERT INTO zip(name, data) values('mnop', readfile('mnop'));

La commande ci-dessus indique à SQLite que nous voulons « insérer » un nouveau fichier. Nous lui faisons savoir que nous allons fournir le nom et les données pour la nouvelle entrée dans l'archive. Ensuite, nous devons fournir deux valeurs, le nom du nouveau fichier et son contenu. Le contenu de mnop est chargé en utilisant la fonction "readfile". Nous pouvons confirmer que la nouvelle entrée a été ajoutée en utilisant à nouveau "select" :

sqlite> select name, sz from zip;
abc|9
xyz|11
mnop|10

Nous pouvons voir le contenu de la dernière entrée en demandant le champ data de l'archive stockée sous un nom de fichier spécifique :

sqlite> select data from zip where name='mnop';
Line four

Comme nous pouvons le voir ici, le fichier mnop contenait une ligne de texte, qui lit "Line four".

Une des grandes fonctionnalités de SQLite est que l'outil en ligne de commande peut être utilisé comme un client de base de données classique, comme montré ci-dessus où nous lui donnons des commandes de manière interactive. L'outil en ligne de commande peut aussi exécuter une seule requête sur une base de données ou une archive spécifiée. Cela nous permet d'utiliser SQLite dans des scripts non interactifs ou d'extraire des informations d'une archive et de les exporter ailleurs. Par exemple, si nous voulons extraire le contenu du fichier abc de myarchive.zip et le verser dans un nouveau fichier texte, nous pouvons le faire depuis la ligne de commande, en spécifiant le nom de l'archive et la commande SQL que nous voulons exécuter :

$ sqlite3 myarchive.zip "select data from zip where name='abc'" > newabc.txt
$ cat newabc.txt
Line one

Dans l'exemple ci-dessus, nous utilisons la commande sqlite3 pour exécuter une seule commande SQL sur le fichier myarchive.zip. Cela va afficher le contenu (données) du fichier texte abc stocké dans notre archive. Nous demandons ensuite à notre shell de verser le texte dans un nouveau fichier appelé newabc.txt. Sur la deuxième ligne, nous affichons le contenu du nouveau fichier pour confirmer que cela a fonctionné.

Cette fonctionnalité en ligne de commande nous permet de réaliser des requêtes rapides, soit de manière interactive, soit depuis un script. Par exemple, la commande suivante nous indiquera combien de fichiers se trouvent dans une archive. Cela s'obtient en utilisant la fonction SQL "count" :

$ sqlite3 large-archive.zip "select count(name) from zip;"
    240
   
On peut voir qu'il y a 240 fichiers et répertoires dans l'archive ZIP large-archive.zip. Alternativement, nous pourrions obtenir la taille totale (décompressée) de tous les fichiers dans l'archive en utilisant cette commande pour obtenir la somme de la taille de chaque fichier en octets :

$ sqlite3 large-archive.zip "select sum(sz) from zip;"
235771456

Certains pourraient débattre pour savoir si utiliser SQLite est plus pratique que d'autres outils, comme zip et unzip. Les outils en ligne de commande standard (et les applications de bureau) pour travailler avec les archives sont efficaces et pratiques. Cependant, quand il s'agit de commandes portables et scriptables qui peuvent être utilisées pour interroger ou manipuler le contenu des archives, il est difficile de battre SQLite en termes de formatage fiable et de lisibilité de ses commandes.
Je retiens au moins une chose : c'est que SQLite est presque PARTOUT, selon l'auteur de l'article.
C'est comme monsieur Jourdain qui prosait sans le savoir.

J'ai voulu essayé, mais avec la version 3.7.17 2013-05-20 00:56:22 de SQLite impossible d'analyser le conteneur .zip.

Bonne journée les aminches.
25
Sécurité / Re : SuperGenPass de Polo l'asticot
Dernier message par Rantanplan -
Polo,

chez moi, Toutou n'aime pas la ligne 70 et notamment "(($i + 1))".

En fait, c'est le caractère " qu'il pose problème.

Lorsque je lance le script après avoir retiré les " aux lignes 70, 63 et 56, j'obtiens :
root@pctoutou ~ 
# ./genmdp.sh
ybUTPjlHlf5l2LR1
xclip: -r: No such file or directory
y(UT!j?Hlf5l2LR1
Le mot de passe est copié dans le presse-papiers de X

Pas sûr que ce soit le bon résultat.

et avec :
# ./genmdp.sh https://augras.eu/puppy_forum
pXOT52Xon4O1NSUK
xclip: -r: No such file or directory
pXO!52X<n4O(NSUK
Le mot de passe est copié dans le presse-papiers de X


Dis-moi, si tu obtiens idem pareil également la même choz itou, stp.

Apluche dans le cognassier du coin d'ton coing :)
29
Scripts / Comment obtenir des prévisions météorologiques grâce à Météo-France ?
Dernier message par Polo l’asticot -
Comme dit arpinux : « Pour connaître la météo du jour, ouvrez votre fenêtre ! »
Moi je dis, si on n'est pas sûr, on peut utiliser son ordinateur…

Le problème
Pour connaître le temps à venir, l'auteur a d'abord essayé de télécharger la page de Météo-France correspondant à son village pour ensuite en extraire les renseignements qui lui semblaient utiles. Malheureusement, ces données se téléchargent une fois sur deux et, certains jours, le site ne veut rien savoir : pas de météo pour l'auteur aujourd'hui. C'est ballot ! (En plus, il ne semble pas légal de s'approprier des données du site sans autorisation.)

Il a ensuite lu la documentation correspondant aux API proposées par le service public. Mais il n'a pas compris grand-chose. Il veut juste une prévision de base, pas l'évolution à la demi-heure d'une quarantaine de facteurs. Pas envie, non plus, d'apprendre à programmer.

Il est tombé ensuite par hasard sur le site https://open-meteo.com/ en pas français comme dirait quelqu'un. Ce site utilise les services météo d'une quinzaine de pays pour fournir gratuitement des renseignements « unifiés ». Oh, miracle, il y a Météo-France dans le panel. Et il suffit de cocher quelques cases pour avoir un résultat. Un service pour les nuls, c'est ce qu'il nous faut.

Avertissement
Pour la suite, on a besoin d'une connexion Internet, des utilitaires curl et jq et d'un minimum de curiosité.

Mise en pratique
On a d'abord besoin de sa localisation (latitude, longitude).
Sur https://www.coordonnees-gps.fr/, on cherche son adresse, par exemple « Place de la Mairie, 81190 Mirandol-Bourgnounac ».
Pourquoi cette adresse ? Parce que ce nom sonne super bien avec l'accent du Sud-ouest.
Donc Mirandol-Bourgnounac, c'est 44.1432866 pour la latitude et 2.1686849 pour la longitude. (C'est en français avec un séparateur anglais pour les décimales).
Petite remarque : le modèle de Météo-France le plus élaboré a une résolution de 1,5 km. Si on n'habite pas en plaine, il est important de ne pas utiliser une ville située à 10 km de son lieu d'habitation, mais de fournir une localisation précise.

On va ensuite sur le site en choisissant le modèle Météo-France soit : https://open-meteo.com/en/docs/meteofrance-api
Après quelques secondes de réflexion, Open-meteo crée une page par défaut avec l'évolution de la température prévue par le modèle AROME sur quatre jours avec un pas d'une heure. On change la latitude et la longitude pour celles de son lieu d'habitation. Pour Time Zone, on choisit Automatically detect.
On décoche la température qui se trouve dans les prévisions horaires.
On descend plus bas sur Current Weather (Météo du jour) et on coche ce qu'on désire obtenir. Par exemple on coche Temperature (température), Wind Speed (vitesse du vent), Wind Guts (rafales), Rain (pluie). (Ceux qui ont du mal avec l'anglais peuvent s'aider du site https://www.deepl.com/fr/translator qui est très performant.)
Plus bas sur la page du site à API Response on peut copier la requête dans le champ API URL soit pour cet exemple :
https://api.open-meteo.com/v1/forecast?latitude=44.1432866&longitude=2.1686849&models=meteofrance_seamless¤t=temperature_2m,wind_speed_10m,wind_gusts_10m,rain&timezone=auto&forecast_days=4
Le service est gratuit, mais on doit se limiter à moins de 10 000 requêtes par jour. Sachant que les paramètres sont actualisés toutes les heures, cela fait vingt-quatre données différentes dans la journée. Avec quatre paramètres, on reste en dessous de cent. Il y a de la marge.

On se lance ?
Dans un terminal, on tape :
curl -s --retry 5 --retry-max-time 30 --url  "https://api.open-meteo.com/v1/forecast?latitude=44.1432866&longitude=2.1686849&models=meteofrance_seamless¤t=temperature_2m,wind_speed_10m,wind_gusts_10m,rain&timezone=auto&forecast_days=4"

On récupère presque immédiatement :
{"latitude":44.14,"longitude":2.17,"generationtime_ms":0.10287761688232422,"utc_offset_seconds":7200,"timezone":"Europe/Paris","timezone_abbreviation":"GMT+2","elevation":402.0,"current_units":{"time":"iso8601","interval":"seconds","temperature_2m":"°C","wind_speed_10m":"km/h","wind_gusts_10m":"km/h","rain":"mm"},"current":{"time":"2026-06-10T09:30","interval":900,"temperature_2m":14.8,"wind_speed_10m":13.5,"wind_gusts_10m":26.6,"rain":0.00}}

Magie de l'informatique : qui se serait douté que Mirandol-Bourgnounac était situé pile-poil à 402 mètres au-dessus du niveau de la mer ?
Plus sérieusement, on voit qu'on est bien à l'heure de Paris, en France (GMT+2 en été) et qu'on utilise des unités françaises (sauf le séparateur décimal qui n'est toujours pas une virgule, coquins d'anglophones).
L'affichage reste un peu brouillon.
Et si on veut afficher seulement la température ?
curl -s --retry 5 --retry-max-time 30 --url  "https://api.open-meteo.com/v1/forecast?latitude=44.1432866&longitude=2.1686849&models=meteofrance_seamless¤t=temperature_2m,wind_speed_10m,wind_gusts_10m,rain&timezone=auto&forecast_days=4" | jq -r '.current.temperature_2m'
On obtient :
14.8

Pas trop mal, mais on peut remplacer le point par une virgule (j'y tiens) ?
curl -s --retry 5 --retry-max-time 30 --url  "https://api.open-meteo.com/v1/forecast?latitude=44.1432866&longitude=2.1686849&models=meteofrance_seamless¤t=temperature_2m,wind_speed_10m,wind_gusts_10m,rain&timezone=auto&forecast_days=4" | jq -r '.current.temperature_2m' | sed 's/./,/g'
On obtient enfin :
14,8 (Pas très chaud pour un mois de juin à 9h 30.)

Une petite synthèse
On va faire un petit script Bash pour afficher nos données proprement.
#!/usr/bin/env bash
#
# Affichage de la météo de Mirandol-Bourgnounac
# Quand on n'est pas Mirandolais,  on change latitude et longitude
# dans la requête et on adapte éventuellement les données à récupérer.

brut=$( curl -s --retry 5 --retry-max-time 30 --url  "https://api.open-meteo.com/v1/forecast?latitude=44.1432866&longitude=2.1686849&models=meteofrance_seamless¤t=temperature_2m,wind_speed_10m,wind_gusts_10m,rain&timezone=auto&forecast_days=4" )

echo "Météo du jour pour Mirandol-Bourgnounac"
echo
echo "Température        : "$( echo $brut | jq -r '.current.temperature_2m' | sed 's/./,/g' )"°C"
echo "Vitesse du vent    : "$( echo $brut | jq -r '.current.wind_speed_10m' | sed 's/./,/g' )" km/h"
echo "Avec des rafales à : "$( echo $brut | jq -r '.current.wind_gusts_10m' | sed 's/./,/g' )" km/h"
pluie=$( echo $brut | jq -r '.current.rain' | sed 's/./,/g' )
if [ "$pluie" == "0" ]
 then
 pluie="   Pas de pluie"; echo $pluie
 else
 echo "Pluie             : "$pluie" mm"
fi

sleep 15

On peut placer le script meteo_france.sh dans un répertoire ~/bin et le rendre exécutable.
Avec rxvt, on peut ouvrir une simple fenêtre par :
rxvt -geometry 40x8 -bl +sb -e /root/bin/meteo_france.sh

Si on a roxterm, je propose :
roxterm --geometry=40x8 --hide-menubar -z 2 -T "Météo du jour" -e /root/bin/meteo_france.sh
(Si quelqu'un sait cacher la barre de défilement du terminal, cela serait plus joli…)

On peut mettre cela dans les raccourcis clavier de JWM pour lancer la prévision au clavier (Super+m) :
<Key mask="4" key="m">exec: rxvt -geometry 40x8 -bl +sb -e /root/bin/meteo_france.sh</Key>

C'est le petit programme que j'utilise quand mon village (ou mon ordinateur) est bloqué par le site de Météo-France. On peut ajouter assez facilement de nombreux paramètres, le plus long étant de les interpréter ensuite.

En espérant vous avoir donné envie d'aller plus loin, je vous laisse jouer avec vos claviers. Moi par ma fenêtre, pas un nuage : ça va encore taper sévère aujourd'hui !
30
Sécurité / Re : SuperGenPass de Polo l'asticot
Dernier message par Polo l’asticot -
Ola Rantanplan et l'univers,

J'ai cherché désespérément à différencier chiffres, minuscules et majuscules dans le mot de passe généré. Les comparaisons directes en Bash ne fonctionnaient pas même quand elles étaient préconisées par certains sites (créations par IA ???, IA de m…). J'ai bien perdu mon temps là-dessus.
Je me suis souvenu du bon temps où je faisais de la programmation en Basic. (Il ne rigole pas le jeunot, s'il ne veut pas se prendre un coup de canne sur la tête !) Il y avait une fonction de conversion en code ASCII qui donnait de bons résultats. Je suis parti sur cette piste. Le programme est beaucoup plus lourd et codé à l'arrache mais cela fonctionne.
#!/usr/bin/env bash

#Code dérivé de celui de Mihail Milushev (lanzz : https://github.com/lanzz/bash-supergenpass/blob/master/supergenpass.sh) sous licence MIT

################################################################################
default_password_length="16"
### 16 par défault. Peut être remplacé au cas par cas en ajoutant la longueur
### personnalisée comme deuxième argument après le domaine lors du lancement du script.

default_hashing_algorithm="md5"
### "md5" par défaut. Une valeur alternative serait « sha512 » qui peut être donnée
### au cas par cas comme troisième argument.
################################################################################

domain=$(echo $1 | tr A-Z a-z)
length=${2:-$default_password_length}
hashing_algorithm=${3:-$default_hashing_algorithm}
mpd=""
chiffre=0
maj=0
min=0
cumul=0

master_password="&'èàarupä‘üö"

hash=$master_password:$domain

i=0
while true
do
 hash=$(echo -n "$hash" | openssl "$hashing_algorithm" -binary | base64 | tr -d '\n' | tr +/= 98A)
 i=$(($i + 1))
 if [ $i -lt 10 ]
 then
 continue
 fi
 valid=$(echo "${hash:0:$length}" | grep -E '^[[:lower:]]' | grep -E '.[[:upper:]]' | grep -E '.[[:digit:]]')
 if [ "$valid" != "" ]
 then
 break
 fi
done

mdp=${hash:0:$length}
echo $mdp

i=0
while true
do
car=${mdp:$i:1} ; ascii=$(printf "%d" "'$car'")

if [ $ascii -lt 58 ] ; then
 chiffre=$(($chiffre + 1))
 if [ $chiffre -gt 3 ] ; then
 car=$(echo $car | tr '[:digit:]' '&(_)+#]{|[')
 mdp=${mdp:0:$i}$car${mdp:"(($i + 1))"}
 cumul=$(($cumul + 1)) ; chiffre=0
 fi
elif [ $ascii -lt 91 ] ; then
 maj=$(($maj + 1))
 if [ $maj -gt 2 ] ; then
 car=$(echo $car | tr '[:upper:]' '&(_)+#{[|]}>?/<!:^&![+<)#]')
 mdp=${mdp:0:$i}$car${mdp:"(($i + 1))"}
 cumul=$(($cumul + 1)) ; maj=0
 fi
else
 min=$(($min + 1))
 if [ $min -gt 1 ] ; then
 car=$(echo $car | tr '[:lower:]' '&(_)+#{[|]}?>/<!:^&![+<)#]')
 mdp=${mdp:0:$i}$car${mdp:"(($i + 1))"}
 cumul=$(($cumul + 1)) ; min=0
 fi
fi

if [ $cumul -gt 2 ] ; then break ; fi

i=$(($i + 1))

done

if [ -n "$WAYLAND_DISPLAY" ] && command -v wl-copy >/dev/null; then
 echo -n $mdp | wl-copy
 echo "Mot de passe copié dans le presse-papiers Wayland"
elif [ -n "$DISPLAY" ] && command -v xclip >/dev/null; then
 echo $mdp | xclip -r -selection "clipboard"
 echo $mdp
 echo "Le mot de passe est copié dans le presse-papiers de X"
else
 echo $mdp
fi
C'est toujours en développement. Le mot de passe général est toujours en dur dans le script et cela affiche le mot de passe généré sans caractères spéciaux puis en dessous, avec.

Petite explication :
Le script compte les chiffres et remplace le quatrième par un caractère spécial.
Pour les majuscules, c'est la troisième qui est remplacée.
Avec les minuscules, c'est toutes les deux occurrences que le remplacement a lieu.
Pourquoi ? Parce que pourquoi pas.
Quand il y a eu trois remplacements, on s'arrête et on donne le résultat.

L'avantage, c'est que les caractères spéciaux apparaissent n'importe où, sans régularité. (J'ai réduit l'ensemble des caractères à ceux de code inférieur à 128, les autres provoquant un affichage incorrect avec des points d'interrogation.)

 Si tu peux tester et faire un retour, quand tu as du temps.

¡Que la fuerza acompañe a España y a los españoles!




Simple Audio Video Embedder