Surveillance de masse

Nous reproduisons ici un texte fondamental quant à la compréhension de l’idée qu’aucune technique n’est neutre et que chacune porte en elle-même un projet politique, une vision du monde de part son existence elle-même. Ce texte est reproduit en licence libre sur le site de La Quadrature du Net et c’est pourquoi nous nous permettons de le reproduire tel quel tout en remerciant vivement ses auteurs de la clarté de leurs propos.

EDRi demande l’interdiction de la surveillance biométrique

Posted on14 mai 2020

L’association internationale EDRi, soutenue par La Quadrature du Net, lance une campagne européenne pour faire interdire la reconnaissance faciale et plus généralement la surveillance de masse biométrique. Nous publions la traduction du communiqué de lancement.

À travers toute l’Europe, des technologies de reconnaissance faciale et d’identification biométrique, intrusives et violant les droits, se répandent discrètement dans les espaces publics. Comme la Commission européenne consulte le public à ce sujet, EDRI appelle les États membres de l’UE à garantir que de telles technologies soient totalement interdites, à la fois dans la loi et dans la pratique.

Circulez, y a rien à voir…

À la fin de l’année 2019, au moins 15 pays européens ont expérimenté des technologies de surveillance de masse utilisant l’identification biométrique, comme la reconnaissance faciale. Ces technologies sont conçues pour surveiller, suivre et analyser les individus, pour les noter et les juger dans leur vie quotidienne.
Pire, plusieurs gouvernements l’ont fait en collaboration avec des entreprises technologiques secrètes, en l’absence de débat public et sans avoir démontré que ces systèmes respectent les critères les plus élémentaires de responsabilité, de nécessité, de proportionnalité, de légitimité, de légalité ou de sécurité.

Quelques milliers de caméras pour les gouverner tous

Sans la vie privée, vous n’avez plus de conversations privées avec vos ami·es, votre famille, votre supérieur ou même votre docteur. Votre militantisme et votreengagement pour sauver la planète sont connus de tous et toutes. Si vous lancez l’alerte pour dénoncer un fait d’exploitation ou de corruption, ou si vous assistez à une manifestation politique qui déplaît à votre gouvernement, on peut vous retrouver. Vous perdez de fait le droit d’assister à une cérémonie religieuse ou à une réunion syndicale sans qu’on garde un œil sur vous, le droit d’étreindre votre partenaire sans que quelqu’un vous regarde, le droit de flâner librement sans que quelqu’un puisse trouver ça louche.

La surveillance de masse permanente supprime le droit d’être réellement seul et instaure l’obligation d’être constamment surveillé et contrôlé.

COVID-1984 ?

Les débats autour de la pandémie de coronavirus ont vu naître des idées d’applications et d’autres propositions pour étendre rapidement les systèmes de surveillance, sous couvert de santé publique. Le risque est considérable que les dégâts causés par cet élargissement des mesures de surveillance survivent à l’épidémie. On peut se demander, par exemple, si les employeurs enlèveront les caméras thermiques des bureaux une fois la pandémie passée.

Les systèmes de surveillance biométriques exacerbent les inégalités structurelles, accélèrent la création de fichiers et de « profilages » illégaux, ont un effet intimidant sur les libertés d’expression et de réunion, et limitent les capacités de chacun·e à participer à des activités sociales publiques.

Fanny Hidvegi, responsable de la politique européenne à Access Now, insiste sur ce point :

« Les droits humains s’appliquent en temps de crise et d’urgence. On ne doit pas avoir à choisir entre la vie privée et la santé : protéger les droits numériques favorise la santé publique. La suspension des droits à la protection des données en Hongrie est la preuve que l’UE doit renforcer la protection des droits fondamentaux. »

La surveillance biométrique : une architecture d’oppression

Se présentant comme une « architecture d’oppression », la capture et le traitement non ciblé de données biométriques sensibles permet aux gouvernements et aux entreprises d’enregistrer en permanence et en détail qui vous rencontrez, où vous allez, ce que vous faites. Cela leur permet aussi d’utiliser ces informations contre vous — que ce soit par les pouvoirs publics pour faire appliquer la loi ou à des fins commerciales. Une fois ces enregistrements reliés à nos visages et corps, il n’y a plus de retour possible, nous sommes marqués au fer rouge. Il ne peut y avoir de place pour de telles pratiques dans une société démocratique.

