<?xml 
version="1.0" encoding="utf-8"?><?xml-stylesheet title="XSL formatting" type="text/xsl" href="https://www.momh.fr/spip.php?page=backend.xslt" ?>
<rss version="2.0" 
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:atom="http://www.w3.org/2005/Atom"
>

<channel xml:lang="fr">
	<title>momh</title>
	<link>https://momh.fr/</link>
	<description>My Own Memory Hole se veut une sorte de &#171;&#160;vitrine&#160;&#187; de mon parcours et de mon exp&#233;rience mais aussi de mes centres d'int&#233;r&#234;t et constitue donc en quelque sorte ma m&#233;moire en ligne, m&#233;moire virtuelle d&#233;localis&#233;e mais ordonn&#233;e et index&#233;e&#8230;</description>
	<language>fr</language>
	<generator>SPIP - www.spip.net</generator>
	<atom:link href="https://www.momh.fr/spip.php?id_mot=2&amp;page=backend" rel="self" type="application/rss+xml" />




<item xml:lang="fr">
		<title>Eclipse&#160;: bulles contextuelles hors de l'&#233;cran</title>
		<link>https://www.momh.fr/eclipse-bulles-contextuelles-hors-de-l-ecran</link>
		<guid isPermaLink="true">https://www.momh.fr/eclipse-bulles-contextuelles-hors-de-l-ecran</guid>
		<dc:date>2022-10-12T12:13:35Z</dc:date>
		<dc:format>text/html</dc:format>
		<dc:language>fr</dc:language>
		<dc:creator>Brice Boucard</dc:creator>


		<dc:subject>Linux</dc:subject>

		<description>
&lt;p&gt;Sous Gnome Shell dans sa version 42, sous Wayland, les bulles contextuelles d'Eclipse affichant la JavaDoc associ&#233;e aux m&#233;thodes sugg&#233;r&#233;es lors de la saisie d&#233;passent de l'&#233;cran... &lt;br class='autobr' /&gt; La chose n'est pas extr&#234;mement simple &#224; d&#233;crire et les recherches sont de fait relativement d&#233;licates &#224; mener... Plut&#244;t qu'un long discours, voici une capture d'&#233;cran pr&#233;sentant le souci&#160;: &lt;br class='autobr' /&gt;
Retrouver un Eclipse utilisable &lt;br class='autobr' /&gt;
Je ne saurais expliquer trop pr&#233;cis&#233;ment mais la solution consiste &#224; lancer Eclipse en&#160;(&#8230;)&lt;/p&gt;


-
&lt;a href="https://www.momh.fr/blog" rel="directory"&gt;Blog&lt;/a&gt;

/ 
&lt;a href="https://www.momh.fr/linux" rel="tag"&gt;Linux&lt;/a&gt;

		</description>


 <content:encoded>&lt;div class='rss_chapo'&gt;&lt;p&gt;Sous Gnome Shell dans sa version 42, sous Wayland, les bulles contextuelles d'Eclipse affichant la JavaDoc associ&#233;e aux m&#233;thodes sugg&#233;r&#233;es lors de la saisie d&#233;passent de l'&#233;cran...&lt;/p&gt;&lt;/div&gt;
		&lt;div class='rss_texte'&gt;&lt;p&gt;La chose n'est pas extr&#234;mement simple &#224; d&#233;crire et les recherches sont de fait relativement d&#233;licates &#224; mener... Plut&#244;t qu'un long discours, voici une capture d'&#233;cran pr&#233;sentant le souci&#160;:&lt;/p&gt;
&lt;div class='spip_document_116 spip_document spip_documents spip_document_image spip_documents_center spip_document_center spip_document_avec_legende' data-legende-len=&#034;22&#034; data-legende-lenx=&#034;&#034;
&gt;
&lt;figure class=&#034;spip_doc_inner&#034;&gt; &lt;a href='https://www.momh.fr/IMG/png/eclipse_wayland.png' class=&#034;spip_doc_lien mediabox&#034; type=&#034;image/png&#034;&gt; &lt;img src='https://www.momh.fr/local/cache-vignettes/L500xH269/eclipse_wayland-6a06e.png?1724080837' width='500' height='269' alt='La bulle de JavaDoc d'Eclipse sous Wayland d&#233;borde de l'&#233;cran.' /&gt;&lt;/a&gt;
&lt;figcaption class='spip_doc_legende'&gt; &lt;div class='spip_doc_titre '&gt;&lt;strong&gt;Eclipse sous Wayland
&lt;/strong&gt;&lt;/div&gt; &lt;/figcaption&gt;&lt;/figure&gt;
&lt;/div&gt;&lt;h2 class=&#034;spip&#034;&gt;Retrouver un Eclipse utilisable&lt;/h2&gt;
&lt;p&gt;Je ne saurais expliquer trop pr&#233;cis&#233;ment mais la solution consiste &#224; lancer Eclipse en utilisant X11 comme backend&lt;small class=&#034;fine d-inline&#034;&gt;&#160;&lt;/small&gt;; dans un terminal, il suffit de lancer la commande suivante&#160;:&lt;/p&gt;
&lt;div class=&#034;precode&#034;&gt;&lt;pre data-language=&#034;bash&#034; class='spip_code spip_code_block language-bash' dir='ltr' style='text-align:left;'&gt;&lt;code&gt;export GDK_BACKEND=x11; eclipse &lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Et vous devriez alors non seulement retrouver vos bulles contextuelles correctement positionn&#233;es mais aussi pouvoir utiliser v&#233;ritablement les fen&#234;tres de cr&#233;ation de projet, de g&#233;n&#233;ration de constructeurs ou d'accesseurs... puisqu'elles prennent alors toute la hauteur de l'&#233;cran et n'en d&#233;bordent pas. Ce qu'illustrent les deux captures ci-dessous.&lt;/p&gt;
&lt;div class='spip_document_115 spip_document spip_documents spip_document_image spip_documents_center spip_document_center spip_document_avec_legende' data-legende-len=&#034;32&#034; data-legende-lenx=&#034;x&#034;
&gt;
&lt;figure class=&#034;spip_doc_inner&#034;&gt; &lt;a href='https://www.momh.fr/IMG/png/eclipse_x11.png' class=&#034;spip_doc_lien mediabox&#034; type=&#034;image/png&#034;&gt; &lt;img src='https://www.momh.fr/local/cache-vignettes/L500xH281/eclipse_x11-940e9.png?1724080838' width='500' height='281' alt='Les bulles contextuelles sont alors correctement positionn&#233;es dans la fen&#234;tre et ne d&#233;bordent plus de l'&#233;cran.' /&gt;&lt;/a&gt;
&lt;figcaption class='spip_doc_legende'&gt; &lt;div class='spip_doc_titre '&gt;&lt;strong&gt;Eclipse avec X11 comme backend
&lt;/strong&gt;&lt;/div&gt; &lt;/figcaption&gt;&lt;/figure&gt;
&lt;/div&gt;
&lt;p&gt;&#8203;&lt;/p&gt;
&lt;div class='spip_document_117 spip_document spip_documents spip_document_image spip_documents_center spip_document_center spip_document_avec_legende' data-legende-len=&#034;44&#034; data-legende-lenx=&#034;x&#034;
&gt;
&lt;figure class=&#034;spip_doc_inner&#034;&gt; &lt;a href='https://www.momh.fr/IMG/png/eclipse_project.png' class=&#034;spip_doc_lien mediabox&#034; type=&#034;image/png&#034;&gt; &lt;img src='https://www.momh.fr/local/cache-vignettes/L500xH281/eclipse_project-6d7cc.png?1724080838' width='500' height='281' alt='Avec le backend GTK X11, la fen&#234;tre appara&#238;t dans toute sa hauteur, les boutons d'actions sont visibles et utilisables.' /&gt;&lt;/a&gt;
&lt;figcaption class='spip_doc_legende'&gt; &lt;div class='spip_doc_titre '&gt;&lt;strong&gt;Fen&#234;tre de cr&#233;ation de projet sous Eclipse
&lt;/strong&gt;&lt;/div&gt; &lt;/figcaption&gt;&lt;/figure&gt;
&lt;/div&gt;&lt;h2 class=&#034;spip&#034;&gt;Lanceur&lt;/h2&gt;
&lt;p&gt;&#8203;&lt;br class='autobr' /&gt;
J'avais install&#233; Eclipse via Snap&lt;small class=&#034;fine d-inline&#034;&gt;&#160;&lt;/small&gt;; pour modifier le lanceur, il convient tout d'abord de copier le lanceur original dans &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;.local/share/applications&lt;/code&gt;&#160;:&lt;/p&gt;
&lt;div class=&#034;precode&#034;&gt;&lt;pre data-language=&#034;bash&#034; class='spip_code spip_code_block language-bash' dir='ltr' style='text-align:left;'&gt;&lt;code&gt;sudo cp /var/lib/snapd/desktop/applications/eclipse_eclipse.desktop ~/.local/share/applications &lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Et de modifier la ligne Exec de ce nouveau fichier, afin qu'il ressemble au final &#224; ceci&#160;:&lt;/p&gt;
&lt;div class=&#034;precode&#034;&gt;&lt;pre class='spip_code spip_code_block' dir='ltr' style='text-align:left;'&gt;&lt;code&gt;[Desktop Entry] X-SnapInstanceName=eclipse Version=1.0 Type=Application Name=Eclipse (X11) Icon=/snap/eclipse/61/icon.xpm Exec=env GDK_BACKEND=x11 /snap/bin/eclipse %f Comment=Eclipse IDE Categories=Development;IDE; Terminal=false StartupWMClass=eclipse &lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;&#8203;&lt;br class='autobr' /&gt;
Il se peut que vous ayez &#224; fermer et r&#233;ouvrir votre session pour que le lanceur soit mis &#224; jour.&lt;/p&gt;&lt;/div&gt;
		
		</content:encoded>


		

	</item>
<item xml:lang="fr">
		<title>Faire cohabiter plusieurs versions de PHP sous Debian</title>
		<link>https://www.momh.fr/faire-cohabiter-plusieurs-versions-de-php-sous-debian</link>
		<guid isPermaLink="true">https://www.momh.fr/faire-cohabiter-plusieurs-versions-de-php-sous-debian</guid>
		<dc:date>2022-03-12T17:58:39Z</dc:date>
		<dc:format>text/html</dc:format>
		<dc:language>fr</dc:language>
		<dc:creator>Brice Boucard</dc:creator>


		<dc:subject>Linux</dc:subject>
		<dc:subject>webdev</dc:subject>

		<description>
&lt;p&gt;Surtout par curiosit&#233;, je me suis pench&#233; sur la possibilit&#233; de faire cohabiter plusieurs versions de &lt;span class=&#034;caps&#034;&gt;PHP&lt;/span&gt; sur ma Debian Bullseye et surtout sur la fa&#231;on de basculer ais&#233;ment de l'une &#224; l'autre. &lt;br class='autobr' /&gt; Installation &lt;br class='autobr' /&gt;
Pour installer plusieurs versions de &lt;span class=&#034;caps&#034;&gt;PHP&lt;/span&gt; conjointement, il faut ajouter le d&#233;p&#244;t Sury&#160;: bash sudo apt update sudo apt -y install apt-transport-https lsb-release ca-certificates curl sudo curl -sSLo /usr/share/keyrings/deb.sury.org-php.gpg https://packages.sury.org/php/apt.gpg sudo sh&#160;(&#8230;)&lt;/p&gt;


-
&lt;a href="https://www.momh.fr/blog" rel="directory"&gt;Blog&lt;/a&gt;

/ 
&lt;a href="https://www.momh.fr/linux" rel="tag"&gt;Linux&lt;/a&gt;, 
&lt;a href="https://www.momh.fr/webdev" rel="tag"&gt;webdev&lt;/a&gt;

		</description>


 <content:encoded>&lt;div class='rss_chapo'&gt;&lt;p&gt;Surtout par curiosit&#233;, je me suis pench&#233; sur la possibilit&#233; de faire cohabiter plusieurs versions de &lt;span class=&#034;caps&#034;&gt;PHP&lt;/span&gt; sur ma Debian Bullseye et surtout sur la fa&#231;on de basculer ais&#233;ment de l'une &#224; l'autre.&lt;/p&gt;&lt;/div&gt;
		&lt;div class='rss_texte'&gt;&lt;h2 class=&#034;spip&#034;&gt;Installation&lt;/h2&gt;
