10. Redimensionner en ligne de commande

Pour redimensionner un lot d’images en ligne de commande, on peut utiliser ffmpeg. Ce paquet (à installer sur votre système) dispose d’une commande nommée :

mogrify

Cette commande remplace les fichiers sources par les fichiers modifiée, à moins qu’on lui spécifie un chemin particulier à l’aide de l’option path :

mogrify -resize 50% -quality 80 -path mon_dossier *.jpg

Cette commande diminue la taille des images du répertoire courant par deux, les compresse à 80% et les place dans le répertoire mon_dossier.

Il faut relever qu’on peut spécifier la taille en pixels : -resize 800×600 par exemple.

On peut aussi modifier la résolution

convert -units PixelsPerInch -density 300 image.jpg

Finalement, on peut utiliser une autre commande ffmpeg pour obtenir des informations sur l’image :

identify -verbose image.jpg | grep Quality

Sans le -verbose, on obtient moins d’informations et le pipe (|) sur grep permet la recherche sur le mot Quality.

Voilà, évidemment un man sur mogrify ou ffmpeg vous en dira plus.

9. Gestion du temps et des tâches en ligne de commande

Les deux softs remarquables pour ce type d’utilisation sont Timewarrior et Taskwarrior. Leur installation est très simple :

apt-get install timewarrior taskwarrior

Préalable

Avant toute chose, il faut bien comprendre la différence entre un gestionnaire de tâches et un gestionnaire de temps. Le plus simple est de considérer que le premier se concentre sur l’avenir et le second sur le passé.

Ainsi, quand on a une tâche à réaliser, elle peut être en cours ou finie. Un gestionnaire de tâche va donc comporter essentiellement la possibilité d’ajouter une tâche, d’en faire la liste et de la marquer comme finie. Par ailleurs, il doit pouvoir gérer des regroupements. Ainsi, il faut pouvoir considérer des projets qui regroupent plusieurs tâches.

Le gestionnaire de temps est simplement là pour enregistrer le temps passé sur chaque tâche. On doit pouvoir l’utiliser pour faire des rapports permettant de filtrer le temps passé sur les différentes tâches.

Ainsi, en utilisant simultanément les deux gestionnaires, on peut conserver l’histoire du temps passé et visualiser ce qu’il reste à faire.

Taskwarrior

Commençons par décrire taskwarrior. Taskwarrior ne se lance pas par une commande éponyme. Il fournit simplement la commande « task » qu’il faut faire suivre d’arguments. Les choses sont simples quand on les connaît :

  • task add nom : crée une tâche nommée nom mais ne la démarre pas
  • task list : permet de voir la liste de toutes les tâches
  • task numéro start : démarre la tâche qui a le numéro donné dans la liste
  • task numéro stop : stoppe la tâche qui a le numéro donné
  • task numéro done : marque comme faite la tâche qui a le numéro donné
  • task numéro del : détruit la tâche qui a le numéro donné

Taskwarrior fournit une liste des tâches et si timewarrior est installé, taskwarrior peut l’utiliser pour faire un décompte du temps passé sur la tâche. La liaison entre la tâche et le temps passé à l’exécuter se fait par l’intermédiaire des tags, comme nous le verrons plus bas.

On peut aussi travailler dans des projets. Par exemple pour créer un projet professionnel, sur le composant électronique INA219, avec pour tâche de mesurer la tension aux bornes d’un condensateur, on peut écrire :

task add projet:Prof.INA219 Tension aux bornes d'un condensateur

Le point (.) permet de faire des sous-projets (et des sous-sous-projets, …). Je vous laisse imaginer ensuite ce que peut faire taskwarrior, sachant qu’il peut aussi taguer des tâche, présenter des rapports d’activités, exporter les données, … FAMEUX, un grand merci à ses auteurs.

https://taskwarrior.org/docs/

Une bonne idée pour bien gérer ses tâches est de suivre la liste des bonnes pratiques décrites à l’adresse : https://taskwarrior.org/docs/best-practices.html

Timewarrior

Notez que taskwarrior ne permet pas de visualiser le temps passé sur une tâche pendant son activité. Ce n’est pas son rôle. Pour pouvoir le faire il s’agit d’utiliser timewarrior. Or, il faut aussi lier ces deux programmes. Ce qui est relativement simple. Les deux liens suivants vous permettrons de le faire :