Ioannis Kouvakas, juriste chez Privacy International (PI), membre d’EDRi met en garde :

« L’introduction de la reconnaissance faciale dans les villes est une idée extrémiste et dystopique qui menace explicitement nos libertés et pose des questions fondamentales sur le type de société dans laquelle nous voulons vivre. En tant que technique de surveillance très intrusive, elle offre aux autorités de nouvelles opportunités de s’en prendre à la démocratie sous prétexte de la défendre. Nous devons interdire son déploiement dès maintenant et de manière définitive avant qu’il ne soit trop tard. »

EDRi demande donc une interdiction immédiate et permanente de la surveillance de masse biométrique dans l’Union européenne.

La surveillance de masse biométrique est illégale

Cette interdiction est fondée sur les droits et protections consacrés par la Charte des droits fondamentaux de l’Union européenne, le Règlement général sur la protection des données (RGPD) et la Directive Police Justice. Ensemble, ces textes garantissent aux résidents de l’UE de vivre sans la crainte d’un traitement arbitraire ou d’un abus de pouvoir, et le respect de leur autonomie. La surveillance de masse biométrique constitue une violation de l’essence de ces textes et une violation du cœur même des droits fondamentaux de l’UE.

Une fois que des systèmes qui normalisent et légitiment la surveillance constante de tout le monde sont en place, nos sociétés glissent vers l’autoritarisme. L’UE doit donc veiller, par des moyens notamment législatifs, à ce que la surveillance de masse biométrique soit totalement interdite en droit et en pratique. Lotte Houwing, conseillère politique chez Bits of Freedom (BoF), membre d’EDRi, déclare :

« Les mesures que nous prenons aujourd’hui façonnent le monde de demain. Il est de la plus haute importance que nous gardions cela à l’esprit et que nous ne laissions pas la crise du COVID-19 nous faire sombrer dans un état de surveillance (de masse). La surveillance n’est pas un médicament. »

L’UE réglemente tout, des médicaments aux jouets pour enfants. Il est inimaginable qu’un médicament dont l’efficacité n’a pas été prouvée ou un jouet présentant des risques importants pour la santé des enfants soient autorisés sur le marché. Cependant, en ce qui concerne la captation et le traitement des données biométriques, en particulier à la volée dans les espaces publics, l’UE a été un foyer pour les expérimentations illégales. D’après une étude de 2020, plus de 80% des Européens sont pourtant opposés aux partages de leurs données faciales avec les autorités.

EDRi appelle la Commission européenne, le Parlement européen et les États membres à respecter leurs valeurs et à protéger nos sociétés en interdisant la surveillance de masse biométrique. S’ils s’y refusent, nous augmentons nos chances de voir naître une dystopie numérique incontrôlable.

25. Vit et taskwarrior

Voici un script permettant d’utiliser taskwarrior en ligne de commande avec une interface du type de cmus, pour la musique.

On lance vit en tapant simplement son nom.

Après avoir lancé vit , les principales commandes permettant de l’utiliser sont (cmd signifie simplement qu’il faut presser la touche qui suit) :