&lt;p&gt;Pour installer plusieurs versions de &lt;span class=&#034;caps&#034;&gt;PHP&lt;/span&gt; conjointement, il faut ajouter &lt;a href=&#034;https://deb.sury.org/&#034; class=&#034;spip_out&#034; rel=&#034;external&#034;&gt;le d&#233;p&#244;t Sury&lt;/a&gt;&#160;:&lt;/p&gt;
&lt;div class=&#034;precode&#034;&gt;&lt;pre data-language=&#034;bash&#034; class='spip_code spip_code_block language-bash' dir='ltr' style='text-align:left;'&gt;&lt;code&gt;sudo apt update sudo apt -y install apt-transport-https lsb-release ca-certificates curl sudo curl -sSLo /usr/share/keyrings/deb.sury.org-php.gpg https://packages.sury.org/php/apt.gpg sudo sh -c 'echo &#034;deb [signed-by=/usr/share/keyrings/deb.sury.org-php.gpg] https://packages.sury.org/php/ $(lsb_release -sc) main&#034; &gt; /etc/apt/sources.list.d/php.list' sudo apt update &lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;De l&#224;, il est possible d'installer diverses versions de &lt;span class=&#034;caps&#034;&gt;PHP&lt;/span&gt; et de ses modules&lt;small class=&#034;fine d-inline&#034;&gt;&#160;&lt;/small&gt;; ainsi, sous Bullseye, je me vois proposer les versions 5.6, 7.0, 7.1, 7.2, 7.3, 7.4, 8.0 et 8.1&#160;:&lt;/p&gt;
&lt;div class=&#034;precode&#034;&gt;&lt;pre data-language=&#034;bash&#034; class='spip_code spip_code_block language-bash' dir='ltr' style='text-align:left;'&gt;&lt;code&gt;apt search php | grep &#034;php[0-9]\.[0-9]/&#034; [...] php5.6/bullseye 5.6.40-57+0~20211119.60+debian11~1.gbp8a9bd1 all php7.0/bullseye 7.0.33-57+0~20211119.61+debian11~1.gbp5d8ba5 all php7.1/bullseye 7.1.33-44+0~20211119.61+debian11~1.gbp448fbe all php7.2/bullseye 7.2.34-28+0~20211119.67+debian11~1.gbpf24e81 all php7.3/bullseye 7.3.33-1+0~20211119.91+debian11~1.gbp618351 all php7.4/stable-security,now 7.4.28-1+deb11u1 all [install&#233;, pouvant &#234;tre supprim&#233; automatiquement] php8.0/bullseye 8.0.16-1+0~20220221.30+debian11~1.gbp8b91a5 all php8.1/bullseye,now 8.1.3-1+0~20220223.13+debian11~1.gbp7757b9 all [install&#233;, automatique] &lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 class=&#034;spip&#034;&gt;Changer facilement de version de &lt;span class=&#034;caps&#034;&gt;PHP&lt;/span&gt;&lt;/h2&gt;
&lt;p&gt;Afin de faciliter le basculement d'une version &#224; une autre, j'ai compil&#233; diff&#233;rentes sources pour finalement produire un petit script, tr&#232;s certainement imparfait, qui permet de choisir de mani&#232;re interactive parmi les versions de &lt;span class=&#034;caps&#034;&gt;PHP&lt;/span&gt; install&#233;es celle &#224; utiliser.&lt;/p&gt;
&lt;div class=&#034;precode&#034;&gt;&lt;pre data-language=&#034;bash&#034; class='spip_code spip_code_block language-bash' dir='ltr' style='text-align:left;'&gt;&lt;code&gt;touch ~/bin/php-switch chmod +x ~/bin/php-switch nano ~/bin/php-switch &lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class=&#034;precode&#034;&gt;&lt;pre data-language=&#034;bash&#034; class='spip_code spip_code_block language-bash' dir='ltr' style='text-align:left;'&gt;&lt;code&gt;#!/bin/bash # based on https://askubuntu.com/a/883140 # and on https://stackoverflow.com/a/68905711 # D&#233;terminer la version de PHP actuellement utilis&#233;e par Apache VAR=$(ls /etc/apache2/mods-enabled/php*) IFS=' ' read -r -a array &lt;&lt;&lt; &#034;$VAR&#034; array[0]=${array[0]#*php} array[0]=${array[0]%.conf} OLDVERSION=${array[0]} echo &#034;La version de PHP actuellement utilis&#233;e est la&#034; $OLDVERSION. echo &#034;Liste des versions de PHP disponibles :&#034; # Lister les versions de PHP install&#233;es RAWPOSSIBILITIES=$(update-alternatives --list php | sed 's/.*\(...\)/\1/') POSSIBILITIES=($RAWPOSSIBILITIES) # Demander la version de PHP &#224; activer PS3='Choisissez la version de PHP &#224; activer : ' select opt in &#034;${POSSIBILITIES[@]}&#034; &#034;Annuler&#034;; do case &#034;$REPLY&#034; in $((${#POSSIBILITIES[@]}+1))) echo &#034;Salut!&#034;; exit;; esac [ $REPLY -gt $((${#POSSIBILITIES[@]}+1)) -o $REPLY -lt 1 ] &amp;&amp; echo &#034;Choix invalide&#034; || break done echo &#034;Activer la version ${POSSIBILITIES[(($REPLY-1))]} ? Entr&#233;e pour valider, Ctrl-C pour annuler.&#034; read x # On reconfigure Apache sudo a2dismod php${OLDVERSION} sudo a2enmod php${POSSIBILITIES[(($REPLY-1))]} # On met &#224; jour la version par d&#233;faut sudo update-alternatives --set php /usr/bin/php${POSSIBILITIES[(($REPLY-1))]} sudo update-alternatives --set phar /usr/bin/phar${POSSIBILITIES[(($REPLY-1))]} sudo update-alternatives --set phar.phar /usr/bin/phar.phar${POSSIBILITIES[(($REPLY-1))]} # On relance le service Apache sudo systemctl restart apache2 &lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;&#8203;&lt;/p&gt;&lt;/div&gt;
		
		</content:encoded>


		

	</item>
<item xml:lang="fr">
		<title>Node.js et autocompl&#233;tion avec Tmux</title>
		<link>https://www.momh.fr/node-js-et-autocompletion-avec-tmux</link>
		<guid isPermaLink="true">https://www.momh.fr/node-js-et-autocompletion-avec-tmux</guid>
		<dc:date>2022-02-22T21:12:10Z</dc:date>
		<dc:format>text/html</dc:format>
		<dc:language>fr</dc:language>
		<dc:creator>Brice Boucard</dc:creator>


		<dc:subject>webdev</dc:subject>
		<dc:subject>Linux</dc:subject>

		<description>
&lt;p&gt;Si je b&#233;n&#233;ficiais parfaitement de l'autocompl&#233;tion des commandes fournies par node.js dans mon terminal classique, celle-ci ne fonctionnait plus sous Tmux&#160;: une sombre histoire de diff&#233;rence entre interactive shell et login shell. &lt;br class='autobr' /&gt; Mon .bashrc contenait pourtant bien le code n&#233;cessaire mais, au-del&#224; de l'autocompl&#233;tion de node.js, il ne semblait pas du tout &#234;tre lu, puisque m&#234;me mon invite de commande ne correspondait pas &#224; celle configur&#233;e... &lt;br class='autobr' /&gt;
Cependant, mes recherches se focalisaient&#160;(&#8230;)&lt;/p&gt;


-
&lt;a href="https://www.momh.fr/blog" rel="directory"&gt;Blog&lt;/a&gt;

/ 
&lt;a href="https://www.momh.fr/webdev" rel="tag"&gt;webdev&lt;/a&gt;, 
&lt;a href="https://www.momh.fr/linux" rel="tag"&gt;Linux&lt;/a&gt;

		</description>


 <content:encoded>&lt;div class='rss_chapo'&gt;&lt;p&gt;Si je b&#233;n&#233;ficiais parfaitement de l'autocompl&#233;tion des commandes fournies par node.js dans mon terminal classique, celle-ci ne fonctionnait plus sous Tmux&#160;: une sombre histoire de diff&#233;rence entre &lt;i&gt;interactive&lt;/i&gt; shell et &lt;i&gt;login&lt;/i&gt; shell.&lt;/p&gt;&lt;/div&gt;
		&lt;div class='rss_texte'&gt;&lt;p&gt;Mon &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;.bashrc&lt;/code&gt; contenait pourtant bien le code n&#233;cessaire mais, au-del&#224; de l'autocompl&#233;tion de node.js, il ne semblait pas du tout &#234;tre lu, puisque m&#234;me mon invite de commande ne correspondait pas &#224; celle configur&#233;e...&lt;/p&gt;
&lt;p&gt;Cependant, mes recherches se focalisaient sur le probl&#232;me de l'autocompl&#233;tion de node.js et ne me fournissaient gu&#232;re de solution... C'est en changeant de perspective que je suis tomb&#233; sur &lt;a href=&#034;https://unix.stackexchange.com/questions/320465/new-tmux-sessions-do-not-source-bashrc-file&#034; class=&#034;spip_out&#034; rel=&#034;external&#034;&gt;le sujet &#171;&lt;small class=&#034;fine d-inline&#034;&gt;&#160;&lt;/small&gt;New tmux sessions do not source bashrc file&lt;small class=&#034;fine d-inline&#034;&gt;&#160;&lt;/small&gt;&#187; sur Stack Exchange&lt;/a&gt; et surtout sur &lt;a href=&#034;https://unix.stackexchange.com/a/541352&#034; class=&#034;spip_out&#034; rel=&#034;external&#034;&gt;la r&#233;ponse tr&#232;s compl&#232;te de Simba&lt;/a&gt; qui pr&#233;sente donc la diff&#233;rence entre les &lt;i&gt;interactiven non-login shells&lt;/i&gt; &#8212; qui sourcent le fichier .bashrc &#8212; et les &lt;i&gt;login shells&lt;/i&gt; &#8212; qui sourcent quant &#224; eux les fichiers .profile et .bash_profile notamment.&lt;/p&gt;
&lt;p&gt;Deux solutions sont alors possibles&#160;:&lt;/p&gt;
&lt;ul class=&#034;spip&#034; role=&#034;list&#034;&gt;&lt;li&gt; soit on &#171;&lt;small class=&#034;fine d-inline&#034;&gt;&#160;&lt;/small&gt;source&lt;small class=&#034;fine d-inline&#034;&gt;&#160;&lt;/small&gt;&#187; le fichier .bashrc depuis l'un de ces deux derniers fichiers &#8212; cette solution &#233;tant celle que recommande Simba justement&#160;:
&lt;div class=&#034;precode&#034;&gt;&lt;pre data-language=&#034;bash&#034; class='spip_code spip_code_block language-bash' dir='ltr' style='text-align:left;'&gt;&lt;code&gt;# if running bash if [ -n &#034;$BASH_VERSION&#034; ]; then # include .bashrc if it exists if [ -f &#034;$HOME/.bashrc&#034; ]; then . &#034;$HOME/.bashrc&#034; fi fi &lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/li&gt;&lt;li&gt; soit on &#171;&lt;small class=&#034;fine d-inline&#034;&gt;&#160;&lt;/small&gt;int&#232;gre&lt;small class=&#034;fine d-inline&#034;&gt;&#160;&lt;/small&gt;&#187; l'autocompl&#233;tion de node.js dans le fichier .profile avec la simple commande&#160;:
&lt;div class=&#034;precode&#034;&gt;&lt;pre data-language=&#034;bash&#034; class='spip_code spip_code_block language-bash' dir='ltr' style='text-align:left;'&gt;&lt;code&gt;npm completion &gt;&gt; ~/.profile &lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;
		
		</content:encoded>


		

	</item>
<item xml:lang="fr">
		<title>T&#233;l&#233;charger ses s&#233;ries avec Flexget</title>
		<link>https://www.momh.fr/telecharger-ses-series-avec-flexget</link>
		<guid isPermaLink="true">https://www.momh.fr/telecharger-ses-series-avec-flexget</guid>
		<dc:date>2021-08-21T05:22:00Z</dc:date>
		<dc:format>text/html</dc:format>
		<dc:language>fr</dc:language>
		<dc:creator>Brice Boucard</dc:creator>


		<dc:subject>Linux</dc:subject>
		<dc:subject>Raspberry Pi</dc:subject>
		<dc:subject>torrent</dc:subject>

		<description>
&lt;p&gt;Cela fait quelques ann&#233;es que j'utilise Flexget &#8212; relativement basiquement &#8212; pour t&#233;l&#233;charger automatiquement les &#233;pisodes des s&#233;ries que je suis mais ce n'est que depuis r&#233;cemment que je suis parvenu &#224; une configuration pleinement satisfaisante. &lt;br class='autobr' /&gt; Flexget est un outil d'automation pour m&#233;dias, notamment pour s&#233;ries et animes, permettant entre autres de t&#233;l&#233;charger et d'organiser les &#233;pisodes... Je ne pr&#233;tends pas ici pr&#233;senter l'outil dans ses moindre d&#233;tails mais simplement pr&#233;senter la&#160;(&#8230;)&lt;/p&gt;


