Notes sur Système


Linux

arecord

Enregistrer le son d'un microphonesur un raspberry 4

L'enregistrement du son peut être à la base d'un carnet de notes sonore destiné aux aveugles, utilisateurs de xavbox.
Les malvoyants auront plus de commodité à prendre des notes parlées que manuscrites.

1. brancher la carte son usb C-Media Electronics, Inc. CM108 Audio Controller et un micro
2. lsusb pour la reconnaître
3. groups pi
4. alsamixer
5. arecord -D plughw:2 --duration=10 -f cd -vv ~/rectest.wav
6. audacity rectest.wav pour jouer le son

Test réalisé avec succès sur un raspi 4 : son très clair et non haché.
Inconvénient : le son doit être très proche du micro, sinon l'enregistrement est faible.

Galerie

Inspiration : Recording Sound on the Raspberry Pi _ g7smy.co.uk

bash_raccourcis_clavier

A connaître par coeur pour taper plus vite en console :
Raccourcis clavier sous Bash - Tux-planet

byobu

byobu permet de lancer une commande dans une session console, la quitter puis la reprendre.

Lancer byobu, puis la commande voulue ...
Quitter provisoirement byobu avec Shift-F6.
Relancer ensuite byobu pour revenir au travail en cours ...

clavier

Insérer signe touche supérieur inférieur sur clavier Il existe des claviers (de gamers ?) sans les touches inférieur / supérieur (< et >) https://gangand.net/cc/clavier/ La séquence de touches Ctrl-Shit-u permet taper des caractères inaccessibles directement au clavier. Ctrl-Shift-u, puis 003C, puis Entrée Ctrl-Shift-u, puis 003E, puis Entrée

cryptmount

cryptmount est un outil logiciel pour gérer les systèmes de fichiers cryptés sous la famille de systèmes d'exploitation Linux.
man cryptmount

Suite à l'installation de Ubuntu Mate 64 en juillet 2020 sur mon Raspberry Pi 4 (4 Go), j'ai dû trouver un remplaçant à Veracrypt, pour crypter mes données importantes. cryptmount est présent dans les paquets et semble faire l'affaire. Le plus intéressant est qu'il fonctionne sur Raspbian OS 32 bits et sur Ubuntu Mate 64 bits.
Il est donc possible depuis un Raspbian 32 bits de faire fonctionner Veracrypt et Cryptmount pour convertir des fichiers Veracrypt vers Cryptmount.

Guide rapide
sudo apt install cryptmount
cryptmount-setup : remplit automatiquement le fichier /etc/cryptmount/cmtab, comme suit:

Fichier /etc/cryptmount/cmtab
3en1 {
    dev=/media/pi/root/home/pi/cryptmount/3en1.fs
    dir=/home/pi/3en1
    fstype=ext3
    mountoptions=defaultstreesize
    cipher=aes
    keyformat=builtin
    keyfile=/media/pi/root/home/pi/cryptmount/3en1.key
}

Ensuite, lancer cryptmount 3en1 et fournir le mot de passe.

Script cryptmount_bak_mount.sh

find

Voir de nombreux exemples d'utilisation de ffmpeg plus bas dans exemples.sh

ffmpeg

Documentation bien détaillée sur ubuntu-fr

Voir de nombreux exemples d'utilisation de ffmpeg plus bas dans exemples.sh

Convertit m2ts en x265

Conversion m2ts (enregistrement freebox)
La conversion directe en x265 échoue rapidement, convertir d'abord en avi avec
f=video.m2ts; ffmpeg -i $f -vcodec mjpeg -b 100M -threads 0 $f.avi
puis convertir le fichier avi en x265

Attention, besoin de beaucoup de place (pour le fichier .avi intermédiaire) :
 1   Go video.m2ts
 7,4 Go video.avi
 0,2 Go video.x265.mkv (environ)
                

Capture vidéo (utile pour tuto)

Capture vidéo écran de 1 mn sur Raspbian 10 (buster)

# https://trac.ffmpeg.org/wiki/Capture/Desktop
# testé sur raspberry
# ffmpeg -video_size 1024x768 -framerate 10 -f x11grab -i :0.0+100,200 -f pulse -ac 2 -i default output.mkv
echo $(date) Début de la capture
output=$(date '+%Y%m%d_%H%M%S')_1920x1080_lire_avec_player_ou_mpv_1mn.mkv
ffmpeg -video_size 1920x1080 -framerate 10 -f x11grab -i :0 ${output} &
ffmpegPID=$!
sleep 1m
kill ${ffmpegPID}
echo $(date) Fin de la capture
                

Voir la progression de ffmpeg

Savoir où est en ffmpeg (compression très très longue)
            ffmpeg est en train de comprimer un fichier
de 20mn et 1.8 Go au format x265 (hecv)
(avec la simple commande ffmpeg -i ${source} ${source}_ffmpeg_réduit.mp4,
on obtient un fichier de 191 Mo).

Cela prend des heures.
Pour savoir où en est le travail,
on peut chercher où dans le fichier source ffmpeg piioche actuellement les données.

Deux commandes chaînées permettent cela :
1. déterminer le processus qui accède au fichier source
2. récupérer la progression

========================================================================

1. processus : lsof

commande :
lsof | grep mp4

résultat :
ffmpeg     4569              xav    4r      REG        8,3 1792855066  1313904 /home/xav/Vidéos/compresser_x265/20210814_14h03-14h23_film.mp4
ffmpeg     4569  4570        xav    4r      REG        8,3 1792855066  1313904 /home/xav/Vidéos/compresser_x265/20210814_14h03-14h23_film.mp4
ffmpeg     4569  4571        xav    4r      REG        8,3 1792855066  1313904 /home/xav/Vidéos/compresser_x265/20210814_14h03-14h23_film.mp4
=> 4r indique le descripteur de fichier, en lecture.

2. progression
commande :
cat /proc/4569/fdinfo/4

résultat :
pos:    887653265
flags:  02100000
mnt_id: 20
=> le 887 653 265 ème octet vient d'être lu.
Le fichier pèse 1 900 000 000 octets, soit 1.8 Go,
on est à environ 50%.


========================================================================
Source : https://unix.stackexchange.com/questions/34751/how-to-find-out-the-file-offset-of-an-opened-file
                

Taux de compression

Fichiers filmés par smartphone android
Film source x264 Dimensions Durée Après compression x264 Après compression x265
4,3 Go 1280 x 720 46mn56s 155 Mo (3,6%)
1.8 Go 1280 x 720 19mn35s 191 Mo (10%) 47 Mo (2,6%)
448 Mo 1280 x 720 4mn54s 15,5 Mo (3,5%)
146 Mo 1280 x 720 1mn36s 10 Mo (6,8%)
Un fichier vidéo qui sort d'un smartphone prend beaucoup de place, faute de compression.
Une compression en x264 permet un gain de 90%, en x265, l'espace récupéré peut dépasser 95%.

ffmpeg, vitesse de conversion entre machines

Test de vitesses de compression x265 sur plusieurs machines.
ffmpeg utilise topus les coeurs disponibles.
Un Raspberry 4 possède 4 coeurs.