cmda STRINGcréer une nouvelle tâche de description STRING
cmdA STRINGcréer une annotation datée pour la tâche courante
cmdb STRINGdémarrer / arrêter une tâche
cmdm STRINGmodifie la description de la tâche courante en la renommant STRING
cmd:![rw] STRINGexecute « STRING » in shell. ‘r’ rereads, ‘w’ waits
cmdtprepend the command prompt with « :!rw task « 
cmd:s/OLD/NEW/passe OLD à NEW la description de la tâche courante
cmd:%s/OLD/NEW/change OLD to NEW in the current task’s description
cmdDsupprime l’annotation sélectionnée, supprime la tâche sélectionnée (confirmation par y)
cmdepermet d’éditer toutes les propriétés de la tâche courante dans un éditeur (vim par exemple)
cmd=voir toutes les informations concernant la tâche courante
cmd<enter>voir toutes les informations concernant la tâche courante
cmduannule le dernier changement
rpt:REPORTdisplay REPORT
rpt:REPORT FILTERdisplay REPORT with FILTER
rpt:STRING<tab>display REPORT using tab completion
rpt:<tab>display REPORT using tab completion of all defined reports
cmdqquitte après confimation
cmdQquitte
cmdZZquitte
cmd:qquitte
cmdf FILTERfilter the current report with FILTER
cmddmarque la tâche courante comme faite
navjdescend d’une ligne
navDownArrowdescend d’une ligne
navSpacebardescend d’une ligne
nav:Nva à la tâche numérotée N
nav0va à la première ligne
navggva à la première ligne
navHva à la première ligne sur l’écran
navGva à la dernière ligne
navLva à la dernière ligne sur l’écran
navMva à la ligne au milieu de l’écran
navkmonte d’une ligne
navUpArrowmonte d’une ligne
cmdNva à l’occurrence précédente d’une recherche
cmdnva à l’occurrence suivante d’une recherche
nav^lrafraîchit la liste (l’écran)
nav^fscroll down (forward) one page
navPgDnscroll down (forward) one page
nav^bscroll up (back) one page
navPgUpscroll up (back) up one page
cmd/STRINGrecherche vers le bas la chaîne STRING
cmd?STRINGrecherche vers le haut la chaîne STRING
cmdP [hmln]donne à la tâche courante la priorité H, M, L, ou none
cmdp STRINGplace la tâche courante dans le projet STRING
cmdp STRING<tab>place la tâche courante dans le projet STRING avec complétion (tab)
cmdp<tab>place la tâche courante dans un projet en utilisant la complétion (tab)
help:hprésente l’aide complète
help:h cmdprésente l’aide relative à la commande cmd
help:h helpprésente l’aide sur l’aide
help:h navprésente l’aide sur la navigation
help:h rptprésente l’aide sur les rapports
help:h PATTERNprésente les fichiers d’aide correspondants à l’occurrence PATTERN
cmdw STRINGmet en pause la tâche courante
cmdT +STRINGajoute le tag STRING à la tâche courante
cmdT -STRINGretire le tag STRING de la tâche courante
cmdT<tab>ajoute des tâches à la tâche courante avec complétion (tab)
On peut trouver la version anglaise de cette aide à l’aide de :h dans vit.

Vim et LaTeX

Voici un article amusant qui révèle la difficulté à se séparer de ses préjugés sur le bien fondé des interfaces graphiques.

Cela fait maintenant dix ans que j’utilise Latex et suis entièrement convaincu du bien fondé d’un traitement de texte basé sur un code source. Aucun autre traitement de texte en mode visuel, comme LibreOffice auquel je tire néanmoins ma révérence, ne m’a convaincu. LaTeX est un traitement de texte extraordinaire et le fait qu’il faille l’utiliser à avec un langage de script y est pour beaucoup.

Alors qu’aucun doute ne s’est jamais présenté dans ma tête sur LaTeX, il faut reconnaître que l’utilisation de différents éditeurs graphiques pour LaTeX, comme Texmaker, TexStudio ou Kile, m’a très longtemps empêché d’envisager l’utilisation d’éditeurs en ligne de commande comme vim ou emacs pour rédiger en LaTeX.

Je me lance donc aujourd’hui dans l’aventure avec vim. Pourquoi pas emacs ? Comme déjà dit ailleurs, la présence de vi par défaut sur toutes les distributions linux m’a fait considérer son utilisation avant toute chose. Mais emacs viendra un jour sans aucun doute, tant je considère les idées de RMS comme pertinentes.

Installation

On va ici supposer que LaTeX est installé et fonctionnel, car il s’agit dans cet article de montrer comment l’utiliser avec vim et son plugin vim-latex. Ce dernier est une solution standard et d’autres existent. Mais dans un premier temps, c’est à celle-ci que nous allons nous intéresser.