-
&lt;a href="https://www.momh.fr/blog" rel="directory"&gt;Blog&lt;/a&gt;

/ 
&lt;a href="https://www.momh.fr/linux" rel="tag"&gt;Linux&lt;/a&gt;, 
&lt;a href="https://www.momh.fr/raspberry-pi" rel="tag"&gt;Raspberry Pi&lt;/a&gt;, 
&lt;a href="https://www.momh.fr/torrent" rel="tag"&gt;torrent&lt;/a&gt;

		</description>


 <content:encoded>&lt;div class='rss_chapo'&gt;&lt;p&gt;Cela fait quelques ann&#233;es que j'utilise Flexget &#8212; relativement basiquement &#8212; pour t&#233;l&#233;charger automatiquement les &#233;pisodes des s&#233;ries que je suis mais ce n'est que depuis r&#233;cemment que je suis parvenu &#224; une configuration pleinement satisfaisante.&lt;/p&gt;&lt;/div&gt;
		&lt;div class='rss_texte'&gt;&lt;p&gt;&lt;a href=&#034;https://flexget.com/&#034; class=&#034;spip_out&#034; rel=&#034;external&#034;&gt;Flexget&lt;/a&gt; est un outil d'automation pour m&#233;dias, notamment pour s&#233;ries et animes, permettant entre autres de t&#233;l&#233;charger et d'organiser les &#233;pisodes...&lt;br class='autobr' /&gt;
Je ne pr&#233;tends pas ici pr&#233;senter l'outil dans ses moindre d&#233;tails mais simplement pr&#233;senter la configuration utilis&#233;e sur mon Raspberry Pi qui envoie les torrents &#224; un &lt;i&gt;daemon&lt;/i&gt; Transmission qui tourne sur mon &lt;span class=&#034;caps&#034;&gt;NAS&lt;/span&gt; D-Link &lt;span class=&#034;caps&#034;&gt;DNS&lt;/span&gt;-320 avec fun_plug (cf. &lt;a href='https://www.momh.fr/spip.php?page=article&amp;id_article=47'&gt;cet article&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;Pour l'installation, on choisit l'option &#171;&lt;small class=&#034;fine d-inline&#034;&gt;&#160;&lt;/small&gt;virtualenv&lt;small class=&#034;fine d-inline&#034;&gt;&#160;&lt;/small&gt;&#187; de &lt;a href=&#034;https://flexget.com/InstallWizard/Linux&#034; class=&#034;spip_out&#034; rel=&#034;external&#034;&gt;la documentation&lt;/a&gt;&lt;/p&gt;
&lt;div class=&#034;precode&#034;&gt;&lt;pre data-language=&#034;bash&#034; class='spip_code spip_code_block language-bash' dir='ltr' style='text-align:left;'&gt;&lt;code&gt;python3 -m venv ~/flexget/ cd ~/flexget/ bin/pip install flexget &lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Cependant, si vous souhaitez utiliser le plugin Transmission de Flexget, il vous faudra installer le paquet &lt;i&gt;transmission-rpc&lt;/i&gt;&#160;:&lt;/p&gt;
&lt;div class=&#034;precode&#034;&gt;&lt;pre data-language=&#034;bash&#034; class='spip_code spip_code_block language-bash' dir='ltr' style='text-align:left;'&gt;&lt;code&gt;bin/pip install transmission-rpc&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;sinon vos logs (dans &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;~/.config/flexget/flexget.log&lt;/code&gt;) vous afficheront des lignes de ce type&#160;:&lt;/p&gt;
&lt;div class=&#034;precode&#034;&gt;&lt;pre class='spip_code spip_code_block' dir='ltr' style='text-align:left;'&gt;&lt;code&gt;2021-10-29 09:09:48 WARNING task feed-eztv Aborting task (plugin: transmission) 2021-10-29 09:09:51 CRITICAL transmission feed-rarbg transmission-rpc module version 3.0 or higher required. &lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;La configuration de FlexGet se fait dans le fichier &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;~/.config/flexget/config.yml&lt;/code&gt; et n&#233;cessite de pr&#234;ter une attention toute particuli&#232;re aux indentations...&lt;/p&gt;
&lt;p&gt;Sans entrer dans le d&#233;tail&#160;: on se connecte &#224; une instance de Transmission, on d&#233;finit les crit&#232;res de t&#233;l&#233;chargement des torrents des s&#233;ries que l'on suit (depuis le site &lt;a href=&#034;https://www.pogdesign.co.uk/cat/&#034; class=&#034;spip_out&#034; rel=&#034;external&#034;&gt;&lt;span class=&#034;caps&#034;&gt;TV&lt;/span&gt; Calendar&lt;/a&gt;) en rejetant les s&#233;ries issues de certains &lt;i&gt;networks&lt;/i&gt; et on envoie un mail pour annoncer les &#233;pisodes t&#233;l&#233;charg&#233;s.&lt;br class='autobr' /&gt;
Et ce pour deux flux &lt;span class=&#034;caps&#034;&gt;RSS&lt;/span&gt; diff&#233;rents, chacun faisant l'objet d'une t&#226;che que l'on lance automatiquement toutes les heures.&lt;/p&gt;
&lt;div class=&#034;precode&#034;&gt;&lt;pre data-language=&#034;yaml&#034; class='spip_code spip_code_block language-yaml' dir='ltr' style='text-align:left;'&gt;&lt;code&gt;templates: tv: transmission: host: 192.168.X.XX port: 9091 # username: username # password: password configure_series: settings: timeframe: 12 hours target: 1080p quality: 720p-1080p propers: 3 days from: pogcal: username: azerty@uiop.fr password: XXXXX thetvdb_lookup: yes if: - &#034;tvdb_network and tvdb_network=='Netflix'&#034;: reject - &#034;tvdb_network and tvdb_network=='Amazon'&#034;: reject notify: task: template: html # Optional, if you want html instead of plain text via: - email: from: azerty@uiop.fr to: - azerty@uiop.fr - qwerty@uiop.com smtp_host: smpt.host.com smtp_port: 587 smtp_username: azerty@uiop.fr smtp_password: &#034;XXXXXX&#034; smtp_tls: yes html: yes # To parse template as HTML tasks: feed-eztv: priority: 1 template: tv rss: https://eztv.re/ezrss.xml feed-rarbg: priority: 2 template: tv rss: http://rarbg.to/rssdd.php?categories=2;18;41;49 schedules: - tasks: '*' interval: hours: 1 &lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;L'id&#233;e est donc de faire tourner FlexGet en mode &lt;i&gt;daemon&lt;/i&gt; et de lui faire d&#233;clencher des t&#226;ches r&#233;guli&#232;rement (la section &lt;i&gt;schedules&lt;/i&gt; en toute fin de fichier). Pour ce faire, on le lance ainsi&#160;:&lt;/p&gt;
&lt;div class=&#034;precode&#034;&gt;&lt;pre data-language=&#034;bash&#034; class='spip_code spip_code_block language-bash' dir='ltr' style='text-align:left;'&gt;&lt;code&gt;~/flexget/bin/flexget --loglevel VERBOSE daemon start --autoreload-config -d &lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Pour que FlexGet se lance automatiquement &#224; chaque d&#233;marrage, on cr&#233;e une t&#226;che Cron gr&#226;ce &#224; la commande &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;crontab -e&lt;/code&gt;&lt;/p&gt;
&lt;div class=&#034;precode&#034;&gt;&lt;pre data-language=&#034;bash&#034; class='spip_code spip_code_block language-bash' dir='ltr' style='text-align:left;'&gt;&lt;code&gt;@reboot /home/pi/flexget/bin/flexget --loglevel VERBOSE daemon start --autoreload-config -d &lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
		
		</content:encoded>


		

	</item>
<item xml:lang="fr">
		<title>Scanner Epson WF-2865 en WiFi sous Debian/Raspbian</title>
		<link>https://www.momh.fr/scanner-epson-wf-2865-en-wifi-sous-debian-raspbian</link>
		<guid isPermaLink="true">https://www.momh.fr/scanner-epson-wf-2865-en-wifi-sous-debian-raspbian</guid>
		<dc:date>2021-02-27T15:03:00Z</dc:date>
		<dc:format>text/html</dc:format>
		<dc:language>fr</dc:language>
		<dc:creator>Brice Boucard</dc:creator>


		<dc:subject>Linux</dc:subject>

		<description>
&lt;p&gt;Si l'imprimante de mon multifonction Epson WorkForce &lt;span class=&#034;caps&#034;&gt;WF&lt;/span&gt;-2865 connect&#233; en WiFi ne m'a gu&#232;re pos&#233; probl&#232;me, l'utilisation du scanner a &#233;t&#233; plus d&#233;licate... &lt;br class='autobr' /&gt; On commence par installer sane&#160;: bash sudo apt install sane sane-utils &lt;br class='autobr' /&gt;
On &#233;dite le fichier /etc/sane.d/dll.conf&#160;: bash sudo nano /etc/sane.d/dll.conf &lt;br class='autobr' /&gt;
et on d&#233;commente la ligne du pilote epson2. &lt;br class='autobr' /&gt;
Pour l'&#233;tape suivante, on va avoir besoin de conna&#238;tre l'adresse de notre imprimante au sein de notre r&#233;seau&lt;small class=&#034;fine d-inline&#034;&gt;&#160;&lt;/small&gt;; pour ce faire, on utilise&#160;(&#8230;)&lt;/p&gt;


-
&lt;a href="https://www.momh.fr/blog" rel="directory"&gt;Blog&lt;/a&gt;

/ 
&lt;a href="https://www.momh.fr/linux" rel="tag"&gt;Linux&lt;/a&gt;

		</description>


 <content:encoded>&lt;div class='rss_chapo'&gt;&lt;p&gt;Si l'imprimante de mon multifonction Epson WorkForce &lt;span class=&#034;caps&#034;&gt;WF&lt;/span&gt;-2865 connect&#233; en WiFi ne m'a gu&#232;re pos&#233; probl&#232;me, l'utilisation du scanner a &#233;t&#233; plus d&#233;licate...&lt;/p&gt;&lt;/div&gt;
		&lt;div class='rss_texte'&gt;&lt;p&gt;On commence par installer &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;sane&lt;/code&gt;&#160;:&lt;/p&gt;