https://timewarrior.net/docs/taskwarrior.html

https://lazybear.io/posts/2019-12-26-using-timewarrior-with-taskwarrior/

Cela se fait par l’ajout d’un « hook », c’est-à-dire d’un petit programme fourni par timewarrior à mettre dans le répertoire de taskwarrior. Sous Debian, ce programme se trouve dans la documentation de timewarrior et pour le mettre dans le bon répertoire de taskwarrior il faut utiliser la première commande ci-dessous. La seconde permet simplement de le rendre exécutable.

cp /usr/share/doc/timewarrior/ext/on-modify.timewarrior ~/.task/hooks
chmod +x ~/.task/hooks/on-modify.timewarrior

Ensuite, on vérifie que tout est bien en ordre avec la commande :

task diagnostics

qui devrait retourner une ligne comme :

Active: on-modify.timewarrior (executable)

On peut maintenant travailler avec les deux logiciels simultanément. En démarrant une tâche, taskwarrior va utiliser timewarrior pour lancer le décompte du temps passé sur celle-ci en lui affectant plusieurs tags. Ainsi, démarrer la tâche truc du projet machin démarrera un décompte auquel seront affectés les tags machin et truc. Retrouver celui-ci sera alors aisé en utilisant timewarrior.

Timewarrior

La référence pour la documentation sur timewarrior est la suivante :

https://timewarrior.net/docs

Essentiellement, deux manières de représenter l’information temporelle sont disponibles. Il s’agit du « rapport de synthèse » ou « summary report » et des « cartes » ou « charts ». On y accède par les commandes suivantes (exemples repris du site ci-dessus) :

timew summary
timew summary today
timew summary today - tomorrow
timew summary today to tomorrow
timew summary 2016-06-18T00:00
timew summary 2016-06-18T00:00 - 2016-06-19T00:00:00
timew summary 18th
timew summary saturday
timew summary :week
timew summary :month

Ce qui permet d’obtenir :

La seconde représentation comporte trois possibilités : day, week et month. La commande se décline ainsi :

timew day Test
timew week
timew month

Les arguments de ces commandes sont nombreux, notamment il existe la possibilité de limiter l’affichage automatiquement aux jours nécessaires.

Pour l’affichage suivant ici sur deux lignes en raison de la taille d’affichage de la console :

Timewarrior repose donc sur les tags. Indépendamment de taskwarrior, il est possible de lancer l’enregistrement d’une activité en utilisant la commande :

timew machin start

De cette manière, en lançant l’enregistrement, on lui affecte un tag. On peut en prendre conscience par le fait qu’il est possible de lancer l’enregistrement uniquement par :

timew start

pour ensuite affecter à cet enregistrement un tag particulier par :

timew @1 tag 'Un ptit essai'

où @1 est le numéro de la tâche qui vient de finir ou celui donné dans la liste des enregistrements obtenue par :

timew summary :month :ids

En séparant les tags par des espaces, on peut en mettre plusieurs. Ainsi, en utilisant taskwarrior pour démarrer une tâche par :

task machin start

on va démarrer son enregistrement pas timewarrior avec les tags machin et truc, si machin fait partie du projet truc.

Gestion des enregistrements

Évidemment, on peut agir sur les enregistrements s’ils n’ont pas été correctement faits. Plusieurs commandes sont disponibles :

  • timew split : coupe en deux parties égales un enregistrement en conservant ses tags.
  • timew shorten : avance la fin de l’enregistrement d’un intervalle de temps donné.
  • timew lengthen : repousse la fin de l’enregistrement d’un intervalle de temps donné.
  • timew move : repositionne un enregistrement à un moment donné par son début.
  • timew resize : redimensionne un enregistrement à un intervalle de temps donné.
  • timew untag : supprime un tag d’un enregistrement donné.

La structure précise de ces commandes est très bien décrite dans la page de manuel de timew.

3. Comment relever ses mails en ligne de commande

Dans la première partie, on a vu comment installer et configurer les outils nécessaires pour relever ses mails en ligne de commande. Essentiellement, il s’agit de fetchmail et Mutt.

Ainsi, pour relever ses mails, on utilise la suite de commandes suivantes :