L’installation, sous Debian, se passe apparemment sans difficultés avec un petit :

apt-get vim-latesuite

Malheureusement, ce n’est pas aussi simple. Sous Debian, il faut encore passer par le README.debian du paquet pour y découvrir que :

… ce paquet fournit la composante latex-suite de vim, mais elle n’est pas activée par défaut. Si vous voulez l’activer sur le compte d’un utilisateur, exécutez :

vim-addons install latex-suite

Pareillement, pour l’activer pour tous les utilisateurs du système, exécutez (sous root) :

vim-addons -w install latex-suite

vim-addons est fourni par le paquet vim-addons-manager, jetez un coup d’œil à sa page de manuel pour plus d’informations.

En plus, vous devez mettre les lignes suivantes :

filetype plugin on
set grepprg)grep\ -nH\ $*
filetype indent on
let g:tex_flavor='latex'

dans ~/.vimrc (ou /etc/vim/vimrc sous root) pour une pleine utilisation. Pour plus d’informations sur ces lignes, type : « :help ls_1 » dans vim (après avoir activé ce plugin avec vim-addons).

Il est nécessaire d’activer le plugin, car la structure permettant de le gérer sera alors créée dans le répertoire ~/.vim/

En plus de cela, d’autres problèmes peuvent apparaître. Étonnamment, après l’activation du plugin, le caractère « é » n’était plus actif. Il était simplement impossible de le taper. Cela était dû au mappage de l’équivalent clavier utilisé par vim-latex pour mettre la commande \item de l’environnement itemize. Pour régler ce problème, il a fallu mettre la ligne suivante dans ~/.vimrc :

imap <buffer> <leader>it <Plug>Tex_InsertItemOnThisLine

comme cela est très bien décrit sur la page de FAQ de vim-latex :

http://vim-latex.sourceforge.net/index.php?subject=faq&title=FAQ#faq-viewing

Signalons enfin que tout au long de mes recherches, un fichier était souvent cité pour des modifications. Il s’agit de ~/.vim/tex.vim. Sous debian ce fichier n’existe pas à cet endroit. De plus, il existe dans ~/.vim/compiler et dans ~/.vim/indent. Enfin, les commandes à modifier n’étaient pas présentes dans ces deux fichiers. Je n’ai découvert le véritable fichier de configuration dans lequel celles-ci se trouvaient qu’en allant dans :

~/vim/ftplugin/latex-suite/texrc

C’est ce fichier qui permet la configuration du plugin vim-latex, mais il faut le savoir.

Utilisation

L’utilisation de vim-latex est relativement simple. En effet, vim détecte l’extension de votre fichier .tex pour modifier son comportement. Ainsi, en créant un fichier test.tex, par exemple, et en y insérant une structure de fichier LaTeX, vous pourrez constater avec plaisir que celle-ci est reconnue. En y mettant cependant quelques section, en enregistrant et quittant le fichier et en le rouvrant, vous aurez cependant la surprise de ne plus retrouver votre code. À l’intérieur de celui-ci seront présents des caractères « + » mis en évidence. C’est le pliage du code. Celui-ci étant activé par défaut, on peut être surpris, surtout si on ne sait pas comment le déplier.

Pour cela, il suffit de mettre le curseur dans la ligne où se trouve le code plié et, en mode normal de vim, de presser \za. Pour replier tout le code, en mode normal, il suffit de presser \rf.

Beaucoup d’autres commandes vont faciliter la vie pendant l’écriture en LaTeX. Le manuel les décrivant est à l’adresse :

http://vim-latex.sourceforge.net/documentation/latex-suite-quickstart/index.html

Compilation

Pour votre première compilation, il faut naturellement être attentif à avoir placé votre fichier source (.tex) dans un répertoire pour éviter de disperser les nombreux fichier qui vont apparaître.

Après cela, la compilation se fait très simplement en utilisant en mode normal la commande :

\\ll

Vous verrez alors apparaître une fenêtre de compilation qui si celle-ci se déroule bien, se refermera rapidement. Une compilation en DVI aura été réalisée. Pour en voir le résultat, il faut utiliser \lv.