&lt;div class=&#034;precode&#034;&gt;&lt;pre data-language=&#034;bash&#034; class='spip_code spip_code_block language-bash' dir='ltr' style='text-align:left;'&gt;&lt;code&gt;sudo apt install sane sane-utils &lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;On &#233;dite le fichier &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;/etc/sane.d/dll.conf&lt;/code&gt;&#160;:&lt;/p&gt;
&lt;div class=&#034;precode&#034;&gt;&lt;pre data-language=&#034;bash&#034; class='spip_code spip_code_block language-bash' dir='ltr' style='text-align:left;'&gt;&lt;code&gt;sudo nano /etc/sane.d/dll.conf &lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;et on d&#233;commente la ligne du pilote &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;epson2&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Pour l'&#233;tape suivante, on va avoir besoin de conna&#238;tre l'adresse de notre imprimante au sein de notre r&#233;seau&lt;small class=&#034;fine d-inline&#034;&gt;&#160;&lt;/small&gt;; pour ce faire, on utilise l'utilitaire &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;nmap&lt;/code&gt; qu'il convient d'installer&#160;:&lt;/p&gt;
&lt;div class=&#034;precode&#034;&gt;&lt;pre data-language=&#034;bash&#034; class='spip_code spip_code_block language-bash' dir='ltr' style='text-align:left;'&gt;&lt;code&gt;sudo apt install nmap &lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;On peut ensuite, pour effectuer un scan rapide, lancer la commande suivante&#160;:&lt;/p&gt;
&lt;div class=&#034;precode&#034;&gt;&lt;pre data-language=&#034;bash&#034; class='spip_code spip_code_block language-bash' dir='ltr' style='text-align:left;'&gt;&lt;code&gt;sudo nmap -sn 192.168.1.0/24 &lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;et on obtient, entre autres&#160;:&lt;/p&gt;
&lt;div class=&#034;precode&#034;&gt;&lt;pre data-language=&#034;bash&#034; class='spip_code spip_code_block language-bash' dir='ltr' style='text-align:left;'&gt;&lt;code&gt;[...] Nmap scan report for 192.168.1.12 Host is up (-0.17s latency). MAC Address: 38:9D:92:29:1C:FC (Seiko Epson) [...] &lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Nous pouvons d&#233;sormais &#233;diter le ficier &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;/etc/sane.d/epson2.conf&lt;/code&gt;&#160;:&lt;/p&gt;
&lt;div class=&#034;precode&#034;&gt;&lt;pre data-language=&#034;bash&#034; class='spip_code spip_code_block language-bash' dir='ltr' style='text-align:left;'&gt;&lt;code&gt;sudo nano /etc/sane.d/epson2.conf &lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;en modifiant la fin du fichier de la sorte&#160;:&lt;/p&gt;
&lt;div class=&#034;precode&#034;&gt;&lt;pre class='spip_code spip_code_block' dir='ltr' style='text-align:left;'&gt;&lt;code&gt;#net autodiscovery net 192.168.1.12 &lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;On se rend ensuite sur le site d'&lt;a href=&#034;https://support.epson.net/linux/en/imagescanv3.php&#034; class=&#034;spip_out&#034; rel=&#034;external&#034;&gt;Epson&lt;/a&gt; pour r&#233;cup&#233;rer le logiciel ImageScan ainsi que les pilotes pour notre architecture.&lt;/p&gt;
&lt;p&gt;Par exemple&#160;:&lt;/p&gt;
&lt;div class=&#034;precode&#034;&gt;&lt;pre data-language=&#034;bash&#034; class='spip_code spip_code_block language-bash' dir='ltr' style='text-align:left;'&gt;&lt;code&gt;wget https://download2.ebz.epson.net/imagescanv3/common/deb/arm/imagescan-bundle-common-3.65.0.arm.deb.tar.gz tar xvzf imagescan-bundle-common-3.65.0.arm.deb.tar.gz cd imagescan-bundle-common-3.65.0.arm.deb/ sudo ./install.sh &lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;On ouvre ensuite le fichier &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;/etc/imagescan/imagescan.conf&lt;/code&gt;&#160;:&lt;/p&gt;
&lt;div class=&#034;precode&#034;&gt;&lt;pre data-language=&#034;bash&#034; class='spip_code spip_code_block language-bash' dir='ltr' style='text-align:left;'&gt;&lt;code&gt;sudo nano /etc/imagescan/imagescan.conf &lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;et on le modifie pour obtenir cela&#160;:&lt;/p&gt;
&lt;div class=&#034;precode&#034;&gt;&lt;pre class='spip_code spip_code_block' dir='ltr' style='text-align:left;'&gt;&lt;code&gt;[devices] myscanner.udi = esci:networkscan://192.168.1.12:1865 myscanner.vendor = Epson myscanner.model = WF2865 &lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;D&#233;sormais vous devriez voir votre scanner dans Imagescan et sane (et tous les logiciels qui s'appuient sur lui tels xsane ou Gimp) devrait trouver votre p&#233;riph&#233;rique sans soucis&lt;small class=&#034;fine d-inline&#034;&gt;&#160;&lt;/small&gt;!&lt;/p&gt;&lt;/div&gt;
		
		</content:encoded>


		

	</item>
<item xml:lang="fr">
		<title>WeeWX, MQTT et skin Belchertown</title>
		<link>https://www.momh.fr/weewx-mqtt-et-skin-belchertown</link>
		<guid isPermaLink="true">https://www.momh.fr/weewx-mqtt-et-skin-belchertown</guid>
		<dc:date>2020-12-20T15:14:00Z</dc:date>
		<dc:format>text/html</dc:format>
		<dc:language>fr</dc:language>
		<dc:creator>Brice Boucard</dc:creator>


		<dc:subject>Linux</dc:subject>
		<dc:subject>Raspberry Pi</dc:subject>
		<dc:subject>WeeWX</dc:subject>

		<description>
&lt;p&gt;Le skin Belchertown pour WeeWX propos&#233; par Pat O'Brien est extr&#234;mement complet (et complexe, du moins pour moi) et est particuli&#232;rement int&#233;ressant pour ses graphiques dynamiques en JavaScript. &lt;br class='autobr' /&gt; Installation et configuration de base &lt;br class='autobr' /&gt;
Son installation n'est pas particuli&#232;rement difficile puisqu'il suffit de suivre les instructions fournies&lt;small class=&#034;fine d-inline&#034;&gt;&#160;&lt;/small&gt;; ainsi, &#224; ce jour&#160;: bash wget https://github.com/poblabs/weewx-belchertown/releases/download/weewx-belchertown-1.2/weewx-belchertown-release-1.2.tar.gz&#160;(&#8230;)&lt;/p&gt;


-
&lt;a href="https://www.momh.fr/blog" rel="directory"&gt;Blog&lt;/a&gt;

/ 
&lt;a href="https://www.momh.fr/linux" rel="tag"&gt;Linux&lt;/a&gt;, 
&lt;a href="https://www.momh.fr/raspberry-pi" rel="tag"&gt;Raspberry Pi&lt;/a&gt;, 
&lt;a href="https://www.momh.fr/weewx" rel="tag"&gt;WeeWX&lt;/a&gt;

		</description>


 <content:encoded>&lt;div class='rss_chapo'&gt;&lt;p&gt;Le &lt;a href=&#034;https://github.com/poblabs/weewx-belchertown&#034; class=&#034;spip_out&#034; rel=&#034;external&#034;&gt;skin Belchertown&lt;/a&gt; pour WeeWX propos&#233; par Pat O'Brien est extr&#234;mement complet (et complexe, du moins pour moi) et est particuli&#232;rement int&#233;ressant pour ses graphiques dynamiques en JavaScript.&lt;/p&gt;&lt;/div&gt;
		&lt;div class='rss_texte'&gt;&lt;h2 class=&#034;spip&#034;&gt;Installation et configuration de base&lt;/h2&gt;
&lt;p&gt;Son installation n'est pas particuli&#232;rement difficile puisqu'il suffit de suivre les instructions fournies&lt;small class=&#034;fine d-inline&#034;&gt;&#160;&lt;/small&gt;; ainsi, &#224; ce jour&#160;:&lt;/p&gt;
&lt;div class=&#034;precode&#034;&gt;&lt;pre data-language=&#034;bash&#034; class='spip_code spip_code_block language-bash' dir='ltr' style='text-align:left;'&gt;&lt;code&gt;wget https://github.com/poblabs/weewx-belchertown/releases/download/weewx-belchertown-1.2/weewx-belchertown-release-1.2.tar.gz sudo wee_extension --install weewx-belchertown-release-1.2.tar.gz &lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Ensuite, il convient de passer &#224; sa configuration en ayant pris soin, afin de b&#233;n&#233;ficier de certaines options dont le module de pr&#233;visions &#224; sept jours, de &lt;a href=&#034;https://github.com/poblabs/weewx-belchertown#requirements&#034; class=&#034;spip_out&#034; rel=&#034;external&#034;&gt;remplir certaines conditions&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;La configuration de base est la suivante&#160;:&lt;/p&gt;
&lt;div class=&#034;precode&#034;&gt;&lt;pre data-language=&#034;bash&#034; class='spip_code spip_code_block language-bash' dir='ltr' style='text-align:left;'&gt;&lt;code&gt;sudo nano /etc/weewx/weewx.conf &lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class=&#034;precode&#034;&gt;&lt;pre class='spip_code spip_code_block' dir='ltr' style='text-align:left;'&gt;&lt;code&gt;[StdReport] ... [[Belchertown]] skin = Belchertown HTML_ROOT = /var/www/html/weewx/ &lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 class=&#034;spip&#034;&gt;&lt;span class=&#034;caps&#034;&gt;MQTT&lt;/span&gt;&lt;/h2&gt;
&lt;p&gt;Nous allons surtout nous int&#233;resser &#224; la mise en place du rafra&#238;chissement automatique des graphiques et de l'affichage des donn&#233;es permises par ce skin gr&#226;ce au protocole &lt;span class=&#034;caps&#034;&gt;MQTT&lt;/span&gt; (Message Queuing Telemetry Transport). Il convient d'abord d'installer et de configurer un &#171;&lt;small class=&#034;fine d-inline&#034;&gt;&#160;&lt;/small&gt;serveur&lt;small class=&#034;fine d-inline&#034;&gt;&#160;&lt;/small&gt;&#187;, un &lt;i&gt;broker&lt;/i&gt;, en l'occurrence &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;mosquitto&lt;/code&gt; tel que nous l'avons vu dans &lt;a href='https://www.momh.fr/mosquitto-un-broker-mqtt' class=&#034;spip_in&#034;&gt;un pr&#233;c&#233;dent article&lt;/a&gt; &#224; partir du post de Pat O'Brien &lt;a href=&#034;https://obrienlabs.net/how-to-setup-your-own-mqtt-broker/&#034; class=&#034;spip_out&#034; rel=&#034;external&#034;&gt;sur son blog&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Bien s&#251;r, dans mon cas, WeeWX ne r&#233;cup&#233;rant des donn&#233;es de la station m&#233;t&#233;o que toutes les cinq voire dix minutes, l'utilisation du plugin weewx-mqtt ne se justifie pas forc&#233;ment...&lt;/p&gt;
&lt;p&gt;Une fois le &lt;i&gt;broker&lt;/i&gt; Mosquitto install&#233; et configur&#233;, il faut installer le plugin &lt;a href=&#034;https://github.com/matthewwall/weewx-mqtt&#034; class=&#034;spip_out&#034; rel=&#034;external&#034;&gt;weewx-mqtt&lt;/a&gt;&#160;:&lt;/p&gt;
&lt;div class=&#034;precode&#034;&gt;&lt;pre data-language=&#034;bash&#034; class='spip_code spip_code_block language-bash' dir='ltr' style='text-align:left;'&gt;&lt;code&gt;sudo pip3 install paho-mqtt wget -O weewx-mqtt.zip https://github.com/matthewwall/weewx-mqtt/archive/master.zip wee_extension --install weewx-mqtt.zip &lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;On modifie ensuite sa configuration qui d&#233;pend de la section [Restful] dans le fichier &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;/etc/weewx/weewx.conf&lt;/code&gt;&#160;:&lt;/p&gt;
&lt;div class=&#034;precode&#034;&gt;&lt;pre class='spip_code spip_code_block' dir='ltr' style='text-align:left;'&gt;&lt;code&gt;[Restful] ... [[MQTT]] server_url = mqtt://USER:PASSWORD@SERVER:PORT/ topic = weewx unit_system = METRIC binding = archive, loop aggregation = aggregate [[[tls]]] tls_version = tlsv12 ca_certs = /etc/ssl/certs/ca-certificates.crt &lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;On en profite pour &#233;diter la configuration du skin Belchertown de la sorte&#160;:&lt;/p&gt;
&lt;div class=&#034;precode&#034;&gt;&lt;pre class='spip_code spip_code_block' dir='ltr' style='text-align:left;'&gt;&lt;code&gt;[StdReport] ... [[Belchertown]] skin = Belchertown HTML_ROOT = /var/www/html/weewx/ mqtt_websockets_enabled = 1 mqtt_websockets_host = &#034;SERVER&#034; mqtt_websockets_port = 9001 mqtt_websockets_ssl = 1 mqtt_websockets_topic = &#034;weather/loop&#034; disconnect_live_website_visitor = 1800000 &lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Il ne nous reste plus qu'&#224; relancer weewx&#160;:&lt;/p&gt;
&lt;div class=&#034;precode&#034;&gt;&lt;pre data-language=&#034;bash&#034; class='spip_code spip_code_block language-bash' dir='ltr' style='text-align:left;'&gt;&lt;code&gt;sudo service restart weewx &lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;On peut v&#233;rifier le bon fonctionnement du plugin weewx-mqtt en lan&#231;ant la commande &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;mosquitto_sub&lt;/code&gt; pour suivre le topic &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;weewx/loop&lt;/code&gt; ou en &#233;pluchant &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;/var/log/syslog&lt;/code&gt; &#224; la recherche d'une ligne de ce type&#160;:&lt;/p&gt;
&lt;div class=&#034;precode&#034;&gt;&lt;pre data-language=&#034;bash&#034; class='spip_code spip_code_block language-bash' dir='ltr' style='text-align:left;'&gt;&lt;code&gt;tail -f /var/log/syslog | grep weewx [snip] Mar 1 06:48:23 raspberrypi weewx[3998] INFO weewx.restx: MQTT: Published record 2021-03-01 06:45:00 CET (1614588300) [snip] &lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
		
		</content:encoded>


		

	</item>
