18. Processus en avant/arrière plan

Ce thème de la gestion de la ligne de commande est quelque peu plus complexe que les autres. Il est déroutant, car les raisons pour lesquelles on devrait s’y intéresser ne sont pas évidentes et il peut sembler à priori qu’elles sont même contre productives. Car, même la ligne de commande suppose l’utilisation de fenêtres graphiques. Généralement, lancer un terminal consiste à ouvrir la fenêtre d’un environnement graphique lui correspondant. Par exemple, on lance Terminator à partir du bureau LXQT ou LXDE. Un terminal apparaît donc finalement comme un simple programme particulier, à l’instar d’un navigateur qu’on lance depuis son interface graphique. Pour visiter un site internet, il ne viendrait cependant plus aujourd’hui à l’idée de lancer une instance de Firefox par site visité. Si ce fut le cas au début du net, aujourd’hui on utilise des onglets. Un navigateur apparaît donc comme un programme capable de faire plusieurs choses en même temps et cela sans qu’il soit nécessaire de le quitter.

En un sens, la gestion des processus s’apparente à la gestion des onglets d’un navigateur. Quelles sont les raisons qui poussent à l’utilisation d’onglets dans un navigateur ? On peut en voir plusieurs :

  • on peut changer de site et donc de travail sans fermer celui qui est en cours,
  • on peut grouper des tâches selon des ensembles cohérents de travaux,
  • on peut faire communiquer certains onglets et bénéficier des réglages déjà prédéfini,
  • on peut mieux gérer les problèmes de place dan la fenêtre.

Pour justifier l’intérêt qu’on peut porter à l’étude de la gestion des processus, de la même manière on peut reprendre les points ci-dessus en y ajoutant le fait que celle-ci est très importante dans deux cadres différents :

  • l’utilisation de commandes distantes comme celle de ssh et
  • l’utilisation d’un ordinateur sans aucune interface graphique.