Si des erreurs apparaissent, vous verrez votre terminal se diviser en deux parties. L’une contiendra les erreurs et l’autre le code. Vous pourrez alors corriger le code et recompiler pour faire disparaître la fenêtre de compilation.

Configuration de la compilation

Par défaut la compilation produit à partir du code source un fichier DVI. La production de documents utilisant Gnuplot par exemple nécessitant d’une part Gnuplot et d’autre part une compilation en postscript, on peut préciser la chaîne de compilation utilisée par vim-latex dans le fichier ~/.vim/ftplugin/latex-suite/texrc. Il s’agit en réalité d’un lien vers /usr/share/vim/addons/ftplugin/latex-suite/texrc. Or, ce fichier est amené à être mis-à-jour. Il ne faut donc pas l’utiliser directement, mais le copier dans le répertoire personnel à la place de son lien. Pour cela, renommez le lien, puis copiez le fichier en lui donnant comme propriétaire et groupe celui de l’utilisateur.

La structure de compilation choisie est DVI → PS → PDF. Pour le faire comprendre à vim-latex, dans ce fichier, il faut trouver la section « Rules : specifications of programs for compiling and viewing ». Dans celle-ci figurent les lignes suivantes :

if has('macunix')
    TexLet g:Tex_DefaultTargetFormat = 'pdf'
else
    TexLet g:Tex_DefaultTargetFormat = 'pdf'
endif

Selon les plateformes, Mac ou (else) autre, assurez-vous d’abord que le fichier final est est en PDF. C’est ce type de fichier que la commande \lv appellera.

Ensuite, il faut définir la chaîne de compilation. Un peu plus bas, se trouvent les deux lignes suivantes :

TexLet g:Tex_MultipleCompileFormats = 'dvi'
" TexLet g:Tex_FormatDependency_ps = 'ps'

Le premier indique s’il est possible qu’il faille compiler plusieurs fois le fichier et le second comment s’il faut compiler en ps, par exemple (ici le commentaire (« ) indique que la compilation en ps n’est pas requise). Dans notre cas, ces deux fichiers doivent contenir :

TexLet g:Tex_MultipleCompileFormats = 'dvi,ps,pdf'
TexLet g:Tex_FormatDependency_ps = 'dvi,ps,pdf'

La première ligne vous permettra d’éviter de devoir valider après la compilation de chaque fichier. La seconde est la chaîne de compilation choisie.

Plus bas se trouvent les règles de compilation (Compiler Rules). Il s’agit de définir l’appel des logiciels en charge de chaque étape de compilation. Pour la compilation LaTeX, il faut la commande :

TexLet g:Tex_CompileRule_dvi = 'latex -enable-write18 -shell-escape -interaction=nonstopmode -file-line-error-style $*'

Les deux premiers arguments de la commande latex ont ici été ajoutés pour permettre l’utilisation de Gnuplot. C’est cette commande qui est utilisée par défaut pour une compilation en DVI.

Puis, il faut spécifier la commande postscript :

TexLet g:Tex_CompileRule_ps = 'dvips -Ppdf -o $*.ps $*.dvi'

où l’argument -Ppdf pourrait être retiré, car il récupère la configuration de l’imprimante pour optimiser la sortie postscript.

Enfin, il faut spécifier la commande pdf :

TexLet g:Tex_CompileRule_pdf = 'ps2pdf $*.ps'

Ainsi, la compilation se fera automatiquement vers DVI → PS → PDF.

Relevez que si celle-ci ne devait pas permettre le bon visualiseur PDF, il vous faudrait spécifier celui-ci dans la partie qui suit, nommée Viewer rules avec :

TexLet g:Tex_ViewRule_pdf = 'okular'

par exemple.

Enfin, un petit problème est survenu qui rendait désagréable la compilation. Par défaut, l’enregistrement du document ne se faisait pas avant celle-ci, au lancement de la commande \ll. On peut comprendre que certains préfèrent qu’il en soit ainsi. Mais un autre comportement devrait être possible sans qu’il nécessite une utilisation complexe de vim. Or, pour le régler, ce que j’ai pu trouver tout au long de mes recherches pour le faire est de placer les deux lignes suivantes dans mon ~/.vimrc :