<item xml:lang="fr">
		<title>Mosquitto, un broker MQTT</title>
		<link>https://www.momh.fr/mosquitto-un-broker-mqtt</link>
		<guid isPermaLink="true">https://www.momh.fr/mosquitto-un-broker-mqtt</guid>
		<dc:date>2020-12-11T22:21:00Z</dc:date>
		<dc:format>text/html</dc:format>
		<dc:language>fr</dc:language>
		<dc:creator>Brice Boucard</dc:creator>


		<dc:subject>Linux</dc:subject>
		<dc:subject>Raspberry Pi</dc:subject>

		<description>
&lt;p&gt;J'ai d&#233;couvert le protocole &lt;span class=&#034;caps&#034;&gt;MQTT&lt;/span&gt; (Message Queuing Telemetry Transport) lors de l'interfa&#231;age de ma station m&#233;t&#233;o Netatmo et du logiciel WeeWX sur mon Raspberry Pi&lt;small class=&#034;fine d-inline&#034;&gt;&#160;&lt;/small&gt;; il s'agit d'un protocole de messagerie de type publication-abonnement, extr&#234;mement rapide et l&#233;ger, utilis&#233; notamment dans l'internet des objets. &lt;br class='autobr' /&gt; Nous allons ici voir comment installer et configurer un broker, un agent &lt;span class=&#034;caps&#034;&gt;MQTT&lt;/span&gt;, en l'occurrence Mosquitto, en nous appuyant tr&#232;s largement sur l'article &#171;&lt;small class=&#034;fine d-inline&#034;&gt;&#160;&lt;/small&gt;How to setup your own &lt;span class=&#034;caps&#034;&gt;MQTT&lt;/span&gt;&#160;(&#8230;)&lt;/p&gt;


-
&lt;a href="https://www.momh.fr/blog" rel="directory"&gt;Blog&lt;/a&gt;

/ 
&lt;a href="https://www.momh.fr/linux" rel="tag"&gt;Linux&lt;/a&gt;, 
&lt;a href="https://www.momh.fr/raspberry-pi" rel="tag"&gt;Raspberry Pi&lt;/a&gt;

		</description>


 <content:encoded>&lt;div class='rss_chapo'&gt;&lt;p&gt;J'ai d&#233;couvert le protocole &lt;span class=&#034;caps&#034;&gt;MQTT&lt;/span&gt; (Message Queuing Telemetry Transport) lors de l'interfa&#231;age de ma station m&#233;t&#233;o Netatmo et du logiciel WeeWX sur mon Raspberry Pi&lt;small class=&#034;fine d-inline&#034;&gt;&#160;&lt;/small&gt;; il s'agit d'un protocole de messagerie de type publication-abonnement, extr&#234;mement rapide et l&#233;ger, utilis&#233; notamment dans l'internet des objets.&lt;/p&gt;&lt;/div&gt;
		&lt;div class='rss_texte'&gt;&lt;p&gt;Nous allons ici voir comment installer et configurer un broker, un agent &lt;span class=&#034;caps&#034;&gt;MQTT&lt;/span&gt;, en l'occurrence Mosquitto, en nous appuyant tr&#232;s largement sur l'article &lt;a href=&#034;https://obrienlabs.net/how-to-setup-your-own-mqtt-broker/&#034; class=&#034;spip_out&#034; rel=&#034;external&#034;&gt;&#171;&lt;small class=&#034;fine d-inline&#034;&gt;&#160;&lt;/small&gt;How to setup your own &lt;span class=&#034;caps&#034;&gt;MQTT&lt;/span&gt; Broker&lt;small class=&#034;fine d-inline&#034;&gt;&#160;&lt;/small&gt;&#187; de Pat O'Brien&lt;/a&gt;.&lt;/p&gt;
&lt;h2 class=&#034;spip&#034;&gt;Installation et premiers tests&lt;/h2&gt;
&lt;p&gt;On commence par l'installer&#160;:&lt;/p&gt;
&lt;div class=&#034;precode&#034;&gt;&lt;pre data-language=&#034;bash&#034; class='spip_code spip_code_block language-bash' dir='ltr' style='text-align:left;'&gt;&lt;code&gt;sudo apt install mosquitto mosquitto-clients &lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Nous pouvons d&#232;s lors &#171;&lt;small class=&#034;fine d-inline&#034;&gt;&#160;&lt;/small&gt;jouer&lt;small class=&#034;fine d-inline&#034;&gt;&#160;&lt;/small&gt;&#187; un peu...&lt;br class='autobr' /&gt;
On peut commencer par v&#233;rifier la version de notre agent ou le temps &#233;coul&#233; depuis son lancement&#160;:&lt;/p&gt;
&lt;div class=&#034;precode&#034;&gt;&lt;pre data-language=&#034;bash&#034; class='spip_code spip_code_block language-bash' dir='ltr' style='text-align:left;'&gt;&lt;code&gt;mosquitto_sub -t \$SYS/broker/version mosquitto_sub -t \$SYS/broker/uptime &lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Puis commencez par ouvrir deux sessions dans votre terminal (on ne saurait trop vous conseiller d'utiliser tmux, pr&#233;sent&#233; &lt;a href='https://www.momh.fr/spip.php?page=article&amp;id_article=25'&gt;dans cet article&lt;/a&gt;)&#160;: dans la premi&#232;re, on lance la commande &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;mosquitto_sub -t test/#&lt;/code&gt; puis dans la seconde on lance &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;mosquitto_pub -t test/test -m &#034;Test message&#034;&lt;/code&gt;...&lt;/p&gt;
&lt;div class='spip_document_37 spip_document spip_documents spip_document_image spip_documents_center spip_document_center'&gt;
&lt;figure class=&#034;spip_doc_inner&#034;&gt; &lt;a href='https://www.momh.fr/IMG/png/mosquitto_a.png' class=&#034;spip_doc_lien mediabox&#034; type=&#034;image/png&#034;&gt; &lt;img src='https://www.momh.fr/local/cache-vignettes/L500xH281/mosquitto_a-7ed6c.png?1726958336' width='500' height='281' alt='' /&gt;&lt;/a&gt;
&lt;/figure&gt;
&lt;/div&gt;&lt;h2 class=&#034;spip&#034;&gt;Configuration, acc&#232;s, &lt;span class=&#034;caps&#034;&gt;SSL&lt;/span&gt;&lt;/h2&gt;
&lt;p&gt;Il convient de pr&#233;ciser d'embl&#233;e que Mosquitto est tr&#232;s regardant sur le formatage de ses fichiers de configuration et qu'il n'accepte pas d'espace en fin de ligne.&lt;/p&gt;
&lt;p&gt;On commence par &#233;diter un fichier &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;/etc/mosquitto/conf.d/myconfig.conf&lt;/code&gt;&#160;:&lt;/p&gt;
&lt;div class=&#034;precode&#034;&gt;&lt;pre class='spip_code spip_code_block' dir='ltr' style='text-align:left;'&gt;&lt;code&gt;persistence false # mqtt listener 1883 protocol mqtt # websockets listener 9001 protocol websockets &lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;On red&#233;marre alors Mosquitto&#160;:&lt;/p&gt;
&lt;div class=&#034;precode&#034;&gt;&lt;pre data-language=&#034;bash&#034; class='spip_code spip_code_block language-bash' dir='ltr' style='text-align:left;'&gt;&lt;code&gt;sudo service mosquitto restart &lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3&gt;Gestion des acc&#232;s&lt;/h3&gt;
&lt;p&gt;Mosquitto permet de g&#233;rer topic par topic les droits de publication et d'abonnement.&lt;/p&gt;
&lt;p&gt;On commence par g&#233;n&#233;rer un couple identifiant / mot de passe, ainsi&#160;:&lt;/p&gt;
&lt;div class=&#034;precode&#034;&gt;&lt;pre data-language=&#034;bash&#034; class='spip_code spip_code_block language-bash' dir='ltr' style='text-align:left;'&gt;&lt;code&gt;sudo mosquitto_passwd -c /etc/mosquitto/passwd USER &lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;puis on &#233;dite un fichier &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;/etc/mosquitto/acl&lt;/code&gt;&lt;/p&gt;
&lt;div class=&#034;precode&#034;&gt;&lt;pre class='spip_code spip_code_block' dir='ltr' style='text-align:left;'&gt;&lt;code&gt;# Autoriser l'abonnement anonyme &#224; $SYS topic read $SYS/# # Autoriser l'abonnement et la publication anonymes &#224; test topic test/# # Autoriser le seul abonnement anonyme &#224; testlecture topic read testlecture/# # Acc&#232;s limit&#233; pour l'&#233;criture sur testlecture # Abonnement et publication sur secret pour USER seulement user USER topic write testlecture topic secret/# &lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;on &#233;dite ensuite le fichier &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;/etc/mosquitto/conf.d/myconfig.conf&lt;/code&gt; pour qu'il ressemble &#224; cela&#160;:&lt;/p&gt;
&lt;div class=&#034;precode&#034;&gt;&lt;pre class='spip_code spip_code_block' dir='ltr' style='text-align:left;'&gt;&lt;code&gt;persistence false allow_anonymous true password_file /etc/mosquitto/passwd acl_file /etc/mosquitto/acl # mqtt listener 1883 protocol mqtt # websockets listener 9001 protocol websockets &lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;On red&#233;marre le service avant de v&#233;rifier avec la commande &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;netstat&lt;/code&gt; que les ports d&#233;clar&#233;s sont bien ouverts&#160;:&lt;/p&gt;
&lt;div class=&#034;precode&#034;&gt;&lt;pre data-language=&#034;bash&#034; class='spip_code spip_code_block language-bash' dir='ltr' style='text-align:left;'&gt;&lt;code&gt;$ sudo service mosquitto restart $ sudo netstat -tulpn | grep 1883 tcp 0 0 0.0.0.0:1883 0.0.0.0:* LISTEN 142015/mosquitto tcp6 0 0 :::1883 :::* LISTEN 142015/mosquitto $ sudo netstat -tulpn | grep 9001 tcp6 0 0 :::9001 :::* LISTEN 142015/mosquitto &lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Pour le canal &lt;i&gt;test&lt;/i&gt;, accessible sans authentification ni pour l'abonnement ni pour la publication, on v&#233;rifie avec cette commande dans notre premi&#232;re session&#160;:&lt;/p&gt;
&lt;div class=&#034;precode&#034;&gt;&lt;pre data-language=&#034;bash&#034; class='spip_code spip_code_block language-bash' dir='ltr' style='text-align:left;'&gt;&lt;code&gt;mosquitto_sub -h localhost -p 1883 -t test/# &lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;et dans la seconde nous lan&#231;ons&#160;:&lt;/p&gt;
&lt;div class=&#034;precode&#034;&gt;&lt;pre data-language=&#034;bash&#034; class='spip_code spip_code_block language-bash' dir='ltr' style='text-align:left;'&gt;&lt;code&gt;mosquitto_pub -h localhost -p 1883 -t test/1 -m &#034;Hello topic test/1&#034; &lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Le canal &lt;i&gt;testlecture&lt;/i&gt; ne devrait &#234;tre accessible anonymement qu'en lecture&#160;:&lt;/p&gt;
&lt;div class=&#034;precode&#034;&gt;&lt;pre data-language=&#034;bash&#034; class='spip_code spip_code_block language-bash' dir='ltr' style='text-align:left;'&gt;&lt;code&gt;mosquitto_sub -h localhost -p 1883 -t testlecture/# &lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;La premi&#232;re des deux commandes suivantes ne devrait rien renvoyer dans notre premi&#232;re session&lt;small class=&#034;fine d-inline&#034;&gt;&#160;&lt;/small&gt;; il convient en effet de s'authentifier pour publier dans ce canal&#160;:&lt;/p&gt;
&lt;div class=&#034;precode&#034;&gt;&lt;pre data-language=&#034;bash&#034; class='spip_code spip_code_block language-bash' dir='ltr' style='text-align:left;'&gt;&lt;code&gt;mosquitto_pub -t testlecture/test -m &#034;test&#034; mosquitto_pub -u USER -P PASSWORD -t testlecture/test -m &#034;test&#034; &lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Enfin, le canal secret n&#233;cessite de s'authentifier aussi bien pour l'abonnement que pour la publication&#160;:&lt;/p&gt;
&lt;div class=&#034;precode&#034;&gt;&lt;pre data-language=&#034;bash&#034; class='spip_code spip_code_block language-bash' dir='ltr' style='text-align:left;'&gt;&lt;code&gt;mosquitto_sub -u USER -P PASSWORD -t secret/# &lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class=&#034;precode&#034;&gt;&lt;pre data-language=&#034;bash&#034; class='spip_code spip_code_block language-bash' dir='ltr' style='text-align:left;'&gt;&lt;code&gt;mosquitto_pub -u USER -P PASSWORD -t secret/test -m &#034;test&#034; &lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3&gt;Certificat &lt;span class=&#034;caps&#034;&gt;SSL&lt;/span&gt;&lt;/h3&gt;
&lt;p&gt;Il est bien &#233;videmment possible de rendre cet agent &lt;span class=&#034;caps&#034;&gt;MQTT&lt;/span&gt; accessible sur Internet et de le configurer pour qu'il utilise une connexion s&#233;curis&#233;e gr&#226;ce &#224; un certificat comme ceux propos&#233;s par Let's Encrypt. Nous allons consid&#233;rer ici que vous avez d&#233;j&#224; configur&#233; votre nom de domaine et g&#233;n&#233;r&#233; le certificat, &lt;a href='https://www.momh.fr/auto-hebergement-dynhost-ovh-et-certificat-let-s-encrypt-sous-raspbian' class=&#034;spip_in&#034;&gt;comme &#233;voqu&#233; ici&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Ainsi, dans mon cas, vous devriez pouvoir vous abonner au canal &lt;i&gt;weather&lt;/i&gt; produit par WeeWX et son plugin weewx-mqtt avec la commande suivante&#160;:&lt;/p&gt;
&lt;div class=&#034;precode&#034;&gt;&lt;pre data-language=&#034;bash&#034; class='spip_code spip_code_block language-bash' dir='ltr' style='text-align:left;'&gt;&lt;code&gt;mosquitto_sub -h meteo.momh.fr -p 8883 --capath /etc/ssl/certs/ -t weather/# &lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Il convient, apr&#232;s avoir g&#233;n&#233;r&#233; son certificat, d'&#233;diter le fichier &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;/etc/mosquitto/conf.d/myconfig.conf&lt;/code&gt; de la sorte&#160;:&lt;/p&gt;
&lt;div class=&#034;precode&#034;&gt;&lt;pre class='spip_code spip_code_block' dir='ltr' style='text-align:left;'&gt;&lt;code&gt;# Insecure mqtt to localhost only, and secure mqtt listener 1883 localhost listener 8883 certfile /etc/letsencrypt/live/DOMAINE/cert.pem cafile /etc/letsencrypt/live/DOMAINE/chain.pem keyfile /etc/letsencrypt/live/DOMAINE/privkey.pem protocol mqtt # websockets listener 9001 certfile /etc/letsencrypt/live/DOMAINE/cert.pem cafile /etc/letsencrypt/live/DOMAINE/chain.pem keyfile /etc/letsencrypt/live/DOMAINE/privkey.pem protocol websockets &lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Apr&#232;s avoir red&#233;marr&#233; le service&lt;/p&gt;
&lt;div class=&#034;precode&#034;&gt;&lt;pre data-language=&#034;bash&#034; class='spip_code spip_code_block language-bash' dir='ltr' style='text-align:left;'&gt;&lt;code&gt;sudo service mosquitto restart &lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;on peut tester ainsi, avec pour chacune de nos deux sessions, les commandes&#160;:&lt;/p&gt;
&lt;div class=&#034;precode&#034;&gt;&lt;pre data-language=&#034;bash&#034; class='spip_code spip_code_block language-bash' dir='ltr' style='text-align:left;'&gt;&lt;code&gt;mosquitto_sub -h DOMAINE -p 8883 --capath /etc/ssl/certs/ -u USER -P PASSWORD -t secret/# &lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class=&#034;precode&#034;&gt;&lt;pre data-language=&#034;bash&#034; class='spip_code spip_code_block language-bash' dir='ltr' style='text-align:left;'&gt;&lt;code&gt;mosquitto_pub -h DOMAINE -p 8883 -u USER -P PASSWORD --capath /etc/ssl/certs/ -t secret/test -m &#034;Test message dans le canal secret&#034; &lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Nous pouvons d&#233;sormais utiliser notre agent &lt;span class=&#034;caps&#034;&gt;MQTT&lt;/span&gt; &lt;a href='https://www.momh.fr/weewx-mqtt-et-skin-belchertown' class=&#034;spip_in&#034;&gt;avec WeeWX&lt;/a&gt;&lt;small class=&#034;fine d-inline&#034;&gt;&#160;&lt;/small&gt;!&lt;/p&gt;&lt;/div&gt;
		
		</content:encoded>


		

	</item>