fetchmail -kv -m "/usr/bin/procmail -d %T" & mutt -y

Pour rappel, succinctement, fetchmail/procmail va relever les mails et les distribuer dans les boites aux lettres (k laisse les messages sur le serveur, v rend fetchmail verbeux et m les envoie à procmail pour le tri). Puis, on lance mutt (y pour avoir les boites aux lettres).

Il faut maintenant apprendre à utiliser mutt.

De manière générale, si à la ligne de commande correspond un réel gain de temps, il est évident qu’il faut en apprendre la philosophie. Avec elle, lire attentivement, posément, est un impératif. Mémoriser des équivalents claviers est nécessaire, même s’il ne faut pas en exagérer la difficulté. Avec des interfaces graphiques la mauvaise réactivité permet de trouver normal de devoir parcourir les menus presque au ralenti. En ligne de commande , comme tout va plus vite, on a parfois l’impression d’exigences plus élevées. Ce n’est pas le cas évidemment et si comme avec tout logiciel il faut un certain temps pour être à l’aise, il n’est pas nécessaire de le faire rapidement et d’envisager de tout connaître.

On va donc ici donner quelques manipulations simples pour s’en sortir au mieux. Ensuite, à chacun de rechercher les fonctions que son usage réclame. La maxime RTFM (read the fucking manuel) sera donc de mise.

Lorsque mutt est lancé avec l’option -y, on arrive directement sur les différentes boites aux lettres.

Relevons cependant quelques éléments pratiques qui pourraient poser des problèmes :

  • Pour effacer des messages, il suffit de les marquer de la lettre « D » en pressant la touche <d> sur le message sélectionné. C’est simple. Mais, il faut relever que quand le message est marqué « D », il n’est plus possible de le sélectionner. Annuler l’effacement semble donc problématique. La solution est de se positionner dans la liste des messages sur le message suivant en date qui n’a pas été effacé et de presser la touche <u>. Ainsi, le message effacé ne le sera plus.
  • Quand on lance mutt par la commande <mutt -y>, on obtient la liste des boîtes aux lettres. Quand on a choisi d’en consulter une et qu’on est sur la liste des messages qu’elle contient, pour revenir aux boîtes aux lettres, il suffit de presser la touche y.

Voici enfin une liste des équivalents claviers qui permettent de gérer au mieux vos mails :


? pour obtenir de l’aide

t pour modifier la liste des destinataires,
c pour modifier la liste des personnes en Cc,
b pour modifier la liste des personnes en Bcc,
s pour modifier le sujet,
e pour rééditer le message,
a pour attacher des fichiers au mail,
p pour accéder aux fonctions de cryptage et de signature de GnuPG (voir ci-dessous),
q pour annuler l’envoi du mail,
y pour envoyer le mail.
r pour répondre à l’expéditeur du mail sélectionné,
g pour répondre à l’expéditeur et aux autres destinataires du mail sélectionné,
Tab pour aller au mail non lu suivant,
v pour faire la liste des fichiers attachés d’un mail puis s pour les détacher et les enregistrer sur le disque dur,
h pour afficher/cacher le message avec tous ses headers,
f pour transférer le mail sélectionné à quelqu’un,
d pour marquer le mail comme devant être effacé,
u pour annuler le marquage d’effacement,
F pour marquer/démarquer le message comme important, i.e. afficher un point d’exclamation au niveau du message,

a pour ajouter ou éditer l’entrée de l’expéditeur du message dans le carnet d’adresse,

$ pour réactualiser la boîte mail (effacer les messages marqués comme devant être effacés et afficher les messages qui viennent d’arriver),
G pour aller directement à la liste des boites mails,
o pour trier les messages de la boîte mail : il propose alors le choix entre un tri par date, par expéditeur, par destinataire, par sujet, par discussion (tri normal), etc…
w pour mettre un flag sur un message : il propose alors une liste des flags (cela permet notamment de remettre un message comme non-lu en remettant le flag N),
W pour enlever un flag ; par exemple W suivi de N marque comme lu le message,

q pour quitter Mutt.

Pour ajourner un message, il faut l’enregistrer, soit :wq dans vi et ensuite utiliser la touche P. Attention, pas p minuscule, qui chiffre le message, mais sa majuscule. Pour le rééditer composez simplement un message avec la touche m et il vous sera demandé si vous voulez reprendre le message, voir vous seront présentés les messages ajournés à choisir.