Fichier de 14 Mo de 57s Fichier source : 14,1 Mo, horloge_lisse_haute.mp4 (issu d'une première compression x264)
Durée : 57 s
Commande : ffmpeg -i horloge.mp4 -c:v libx265 -x265-params crf=25 -c:a libmp3lame horloge.x265.mkv
Machine Taille Durée Ordi OS
pi4-coin 5.9 Mo 26 mn Raspberry Pi 4, 4 Go (4 coeurs) Raspbian OS
dots2017 5 Mo 2h23 netbook
Intel Atom N450 @ 1.66GHz (1 coeur)
Linux Mint
... A FAIRE... HP Pavillon s7410
desktop moyen
(Linux Mint)
Fichier de 143.9 Mo Mo de 10mn24s Fichier source : 143.9 Mo, 20210731_13h.mp4 (issu d'une première compression x264)
Durée : 10mn24s
Commande : ffmpeg -i 20210731_13h.mp4 -c:v libx265 -x265-params crf=25 -c:a libmp3lame 20210731_13h.x265.mkv
Machine Taille Durée Ordi OS
pi4-coin 68.4 Mo 3h50 Raspberry Pi 4, 4 Go (4 coeurs) Raspbian OS
dots2017 Mo ... netbook
Intel Atom N450 @ 1.66GHz (1 coeur)
Linux Mint
... A FAIRE... HP Pavillon s7410
desktop moyen
(Linux Mint)
Remarque : le processus pcmanfm sur Raspberry occupe presqque 100% d'un coeur => en le killant on libère une ressource de calcul intéressante.
Le Raspberry n'est pas ventilé, donc il est limité par le throttling (le CPU limite sa vitesse pour ne pas dépasser les 80°C).
Fichier de 92,3 Mo Mo de 1mn Fichier source : 143.9 Mo, 20210823_223503.mp4 (film brut android)
Durée : 1mn
Commande : ffmpeg -i 20210823_223503.mp4 -c:v libx265 -x265-params crf=25 -c:a libmp3lame 20210823_223503.x265.mkv
Machine Taille Durée Ordi OS
AMD A4-4020 APU/1974.646 MHz 12.5 Mo 7mn 2 coeurs Linux Mint
pi4-coin 12.4 Mo 26mn 4 coeurs Raspbian OS
Remarque : le processus pcmanfm sur Raspberry occupe presqque 100% d'un coeur => en le killant on libère une ressource de calcul intéressante.
Le Raspberry n'est pas ventilé, donc il est limité par le throttling (le CPU limite sa vitesse pour ne pas dépasser les 80°C).

freebox

Accéder au disque dur de la freebox (depuis un raspberry)
rouge est le nom du disque dur connecté en usb à la freebox

Ligne de commande
mkdir /media/fbx; sudo mount.cifs //freebox-server-4.local/rouge /media/fbx -o _netdev,rw,users,iocharset=utf8,uid=1000,sec=none,file_mode=0777,dir_mode=0777,vers=1.0 0 0

Code télécommande (pour appli freemote)

Code Pi1
85787861

Source

geany

Réduire la fatigue oculaire

Guide rapide :
https://github.com/codebrainz/geany-themes
Clone ..., unzipper
Déplacer le dossier colorschemes dans $HOME/.config/geany/colorschemes
Redémarrer geany
Affichage - Changer le jeu des couleurs

Si ne marche pas,
sudo apt install geany geany-plugins geany-plugin-overview font-manager

Plus simplement : Editer - Préférences - Editeur - Affichage - Inverser les couleurs de la coloration syntaxique.

lanceur

Créer un raccourci vers un document ou une application
Si l'application n'est pas connue, remplacer éventuellement vlc par xdg-open dans l'exemple ci-dessous.

treesize
Exemple : fichier vlc.desktop
[Desktop Entry]
Type=Application
Name=une_video
Icon=/usr/share/icons/hicolor/32x32/apps/vlc.png
Exec=vlc "/home/user/une_video.avi"

ncdu

ncdu = NCurses Disk Usage est un utilitaire en console, qui permet une navigation graphique dans l'arborescence, avec indication de l'espace occupé.
Il autorise la navigation hors ligne, sur catalogue.

ncdu, hors ligne
Enregistrer une arborescence avant :
ncdu 1-xo- /home/pi | gzip >export.gz
treesize
Pouvoir la lire ultérieurement :
zcat export.gz | ncdu -f-

(voir l'aide de la commande pour retrouver ces deux lignes)

nemo

Définir nemo comme gestionnaire de fichiers par défaut
[Raspberry OS] Clic droit sur la barre des tâches - Paramètres du tableau de bord

nmap

nmap = nmap permet de scann er son réseau local.

Commandes utiles
Lister adresses IP du réseau :
nmap -sn 192.168.0.0/24 | awk '/Nmap scan/{gsub(/[()]/,"",$NF); print $NF > "nmap_scanned_ips"}'

Lister IP, nom, statut, un hôte par ligne :
nmap -sn 192.168.0.0/24 -oG nmap_output

Lister machine SSH :
nmap -sV -p 22,443 192.168.0.0/24 -open

Lister serveurs web :
nmap -sV -p 80 192.168.0.0/24 -open

paquets

Pour essayer de gagner un maximum d'espace sur raspberry
quand on doit cloner un système par exemple.
Quels commandes utiles :
sudo ncdu /
# créer 10 fichiers de 100 Mo d'espace vide
for i in $(seq 1 1 10); do dd if=/dev/zero of=zeros_$i bs=1M count=100; done
Explication : un fichier de 100 Mo de zéros se compressera en quelques octets
scribles.net, voir section avec loop et truncate : Trim empty space from the image file
losetup : Shrinking Raspberry Pi SD Card Images - Andrew Oakley
Creating your own minimalistic Rasbian image for the Raspberry Pi _ Brandons Blog

Lister taille paquets installés
dpkg-query -Wf '${Installed-Size}\t${Package}\n' | sort -g
awk '{if ($1 ~ /Package/) p = $2; if ($1 ~ /Installed/) printf("%9d %s\n", $2, p)}' /var/lib/dpkg/status
How to Show Installed Package Size on Ubuntu_Debian

Purge xavbox
sudo apt purge vlc-* freepat* python-rpi.gpio xinerama libchromaprint0 localepurge libvdpau1 libmpeg2-4 libv4l-0 libdvdread4 mesa-va-drivers libgl1-mesa-dri gcc-4.4-base:armhf gcc-4.5-base:armhf gcc-4.6-base:armhf gcc-4.7-base:armhf gcc-4.8-base:armhf gcc-4.9-base:armhf libraspberrypi-doc xkb-data fonts-freefont-ttf

swapoff -a
cd /var
dd if=/dev/zero of=swap bs=1M count=100

cd /var/log/
sudo rm `find . -type f`

sudo apt-get remove `sudo dpkg --get-selections | grep "\-dev" | sed s/install//`

sudo apt-get clean

sudo apt-get autoremove

sudo apt-get clean

for i in 1 2 3 4 5 6 7 8 9 10; do echo $i; dd if=/dev/zero of=zero_____$i bs=1M count=93; done
rm zero_____*

df .
/dev/root          1,7G    694M  944M  43% /

Ensuite éteindrte la machine.

Prendre la carte SD sur une autre machine et réduire la partition avec sudo gparted

img=20200708_raspi_xavbox_reduit_max.img; sudo dd status=progress if=/dev/sdb of=$img bs=1M count=950; 7z a $img.7z $img; sh fin_job.sh
How to Show Installed Package Size on Ubuntu_Debian

piwigo

Pour mettre à jour l'ordre d'affichage des albums et des photos, aller dans Administration - Albums - Déplacer puis "Appliquer un tri automatique sur les albums racines" ...

ramdisk

Réduire l'usure de la carte SD ou micro SD. Voir également la fonction Overlay file system dans raspi-config.

Spécial raspberry
# mais valable aussi pour économiser disques SSD
ramdisk /tmp tmpfs mode=1777,size=50m
tmpfs /var/tmp tmpfs defaults,noatime,nosuid,size=10m 0 0
tmpfs /var/log tmpfs defaults,noatime,nosuid,mode=0755,size=10m 0

python_shutdown_PC

Script python pour éteindre un PC par le web (depuis un smartphone)

En résumé, un serveur web est lancé par python (pas de serveur lourd à installer comme apache), un script cgi est lancé quand on appuie sur le bouton Eteindre du formulaire web. Fonctionne sur le réseau local.

Eteindre localement PC Linux par smartphone
Sur l'ordinateur Linux, 4 opérations à réaliser :
sudo mkdir /opt/python_shutdown
sudo mkdir /opt/python_shutdown/cgi-bin
sudo chmod -R 777 /opt/python_shutdown

Créer le fichier /opt/python_shutdown/index.html avec les 13 lignes suivantes:
<html>
<head>
<style>body { background : black; }</style>
</head>
<body>
<center>
<form method="post" action="cgi-bin/shutdown.py">
<input style="background: black; color: white; font-size:10em"
type="submit" value="ETEINDRE" name="submit">
</form>
</center>
</body>
</html>

Créer le fichier /opt/python_shutdown/cgi-bin/shutdown.py avec les 3 lignes suivantes:
#!/usr/bin/env python
import os;
os.system("sudo shutdown -h now");

Lancer sudo visudo, puis ajouter la ligne suivante à la fin :
ALL ALL=(root) NOPASSWD: /sbin/shutdown

Lancer crontab -e :
@reboot cd /opt/python_shutdown; python -m CGIHTTPServer 8000

# Sur smartphone, ouvrir http://IP_ORDINATEUR:8000
# puis cliquer sur le bouton ETEINDRE


# Si problème au lancement du serveur Web :
# OK sur raspbian
# https://stackoverflow.com/questions/10396330/how-to-host-python-cgi-script-with-python-m-simplehttpserver-8000-or-python
# python -m CGIHTTPServer 8000

# pas OK
# https://superuser.com/questions/829243/how-to-shut-down-a-server-from-the-webinterface
# python -m SimpleHTTPServer

Eteindre à distance PC Linux (en cours)
Sur l'ordinateur Linux, ... opérations à réaliser :
crontab -e :
* * * * * [ "x$(/usr/bin/wget -q -O - URL_PHP_QUERY)" = 'xeteindre' ] && /usr/bin/wget -q -O - URL_PHP_EFFACER && /usr/bin/sudo /sbin/shutdown -h 1

Sur le serveur web de URL_PHP :
1. fichier index.php
<?php
$f = 'eteindre.txt';
file_put_contents($f, 'eteindre');
echo 'Commande ok';
header('Location: http://gangand.net/');
?>

2. fichier query.php
<?php
$f = 'eteindre.txt';
if ( file_exists($f) ) {
    $content = file_get_contents($f);
    echo $content;
}
?>

3. fichier effacer.php
<?php
$f = 'eteindre.txt';
if ( file_exists($f) ) {
    echo 'unlink '.$f;
    unlink($f);
}
?>

Sur smartphone, ouvrir http://URL_PHP
puis cliquer sur le bouton ETEINDRE
Eteindre localement PC Windows 7 par smartphone
Installer python2.7 depuis https://www.python.org/ftp/python/2.7.18/python-2.7.18.msi
Vérifier que le dossier c:\python27 est bien accessible en y accédant depuis explorer.exe

c:
cd \users\USER
md shutdownPC
cd shutdownPC
mkdir cgi-bin

Créer le fichier index.html avec les 13 lignes suivantes:
<html>
 <head>
  <style>body { background : black; }</style>
  </head>
  <body>
  <center>
   <form method="post" action="cgi-bin/eteindre.cmd">
    <input style="background: black; color: white; font-size:10em"
        type="submit" value="ETEINDRE" name="submit">
   </form>
  </center>
  </body>
</html>


Créer le fichier c:\users\USER\python_shutdown\lancer_serveur_web.cmd avec la seule ligne suivante:
python -m CGIHTTPServer 8000

Créer le fichier c:\users\USER\python_shutdown\cgi-bin\eteindre.cmd avec la seule ligne suivante:
shutdown -s -t 5
Créer un raccourci vers ce fichier dans le groupe de démarrage.

# Sur smartphone, ouvrir http://IP_ORDINATEUR:8000
# puis cliquer sur le bouton ETEINDRE

python_read_mail

Script python3 pour lire et télécharger des PJ

Lire et télécharger des pièces jointes Gmail avec python3
# Python 3.8.0
import smtplib
import time
import imaplib
import email
import traceback

import base64
import os
# -------------------------------------------------
#
# Utility to read email from Gmail Using Python
#
# ------------------------------------------------
# But : convertir des pièces jointes PDF
#       contenant du texte, difficilement lisibles
#       sur smartphone
#       --> utiliser pdftotext pour extraire silmplement le texte
#
# Source 1 : https://codehandbook.org/how-to-read-email-from-gmail-using-python/
# Source 2 : https://medium.com/@sdoshi579/to-read-emails-and-download-attachments-in-python-6d7d6b60269
# mot de passe : Mots de passe des applications

ORG_EMAIL = "@gmail.com"
FROM_EMAIL = "x..." + ORG_EMAIL     # cf. fichier coffre-fort
FROM_PWD = "ps..."                  # idem
SMTP_SERVER = "imap.gmail.com"
SMTP_PORT = 993

try:
    os.mkdir('pieces_jointes')
except OSError as error:
    # print(error)
    pass


def read_email_from_gmail():
    try:
        mail = imaplib.IMAP4_SSL(SMTP_SERVER)
        mail.login(FROM_EMAIL,FROM_PWD)
        mail.select('inbox')

        data = mail.search(None, 'ALL')
        mail_ids = data[1]
        id_list = mail_ids[0].split()
        first_email_id = int(id_list[0])
        latest_email_id = int(id_list[-1])

        for i in range(latest_email_id,first_email_id, -1):
            data = mail.fetch(str(i), '(RFC822)' )
            for response_part in data:
                arr = response_part[0]
                if isinstance(arr, tuple):
                    msg = email.message_from_string(str(arr[1],'utf-8'))
                    email_subject = msg['subject']
                    email_from = msg['from']
                    # print('From : ' + email_from + '\n')
                    # print('Subject : ' + email_subject + '\n')


                    # message = email.message_from_string(email_contents)
                    # for payload in msg.get_payload():
                        # print(payload.get_payload())
                    if email_from == 'support@prix-carburants.fr':
                        # print('============== support@prix-carburants.fr =================')
                        # traiter le corps du message ici
                        # print(msg.get_payload())
                        with open("corps.txt", "w") as corps:
                            corps.write(msg.get_payload())
                        # grep -A1 '51350 CORMON' corps.txt
                        # grep -A3 '  INTERMARCHE' corps.txt


                    # downloading attachments
                    for part in msg.walk():
                        # this part comes from the snipped I don't understand yet...
                        if part.get_content_maintype() == 'multipart':
                            continue
                        if part.get('Content-Disposition') is None:
                            continue
                        fileName = part.get_filename()
                        if bool(fileName):
                            filePath = os.path.join('pieces_jointes/', fileName)
                            if not os.path.isfile(filePath) :
                                fp = open(filePath, 'wb')
                                fp.write(part.get_payload(decode=True))
                                fp.close()
                                subject = str(msg).split("Subject: ", 1)[1].split("\nTo:", 1)[0]
                                # print('Downloaded "{file}" from email titled "{subject}" with UID {uid}.'.format(file=fileName, subject=subject, uid=latest_email_uid.decode('utf-8')))

    except Exception as e:
        traceback.print_exc()
        print(str(e))

read_email_from_gmail()

ssh_no_login

Pour ouvrir une session ssh distante sans mot de passe, il faut d'abord lancer les deux commandes ssh-keygen et ssh-copy-id, une seule fois. Ensuite l'ouverture de session vers la machine cible se fait avec la commande ssh USER@CIBLE. Toutes les commandes sont tapées sur la machine contrôlante. Pour quitter la session distante, tapez exit puis Entrée, ou Ctrl-d.
Une session ssh, qui n'est pas interrompue par l'authentification, permet de lancer des commandes, à partir de scripts par exemple. Exemples :

ssh pi@raspi11 /sbin/ifconfig
ssh pi@raspi11 'echo $PATH'

Se loguer en ssh directement vers 192.168.1.44
# à exécuter une seule fois, au départ
rm -rf ~/.ssh
ssh-keygen
ssh-copy-id -i ~/.ssh/id_rsa.pub pi@192.168.1.44

# à exécuter à chaque fois qu'on veut ouvrir la session ssh
ssh pi@192.168.1.44

souris

Accélérer une souris sans fil (perixx par exemple)

Fonctionne sur raspberry
# à exécuter une seule fois, au départ
https://www.raspberrypi.org/forums/viewtopic.php?f=28&t=94075

...
try adding
usbhid.mousepoll=0
to the command line (cmdline.txt in /boot).
...

sudo

Lancer des commandes avec sudo, sans taper le mot de passe

sudo visudo
ALL ALL=(root) NOPASSWD: /sbin/shutdown,/usr/bin/scanimage

vlc

Quelques astuces vlc.

Lancer le dernier fichier quitté dans vlc
vlc $(grep RecentsMRL ~/.config/vlc/vlc-qt-interface.conf -A1 | grep list | cut -f1 -d',' | sed 's/list=//')

wifi_file_tranfert

Script linux pour télécharger les fichiers mis à disposition par l'appli smartphone "Wifi File Tranfert"

Télécharger le script Script wifi_file_transfert.sh

wakeonlan

Démarrer un PC avec carte-mère MSI depuis un smartphone

Actions à réaliser sur PC
- chercher le nom de la carte réseau :
ip a
résultat : enp1s0

- voir si le wol est activé :
sudo ethtool enp1s0 | egrep "^[[:blank:]]*Wake-on: (g|d)"

- autoriser wol :
sudo ethtool --change enp1s0 wol g

- autoriser wol système :
sudo vi /etc/network/interfaces
# interfaces(5) file used by ifup(8) and ifdown(8)
auto lo
iface lo inet loopback
up ethtool -s eth0   wol g  # ajout 1
up ethtool -s enp1s0 wol g  # ajout 2

- (débuggage) écouter un paquet magic :
sudo tcpdump -i enp1s0 port 9

- autoriser wol carte-mère :
How to setup the Wake on LAN function
https://us.msi.com/faq/motherboard-503
1. Set "EUP 2013" as Disabled in the BIOS Power Management menu.
2. Enable “Resume By PCI or PCI-E Device” in the Wake Up Event Setup.
D'abord activer l'option ROM LAN

Sur smartphone :
- installer une appli Wake On Lan sur Android
- rechercher machine à réveiller ou indiquer son adresse mac
- éteindre la machine et tester le réveil avec l'appli
Actions à réaliser sur smartphone
- installer une appli Wake On Lan sur Android
- rechercher machine à réveiller ou indiquer son adresse mac
- éteindre la machine et tester le réveil avec l'appli

Remarques :
- une machine éteinte va s'allumer comme si on la démarrait sur place
- une machine mise en veille sort de sa veille

xdotool

Automatiser souris et clavier

Automatiser solitaire clavier
# /home/pi/bin/_pysol_xdotool_da.sh

if [ "x$1" = "x" ]; then
    nbcoups=10
else
    nbcoups=$1
fi

sleep 2
for i in $(seq 1 1 $1); do
    xdotool type da    # touche d = deal cards, touche a = auto drop
    sleep 0.5
done
Automatiser solitaire souris
# /home/pi/bin/_pysol_xdotool.sh

# utiliser xdotool getmouselocation
# pour adapter au jeu actuel

if [ "x$1" = "x" ]; then
    nbcoups=10
else
    nbcoups=$1
fi

for i in $(seq 1 1 $1); do
    xdotool mousemove 705 204
    xdotool click 3     # clic droit
    xdotool mousemove 779 204
    xdotool click 3     # clic droit
done
Catalogue promotions Cora
# /home/pi/Documents/promotions_Cora/cora_xdotool.sh

sleep 3

n=$1
incr=0
iterations=$1

for i in $(seq 1 1 $iterations); do
    # 1. page gauche
    sleep 1
    xdotool mousemove 600, 500
    xdotool click 3         # clic droit
    sleep 0.5
    xdotool type r          # EnRegistrer
    sleep 0.5
    xdotool key KP_Enter    # touche Entrée

    # 2. page droite
    sleep 1
    xdotool mousemove 1250, 550
    xdotool click 3         # clic droit
    sleep 0.5
    xdotool type r          # EnRegistrer
    sleep 0.5
    xdotool key KP_Enter    # touche Entrée

    # 3. double page suivante
    sleep 1
    xdotool mousemove 1879, 544
    xdotool click 1         # clic gauche
    sleep 0.5
done
Login twitter
# /home/pi/bin/_twitter_xdotool.sh

xdotool type 0680...
xdotool key KP_Enter
Scanner Canon à plat


# xdotool_SKANN.sh
# à utiliser avec scange... sous linux

# 9mn pour 25 images = 540 / 25 = 21s par image

# syntaxe : $0 1000 10
# pour scanner 10 pages en numérotant à partir de 1000

n=$1
incr=0

for i in $(seq 1 1 $2); do

    # 1. numériser
    sleep 1; xdotool mousemove 522, 392; xdotool mousedown 1; xdotool mouseup 1

    # 2. nom
    sleep 1; xdotool mousemove 600, 203; xdotool mousedown 1; xdotool mouseup 1
    #    effacer nom
    sleep 1; for i in $(seq 1 1 20); do xdotool key BackSpace; done
    #    taper nom
    m=$((n+1))
    nom=${n}-${m}
    xdotool type $nom

    # 3. scanner
    incr=$((incr+1))
    echo "$(date +%r) $incr sur $2, $nom"

    sleep 1; xdotool mousemove 708, 390; sleep 1; xdotool mousedown 1; xdotool mouseup 1
    xdotool mousedown 1; xdotool mouseup 1

    # pause 18s pour le scan
    sleep 18
    n=$((n+2))
done

Sommaire

xdotool click 1             # clic gauche
xdotool click 3             # clic droit
xdotool getmouselocation    # coordonnées souris
xdotool key KP_Enter        # touche Entrée
xdotool key KP_Tab          # touche Tab
xdotool key Up              # flèche haut
xdotool key Down            # flèche bas
xdotool key Right           # flèche droite
xdotool key Left            # flèche gauche
xdotool mousemove 705 204   # déplacer la souris
xdotool type 0680...        # taper texte

Linux tips

linux_tips

Linux tips en vrac

Changer la définition d'écran en ligne de commande
script xr.sh

Utiliser xrandr

Commande / Résultat
xrandr -q
affiche l'état actuel et possibilités

xrandr -s 1280x1024
passe en 1280 sur 1024


Utiliser les raccourcis xr12.sh, xr10.sh, xr8.sh et xr6.sh pour respectivement passer en 1280x1024, 1024x768, 800x600 et 640x480.
Check disk et reboot immédiat
Finalement il est toujours bon de vérifier l'intégrité de son disque dur
(attention l'enchaînement de ces commandes provoque un redémarrage suivi
d'un test du disque pendant le boot):

sudo touch /forcefsck
sudo reboot
Comparer récursivement deux dossiers
Pour ce faire, ouvre un terminal,
mets-toi dans le répertoire qui contient A et B :
cd le_repertoire_voulu

Puis fais la comparaison :
diff -rq A B

"r" pour récursif
"q" pour avoir juste le nom des fichiers qui diffèrent
Ôte le "q" pour avoir le contenu qui diffère entre les fichiers.
Tu peux ajouter un "less" :
diff -r A B | less
Le trait vertical (AltGr 6) est un "pipe"
qui transmet le résultat de la commande précédente (diff -r A B)
à la commande suivante (less).
Une fois que tu es dans less,
utilise les flèches haut et bas pour faire défiler,
et la touche q pour quitter.
Tu peux aussi faire directement
less le_nom_d_un_fichier
pour voir un fichier puis q pour quitter.
Tu peux aussi faire en deux fois :
diff -r A B > un_fichier
less un_fichier
Le signe ">" sert à rediriger le résultat vers un fichier
(nouveau tant qu'à faire) appelé "un_fichier".


Convertir un fichier texte en minuscule

dd if=fichier.txt conv=ucase
convertit un fichier texte en majuscules
Convertir un fichier texte en minuscule
dd if=fichier.txt conv=ucase
convertit un fichier texte en majuscules
Copier la structure d’un répertoire sans les fichiers
Voici une petite ligne de commande qui vous permettra sous linux de dupliquer la structure d’un répertoire et de ses sous dossiers, sans leur contenu, c’est à dire sans les fichiers qui se trouvent dans les répertoires sources (c’est ça l’astuce)

Je crée un répertoire « copie » dans mon home

    mkdir /home/korben/copie

Ensuite, je me place dans le dossier que je veux copier

    cd /home/korben/mondossierquejeveuxcopier

et je fais un find uniquement des répertoire, qui lancera une création de répertoire à chaque fois qu’il en trouvera un.

    find * -type d -exec mkdir /home/korben/copie/\{\} \;
Extraire les images, sons d'un fichier Microsoft Office avec OpenOffice

http://hightech.challenges.fr/astuces-faq/224-openoffice-org/1/astuce-5348/

1. ouvrir le fichier MS Office
2. enregistrer au format Opendocument
3. renommer le fichier en .zip
4. l'ouvrir et parcourir son contenu
Lister applications installées récemment
Display The List Of Recently Installed Packages By Date On Ubuntu
http://www.watchingthenet.com/show-list-of-recently-installed-packages-by-date-on-ubuntu.html

Synaptic
Fichier – Historique

Terminal
cat /var/log/dpkg.log | grep "\ install\ "
ou bien
ls -l /var/log/dpkg*
Progression dans traitement de fichier
Imagine you've started a long-running process that involves piping data,
but you forgot to add the progress-bar option to a command.

F=bigdata.xz; lsof -o0 -o -Fo $F | awk -Ft -v s=$(stat -c %s $F) '/^o/{printf("%d%%\n", 100*$2/s)}'

http://www.commandlinefu.com/commands/view/16240/check-how-far-along-in-your-program-is-in-a-file
Transformer une page man en pdf
man -t ls > ls.ps && ps2pdf ls.ps && rm ls.ps
Manipuler le presse-papier sous Linux Ubuntu
Préférer xsel -b à xclip -o -selection XA_CLIPBOARD
qui ne donne pas toujours le résultat escompté
Monter une image ISO
mount -o loop -t iso9660 fichier.iso /mnt/iso
Prompt PS1
export PS1="\e[0;33m[\u@\h \W \@]\$ \e[m "
=>
[pi@e33a ~ 12:16 ]$
[USER @ ORDI DOSSIER_ACTU HEURE_ACTUELLE]
---------------------------------------------
Défaut sur raspbian :
\[\e]0;\u@\h: \w\a\]${debian_chroot:+($debian_chroot)}\[\033[01;32m\]\u@\h\[\033[00m\]:\[\033[01;34m\]\w \$\[\033[00m\]
obtenu avec echo $PS1
et défini dans .bashrc
---------------------------------------------
Static IP address
http://lildude.co.uk/howto-configure-raspberry-pi-with-vnc-without-ever-connecting-keyboard-monitor

Modify the etc/network/interfaces file on your SD card and configure the IP address you desire, eg

iface eth0 inet static
address 192.168.1.10
netmask 255.255.255.0
network 192.168.1.0
broadcast 192.168.1.255
gateway 192.168.1.1
Sudo sans demande de mot de passe
Lancer sudo sans demande mot de passe

> je suis en train d'écrire un script pour automatiser certaines taches.
> Pour cela, j'ai besoin de me connecter avec un autre utilisateur.
> L'idée du script est en gros :
> #!/bin/sh
> $password
> su - $user
> maildirmake Maildir
> exit
> exit 0

hardcoder un mot de passe n'est _jamais_ une bonne idée ... cela pose
des problèmes de sécurité, de pérennité du script (l'user peut changer
de mot de passe à tout moment), ...

Pour remédier à cela on peut utiliser sudo :
sudo -i -u user script.sh

(Il n'a alors plus besoin de batailler avec su à l'intérieur du script)

Si l'on veut que la commande sudo -i -u ne demande pas de mot de passe,
il faut configurer cela le fichier /etc/sudoers (attention, ce dernier
ne s'édite qu'avec la commande visudo)

Si l'on veut que la commande /path/to/script.sh puisse être lancée par
l'utilisateur "chef" en se substituant aux utilisateurs "esclave1",
"esclave2" et "esclave3" sans avoir à entrer de mot de passe, il faut
ajouter les lignes suivantes au fichier /etc/sudoers:

######################################################
User_Alias CHEF = chef
Cmnd_Alias SCRIPT = /path/to/script.sh
Runas_Alias ESCLAVES = esclave1, esclave2, esclave3
CHEF ALL=(ESCLAVES) NOPASSWD: SCRIPT
######################################################

CHEF, ESCLAVES et SCRIPT sont des variables dont on peut choisir le nom
comme on veut.

Il suffit alors à "chef" de lancer la commande suivante :
sudo -i -u esclave1 /path/to/script.sh

Windows

demarrage

Connaître précisément ce qui démarre avec Windows, peut permettre de supprimer une fenêtre répétitive et inutile,
un malware installé malencontreusement ou involontairement,
ou vous débarrasser d'un outil malicieux type rançongiciel.


- msconfig
msconfig affiche dans les onglets services et démarrage, les applis et services qui se lancent, quel que soit l'utilisateur logué



- regedit
regedit donne accès aux clés de registre machine et utilisateur
Clés les plus courantes :
HKLM - Software - Microsoft - Windows - CurrentVersion - Run
HCU - Software - Microsoft - Windows - CurrentVersion - Run
HKLM signifie HKEY LOCAL MACHINE (démarrage système)
HCU signifie HKEY CURRENT USER (démarrage utilisteur)

Il est aussi possible de lire le registre en ligne de commande :
reg query HKLM\Software\Microsoft\Windows\CurrentVersion\Run



- autoruns
Autoruns pourra révéler des dossiers tels que
C:\ProgramData\Microsoft\Windows\Start Menu\Programs\Startup,
C:\Users\<username>\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup



- godmode
Apparu sous les dernières versions de windows (w7),
le godmode peut vous aider à vous dépatouiller,
en accédant directement à des dizaines de paramètres.

Comment activer le godmode Faites un clic droit dans le vide sur le Bureau et créez un nouveau dossier que vous devez renommer en lui donnant exactement ce nom : GodMode.{ED7BA470-8E54-465E-825C-99712043E01C}




- retour dans le temps
Si vous cherchez à vous débarrasser d'un logiciel malveillant installé
à un date connue, vous pouvez tenter de revenir en arrière,
en utilisant un point de restauration :
Programmes, Accessoires, Outils système puis sur Restauration du système.

drivers

Pilote carte réseau wifi sans fil mini packard bell dots.

Driver windows réseau wifi dots mini packard bell

infos_hardware

Scripts vbs d'informations matérielle et logicielle.

nom_modele_ordinateur.vbs
REM ========================
REM nom_modele_ordinateur.vbs
REM ========================
strComputer = "."
Set objWMIService = GetObject("winmgmts:" _
 & "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")
Set colSettings = objWMIService.ExecQuery _
 ("Select * from Win32_ComputerSystem")
For Each objComputer in colSettings
 Wscript.Echo "Nom de l'ordinateur: " & objComputer.Name
 Wscript.Echo "Fabriquant: " & objComputer.Manufacturer
 Wscript.Echo "Model: " & objComputer.Model
Next
infos_pc_Mike Nesbit.vbs
'Script created by Mike Nesbit 4-28-2010

'Here is a script that will provide valuable inventory information on computers that we
'choose on our domain.  Utilizing the registry and various WMI services, we can pull the
'installed software, video, bios, ram, processor, and hard drive information.
'This script will require a command line argument -name of machine- and will output
'the information to a text file named after the computer we choose.

On Error Resume Next

Dim strComputer ' the variable that will be used to idenfity the machien we will be gathering information from
Dim oReg ' the variable that will be used to connect and gather information from the registry about instaleld software
Dim colItems ' the variable that will be used to hold a lot of collections qeuried from various Win_32 Services
Dim objItem  ' objItem will be used to hold the different items that we request to output
Dim objWMIService ' this will hold the connection to the various WMI services that we will be using
Dim colSettings ' is used as a variable to hold a collection of information that is queried from various services
Dim objRAM ' my variable that will hold the information pertaining to the available RAM
Dim objProcessor ' my variable that will hold each piece of info I request about the processor
Dim objBIOS ' my variable that will be used to hold each piece of info I request from the Bios
Dim FSO  ' the variable that will be used to create the object which is a text file
Dim text   ' my variable to be used to be used to create the text file
Dim subkey
Dim arrSubkeys

strComputer = WScript.Arguments(0)   ' using strComputer to create a command line argument we want to be able to choose the computer
If WScript.Arguments.Count = 0 Then ' use the if then command if the argument is 0 then
WScript.Echo("You must enter a computer name") ' we will have it echo that we must enter a computer name
Else ' if we do enter a name then the script does not = 0 and the script moves to the else command which moves the script forward
Const HKEY_LOCAL_MACHINE = &H80000002  ' here is where a constant is used to access the locan machine registry
Const UnInstPath = "SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\" 'a constant that points to exactly where we want to search for the registry software in this case we are looking for software that can be uninstalled
Set oReg=GetObject("winmgmts:" _
& "{impersonationLevel=impersonate}!\\" & strComputer & "\root\default:StdRegProv") 'the rest of the line is set to grab the information from the registry I use strcomputer here as well so it will grab from the machine we choose instead of the local machine

write = strComputer & " Computer Inventory" & vbCrLf & "              " & vbCrLf & vbCrLf ' the report command here is used to write data to the text file here we are using strcomptuer so that it writes the name of the computer we are inventoring along with the text "computer inventory"

Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2")  ' objWMIService is set to equal the getobject command in winmgmts
Set colSettings = objWMIService.ExecQuery("Select * from Win32_OperatingSystem",,48) 'colItems is equaled to the objWMISergice query information from the Win32_OperatingSystem service
write = write & vbCrLf & "              " & vbCrLf     ' report is again used to create the lines (makes the text look more organized)
write = write & "Operating System" & vbCrLf & "              " & vbCrLf & vbCrLf  ' again we use report to write out Operating System in the text

For Each objItem in colSettings  ' the for each command here is set to give us the information from the colItems that we queried above.  For each item that we want in our collection it will be displayed below by what we want from it
write = write &  "Caption: " & objItem.Caption & vbCrLf
write = write &  "Description: " & objItem.Description & vbCrLf
write = write &  "EncryptionLevel: " & objItem.EncryptionLevel & vbCrLf
write = write &  "InstallDate: " & objItem.InstallDate & vbCrLf
write = write &  "Manufacturer: " & objItem.Manufacturer & vbCrLf
write = write &  "MaxNumberOfProcesses: " & objItem.MaxNumberOfProcesses & vbCrLf
write = write &  "Name: " & objItem.Name & vbCrLf
write = write &  "Organization: " & objItem.Organization & vbCrLf
write = write &  "OSProductSuite: " & objItem.OSProductSuite & vbCrLf
write = write &  "RegisteredUser: " & objItem.RegisteredUser & vbCrLf
write = write &  "SerialNumber: " & objItem.SerialNumber & vbCrLf
write = write &  "ServicePackMajorVersion: " & objItem.ServicePackMajorVersion
write = write &  "ServicePackMinorVersion: " & objItem.ServicePackMinorVersion & vbCrLf
write = write &  "Version: " & objItem.Version & vbCrLf
write = write &  "WindowsDirectory: " & objItem.WindowsDirectory & vbCrLf
Next

Set colSettings = objWMIService.ExecQuery("Select * from Win32_ComputerSystem") ' and we use the select statement for the Win32_ComputerSystem
write = write & vbCrLf & "              " & vbCrLf
write = write & "RAM Information" & vbCrLf & "              " & vbCrLf & vbCrLf  ' again we are using report to write text to the file

For Each objRAM in colSettings   ' for each command is used here to tell us that for each item found in the colsettings we queried above
write = write & objRAM.TotalPhysicalMemory /1024\1024+1 & "MB Total memory" & vbcrlf  ' this line is to report the total memory of ram that is available on the machine.
Next

Set colSettings = objWMIService.ExecQuery("Select * from Win32_Processor" , , 48 )  ' and it will query information from the Win32_Processor service
write = write & vbCrLf & "              " & vbCrLf
write = write & "Processor Information" & vbCrLf & "              " & vbCrLf & vbCrLf ' again we are writing out the lines to organize the output text and will also write Processor

For Each objProcessor in colSettings  ' for each command is used again to tell us that for each item that is found from the colsettings query above it will display what we want below which is what the objProcessor is used for to hold those items
write = write & "Name: " & objProcessor.Name & vbCrLf
write = write & "Manufacturer: " & objProcessor.Manufacturer & vbCrLf
write = write & "Description: " & objProcessor.Description & vbCrLf
write = write & "Current Clock Speed: " & objProcessor.CurrentClockSpeed & " MHz" & vbCrLf & vbCrLf
Next

Set colSettings = objWMIService.ExecQuery("Select * from Win32_BIOS" , , 48)             ' here we are setting the colsettings variable to equal the objWMIService query in which case we will be gathering information from the Win32_BIOS service
write = write & vbCrLf & "              " & vbCrLf
write = write & "BIOS Information" & vbCrLf & "              " & vbCrLf & vbCrLf  ' again we write out the lines and the 'BIOS Information’ to the text file

For each objBIOS in colSettings  ' for each command is used here to tell us that for each item that is found from the colsettings query above it will display what we want below which is what the objBIOS variable is used for
write = write & "Build Number: " & objBIOS.BuildNumber & vbCrLf
write = write & "Current Language: " & objBIOS.CurrentLanguage & vbCrLf
write = write & "Installable Languages: " & objBIOS.InstallableLanguages  & vbCrLf
write = write & "Manufacturer: " & objBIOS.Manufacturer & vbCrLf
write = write & "Name: " & objBIOS.Name & vbCrLf
write = write & "Primary BIOS: " & objBIOS.PrimaryBIOS & vbCrLf
write = write & "Release Date: " & objBIOS.ReleaseDate & vbCrLf
write = write & "Serial Number: " & objBIOS.SerialNumber & vbCrLf
write = write & "SMBIOS Version: " & objBIOS.SMBIOSBIOSVersion & vbCrLf
write = write & "SMBIOS Major Version: " & objBIOS.SMBIOSMajorVersion & vbCrLf
write = write & "SMBIOS Minor Version: " & objBIOS.SMBIOSMinorVersion & vbCrLf
write = write & "SMBIOS Present: " & objBIOS.SMBIOSPresent & vbCrLf
write = write & "Status: " & objBIOS.Status & vbCrLf
write = write & "Version: " & objBIOS.Version & vbCrLf

Next

write = write & vbCrLf & "              " & vbCrLf
write = write & "Video/Display Information" & vbCrLf & "              " & vbCrLf & vbCrLf  ' again writing information to the text file
Set colSettings = objWMIService.ExecQuery( "Select * from Win32_VideoController", , 48 )  ' colsettings is again equaled to the objWMIService in which case we will be gathering information from the Win32_VideoController service

For Each objItem in colSettings  ' for each command again to tell us that for each item that is found in our above colsettings query it will display what we want below and that is what objItem is used for to hold that information
write = write & " Name: " & objItem.Name & vbCrLf
write = write & " Description: " & objItem.Description & vbCrLf
write = write & " Video Processor: " & objItem.VideoProcessor & vbCrLf
write = write & " Adapter RAM: " & Int( ( objItem.AdapterRAM + 524288 ) / 1048576 ) & " MB" & vbCrLf
write = write & " Video Mode Description:  " & objItem.VideoModeDescription & vbCrLf & vbCrLf
Next

write = write & vbCrLf & "              " & vbCrLf
write = write & "Hard Drive Information" & vbCrLf & "              " & vbCrLf & vbCrLf  ' writing data to the text file
Set colSettings = objWMIService.ExecQuery( "Select * from Win32_DiskDrive", , 48 ) ' colsettings is set to = the objWMIService query again this time it will query from Win32_DiskDrive service

For Each objItem in colSettings  ' for each command that will tell us that for each item found in the above colsettings query it will ouput the information we request below
write = write & " Manufacturer: " & objItem.Manufacturer & vbCrLf
write = write & " Model: " & objItem.Model & vbCrLf
write = write & " Size: " & Int( ( objItem.Size + 536870912 ) / 1073741824 ) & " GB" & vbCrLf & vbCrLf

Next

oReg.EnumKey HKEY_LOCAL_MACHINE, UnInstPath, arrSubKeys    ' here oReg.EnumKey is again in conjunction with the registry path of our choice
write = write & vbCrLf & "              " & vbCrLf
write = write & "Installed Software" & vbCrLf & "              " & vbCrLf & vbCrLf  ' writing the reports to the text file

For Each subkey In arrSubKeys  ' we set up the for each command one last time to tell us that for iten found in query from the arrSubkeys variable that we will output what we need below
If Left (subkey, 1) <> "{" Then
write = write & subkey & vbCrLf
End If
Next

Set fso = CreateObject("Scripting.FileSystemObject")   ' here is where fso is set to the createobject command this is where it understands that it must create a file system object such as a text file
Set text = fso.CreateTextFile (strComputer & ".txt", ForWriting) ' the variable text is set to equal the fso variable that we defined above here it is used to create a text file the text file will be named whatever the computer we are searching for is named this is why we use strcomputer variable here we could name it anything
text.write write     ' this command tells it to write the reports that were gathered throughout the entire script yes we could have named it anything
text.close      ' here is where we tell the script to close the text file when no more writing is needed
End If
Wscript.Echo "I have finished retrieving the information"   ' and of course we end it with a Wscript.Echo command which will state that it is finished when the script is completed

outils

Trousse à outils windows

Télécharger jpegoptim pour windows Version locale

windows10

windows10 chez malekal

windows11

Télécharger image ISO 64 bits (5.2 Go)

Source lecrabeinfo.net

Outil de création média Windows 11

windows11_rufus_korben

ISO Windows 11 sur usb

Rufus

Unetbootin

Applications

gmail

Compte Google validation en deux étapes

Cliquer ici pour "Désactiver la validation en deux étapes"

La validation en deux étapes, ou authentification à deux facteurs, ou Two-Factor Authentication (2FA), permet de renforcer la sécurité en exidgeant deux mots de passe successivement au lieu d'un.
En cas de changement de smartphone, il faut désactiver l'ancien smartphone et activer le nouveau. Sans cela, vous n'aurez plus accès à votre compte Google.

digikam

digikam ...

gimp

Gimp est un puissant éditeur d'image open source et gratuit, mais qui manque par exemple d'une fonction de sauvegarde par lot de fichiers ouverts.

Rendre une couleur transparente

Rendre une couleur transparente
Rendre le fond d'une image transparente avec The Gimp
Par Sébastien Bilbeau, publié le 15 décembre 2005
Voilà une astuce que j'utilise régulièrement pour rendre le fond de mes images png transparentes, avant de les intégrer dans mon blog :

Menu Calque/Transparence/Ajouter un canal alpha
Sélectionner la zone à rendre transparente avec le selecteur de région par couleur (Shift+O)
Effacer (ou Suppr)
            

Scripts

Voici deux scripts qui s'ajoutent dans le menu Fichier, pour y remédier.

Sur linux, à copier dans un dossier qui ressemble à /home/pi/.config/GIMP/2.10/scripts

Script 1
; A ENREGISTRER DANS
; /home/pi/.gimp-2.8/scripts/script-fu-save-all-images.scm

(define (script-fu-save-all-images)
  (let* ((i (car (gimp-image-list)))
         (image))
    (while (> i 0)
      (set! image (vector-ref (cadr (gimp-image-list)) (- i 1)))
      (gimp-file-save RUN-NONINTERACTIVE
                      image
                      (car (gimp-image-get-active-layer image))
                      (car (gimp-image-get-filename image))
                      (car (gimp-image-get-filename image)))
      (gimp-image-clean-all image)
      (set! i (- i 1)))))

(script-fu-register "script-fu-save-all-images"
 "<Image>/File/Save ALL"
 "Enregistrer TOUT"
 "Saul Goode"
 "Saul Goode"
 "11/21/2006"
 ""
 )
Script 2
; A ENREGISTRER DANS
; /home/pi/.gimp-2.8/scripts/script-fu-save-all-images-and-quit.scm

(define (script-fu-save-all-images-and-quit)
  (let* ((i (car (gimp-image-list)))
         (image))
    (while (> i 0)
      (set! image (vector-ref (cadr (gimp-image-list)) (- i 1)))
      (gimp-file-save RUN-NONINTERACTIVE
                      image
                      (car (gimp-image-get-active-layer image))
                      (car (gimp-image-get-filename image))
                      (car (gimp-image-get-filename image)))
      (gimp-image-clean-all image)
      (gimp-quit 0)
      (set! i (- i 1)))))

(script-fu-register "script-fu-save-all-images-and-quit"
 "<Image>/File/Save ALL and quit"
 "Enregistrer tout et quitter"
 "Enregistrer tout et quitter"
 "Saul Goode"
 "Saul Goode"
 "11/21/2006"
 ""
 )

nautilus_scripts

nautilus est un gestionnaire de fichiers graphique sous linux. Il est présent dans les dépôts sous ubuntu, mint, raspbian ... Voici un exemple d'utilisation du menu contextuel (clic droit), permettant de renommer une série de fichiers sélectionnés, en leur ajoutant un suffixe.
TODO en cours

1. lancer nautilus-actions-config-tool
Action - Etiquette : suffixer

Commande - Chemin = /home/pi/3en1/scripts_console/nautilus_suffixer_fichiers.sh
Paramètres = %F
Répertoire de travail = %d

Menu 1 :

# /home/pi/3en1/scripts_console/nautilus_suffixer_fichiers.sh
# nautilus_suffixer_fichiers.sh

echo "%F"

traduction

Extensions à installer dans les navigateurs, sur PC, pour obtenir une traduction rapide d'une partie du texte.
Chrome/Chromium
Rememberry

Firefox
AE Mate translate

Bash

menu_bash

Des menus shell simples permettent de gagner en efficacité dans le travail d'administration au quotidien.

Ne pas oublier de rendre exécutable le fichier (chmod +x m_enu.sh) et de le placer dans le $PATH (ex : $HOME/bin)

Menu 1 :
# ~/bin/m_enu.sh

ip_dev=192.168.1.12
opt12=sftp://pi@${ip_dev}/opt

nnemo           () { nemo /run/user/1000/gvfs/sftp:host=192.168.1.12,user=pi/$1; }
terminal1       () { gnome-terminal --geometry=180x45 --hide-menubar -x ssh ${ip_dev}; }
autre           () { nemo; }

if   [ "x$1" = "x"  ]; then
    autre
else
    case $1 in
        n) nnemo m          ;;  # ouvrir nemo
        t) terminal1        ;;  # ouvrir terminal sur ip 12
    esac
fi

one-liners

Quelques one-liners shell

Ouvrir une terminal depuis le GUI et le garder ouvert
Raspbian OS (alt-F2) :
lxterminal --command="/bin/bash -c '/home/pi/bin/bak_data.sh -mftp; /bin/bash'" --geometry=200x50

Alt-F2 dans Linux Mint :
gnome-terminal -e "/bin/bash 'ls -l'; /bin/bash"
Ouvrir un shell ssh
gnome-terminal --geometry=180x45 --hide-menubar -x ssh 192.168.1.12
Recherche hôtes réseau avec nom
sudo arp-scan -I eth0 -l
Renommer dates photos
rename -n -v  's/(\d{4})(\d{2})(\d{2})_(\d{2})(\d{2})(\d{2})/$1-$2-$3_$4h$5mn$6/' *.jpg
                
Renommer fichiers photos
rename -v 's/é/e/g' *; rename -v 's/è/e/g' *;
                rename -v 's/ /_/g' * ; rename -v 's/û/u/g' *;
                rename -v 's/î/i/g' * ; rename -v 's/ï/i/g' *;
                rename -v 's/ô/o/g' * ; rename -v 's/ç/c/g' *;
                rename -v 's/\(/_/g' *; rename -v 's/\)/_/g' *;
                rename -v 's/ë/e/g' * ; rename -v 's/ê/e/g' *;
                rename -v 's/,/_/g' * ; rename -v 's/__/_/g' *
                

scripts


Voir la table des scripts et leur descriptif

imprimer_en_ligne_commande

imprimer_en_ligne_commande

Pour imprimer un fichier pdf en ligne de commande,
une imprimante par défaut doit être déclarée.

---------------------------
Dans Cups, http://localhost:631/printers/?
affiche le nom de file
HP_LaserJet_M14-M17_USB_VNC3B13985_HPLIP

Définir l'imprimante par défaut :
lpadmin -d HP_LaserJet_M14-M17_USB_VNC3B13985_HPLIP

Vérifier que la commande précédente a été prise en compte :
lpstat -d
=> system default destination: HP_LaserJet_M14-M17_USB_VNC3B13985_HPLIP

Impression réussie avec :
lp document.pdf



Transformer un PDF en image :
pdftoppm -r 300 source.pdf destination
        

scanner_canon_lide_300

scanner_canon_lide_300

Installation réussie sur linux mint 32 bits :
1. télécharger le pilote sur le site de Canon
Lien direct : scangearmp2-3.70-1-deb.tar.gz (403 035 octets)
2. installer après décompression avec sh install.sh
3. lancer scangearmp2

Exemples.sh

Exemples.sh

Commandes linux et de nombreux exemples appliqués.

Commandes linux
Commande Explication Exemples d'applications
ffmpeg Traitement image et vidéo en ligne de commande Créer une vidéo depuis une série d'images
ffmpeg -f image2 -i serie-1%04d.jpg -r 12 foo.avi
find Recherche et infos sur fichiers Rechercher des fichiers vidéo en affichant leur taille et en les triant par taille croissante
find /media/pi -type f -iname "*.avi"
-o -iname "*.mp4" -o -iname "*.h264"
-printf "%s:%h/%f\n"
| sort -k 1 -n | tee find_video.txt
imagemagick Traitement image en ligne de commande Annoter une série d'images avec leur nom

Annoter une série d'images jpg et créer une vidéo avec ffmpeg

# images2video.sh

# source : http://gangand.net/ff/formation/notes/system_partie_1.html

# création d'une vidéo serie_HH_MM_SS.avi
# depuis les images du dossier courant

# utile suite à la capture d'images par motion
# sur Raspberry Pi (oiseaux venant boire)
ls -1 *jpg | sort > /tmp/liste_jpg.txt
n=10000
mkdir /tmp/video_ffmpeg

# 1. copier les images
echo $(date) 1. copie jpg
while read jpg; do
    cp $jpg /tmp/video_ffmpeg/serie-$n.jpg
    n=$((n+1))
done < /tmp/liste_jpg.txt

# 2. annoter les images
echo $(date) 2. annotation
cd /tmp/video_ffmpeg
ls -1 *.jpg | xargs -i convert {} -fill white \
 -undercolor '#00000080' \
 -gravity South \
 -annotate +0+5 {} {}

# 3. créer une vidéo
echo $(date) 3. ffmpeg
ffmpeg -f image2 -i serie-1%04d.jpg -r 12 serie.avi

# 4. nettoyer
echo $(date) 4. nettoyage
mv serie.avi serie_$(date '+%Hh%Mmn%S').avi
rm /tmp/liste_jpg.txt
rm -rf video_ffmpeg

# 5. annoncer résultat
echo $(date) 5. fichier .avi créé dans $(pwd)

Vrac

RDV calendrier google

Créer un RDV google calendar

https://www.google.com/calendar/render?action=TEMPLATE&text=Réunion%20coordo%2031%20octobre&details=&location=&dates=20231031T123000Z%2F20231031T133000Z&ctz=Europe%2FParis

Voir aussi : Exemple RDV google calendar événement Grand Reims

https://calendar.google.com/calendar/u/0/r/eventedit?text=Ateliers+%C3%A9co-citoyens+%27Passeport+pour+demain%27&dates=20250521T140000/20250521T160000&ctz=Europe/Paris&details=Pour+plus+de+detail:+https://www.linscription.com/pro/activite.php?P1=143590&location=&pli=1&sf=true&output=xml#eventpage_6
Fichier ICS (Outlook, etc...) :
BEGIN:VCALENDAR
PRODID:Linscription
VERSION:2.0
BEGIN:VEVENT
SUMMARY:Ateliers eco-citoyens 'Passeport pour demain' - visite de la ferme l'Appel au Potager
DESCRIPTION:Pour plus d'informations cliquer ici https://www.linscription.com/pro/activite.php?P1=143590
DTSTART:20250521T140000
DTEND:20250521T160000
LOCATION:
END:VEVENT
END:VCALENDAR