<item xml:lang="fr">
		<title>Auto-h&#233;bergement, DynHost OVH et certificat Let's Encrypt sous Raspbian</title>
		<link>https://www.momh.fr/auto-hebergement-dynhost-ovh-et-certificat-let-s-encrypt-sous-raspbian</link>
		<guid isPermaLink="true">https://www.momh.fr/auto-hebergement-dynhost-ovh-et-certificat-let-s-encrypt-sous-raspbian</guid>
		<dc:date>2020-12-06T09:28:00Z</dc:date>
		<dc:format>text/html</dc:format>
		<dc:language>fr</dc:language>
		<dc:creator>Brice Boucard</dc:creator>


		<dc:subject>Linux</dc:subject>
		<dc:subject>WeeWX</dc:subject>
		<dc:subject>auto-h&#233;bergement</dc:subject>
		<dc:subject>Raspberry Pi</dc:subject>

		<description>
&lt;p&gt;Ayant &#171;&lt;small class=&#034;fine d-inline&#034;&gt;&#160;&lt;/small&gt;associ&#233;&lt;small class=&#034;fine d-inline&#034;&gt;&#160;&lt;/small&gt;&#187; ma station m&#233;t&#233;o Netatmo &#224; mon Raspberry Pi gr&#226;ce &#224; WeeWX (lire ce post), je souhaite d&#233;sormais rendre accessible sur Internet le site web ainsi g&#233;n&#233;r&#233;. Je consid&#232;re ainsi que vous avez d&#233;j&#224; un serveur Apache fonctionnel et configur&#233; (m&#234;me si nous aborderons la cr&#233;ation d'un VirtualHost par la suite). &lt;br class='autobr' /&gt; DynHost et mise &#224; jour de l'&lt;span class=&#034;caps&#034;&gt;IP&lt;/span&gt; &lt;br class='autobr' /&gt;
&#201;tant chez &lt;span class=&#034;caps&#034;&gt;OVH&lt;/span&gt;, je profite de leur service DynHOST qui &#171;&lt;small class=&#034;fine d-inline&#034;&gt;&#160;&lt;/small&gt;permet de faire pointer un sous-domaine vers une adresse &lt;span class=&#034;caps&#034;&gt;IP&lt;/span&gt; dynamique qui sera&#160;(&#8230;)&lt;/p&gt;


-
&lt;a href="https://www.momh.fr/blog" rel="directory"&gt;Blog&lt;/a&gt;

/ 
&lt;a href="https://www.momh.fr/linux" rel="tag"&gt;Linux&lt;/a&gt;, 
&lt;a href="https://www.momh.fr/weewx" rel="tag"&gt;WeeWX&lt;/a&gt;, 
&lt;a href="https://www.momh.fr/auto-hebergement" rel="tag"&gt;auto-h&#233;bergement&lt;/a&gt;, 
&lt;a href="https://www.momh.fr/raspberry-pi" rel="tag"&gt;Raspberry Pi&lt;/a&gt;

		</description>


 <content:encoded>&lt;div class='rss_chapo'&gt;&lt;p&gt;Ayant &#171;&lt;small class=&#034;fine d-inline&#034;&gt;&#160;&lt;/small&gt;associ&#233;&lt;small class=&#034;fine d-inline&#034;&gt;&#160;&lt;/small&gt;&#187; ma station m&#233;t&#233;o Netatmo &#224; mon Raspberry Pi gr&#226;ce &#224; WeeWX (&lt;a href='https://www.momh.fr/station-meteo-netatmo-weewx-bis' class=&#034;spip_in&#034;&gt;lire ce post&lt;/a&gt;), je souhaite d&#233;sormais rendre accessible sur Internet le site web ainsi g&#233;n&#233;r&#233;. Je consid&#232;re ainsi que vous avez d&#233;j&#224; un serveur Apache fonctionnel et configur&#233; (m&#234;me si nous aborderons la cr&#233;ation d'un VirtualHost par la suite).&lt;/p&gt;&lt;/div&gt;
		&lt;div class='rss_texte'&gt;&lt;h2 class=&#034;spip&#034;&gt;DynHost et mise &#224; jour de l'&lt;span class=&#034;caps&#034;&gt;IP&lt;/span&gt;&lt;/h2&gt;