8. Installer un shell particulier : zsh

Après avoir installé terminator, un émulateur de terminal, on peut vouloir utiliser un shell particulier, différent de bash. Nous allons voir ici comment installer et configurer quelque peu un autre shell que bash, le shell zsh.

Sous debian des paquets sont disponibles. Il s’agit de :

zsh zsh-common zsh-syntax-highlighting zsh-theme-powerlevel9k

qu’il faut installer avec apt-get.

Ensuite, on va installer un framework permettant de gérer la configuration de zsh :

sh -c "$(curl -fsSL https://raw.github.com/robbyrussell/oh-my-zsh/master/tools/install.sh)"

Cela va installer un fichier ~/.zshrc dans lequel il faut choisir le thème que nous allons utiliser : powerlevel9k. On le fait par :

echo 'source /usr/share/powerlevel9k/powerlevel9k.zsh-theme' >> ~/.zshrc

et on recharge le fichier de configuration de zsh :

source ~/.zshrc

Si cela ne devait pas fonctionner, une autre manière d’installer le thème powerlevel9k et de le rapatrier par :

git clone https://github.com/bhilburn/powerlevel9k.git ~/.oh-my-zsh/custom/themes/powerlevel9k

Puis d’installer les fontes powerline par :

apt-get install fonts-powerline

et d’indiquer l’utilisation du thème dans le fichier ~/.zshrc par :

ZSH_THEME="powerlevel9k/powerlevel9k"

tout en n’oubliant pas de re-sourcer ce fichier :

source ~/.zshrc

On peut ensuite installer la coloration syntaxique par :

git clone https://github.com/zsh-users/zsh-syntax-highlighting.git $(ZSH_CUSTOM:-~/.oh-my-zsh/custom)/plugins/zsh-syntax-highlighting

et en déclarant le plugin dans le fichier ~/.zshrc :

plugins=( ... zsh-syntax-highlighting ... )

Enfin, pour que les indications du shell ne se trouvent pas sur la même ligne que ce qu’on va taper, il faut réaliser un passage automatique de la ligne en ajoutant au fichier de configuration de zsh (~/.zshrc) la ligne suivante :

POWERLEVEL9K_PROMPT_ON_NEWLINE=true

Beaucoup d’autres possibilités de configuration sont possibles. Une introduction intéressante a été donnée dans le numéro 217 de Linux Magazine de juillet-août 2018.

4. Terminator pour la ligne de commande

Pour générer ses mails, naviguer, mettre de l’ordre dans ses fichiers et plus encore en ligne de commande, il faut un bon émulateur de terminal. Terminator est connu pour permettre une configuration très souple et particulièrement bien adaptée à un tel travail.

Je vais ici présenter l’essentiel de ce qui est nécessaire pour pouvoir travailler confortablement avec cet outil.

Après installation par la commande :

apt-get install terminator

il faut passer par le menu de configuration. On lance donc terminator par le menu et on choisit ses « Préférences » par click droit sur celui-ci.

Ensuite, dans le menu global, sous « État de la fenêtre : », on choisit « Maximisé ». Ainsi, terminator s’ouvrira en mode plein écran.

Puis, on change l' »Arrière plan » du « Profil » par « Défaut », pour le mettre en mode « Transparent » à 0.7, soit avec 30% de transparence.

Avec un écran relativement grand, on peut demander à terminator de créer trois émulateurs au démarrage. Pour cela, on commence par ajouter/scinder nos émulateurs à l’aide des options de « Division » du menu contextuel sous le click droit. On configure donc notre fenêtre terminator comme on l’entend. Puis, toujours dans les préférences, on enregistre cette disposition comme celle par défaut dans le menu « Dispositions ». Attention, il ne faut pas ajouter une disposition, mais simplement presser le bouton enregistrer alors que la configuration par défaut est sélectionnée.