autocmd FileType tex call Tex_MakeMap('<leader>ll', ':update!<CR>:call Tex_RunLaTeX()<CR>', 'n', '<buffer>')
autocmd FileType tex call Tex_MakeMap('<leader>ll', '<ESC>:update!<CR>:call Tex_RunLaTeX()<CR>', 'v', '<buffer>')

Je ne commente pas ces lignes qui sont certainement parfaitement évidentes pour tout le monde 🙂 … Reste qu’elle fonctionnent parfaitement.

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.

19. Calendrier en ligne de commande

Ce que je voulais c’est la possibilité de mettre/retirer ou voir des événements sur mes calendriers. La recherche d’applications ne fut pas très longue, car une solution s’est imposée d’elle-même : calendar-cli. En effet, est mentionné sur la page de calendar-cli une alternative (gcalendar-cli) dont le g ne me satisfaisait pas (g ne signifiant pas Gnome, mais Goo…). De plus, la philosophie du projet calendar-cli :

The philosophy behind calendar-cli is slightly different, calendar-cli is supposed to be a simple cli-based caldav+ical client. No synchronization, no local storage.

étant simplement parfaite et le fait que celui-ci soit programmé en python m’a définitivement convaincu.

J’ai donc décidé de l’installer.

Le premier problème rencontré a été du à l’utilisation de python3. En effet, selon :

https://static.cinay.xyz/2016/05/calendar-cli-ligne-de-commande.html

il est nécessaire d’installer icalendar, caldav et tzlocal. Or, il existe phython3-icalendar, python3-caldav et python3-tzlocal dans les dépôts. J’ai donc installé tout cela et au premier lancement de calendar-cli me suis vu retourner une erreur liée à l’absence d’une méthode de tzlocal. En inspectant le fichier source, la première chose qui m’a frappé était l’appel à python2 en première ligne. J’ai donc installé python-icalendar, python-caldav et python-tzlocal et cette erreur à disparu.

On verra plus tard que la migration à python3 est en cours.

L’installation ne se fait pas via les dépôts puisqu’il n’y existe pas. Mais sur le second site mentionné ci-dessus, les instructions sont claires :

cd ~/scripts git clone https://github.com/tobixen/calendar-cli

Création d’un lien nommé calendarcmd

sudo ln -s /home/yannick/scripts/calendar-cli/calendar-cli.py /usr/local/bin/calendarcmd

Le fichier de configuration ~/.config/calendar.conf au format json

nano ~/.config/calendar.conf
{ "default": 
  { "caldav_url": "http://foo.bar.example.com/caldav/", 
    "caldav_user": "luser",
    "caldav_pass": "insecure"
  }
}

Les droits sur le fichier de configuration

chmod 0600 ~/.config/calendar.conf

Claires, parfaitement fonctionnelles, mais on en trouve une critique sur le site du projet (premier lien ci-dessus), puisqu’il est conseillé d’utiliser calendar_url pour spécifier l’adresse du calendrier spécifique d’un utilisateur et n’utiliser caldav_url que pour l’adresse du site fournissant les calendriers. Pour Framasoft, par exemple, cela donne :

{ "default":
{ "caldav_url": "https://framagenda.org/remote.php/dav/calendars/",
"calendar_url": "machin@truc.chose/personnel/",
"caldav_user": "nom_utilisateur",
"caldav_pass": "mdp"
},
"professionnel":
{ "caldav_url": "https://framagenda.org/remote.php/dav/calendars/",
"calendar_url": "machin@truc.chose/professionnel/",
"caldav_user": "nom_utilisateur",
"caldav_pass": "mdp"
}
}

Vient ensuite la phase de tests. La commande à lancer est, on l’aura compris : calendarcmd. Mais, quelle est la structure des ses arguments ? Deux exemples sont donnés. Le premier pour ajouter un événement :