&lt;p&gt;&#201;tant chez &lt;span class=&#034;caps&#034;&gt;OVH&lt;/span&gt;, je profite de leur service DynHOST qui &#171;&lt;small class=&#034;fine d-inline&#034;&gt;&#160;&lt;/small&gt;&lt;i&gt;permet de faire pointer un sous-domaine vers une adresse &lt;span class=&#034;caps&#034;&gt;IP&lt;/span&gt; dynamique qui sera mise &#224; jour dans votre zone &lt;span class=&#034;caps&#034;&gt;DNS&lt;/span&gt; &#224; chaque changement de celle-ci.&lt;/i&gt;&lt;small class=&#034;fine d-inline&#034;&gt;&#160;&lt;/small&gt;&#187;.&lt;/p&gt;
&lt;p&gt;On cr&#233;e notre DynHost puis on en g&#232;re les acc&#232;s, en cr&#233;ant un nouvel identifiant. Puis, sur notre Raspberry Pi, on installe &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;ddclient&lt;/code&gt;&#160;:&lt;/p&gt;
&lt;div class=&#034;precode&#034;&gt;&lt;pre data-language=&#034;bash&#034; class='spip_code spip_code_block language-bash' dir='ltr' style='text-align:left;'&gt;&lt;code&gt;sudo apt install ddclient &lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Lors de l'installation, des &#233;crans successifs vont nous permettre de le configurer&#160;:&lt;/p&gt;
&lt;ul class=&#034;spip&#034; role=&#034;list&#034;&gt;&lt;li&gt; &lt;i&gt;Fournisseur de service de &lt;span class=&#034;caps&#034;&gt;DNS&lt;/span&gt; dynamique&#160;:&lt;/i&gt; Autre&lt;/li&gt;&lt;li&gt; &lt;i&gt;Protocole de mise &#224; jour du &lt;span class=&#034;caps&#034;&gt;DNS&lt;/span&gt; dynamique&#160;:&lt;/i&gt; dyndns2&lt;/li&gt;&lt;li&gt; &lt;i&gt;Serveur de &lt;span class=&#034;caps&#034;&gt;DNS&lt;/span&gt; dynamique&#160;:&lt;/i&gt; &lt;a href=&#034;http://www.ovh.com&#034; class=&#034;spip_url spip_out auto&#034; rel=&#034;nofollow external&#034;&gt;www.ovh.com&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;i&gt;Mandataire &lt;span class=&#034;caps&#034;&gt;HTTP&lt;/span&gt;&#160;:&lt;/i&gt; n&#233;ant&lt;/li&gt;&lt;li&gt; &lt;i&gt;Identifiant&#160;:&lt;/i&gt; l'identifiant saisi pr&#233;c&#233;demment (comprenant le nom de domaine en pr&#233;fixe)&lt;/li&gt;&lt;li&gt; &lt;i&gt;Mot de passe&#160;:&lt;/i&gt; le mot de passe correspondant&lt;/li&gt;&lt;li&gt; &lt;i&gt;M&#233;thode de d&#233;couverte d'adresse &lt;span class=&#034;caps&#034;&gt;IP&lt;/span&gt;&#160;:&lt;/i&gt; Service de d&#233;couverte d'&lt;span class=&#034;caps&#034;&gt;IP&lt;/span&gt; bas&#233;e sur le web&lt;/li&gt;&lt;li&gt; &lt;i&gt;H&#244;tes &#224; mettre &#224; jour&#160;:&lt;/i&gt; le DynHost cr&#233;&#233; pr&#233;c&#233;demment&lt;/li&gt;&lt;/ul&gt;
&lt;p&gt;La configuration peut se faire sinon &#224; la main, en &#233;ditant le fichier &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;/etc/ddclient.conf&lt;/code&gt; qui doit ressembler &#224; cela&#160;:&lt;/p&gt;
&lt;div class=&#034;precode&#034;&gt;&lt;pre class='spip_code spip_code_block' dir='ltr' style='text-align:left;'&gt;&lt;code&gt;protocol=dyndns2 use=web, web=checkip.dyndns.com server=www.ovh.com login=DOMAINE-USER password='PASSWORD' DYNHOST &lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Il vous faut ensuite &#233;diter le fichier &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;/etc/default/ddclient&lt;/code&gt; et veiller &#224; bien avoir&#160;:&lt;/p&gt;
&lt;div class=&#034;precode&#034;&gt;&lt;pre class='spip_code spip_code_block' dir='ltr' style='text-align:left;'&gt;&lt;code&gt;run_daemon=&#034;true&#034; &lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Et enfin, on red&#233;marre ddclient&#160;:&lt;/p&gt;
&lt;div class=&#034;precode&#034;&gt;&lt;pre data-language=&#034;bash&#034; class='spip_code spip_code_block language-bash' dir='ltr' style='text-align:left;'&gt;&lt;code&gt;sudo service ddclient restart &lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 class=&#034;spip&#034;&gt;Redirection des ports&lt;/h2&gt;
&lt;p&gt;Ensuite, il faut se rendre dans l'interface de gestion de votre Box Internet et configurer, dans la section &lt;span class=&#034;caps&#034;&gt;NAT&lt;/span&gt;, la redirection des port 80 et 443 vers ceux de votre Raspberry Pi (pour en conna&#238;tre l'&lt;span class=&#034;caps&#034;&gt;IP&lt;/span&gt; sur votre r&#233;seau local, utilisez la commande &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;hostname -I&lt;/code&gt;).&lt;/p&gt;
&lt;p&gt;D&#233;sormais, en saisissant l'&lt;span class=&#034;caps&#034;&gt;URL&lt;/span&gt; de votre DynHost, vous devriez acc&#233;der &#224; la m&#234;me page que lorsque vous acc&#233;dez &#224; l'adresse localhost.&lt;/p&gt;
&lt;h2 class=&#034;spip&#034;&gt;Mise en place du &lt;span class=&#034;caps&#034;&gt;HTTPS&lt;/span&gt;&lt;/h2&gt;
&lt;p&gt;Pour ce faire, nous allons g&#233;n&#233;rer un certificat Let's Encrypt pour notre DynHost.&lt;/p&gt;
&lt;p&gt;On commence par copier, dans &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;/etc/apache2/sites-available/&lt;/code&gt;, le fichier &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;000-default.conf&lt;/code&gt; vers &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;DYNHOST.conf&lt;/code&gt;&lt;small class=&#034;fine d-inline&#034;&gt;&#160;&lt;/small&gt;; par exemple&#160;:&lt;/p&gt;
&lt;div class=&#034;precode&#034;&gt;&lt;pre data-language=&#034;bash&#034; class='spip_code spip_code_block language-bash' dir='ltr' style='text-align:left;'&gt;&lt;code&gt;sudo cp /etc/apache2/sites-available/000-default.conf /etc/apache2/sites-available/meteo.momh.fr.conf &lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;puis par le configurer pour pointer vers notre r&#233;pertoire &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;/var/www/html/weewx&lt;/code&gt; ou autre r&#233;pertoire en fonction du ou des skin(s) que vous utilisez. Par exemple, minimalement&#160;:&lt;/p&gt;
&lt;div class=&#034;precode&#034;&gt;&lt;pre data-language=&#034;apacheconf&#034; class='spip_code spip_code_block language-apacheconf' dir='ltr' style='text-align:left;'&gt;&lt;code&gt;&lt;VirtualHost *:80&gt; ServerName meteo.momh.fr ServerAdmin webmaster@localhost DocumentRoot /var/www/html/weewx ErrorLog ${APACHE_LOG_DIR}/error.log CustomLog ${APACHE_LOG_DIR}/access.log combined &lt;/VirtualHost&gt; &lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Pour g&#233;n&#233;rer le certificat, nous allons utiliser &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;certbot&lt;/code&gt;, qu'il convient d'installer&#160;:&lt;/p&gt;
&lt;div class=&#034;precode&#034;&gt;&lt;pre data-language=&#034;bash&#034; class='spip_code spip_code_block language-bash' dir='ltr' style='text-align:left;'&gt;&lt;code&gt;sudo apt install certbot python3-certbot-apache &lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;puis d'activer le module ssl d'Apache&#160;:&lt;/p&gt;
&lt;div class=&#034;precode&#034;&gt;&lt;pre data-language=&#034;bash&#034; class='spip_code spip_code_block language-bash' dir='ltr' style='text-align:left;'&gt;&lt;code&gt;sudo a2enmode ssl sudo systemctl restart apache2 &lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;On peut alors g&#233;n&#233;rer notre certificat avec la commande suivante&#160;:&lt;/p&gt;
&lt;div class=&#034;precode&#034;&gt;&lt;pre data-language=&#034;bash&#034; class='spip_code spip_code_block language-bash' dir='ltr' style='text-align:left;'&gt;&lt;code&gt;sudo certbot --apache -d DynHOST &lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Il vous est propos&#233; de rediriger l'&#233;ventuel traffic &lt;span class=&#034;caps&#034;&gt;HTTP&lt;/span&gt; vers &lt;span class=&#034;caps&#034;&gt;HTTPS&lt;/span&gt;&#160;:&lt;/p&gt;
&lt;div class=&#034;precode&#034;&gt;&lt;pre data-language=&#034;bash&#034; class='spip_code spip_code_block language-bash' dir='ltr' style='text-align:left;'&gt;&lt;code&gt;Please choose whether or not to redirect HTTP traffic to HTTPS, removing HTTP access. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1: No redirect - Make no further changes to the webserver configuration. 2: Redirect - Make all requests redirect to secure HTTPS access. Choose this for new sites, or if you're confident your site works on HTTPS. You can undo this change by editing your web server's configuration. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Select the appropriate number [1-2] then [enter] (press 'c' to cancel): 2 &lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Un certificat est alors g&#233;n&#233;r&#233; et un nouvel h&#244;te virtuel est configur&#233; dans Apache, &#224; l'emplacement &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;/etc/apache2/sites-available/DYNHOST-le-ssl.conf&lt;/code&gt;. Si vous avez choisi l'option 2, le VirtualHost pr&#233;sent&#233; ci-dessus se voit modifi&#233; avec les lignes suivantes&#160;:&lt;/p&gt;
&lt;div class=&#034;precode&#034;&gt;&lt;pre data-language=&#034;apacheconf&#034; class='spip_code spip_code_block language-apacheconf' dir='ltr' style='text-align:left;'&gt;&lt;code&gt;RewriteEngine on RewriteCond %{SERVER_NAME} =DYNHOST RewriteRule ^ https://%{SERVER_NAME}%{REQUEST_URI} [END,NE,R=permanent] &lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Pour voir que tout fonctionne, on peut utiliser l'outil de test propos&#233; par &lt;a href=&#034;https://www.ssllabs.com/ssltest/analyze.html&#034; class=&#034;spip_out&#034; rel=&#034;external&#034;&gt;ssllabs.com&lt;/a&gt;.&lt;/p&gt;&lt;/div&gt;
		
		</content:encoded>


		

	</item>
<item xml:lang="fr">
		<title>Station m&#233;t&#233;o Netatmo &amp; WeeWX [bis]</title>
		<link>https://www.momh.fr/station-meteo-netatmo-weewx-bis</link>
		<guid isPermaLink="true">https://www.momh.fr/station-meteo-netatmo-weewx-bis</guid>
		<dc:date>2020-11-05T09:13:00Z</dc:date>
		<dc:format>text/html</dc:format>
		<dc:language>fr</dc:language>
		<dc:creator>Brice Boucard</dc:creator>


		<dc:subject>Linux</dc:subject>
		<dc:subject>Raspberry Pi</dc:subject>
		<dc:subject>WeeWX</dc:subject>

		<description>
&lt;p&gt;Suite &#224; mon premier post sur le sujet (auquel il convient de se reporter pour la configuration et l'utilisation d'une base de donn&#233;e MySQL), je me suis attel&#233; plus longuement &#224; la compatibilit&#233; du plugin weewx-netatmo de Matthew Wall avec les versions 4 de WeeWX sous Python 3. &lt;br class='autobr' /&gt; Installation &lt;br class='autobr' /&gt;
De ce fait, on n'a plus besoin d'installer une ancienne version de WeeWX et l'on peut se reporter sur la version disponible dans les d&#233;p&#244;ts&#160;: bash wget -qO - https://weewx.com/keys.html | sudo apt-key&#160;(&#8230;)&lt;/p&gt;


-
&lt;a href="https://www.momh.fr/blog" rel="directory"&gt;Blog&lt;/a&gt;

/ 
&lt;a href="https://www.momh.fr/linux" rel="tag"&gt;Linux&lt;/a&gt;, 
&lt;a href="https://www.momh.fr/raspberry-pi" rel="tag"&gt;Raspberry Pi&lt;/a&gt;, 
&lt;a href="https://www.momh.fr/weewx" rel="tag"&gt;WeeWX&lt;/a&gt;

		</description>


 <content:encoded>&lt;div class='rss_chapo'&gt;&lt;p&gt;Suite &#224; &lt;a href='https://www.momh.fr/station-meteo-netatmo-weewx' class=&#034;spip_in&#034;&gt;mon premier post sur le sujet&lt;/a&gt; (auquel il convient de se reporter pour la configuration et l'utilisation d'une base de donn&#233;e MySQL), je me suis attel&#233; plus longuement &#224; la compatibilit&#233; du &lt;a href=&#034;https://github.com/matthewwall/weewx-netatmo&#034; class=&#034;spip_out&#034; rel=&#034;external&#034;&gt;plugin weewx-netatmo de Matthew Wall&lt;/a&gt; avec les versions 4 de &lt;a href=&#034;https://www.weewx.com&#034; class=&#034;spip_out&#034; rel=&#034;external&#034;&gt;WeeWX&lt;/a&gt; sous Python 3.&lt;/p&gt;&lt;/div&gt;
		&lt;div class='rss_texte'&gt;&lt;h2 class=&#034;spip&#034;&gt;Installation&lt;/h2&gt;
&lt;p&gt;De ce fait, on n'a plus besoin d'installer une ancienne version de WeeWX et l'on peut se reporter sur la version disponible dans les d&#233;p&#244;ts&#160;:&lt;/p&gt;
&lt;div class=&#034;precode&#034;&gt;&lt;pre data-language=&#034;bash&#034; class='spip_code spip_code_block language-bash' dir='ltr' style='text-align:left;'&gt;&lt;code&gt;wget -qO - https://weewx.com/keys.html | sudo apt-key add - wget -qO - https://weewx.com/apt/weewx-python3.list | sudo tee /etc/apt/sources.list.d/weewx.list sudo apt update sudo apt install weewx &lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;D&#233;sormais, la configuration et autres skins ne se trouvent plus dans &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;/home/weewx&lt;/code&gt; mais dans &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;/etc/weewx&lt;/code&gt;. L'installation du plugin weewx-netatmo peut se faire depuis mon fork du plugin&#160;:&lt;/p&gt;
&lt;div class=&#034;precode&#034;&gt;&lt;pre data-language=&#034;bash&#034; class='spip_code spip_code_block language-bash' dir='ltr' style='text-align:left;'&gt;&lt;code&gt;wget -O weewx-netatmo.zip https://github.com/bricebou/weewx-netatmo/archive/master.zip sudo wee_extension --install weewx-netatmo.zip sudo wee_config --reconfigure &lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;On ouvre ensuite le fichier de configuration &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;/etc/weewx/weewx.conf&lt;/code&gt; pour v&#233;rifier que nos identifiants Netatmo soient bien pris en compte. Ensuite, on red&#233;marre WeeWX&#160;:&lt;/p&gt;
&lt;div class=&#034;precode&#034;&gt;&lt;pre data-language=&#034;bash&#034; class='spip_code spip_code_block language-bash' dir='ltr' style='text-align:left;'&gt;&lt;code&gt;sudo service weewx restart &lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 class=&#034;spip&#034;&gt;Modifications apport&#233;es&lt;/h2&gt;
&lt;p&gt;Pour ce faire, on utilise l'outil &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;2to3&lt;/code&gt;&#160;:&lt;/p&gt;
&lt;div class=&#034;precode&#034;&gt;&lt;pre data-language=&#034;bash&#034; class='spip_code spip_code_block language-bash' dir='ltr' style='text-align:left;'&gt;&lt;code&gt;sudo pip3 install 2to3 &lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;puis on lance la commande&#160;:&lt;/p&gt;
&lt;div class=&#034;precode&#034;&gt;&lt;pre data-language=&#034;bash&#034; class='spip_code spip_code_block language-bash' dir='ltr' style='text-align:left;'&gt;&lt;code&gt;2to3 -w netatmo.py &lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Une erreur subsistait mais le probl&#232;me avait d&#233;j&#224; &#233;t&#233; r&#233;solu par &lt;a href=&#034;https://github.com/matthewwall/weewx-netatmo/issues/15#issuecomment-628994957&#034; class=&#034;spip_out&#034; rel=&#034;external&#034;&gt;kwalker05&lt;/a&gt;&lt;small class=&#034;fine d-inline&#034;&gt;&#160;&lt;/small&gt;; il suffit, &#224; la ligne 521, de remplacer&#160;:&lt;/p&gt;
&lt;div class=&#034;precode&#034;&gt;&lt;pre data-language=&#034;python&#034; class='spip_code spip_code_block language-python' dir='ltr' style='text-align:left;'&gt;&lt;code&gt;params = urlencode(params) &lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;par&lt;/p&gt;
&lt;div class=&#034;precode&#034;&gt;&lt;pre data-language=&#034;python&#034; class='spip_code spip_code_block language-python' dir='ltr' style='text-align:left;'&gt;&lt;code&gt;params = urlencode(params).encode(&#034;utf-8&#034;) &lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
		
		</content:encoded>


		

	</item>