Quelques commandes intéressantes :

  • Ctrl-L : efface la fenêtre, c’est-à-dire remet au haut de la fenêtre l’invite de commande. Mais vous ne perdez pas l’historique.
  • Reset : réinitialise le terminal. Vous effacez donc ici l’historique de la session.
  • Ctrl-Shift-E : divise verticalement la fenêtre.
  • Ctrl-Shift-O : divise horizontalement la fenêtre.
  • Alt-→ : donne le focus à l’onglet terminator de droite (← : de gauche, etc.).
  • Ctrl-Shift-P : focus sur l’onglet précédent (Previous).
  • Ctrl-Shift-N : focus sur l’onglet suivant (Next).
  • Ctrl-Shift-W : ferme l’onglet courant.

Et voilà, c’est simple, mais la configuration des dispositions peut s’avérer difficile par ajout. À vous de faire vos expériences.

5. Gérer ses fichiers en ligne de commande

Les navigateurs de fichiers utilisent des commandes texte pour permettre une gestion graphique des fichiers. Il est parfaitement possible de gérer ses fichiers directement dans un émulateur de terminal en ligne de commande pure. Entre les deux se trouvent Midnight Commander, mc pour les intimes, ou Ranger des gestionnaires de fichier en ligne de commande. Quelle différence avec une gestion directement dans la console ?

Midnight Commander

Fondamentalement, le principe de fonctionnement de mc repose sur sa présentation des fichiers dans deux volets gauche et droite. Il ne faut pas perdre cela de vue. Par ailleurs, en lieux et place de commandes texte, les touches F1, … ou même la souris prennent un rôle important.

En bas de la fenêtre, se trouvent des nombres correspondant chacun au touches F1, F2, … avec en regard un mot introduisant leur rôle. Par exemple, <1 Aide> fait comprendre que la touche <F1> permet d’obtenir l’aide. Ainsi aussi, <F2> donne accès à un menu permettant différentes opérations sur les fichiers, <F3> lance un visualiseur de fichier prédéfini, <F4> lance un éditeur de texte prédéfini sur le fichier sélectionné, <F5> copie un fichier d’un volet à l’autre (il faut au préalable sélectionner la destination dans le volet opposé à celui où est sélectionné le fichier), <F6> coupe colle un fichier sélectionné dans le volet opposé ou le renomme si on spécifie un autre nom, <F7> crée un répertoire, <F8> supprime un fichier ou un répertoire, <F9> bascule entre la barre de menu et les volets, <F10> permet de quitter les menus sélectionnés ou mc lui-même.
On peut aussi accéder à ces fonctions à l’aide de la souris.

Tout en haut, se trouvent les menus <Gauche>, <Fichier>, <Commande>, <Options> et <Droite> dont chaque élément est clairement décrit par son nom. C’est évidemment là que se trouvent les avantages de mc sur la ligne de commande pure.
Par exemple, dans le menu fichier se trouve un item «Chmod» permettant de modifier les droits des fichiers à la souris en cliquant simplement sur une liste très explicite.
Je vous laisse découvrir le reste.

Finalement, la ligne de commande est toujours accessible juste au-dessus de la barre des fonctions F1, …

Ranger

Il s’agit ici d’un gestionnaire de fichier remarquable par sa simplicité. Même s’il est configurable différemment, l’idée est de présenter l’arborescence à trois niveaux. Au centre, une colonne avec le répertoire dans lequel on se trouve, à gauche les fichier ou dossiers du répertoire supérieur et à droite ceux du répertoire inférieur. C’est tout. Aucun bandeau supplémentaire.

Pour agir sur les fichier ou dossiers sélectionnés, deux méthodes sont possibles :

  • une touche de fonction ou un équivalent clavier ou
  • la touche deux-points (:) qui donne un accès direct à la ligne de commande dans le répertoire de travail.

Dans le premier cas, il faut connaître les associations de touches-actions. Elles sont décrites dans le document ci-dessous fourni sur le site de Ranger.

Les touches spécifiques à Ranger

Quant à la seconde manière d’agir, elle nous relie directement au terminal et je ne vais pas décrire ici les commandes qui lui sont spécifiques.

Par contre, celle-ci permet d’accéder à des fonctions spécifique à Ranger. Un unique exemple suffira. Comment afficher dans Ranger les fichiers cachés ? Simplement en modifiant au vol la préférence du navigateur correspondant à l’affichage de ces fichiers. Pour cela, il faut passer en ligne de commande à l’aide de la touche deux-points (:) et écrire :