calendarcmd calendar add '2016-05-18 11:45:00+2h' 'Test calendrier en ligne de commande'

Tout s’est bien passé. L’événement ajouté, s’est retrouvé comme par miracle sur mon calendrier.

Le second pour voir les événements depuis une date donnée :

calendarcmd calendar agenda --from-time=2016-05-17 --agenda-days=14

Une erreur s’est alors produite :

Traceback (most recent call last):
File "/usr/local/bin/calendarcmd", line 945, in <module>
main()
File "/usr/local/bin/calendarcmd", line 942, in main
ret = args.func(caldav_conn, args)
File "/usr/local/bin/calendarcmd", line 480, in calendar_agenda
events_ = find_calendar(caldav_conn, args).date_search(dtstart, dtend, expand=True)
TypeError: date_search() got an unexpected keyword argument 'expand'

Ici, un digression est nécessaire. La simplicité de cette erreur permettant de ne pas trop s’allonger ici, je me permet de la mettre en valeur pour montrer que l’accès au code source est indéniablement un plus dans ce genre de cas.

La lecture du retour d’erreur est claire : ligne 480 dans le code de la commande calendarcmd se trouve une erreur liée à un argument inattendu : expand. Évidemment, il faut savoir lire et prendre le temps de le faire. De plus, il faut se rappeler que la commande calendarcmd est un lien vers calendar-cli.py (voir ci-dessus). C’est donc dans ce fichier qu’il faut chercher.

À la ligne 480 se trouve :

events_ = find_calendar(caldav_conn, args).date_search(dtstart, dtend, expand=True)

et le problème vient du dernier argument de la méthode date_search de l’objet find_calendar. Évidemment, il est facile de simplement le supprimer, vu que « got an unexpected keyword argument ‘expand’ » dit clairement que python ne comprends pas celui-ci. Le problème est qu’il est parfois risqué de lancer une méthode en lui retirant un argument qui pourrait alors être par défaut différent de celui qui était donné. Enfin, par prudence, avant de le supprimer j’ai tenté de trouver la signature de la méthode (c’est-à-dire la spécification de l’ensemble des arguments qu’il utilise). Mais encore fallait-il savoir où chercher en d’autres termes, à quel module appartenait la méthode date_search où l’objet find_calendar.

À force de recherches, je suis tombé sur la documentation de caldav :

https://pythonhosted.org/caldav/caldav/objects.html#caldav.objects.Calendar.date_search

et y ai trouvé la méthode :date_search(start, end=None, compfilter=’VEVENT’) avec la description des paramètres :

  • start = datetime.today().
  • end = same as above.
  • compfilter = defaults to events only. Set to None to fetch all calendar components.

Le dernier paramètre n’étant pas expand et la valeur par défaut de compfilter étant pour récupérer tous les éléments du calendrier, supprimer le dernier argument devait être possible. Je l’ai donc fait et tout a très bien fonctionné.


Ainsi, les deux commandes de base :

calendarcmd calendar add '2016-05-18 11:45:00+2h' 'Test calendrier en ligne de commande'
calendarcmd calendar agenda --from-time=2016-05-17 --agenda-days=14

s’utilisent maintenant sans difficultés. Attention, la première va fournir en retour d’un ajout réussi, un uid d’événement (un nombre unique) qui est nécessaire pour éventuellement le supprimer (voir ci-dessous).

Pour la gestion de multiples calendriers, il suffit d’ajouter –config-section=professionnel :

calendarcmd calendar --config-section=professionnel agenda --from-time=2016-05-17 --agenda-days=14

pour obtenir les événements du calendrier professionnel. Pour en retirer :

calendarcmd calendar delete --event-uid=l_uid_de_l_evenement

Malheureusement, le retrait d’évènements par date n’est pas encore implémenté.

Pour trouver des événements et les supprimer, il faut leur uid. La commande suivante permet de les obtenir :

calendarcmd calendar --config-section=professionnel agenda --event-template "{dtstart} {summary} {uid}"

Elle retourne les événements du calendrier spécifié avec leur date de départ, le texte de commentaire et l’uid.