<item xml:lang="fr">
		<title>ncspot, un client ncurse pour Spotify</title>
		<link>https://www.momh.fr/ncspot-un-client-ncurse-pour-spotify</link>
		<guid isPermaLink="true">https://www.momh.fr/ncspot-un-client-ncurse-pour-spotify</guid>
		<dc:date>2020-10-03T09:22:00Z</dc:date>
		<dc:format>text/html</dc:format>
		<dc:language>fr</dc:language>
		<dc:creator>Brice Boucard</dc:creator>


		<dc:subject>Linux</dc:subject>
		<dc:subject>Raspberry Pi</dc:subject>
		<dc:subject>terminal</dc:subject>
		<dc:subject>Spotify</dc:subject>
		<dc:subject>LastFM</dc:subject>

		<description>
&lt;p&gt;Si mes recherches pour utiliser Spotify depuis mon Raspverry Pi sous Raspbian Buster m'ont tout d'abord conduit &#224; la prise en charge des &lt;span class=&#034;caps&#034;&gt;DRM&lt;/span&gt; pour utiliser le client web open.spotify.com puis au client Spotify Connect raspotify, j'ai enfin d&#233;couvert un client Spotify ne n&#233;cessitant pas de serveur X&#160;: ncspot est ainsi un client ncurse pour Spotify &#233;crit en Rust et hautement inspir&#233; des clients ncmpc ou ncmpcpp pour &lt;span class=&#034;caps&#034;&gt;MPD&lt;/span&gt;. &lt;br class='autobr' /&gt; Installation &lt;br class='autobr' /&gt;
On commence par installer les d&#233;pendances&#160;: bash sudo&#160;(&#8230;)&lt;/p&gt;


-
&lt;a href="https://www.momh.fr/blog" rel="directory"&gt;Blog&lt;/a&gt;

/ 
&lt;a href="https://www.momh.fr/linux" rel="tag"&gt;Linux&lt;/a&gt;, 
&lt;a href="https://www.momh.fr/raspberry-pi" rel="tag"&gt;Raspberry Pi&lt;/a&gt;, 
&lt;a href="https://www.momh.fr/terminal" rel="tag"&gt;terminal&lt;/a&gt;, 
&lt;a href="https://www.momh.fr/spotify" rel="tag"&gt;Spotify&lt;/a&gt;, 
&lt;a href="https://www.momh.fr/lastfm" rel="tag"&gt;LastFM&lt;/a&gt;

		</description>


 <content:encoded>&lt;div class='rss_chapo'&gt;&lt;p&gt;Si mes recherches pour utiliser Spotify depuis mon Raspverry Pi sous Raspbian Buster m'ont tout d'abord conduit &#224; &lt;a href='https://www.momh.fr/spip.php?page=article&amp;id_article=35'&gt;la prise en charge des &lt;span class=&#034;caps&#034;&gt;DRM&lt;/span&gt;&lt;/a&gt; pour utiliser le client web open.spotify.com puis au &lt;a href='https://www.momh.fr/raspbian-spotify-et-pulseaudio' class=&#034;spip_in&#034;&gt;client Spotify Connect raspotify&lt;/a&gt;, j'ai enfin d&#233;couvert un client Spotify ne n&#233;cessitant pas de serveur X&#160;: &lt;a href=&#034;https://github.com/hrkfdn/ncspot&#034; class=&#034;spip_out&#034; rel=&#034;external&#034;&gt;ncspot&lt;/a&gt; est ainsi un client ncurse pour Spotify &#233;crit en Rust et hautement inspir&#233; des clients ncmpc ou ncmpcpp pour &lt;span class=&#034;caps&#034;&gt;MPD&lt;/span&gt;.&lt;/p&gt;&lt;/div&gt;
		&lt;div class='rss_texte'&gt;&lt;h2 class=&#034;spip&#034;&gt;Installation&lt;/h2&gt;
&lt;p&gt;On commence par installer les d&#233;pendances&#160;:&lt;/p&gt;
&lt;div class=&#034;precode&#034;&gt;&lt;pre data-language=&#034;bash&#034; class='spip_code spip_code_block language-bash' dir='ltr' style='text-align:left;'&gt;&lt;code&gt;sudo apt install libncursesw5-dev libdbus-1-dev libpulse-dev libssl-dev libxcb1-dev libxcb-render0-dev libxcb-shape0-dev libxcb-xfixes0-dev &lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;On installe ensuite une &#171;&lt;small class=&#034;fine d-inline&#034;&gt;&#160;&lt;/small&gt;instance&lt;small class=&#034;fine d-inline&#034;&gt;&#160;&lt;/small&gt;&#187; de Rust, gr&#226;ce au script &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;rustup&lt;/code&gt;&#160;:&lt;/p&gt;
&lt;div class=&#034;precode&#034;&gt;&lt;pre data-language=&#034;bash&#034; class='spip_code spip_code_block language-bash' dir='ltr' style='text-align:left;'&gt;&lt;code&gt;curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh &lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;avant de lancer l'installation &#224; proprement parler de ncspot&#160;:&lt;/p&gt;
&lt;div class=&#034;precode&#034;&gt;&lt;pre data-language=&#034;bash&#034; class='spip_code spip_code_block language-bash' dir='ltr' style='text-align:left;'&gt;&lt;code&gt;cargo install ncspot &lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 class=&#034;spip&#034;&gt;Usage et configuration&lt;/h2&gt;
&lt;p&gt;Il suffit alors de lancer la commande &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;ncspot&lt;/code&gt; et l'on peut alors naviguer entre trois &#233;crans gr&#226;ce aux touches &lt;kbd&gt;F1&lt;/kbd&gt;, &lt;kbd&gt;F2&lt;/kbd&gt; et &lt;kbd&gt;F3&lt;/kbd&gt;&#160;: queue, recherche, biblioth&#232;que.&lt;/p&gt;
&lt;p&gt;Pour en savoir plus, il suffit d'acc&#233;der &#224; l'&#233;cran d'aide avec la touche &lt;kbd&gt;&lt;small class=&#034;fine d-inline&#034;&gt;&#160;&lt;/small&gt;?&lt;/kbd&gt;.&lt;/p&gt;
&lt;p&gt;La configuration se fait dans le fichier &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;~/.config/ncspot/config.toml&lt;/code&gt; avec a possibilit&#233; de d&#233;finir soi-m&#234;me des raccourcis clavier au sein d'une section &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;[keybindings]&lt;/code&gt; et un th&#232;me au sein d'une section &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;[theme]&lt;/code&gt; (&lt;a href=&#034;https://ncspot-theme-generator.vaa.red/&#034; class=&#034;spip_out&#034; rel=&#034;external&#034;&gt;un g&#233;n&#233;rateur&lt;/a&gt; vous en facilite la cr&#233;ation)&#160;:&lt;/p&gt;
&lt;div class=&#034;precode&#034;&gt;&lt;pre data-language=&#034;toml&#034; class='spip_code spip_code_block language-toml' dir='ltr' style='text-align:left;'&gt;&lt;code&gt;backend = &#034;pulseaudio&#034; [saved_state] volume = 70 repeat = &#034;no&#034; shuffle = true [keybindings] &#034;Shift+p&#034; = &#034;pause&#034; [theme] background = &#034;black&#034; primary = &#034;green&#034; secondary = &#034;cyan&#034; title = &#034;magenta&#034; playing = &#034;black&#034; playing_selected = &#034;blue&#034; playing_bg = &#034;magenta&#034; highlight = &#034;black&#034; highlight_bg = &#034;green&#034; error = &#034;white&#034; error_bg = &#034;red&#034; statusbar = &#034;magenta&#034; statusbar_progress = &#034;magenta&#034; statusbar_bg = &#034;black&#034; cmdline = &#034;cyan&#034; cmdline_bg = &#034;light black&#034; &lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 class=&#034;spip&#034;&gt;Scrobbling&lt;/h2&gt;
&lt;p&gt;Si l'on souhaite scrobbler ce que l'on &#233;coute avec ncspot, il convient d'installer &lt;a href=&#034;https://github.com/InputUsername/rescrobbled&#034; class=&#034;spip_out&#034; rel=&#034;external&#034;&gt;&lt;code class='spip_code spip_code_inline' dir='ltr'&gt;rescrobbled&lt;/code&gt;&lt;/a&gt;, &#233;crit lui aussi en Rust&#160;:&lt;/p&gt;
&lt;div class=&#034;precode&#034;&gt;&lt;pre data-language=&#034;bash&#034; class='spip_code spip_code_block language-bash' dir='ltr' style='text-align:left;'&gt;&lt;code&gt;wget https://github.com/InputUsername/rescrobbled/archive/v0.2.0.tar.gz tar xvzf v0.2.0.tar.gz cd rescrobbled-0.2.0/ cargo install --path . &lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;La configuration se fait &#224; travers le fichier &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;~/.config/rescrobbled/config.toml&lt;/code&gt; mais n&#233;cessite d'avoir g&#233;n&#233;r&#233; au pr&#233;alable un couple cl&#233;-secret via &lt;a href=&#034;https://www.last.fm/api/account/create&#034; class=&#034;spip_out&#034; rel=&#034;external&#034;&gt;cette page de Last.fm&lt;/a&gt;&#160;:&lt;/p&gt;
&lt;div class=&#034;precode&#034;&gt;&lt;pre data-language=&#034;bash&#034; class='spip_code spip_code_block language-bash' dir='ltr' style='text-align:left;'&gt;&lt;code&gt;mkdir ~/.config/rescrobbled/ nano ~/.config/rescrobbled/config.toml &lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class=&#034;precode&#034;&gt;&lt;pre data-language=&#034;toml&#034; class='spip_code spip_code_block language-toml' dir='ltr' style='text-align:left;'&gt;&lt;code&gt;lastfm-key = &#034;Last.fm API key&#034; lastfm-secret = &#034;Last.fm API secret&#034; #listenbrainz-token = &#034;ListenBrainz API token&#034; enable-notifications = false min-play-time = 0 # in seconds player-whitelist = [ &#034;ncspot&#034; ] # if empty or ommitted, will allow all players &lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Il faut ensuite lancer la commande &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;rescrobbled&lt;/code&gt; alors que le lecteur ncspot fonctionne&lt;small class=&#034;fine d-inline&#034;&gt;&#160;&lt;/small&gt;; il vous sera alors demander votre identifiant et votre mot de passe.&lt;br class='autobr' /&gt;
Pour lancer le service en tant que d&#233;mon, il faut placer le fichier &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;~/rescrobbled-0.2.0/rescrobbled.service&lt;/code&gt; dans votre r&#233;pertoire &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;~/.config/systemd/user/&lt;/code&gt;&#160;:&lt;/p&gt;
&lt;div class=&#034;precode&#034;&gt;&lt;pre data-language=&#034;bash&#034; class='spip_code spip_code_block language-bash' dir='ltr' style='text-align:left;'&gt;&lt;code&gt;mkdir -p ~/.config/systemd/user cp ~/rescrobbled-0.2.0/rescrobbled.service ~/.config/systemd/user/ &lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Lancez ensuite la commande suivante pour lancer rescrobbled au d&#233;marrage&#160;:&lt;/p&gt;
&lt;div class=&#034;precode&#034;&gt;&lt;pre data-language=&#034;bash&#034; class='spip_code spip_code_block language-bash' dir='ltr' style='text-align:left;'&gt;&lt;code&gt;systemctl --user enable rescrobbled.service &lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;et pour le lancer sans avoir &#224; red&#233;marrer&#160;:&lt;/p&gt;
&lt;div class=&#034;precode&#034;&gt;&lt;pre data-language=&#034;bash&#034; class='spip_code spip_code_block language-bash' dir='ltr' style='text-align:left;'&gt;&lt;code&gt;systemctl --user start rescrobbled.service &lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
		
		</content:encoded>


		

	</item>



</channel>

</rss>