:set show_hidden true

:set show_hidden false

pour afficher ou cacher les fichiers cachés.

Il existe cependant un raccourci permettant de faire cela plus facilement :

CTRL h

Il s’agit d’une bascule : un pression et on voit les fichiers cachés, une autre et ils disparaissent

Reste à dire que Ranger dispose d’équivalents claviers qui ne dépayseront pas les utilisateurs de vi, ce qui est une très bonne chose.

Par exemple, pour couper/copier/coller des fichiers d’un répertoire à un autre, il suffit de les sélectionner avec la barre d’espace, puis pour les couper taper dd ou pour les coller taper yy, d’aller dans le répertoire de destination et de taper pp.

Pour choisir quel logiciel utiliser pour ouvrir un fichier, il suffit de presser la touche r et Ranger proposera tous les logiciels disponibles pour ce type de fichier dans un menu déroulant.

Ranger permet aussi de mémoriser un raccourci vers un dossier. Pour cela, il faut se placer DANS le dossier en question, c’est-à-dire qu’il doit se trouver dans la colonne de gauche et qu’on doit voir au milieu les fichiers qu’il contient. Ensuite, il faut presser la touche m suivie d’une autre touche. Par exemple : mz. La touche z sera alors associée au répertoire en question. Pour s’y rendre ensuite, il suffit d’utiliser l’apostrophe : ‘ ou ` de la manière suivante : ‘z. Ensuite, pour revenir directement au répertoire d’origine, il suffit d’utiliser deux apostrophes successifs (pas des guillemets  » !) :  ».

Pour configurer les applications par défaut lancées par ranger (mais vous pouvez toujours obtenir une liste d’applications pour le fichier sélectionné avec la touche r), il faut configurer le fichier ~/config/rifle.conf. Par exemple, pour lancer le visualiseur d’images en ligne de commande Feh, il faut déplacer la ligne :

mime ^image, has feh, X, flag f = feh -- "$@"

au haut des commandes de type mime ^image. Car, c’est la première commande qui est celle par défaut.On l’aura compris, pour lancer une commande ranger il faut taper deux-points (:) et pour lancer un programme directement dans la ligne de commande, soit on passe par une demande de shell à ranger :

:shell

soit on utilise le point d’exclamation (!).

Il est aussi intéressant de savoir qu’on peut ouvrir un fichier en root à l’aide du flag r :

:open_with -r vim

et comme le raccourci pour :open_with est r, on pourrait écrire :

r -r vim

De plus, on peut aussi ouvrir un fichier dans une nouvelle console avec le flag t :

:open_with t vim

Remarquez ici l’absence de tiret. Il aurait aussi été possible d’écrire :

:shell -t vim fichier

Enfin, une commande extrêmement pratique. Plutôt que d’utiliser r pour ouvrir avec un programme particulier un fichier, on peut utiliser l (la lettre l, comme lulu) pour ouvrir un fichier selon son extension. Ce qui est très intéressant, c’est que avec vim, le fichier s’ouvre directement dans le terminal dans lequel on a lancé ranger. Vim remplace donc provisoirement ranger et quand on le quitte on revient à ranger. C’est TOP.


Pour faire de vi l’éditeur de texte lancé par défaut depuis ranger, il faut simplement changer la variable d’environnement que ranger utilise par défaut pour savoir quel éditeur utiliser, dans votre ~./bash.rc ou 

export $EDITOR=vi

et si vous voulez le faire au niveau de ranger, remplacer $EDITOR par vi dans les lignes :

#mime ^text, label editor = ${VISUAL:-$EDITOR} -- "$@"
mime ^text, label editor = ${VISUAL:-vi} -- "$@"
#!mime ^text, label editor, ext xml|json|csv|tex|py|pl|rb|js|sh|php = ${VISUAL:-$EDITOR} -- "$@"
!mime ^text, label editor, ext xml|json|csv|tex|py|pl|rb|js|sh|php = ${VISUAL:-vi} -- "$@"

comme cela est fait ci-dessus (les lignes commentés par # sont les lignes originales).

Liens intéressant :

Ranger LE navigateur de fichier en mode terminal

https://www.digitalocean.com/community/tutorials/installing-and-using-ranger-a-terminal-file-manager-on-a-ubuntu-vps