Avant de se lancer dans les différentes méthodes de gestion des processus, remarquez qu’un terminal comme Terminator permet l’ouverture de plusieurs terminaux dans la même fenêtre et même le passage de chaqu’un d’eux en « avant plan », à l’aide de l’équivalent clavier Maj-Ctrl-X (voir l’article http://www.cvgg.org/wordpress/blog/4-terminator-pour-la-ligne-de-commande/). Plus, Terminator permet une gestion de groupement de terminaux, d’onglets, etc, qui est très puissante, mais n’est fonctionnel que dans le cadre de ce programme.


La première commande à connaître est la classique « esperluette ». Classiquement, lorsqu’on lance un programme en ligne de commande en invoquant son seul nom, on bloque le terminal qui attends l’affichage d’informations venant de celui-ci.

Pour rendre la main au terminal et faire passer la commande en arrière plan, il suffit de la terminer par une esperluette :

Texmaker &

Le terminal retourne alors entre crochets le numéro du processus en arrière plan de la console et le numéro d’identification du processus PID permettant de le tuer.

Deux problèmes persistent cependant :

  • les messages et les erreurs de la commande continuent à arriver dans la console dans laquelle on travaille sur de novelles commandes et
  • si on ferme le terminal, la commande en arrière plan est tuée.

Pour résoudre le premier problème, il suffit de rediriger les messages et les erreurs soit sur un fichier, soit à la poubelle :

Texmaker 1>/dev/null 2>/dev/null

Ci-dessus, on a redirigé la sortie standard (1>) et l’erreur standard (2>) vers la poubelle.

Pour résoudre le second problème, il faut abandonner l’esperluette.


La commande « nohup » résous automatiquement les deux problèmes ci-dessus. Elle envoie automatiquement la sortie de la commande dans un fichier nommé nohup.out et elle permet de fermer le terminal sans que la commande ne soit tuée. Attention, un Ctrl-C la tue.

Mais, malheureusement, on ne récupère pas le terminal. On peut donc fermer la fenêtre du terminal sans que l’application ne soit fermée, mais elle est alors complètement détachée du terminal.


Il est donc préférable d’avoir recours à des déplacements des processus en avant et arrière plan. Pour cela, il faut pouvoir arrêter et redémarrer les processus. En effet, il est nécessaire qu’un processus soit en mode pause pour pouvoir le déplacer.

Pour mettre un processus qui fonctionne déjà alors qu’il n’a pas été mis en arrière plan par l’action de l’esperluette, on a recours à :

Ctrl-Z

Par l’action de cet équivalent clavier, on stoppe le processus provisoirement et on rend la console à son utilisateur. Il peut alors passer le processus en arrière plan tout en le redémarrant par la commande :

bg

pour background. Le processus fonctionne alors en arrière plan, comme s’il avait été lancé directement en arrière plan par l’esperluette. Mais, il reste lié à la console et est tué si on la ferme.

Pour récupérer le processus en avant plan, il suffit d’utiliser la commande « fg » pour foreground ou si plusieurs commandes sont en arrière plan la commande suivie de son numéro dans la console :

fg %1

On voit qu’aucune de ces solutions ne sont totalement satisfaisantes, car soit on ne récupère pas la console, soit le processus se termine avec celle-ci.

Pour une solution plus complète, voyons maintenant « screen ».

Vidéo conférence – violation de domicile

J’écris ce petit billet pour faire part de mon immense étonnement face à la ruée du monde enseignant vers les vidéoconférences pour établir un travail d’enseignement à distance pendant le confinement dû au covid.

Jusqu’à présent, j’ai pensé que le domicile était pour chacun un lieu protégé du regard d’autrui, sauf en cas de circonstances si exceptionnelle qu’un juge devait statuer pour délivrer un mandat d’investigation à des policiers tenus de rendre des comptes quant à leurs fouilles.

À l’annonce de la nécessité d’un enseignement à distance, beaucoup d’enseignants ont décidé de donner des leçons en imposant clairement aux élèves le devoir d’utiliser la vidéo et cela, en période de confinement, dans leur domicile et plus particulièrement dans leur chambre. Certains on même demandé de photographier celle-ci. Tout cela avec la bénédiction implicite des départements de l’instruction publique.

Or, non seulement les outils utilisés, comme Zoom, Skype ou Team, sont des logiciels au code fermé dont aucune garantie de confidentialité n’est donnée, à part la parole de leur propres développeurs, mais leur utilisation étant faite sous l’autorité des enseignants, on peut se demander dans quelle mesure il est possible pour des enfants, des adolescents pour lesquels il est déjà difficile d’échapper à la participation à des réseaux sociaux utilisés par leur camarades, de s’opposer à une autorité scolaire qui s’introduit ainsi dans leur foyer.

Pour moi, la réponse est clairement qu’il ne leur est pas possible de refuser. Et non seulement l’élève ne peut le faire, mais sa famille non plus. Est-il normal qu’un enseignant puisse clairement écouter ce qui se passe dans une famille, se rendre compte des discussion qui s’y déroulent, des propos qui peuvent à tort ou à raison être tenu par chacun et plus encore, s’introduire dans l’intimité de la chambre d’un enfant ou d’un adolescent ?

Il est piquant de constater que des enseignants clamant haut et fort avant le covid la nécessité du respect de la vie privée, ne voient rien à redire à l’obligation qu’il donnent à leurs élèves d’utiliser la vidéo. Car, prétendre qu’ils ont le choix n’est pas honnête.

Pour moi, l’utilisation de logiciels de vidéo-conférence, libres et à plus forte raison propriétaires, est clairement une violation de domicile sans aucune justification.

Car il est totalement possible de réaliser un enseignement à distance sans utiliser la vidéo. De plus des logiciels respectueux des données de connexion ou des messages échangés par leur biais avec les élèves existent, le plus connu étant Moodle.

22. Éditer du texte en ligne de commande : vi

Ne tournons pas autour du pot, nous allons parler de vim et pas de emacs, même si les idées de RMS sont dans mon cœur.

Pendant longtemps, j’ai utilisé vi comme éditeur de texte en étant persuadé je j’utilisais vim. Puis un jour, après avoir configuré mutt (maileur en ligne de commande) pour utiliser vi, j’ai eu besoin de la correction orthographique. Or, tout ce que j’ai tenté de faire pour y parvenir n’a pas fonctionné jusqu’au moment où j’ai regardé si vim était bien installé. Il ne l’était pas. J’utilisais vi dans sa nudité la plus pure sous Debian. J’ai donc installé vim et beaucoup de choses sont apparues qui m’ont donné envie d’écrire cet article.

Configuration

La configuration de vim se fait dans le fichier ~/.vimrc. Voici une configuration très simple qui permet de voir comment cela fonctionne :

ab moi Machin Truc <machin.truc@chose.org>
" Un commentaire
set mouse=a
set number
set spell
set t_Co=256
map <F2> :set spell!<CR>
set spelllang=fr,en
hi SpellBad ctermfg=Red ctermbg=NONE

La première ligne crée un alias. En tapant « moi » dans vim suivi d’un espace, le texte « moi » sera remplacé par « Machin Truc <machin.truc@chose.org> ».
Ensuite se trouve un commentaire, annoncé par des guillemets « .
mouse=a précise que la souris peut être utilisée pour placer le curseur. C’est très utile, car dans vim, on se déplace dans la ligne et non de haut en bas à travers les lignes.
number spécifie qu’on veut des numéros de lignes.
spell spécifie qu’on peut utiliser un correcteur orthographique.
t_Co=256 fait passer la console en mode 256 couleurs.
map … lie la touche F2 à une bascule qui permet de passer au ou de revenir du mode de correction orthographique.
spelllang précise évidemment la ou les langues utilisées.
hi configure la couleur du texte (rouge) d’un mot mal orthographié et de son fond (ici aucun).

Correction orthographique

Un bon article sur la correction orthographique sous vim : http://www.jdhp.org/docs/tutoriel_vim_spellfr/tutoriel_vim_spellfr.html

La correction d’un mot se fait en tapant «z=». Des propositions sont faites alors et il faut choisir l’une d’entre elle dans la liste par son numéro.

On peut corriger toutes les occurrences d’un mot avec la commande «:spellr».
On passe de faute en faute vers le bas avec «]s» et vers le haut avec «[s ».
On peut désactiver et réactiver la correction orthographique, avec «:set spell» et «:set nospell».

Éditeur de texte

Déplacements

Ici, vi et vim se confondent. Ce sont des éditeur dédié au clavier et clairement orienté vers la logique de la structure. Celle-ci fait clairement la différence entre la structure logique du texte qui fait le sens d’un paragraphe et ce que l’on voit à l’écran. Un paragraphe logique peut s’étaler sur plusieurs lignes à l’écran. À la fin de celui-ci se trouve un saut de paragraphe. Pour l’écran, il y a plusieurs saut de lignes dans ce paragraphe. Si l’éditeur de texte ne fait pas la différence entre ces sauts et un saut de paragraphe, quand vous le copierez dans un éditeur ou le texte brut est nécessaire, en HTML par exemple, le paragraphe formera plusieurs lignes et la justification sera mauvaise. De plus la numérotation ne sera pas celle des lignes logiques, c’est-à-dire celle des paragraphes, mais celle arbitraire due à la largeur de l’écran.

Cela a une grande importance pour le déplacement à l’aide des touches clavier. Pour se déplacer dans une ligne, les flèches gauche et droite ou les touches H et L respectivement permettent de se déplacer d’un caractère vers la gauche ou la droite respectivement. Entre les lignes les flèches bas et haut ou les touches J et K respectivement permettent de se déplacer d’une ligne vers le bas ou le haut respectivement.

← ou H : un caractère vers la gauche
↓ ou J : une ligne vers le bas
↑ ou K : une ligne vers le haut
→ ou L : un caractère vers la droite

Pour les déplacement dans la ligne, il faut avoir recours aux touches suivantes :

0 : curseur sur le premier caractère de la ligne
17→ ou 17L : curseur 17 caractères plus loin vers la droite
5← ou 5H : curseur 5 caractères plus loin vers la gauche
^^ : curseur sur le premier caractère de la ligne
$ : curseur sur le dernier caractère de la ligne
w : saut d’un mot vers la fin de la ligne (séparateurs de mots non alphanumériques)
b : saut d’un mot vers le début de la ligne (séparateurs de mots non alphanumériques)
W : saut d’un mot vers la fin de la ligne (séparateur de mots : espaces)
B : saut d’un mot vers le début de la ligne (séparateur de mots : espace)
( : saut vers le début de la phrase ou le début de la phrase précédente
) : saut vers le début de la phrase suivante

gg : curseur au début de la première ligne
G : curseur au début de la dernière ligne
7G : curseur au début de la 7e ligne
{ : saut vers le paragraphe précédent
} : saut vers le paragraphe suivant

H : curseur en haut de l’écran
M : curseur au milieu de l’écran
L : curseur en bas de l’écran

Viewport

Il existe beaucoup de versions de vim. Certaines sont liées à des interfaces graphiques, comme GTK par exemple. Or, la gestion d’un press-papier permettant d’échanger des éléments entre les logiciels est prise en charge par l’interface graphique. Cela signifie qu’avec une version de vim qui n’est liée à aucune interface graphique, il n’existe pas de possibilités de réaliser un simple copier-coller à l’extérieur de vim. Cela peut poser des problèmes.

Pour les contourner, il faut utiliser la notion de wiewport.

Dans vim, on peut utiliser différents wiewports. Il s’agit de scinder vim en différentes parties. Ainsi, pour scinder vim horizontalement, il suffit de lancer la commande :

:sp nom_de_fichier

Si on omet le nom de fichier, on split la fenêtre de vim en deux parties, ouvertes sur le même document. On peut ainsi travailler sur deux parties différentes du document.

Si on met un nom de fichier, on peut ouvrir deux fichier différents dans la même instance de vim. Ainsi, on peut copier coller des éléments entre ces fichiers.

On peut aussi scinder verticalement le viewport avec la commande :

:vsp nom_de_fichier

Diverses commandes existent alors pour gérer les viewports :

Ctrl w successifs : change de viewport
Ctrl w puis + : agrandit le viewport
Ctrl w puis - : réduit le viewport
Ctrl w puis = : égalise les viewport
Ctrl w puis r ou R : échange les viewports
Ctrl w puis q : ferme le wiewport

Mouvements internes

Pour copier-coller à l’intérieur du traitement de texte vim, il suffit de sélectionner une portion de texte, de placer le curseur en mode commande sur l’endroit où on veut coller et de presser le bouton du milieu de la souris.

21. Météo en ligne de commande

Dans le cas de la météo, les données à récupérer doivent forcément être sur internet. L’idée est donc « simplement » de les récupérer à l’aide d’un programme généraliste qui n’est pas spécifiquement dédié à la météo. Il s’agit de

CURL
cURL est une interface en ligne de commande, destinée à récupérer le contenu d’une ressource accessible par un réseau informatique.
Cette commande va nous permettre d’interroger un service externe, mais surtout elle offre une interface proche de la ligne de commande classique comme on va le voir. La première étape est donc d’installer cURL si ce n’est déjà fait :
apt-get install cURL
Puis, on peut immédiatement interroger la ressource wttr.in ainsi :
curl wttr.in
pour obtenir les prévision en un endroit non choisi.
À l’instar de la ligne de commande, on peut avoir accès au options disponibles pour ce service de la manière suivante :
curl wttr.in/:help
Le résultat est une magnifique aide, formellement très semblable à ce que peut fournir un logiciel en ligne de commande, qui va nous permettre de spécifier l’utilisation de la langue française et le lieux choisi :
curl -H "Accept-Language: fr" wttr.in/vannes
et le résultat est magnifique :

Relevons l’existence d’un autre service tout aussi simplement accessible, mais moins abouti graphiquement et qui fait appel à la commande finger, généralement dédiée à des informations sur l’utilisateur (essayez finger dans options), mais utilisée ici pour interroger un service externe :

finger vannes@graph.no

Quelques options sont décrites dans cet article si vous voulez l’utiliser, mais nous n’irons pas plus loin ici.

Algues vertes

« L’histoire interdite »

Un ouvrage passionnant, sérieux et très documenté. Présenté sous forme de bande dessinée, il ouvre une fenêtre sur les pollutions de l’agriculture intensive en Bretagne et sur les méthodes des pollueurs-non payeurs pour se dégager de toute responsabilité. Il montre comment on peut procéder pour remettre systématiquement en cause les études scientifiques, à l’instar de ce que les fabriquant de tabac ont trop souvent fait. Il montre surtout que ce type d’agriculture est totalement incompatible avec un monde non seulement respectueux de la nature, mais aussi des gens, autant paysans que passants.

L’utilisation de la bande-dessinée pour un ouvrage d’investigation est ici parfaitement adaptée à cette situation de paysages et d’hommes malades d’une productivité qui déraille. À lire absolument.

WordPress : catégorie d’accueil

Ce tout petit article pour décrire comment demander à WordPress d’afficher une catégorie d’articles en page d’accueil.

Évidemment, il ne faut pas faire afficher une page statique comme page d’accueil, mais des articles. Pour cela il faut aller dans Réglages -> Lecture et choisir « Les derniers articles ». Mais, dans ces conditions, ce sont les articles de toutes les catégories qui vont s’afficher.

Pour filtrer ceux-ci pour n’en afficher qu’une seule, il suffit d’ajouter au fichier functions.php du thème, tout à la fin :

function affiche_category($query) {
if ($query->is_home() && $query->is_main_query()) {
$query->set('category_name', 'accueil');}}
add_action('pre_get_posts', 'affiche_category');

Dans un premier temps, on y définit une fonction dont l’action sera de ne retourner que les articles de la catégorie accueil. Elle porte évidemment le nom affiche_category et reçoit une requête ($query), un article par exemple. En premier lieu, elle détermine si l’article est destiné à la page de blog de WordPress (is_home), c’est-à-dire la page principale des articles (celle-ci pourrait ne pas être la page d’accueil du site si une page statique avait été choisie pour celui-ci ; une autre fonction pourrait alors être utilisée is_front_page différence) et si la requête est principale (porte sur des articles ou page et non sur leur contenu). Si les deux conditions sont remplies, elle utilise la méthode set pour sélectionner les articles qui font partie de la catégorie dont le nom est accueil (catégorie définie préalablement par vous-même dans WordPress).

Enfin, cette fonction est déclarée comme une action à effectuer avant (pre_get_posts) la requête principale (is_main_query). Référence.

Voilà, notez que d’autres possibilités existent pour choisir une, ou plusieurs, catégories (RTFM).