<?xml version="1.0" encoding="UTF-8"?><rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/">
  <channel>
    <title>Kicou</title>
    <link>https://blog.kicou.info/</link>
    <description>Random thoughts and ramblings</description>
    <pubDate>Thu, 09 Apr 2026 16:12:25 -0400</pubDate>
    <item>
      <title>Speech synthesis in Linux, with Piper</title>
      <link>https://blog.kicou.info/speech-synthesis-in-linux-with-piper</link>
      <description>&lt;![CDATA[Sometimes I want to listen to written news articles, because I am doing several things at the same time and I don&#39;t want to be stuck reading the content of one unique tab.&#xA;&#xA;Firefox has a Reader View mode that is pleasing to the eye, and that can also read text aloud using the speech-dispatcher TTS (text to speech) service provided by Linux.&#xA;&#xA;Speech-dispatcher can use a multitude of TTS engines, but the ones historically available in Linux sounded unnatural. Until recently.&#xA;&#xA;The robotic voice days are over, and natural sounding speech synthesis is now available to Linux users without the need to connect to online services like Google Translate&#39;s engine.&#xA;&#xA;Nabu Casa, the company behind Home Assistant, is sponsoring Piper, an open source TTS engine under MIT Licence, so that the Home Assistant automation system can have its own voice assistant.&#xA;&#xA;There is also Mycroft&#39;s Mimic3 engine, but for the time being it is only available as a cloud option, so I am ruling it out. There will be an offline version available at some point in time.&#xA;&#xA;Both Piper and Mimic3 came from the need to integrate voice assistants running on a Raspberry Pi, so they can run on low spec systems.&#xA;&#xA;I installed Piper on my Fedora 39 laptop and I am very satisfied with the results. &#xA;&#xA;Here is how I did it:&#xA;&#xA;Download latest release from the Piper project page: https://github.com/rhasspy/piper&#xA;&#xA;Releases are here: https://github.com/rhasspy/piper/releases   &#xA;Get the package that corresponds to your CPU architecture. For instance, if on an Intel/AMD architecture:&#xA;&#xA;wget https://github.com/rhasspy/piper/releases/download/2023.9.27-1/piperlinuxx64.tar.gz&#xA;&#xA;Extract the package in /opt.&#xA;cd /opt&#xA;tar xvf /path/to/piperlinuxx64.tar.gz&#xA;&#xA;Listen to voice models and download the ones you like from https://rhasspy.github.io/piper-samples/&#xA;&#xA;Piper is more than just a TTS engine, but this is how I am going to use it, so all I need is existing pre-trained voice models.&#xA;&#xA;Download the onnx and onnx.jason files that correspond to the voices you have selected. For instance, if you want an English US (North American accent) and a French voice, you could pick:&#xA;Lessac (enUS)&#xA;wget https://huggingface.co/rhasspy/piper-voices/blob/main/en/enUS/lessac/high/enUS-lessac-medium.onnx&#xA;wget https://huggingface.co/rhasspy/piper-voices/blob/main/en/enUS/lessac/high/enUS-lessac-medium.onnx.json&#xA;and  UPMC Jessica (frFR)&#xA;wget https://huggingface.co/rhasspy/piper-voices/blob/main/fr/frFR/upmc/medium/frFR-upmc-medium.onnx&#xA;https://huggingface.co/rhasspy/piper-voices/blob/main/fr/frFR/upmc/medium/frFR-upmc-medium.onnx.json&#xA;Place model files in /opt/piper/models (you may have to create this directory manually).&#xA;&#xA;Create local speech-dispatcher configuration&#xA;As a regular desktop user (i.e. not root), create the directory ~/.conf/speech-dispatcher and subdirectory ~/.conf/speech-dispatcher/modules.&#xA;&#xA;Create the file ~/.conf/speech-dispatcher/modules/piper.conf with the following content:&#xA;English US&#xA;AddVoice&#x9;&#34;en&#34;&#x9;&#x9;&#x9;&#34;FEMALE1&#34;&#x9;&#34;enUS-lessac-medium&#34;&#xA;AddVoice&#x9;&#34;enUS&#34;&#x9;&#x9;&#34;FEMALE1&#34;&#x9;&#34;enUS-lessac-medium&#34;&#xA;&#xA;French FR&#xA;AddVoice&#x9; &#34;fr&#34;&#x9;&#x9;&#x9;&#34;FEMALE1&#34;&#x9;&#34;frFR-upmc-medium&#34;&#xA;AddVoice&#x9; &#34;frFR&#34;&#x9;&#x9;&#34;FEMALE1&#34;&#x9;&#34;frFR-upmc-medium&#34;&#xA;&#xA;DefaultVoice &#34;enUS-lessac-medium&#34;&#xA;&#xA;GenericExecuteSynth &#34;echo \&#39;$DATA\&#39; | /opt/piper/piper --model /opt/piper/models/$VOICE.onnx --outputraw | aplay -r 22050 -f S16LE -t raw - &#34;&#xA;Create the file ~/.conf/speech-dispatcher/speechd.conf with the following content:&#xA;AddModule &#34;piper&#34; &#34;sdgeneric&#34; &#34;/home/username/.config/speech-dispatcher/modules/piper.conf&#34;&#xA;&#xA;DefaultModule piper&#xA;AudioOutputMethod &#34;pulse&#34;&#xA;AudioPulseDevice &#34;default&#34;&#xA;Don&#39;t forget to replace username with the actual user name.&#xA;&#xA;Reboot&#xA;This may not be needed but it could save you some headaches.&#xA;&#xA;Log back in&#xA;Test speech synthesis with default voice: &#xA;spd-say &#34;This is a speech synthesis test&#34;&#xA;&#xA;If this worked, then start Firefox, open a news article in Reader View, and press &#39;N&#39; to listen to it. You should now be able to have nice quality TTS for articles in French and English.&#xA;&#xA;— Kicou]]&gt;</description>
      <content:encoded><![CDATA[<p>Sometimes I want to listen to written news articles, because I am doing several things at the same time and I don&#39;t want to be stuck reading the content of one unique tab.</p>

<p>Firefox has a Reader View mode that is pleasing to the eye, and that can also read text aloud using the speech-dispatcher TTS (text to speech) service provided by Linux.</p>

<p>Speech-dispatcher can use a multitude of TTS engines, but the ones historically available in Linux sounded unnatural. Until recently.</p>

<p>The robotic voice days are over, and natural sounding speech synthesis is now available to Linux users without the need to connect to online services like Google Translate&#39;s engine.</p>

<p>Nabu Casa, the company behind Home Assistant, is sponsoring Piper, an open source TTS engine under MIT Licence, so that the Home Assistant automation system can have its own voice assistant.</p>

<p>There is also Mycroft&#39;s Mimic3 engine, but for the time being it is only available as a cloud option, so I am ruling it out. There will be an offline version available at some point in time.</p>

<p>Both Piper and Mimic3 came from the need to integrate voice assistants running on a Raspberry Pi, so they can run on low spec systems.</p>

<p>I installed Piper on my Fedora 39 laptop and I am very satisfied with the results.</p>

<p>Here is how I did it:</p>

<h3 id="download-latest-release-from-the-piper-project-page-https-github-com-rhasspy-piper">Download latest release from the Piper project page: <a href="https://github.com/rhasspy/piper">https://github.com/rhasspy/piper</a></h3>

<p>Releases are here: <a href="https://github.com/rhasspy/piper/releases">https://github.com/rhasspy/piper/releases</a><br>
Get the package that corresponds to your CPU architecture. For instance, if on an Intel/AMD architecture:</p>

<p><code>wget https://github.com/rhasspy/piper/releases/download/2023.9.27-1/piper_linux_x64.tar.gz</code></p>

<p>Extract the package in <code>/opt</code>.</p>

<pre><code>cd /opt
tar xvf /path/to/piper_linux_x64.tar.gz
</code></pre>

<h3 id="listen-to-voice-models-and-download-the-ones-you-like-from-https-rhasspy-github-io-piper-samples">Listen to voice models and download the ones you like from <a href="https://rhasspy.github.io/piper-samples/">https://rhasspy.github.io/piper-samples/</a></h3>

<p>Piper is more than just a TTS engine, but this is how I am going to use it, so all I need is existing pre-trained voice models.</p>

<p>Download the onnx and onnx.jason files that correspond to the voices you have selected. For instance, if you want an English US (North American accent) and a French voice, you could pick:
Lessac (en_US)</p>

<pre><code>wget https://huggingface.co/rhasspy/piper-voices/blob/main/en/en_US/lessac/high/en_US-lessac-medium.onnx
wget https://huggingface.co/rhasspy/piper-voices/blob/main/en/en_US/lessac/high/en_US-lessac-medium.onnx.json
</code></pre>

<p>and  UPMC Jessica (fr_FR)</p>

<pre><code>wget https://huggingface.co/rhasspy/piper-voices/blob/main/fr/fr_FR/upmc/medium/fr_FR-upmc-medium.onnx
https://huggingface.co/rhasspy/piper-voices/blob/main/fr/fr_FR/upmc/medium/fr_FR-upmc-medium.onnx.json
</code></pre>

<p>Place model files in <code>/opt/piper/models</code> (you may have to create this directory manually).</p>

<h3 id="create-local-speech-dispatcher-configuration">Create local speech-dispatcher configuration</h3>

<p>As a regular desktop user (i.e. not root), create the directory <code>~/.conf/speech-dispatcher</code> and subdirectory <code>~/.conf/speech-dispatcher/modules</code>.</p>

<h4 id="create-the-file-conf-speech-dispatcher-modules-piper-conf-with-the-following-content">Create the file <code>~/.conf/speech-dispatcher/modules/piper.conf</code> with the following content:</h4>

<pre><code>#English US
AddVoice	&#34;en&#34;			&#34;FEMALE1&#34;	&#34;en_US-lessac-medium&#34;
AddVoice	&#34;en_US&#34;		&#34;FEMALE1&#34;	&#34;en_US-lessac-medium&#34;

#French FR
AddVoice	 &#34;fr&#34;			&#34;FEMALE1&#34;	&#34;fr_FR-upmc-medium&#34;
AddVoice	 &#34;fr_FR&#34;		&#34;FEMALE1&#34;	&#34;fr_FR-upmc-medium&#34;

DefaultVoice &#34;en_US-lessac-medium&#34;

GenericExecuteSynth &#34;echo \&#39;$DATA\&#39; | /opt/piper/piper --model /opt/piper/models/$VOICE.onnx --output_raw | aplay -r 22050 -f S16_LE -t raw - &#34;
</code></pre>

<h4 id="create-the-file-conf-speech-dispatcher-speechd-conf-with-the-following-content">Create the file <code>~/.conf/speech-dispatcher/speechd.conf</code> with the following content:</h4>

<pre><code>AddModule &#34;piper&#34; &#34;sd_generic&#34; &#34;/home/username/.config/speech-dispatcher/modules/piper.conf&#34;

DefaultModule piper
AudioOutputMethod &#34;pulse&#34;
AudioPulseDevice &#34;default&#34;
</code></pre>

<p>Don&#39;t forget to replace <code>username</code> with the actual user name.</p>

<h3 id="reboot">Reboot</h3>

<p>This may not be needed but it could save you some headaches.</p>

<h3 id="log-back-in">Log back in</h3>

<p>Test speech synthesis with default voice:
<code>spd-say &#34;This is a speech synthesis test&#34;</code></p>

<p>If this worked, then start Firefox, open a news article in Reader View, and press &#39;N&#39; to listen to it. You should now be able to have nice quality TTS for articles in French and English.</p>

<p>— Kicou</p>
]]></content:encoded>
      <guid>https://blog.kicou.info/speech-synthesis-in-linux-with-piper</guid>
      <pubDate>Thu, 02 Nov 2023 19:08:41 +0000</pubDate>
    </item>
    <item>
      <title>&#34;You lack ambition&#34;</title>
      <link>https://blog.kicou.info/you-lack-ambition</link>
      <description>&lt;![CDATA[  &#34;I don&#39;t get it, you could make $200k a year if you put some effort into it&#34;&#xA;&#xA;Well, perhaps we have different priorities in life and do not define success in the same manner.&#xA;&#xA;Maybe we need a little bit of personal history here:&#xA;&#xA;I was abused from age 5 to 15+&#xA;the abuse was constant, it was mostly physical and psychological&#xA;I also suffered abuse of sexual nature, but the way it happened was not systemic and was perpetrated by a different abuser —somehow it did not cause as much trauma&#xA;I was homeless at 15 and managed to make it through high-school without my teachers or schoolmates knowing about it (or at least I like to think that I successfully concealed my situation at the time); I remember it as a happy part of my life because it was also a period of great freedom&#xA;&#xA;As a result of this far-from-ideal start in life, I suffer from physical and psychological consequences that still affect my daily life as of today.!--more--&#xA;&#xA;You wouldn&#39;t be able to tell if you met me at a party, for several reasons:&#xA;&#xA;I don&#39;t attend parties&#xA;I don&#39;t engage with strangers&#xA;my physical scars are internal, specifically inside my brain, and are only visible through medical imaging; they are real and very obvious in MRI scans&#xA;my psychological wounds are deep; I have lived with them most of my life, I knew I was not &#34;normal&#34;, but I had no idea how serious they were until I had a complete meltdown at age 40&#xA;I am very good at hiding how broken I am&#xA;&#xA;But my life is not all misfortune. I also had my share of luck:&#xA;&#xA;I am not stupid. Despite a limited ability to study (I have concentration issues), a great difficulty to have a social life, and a lot of scar tissue in my brain, I am pretty good at solving problems, which allows me to make a decent living as an IT professional&#xA;I met a wonderful woman 30 years ago, and we have been together ever since. She is my rock, and without her I wouldn&#39;t be alive today&#xA;when I reached the age of 40 my life spiralled out of control, but my (smart) family doctor quickly identified the issue by asking the right questions; this led to a diagnostic (PTSD, but actually C-PTSD, even though it doesn&#39;t formally exist in the DSM-5) and paved the road for a successful treatment. It took years but it saved my life&#xA;I live in a country where I was able to receive years of treatment and counselling without having to pay out of pocket. I did pay for some specialised treatments (EMDR, and a 2-month inpatient program), but without government-funded health care I would not be here today&#xA;&#xA;To add to the context: I am estranged from my blood family. They all live on the US west coast but I don&#39;t have contact with them. My wife&#39;s family is mostly in France and the US. She has relatives all across Canada but we are not really close. This means that we don&#39;t have a support network and are pretty much isolated. This situation was most difficult when the kids were young, but they&#39;re fine young adults now.&#xA;&#xA;Mrs. Kicou spends a few months in France every year to assist her siblings in taking care of their aging parents. Her Dad, in particular, is bedridden, suffers from dementia, and requires 24/7 care. On of her sisters who lives in the US also does the same: they take turns to look after their parents.&#xA;&#xA;After this very succinct and simplified summary of my personal journey and life situation, you may understand better that my goal in life hasn&#39;t been to build a career or amass wealth: most of my life has been about surviving this world.&#xA;&#xA;Surviving materially, financially, and most importantly: mentally.&#xA;&#xA;Even though things are better now from a mental wellness perspective, my priorities have not changed.&#xA;&#xA;In terms of financial stability, things are okay but still not ideal:&#xA;&#xA;I carry debt, mostly due to medical treatment —it is not the care in itself that dug my hole, but the adjacent costs and the fact that I had zero income during that time. Two months may not seem like a long time, but as the sole breadwinner for the family, this put a pretty big dent in our finances&#xA;on the other hand, I am managing it: we fully own our two vehicles and will be done paying our house in less than two years. At that point the pressure will ease and I will focus heavily on paying off the remainder of our debt&#xA;one of our kid is done with university, she has left the nest and is living her independent life, but we still have another one in college; when he is done and finds a stable job, it will be another financial burden off our shoulders&#xA;we have almost no savings —I know it is not ideal but at least we will have our house, which means that we can eventually downsize and hopefully use some of the capital gain towards retirement.&#xA;&#xA;We are still walking a fine line, but things are looking up and I give it five-10 years before we have a more solid footing.&#xA;&#xA;In the meantime I have to make sure my brain co-operates, which is why I am extremely careful to treat it well and give it a lot of rest. My brain is my most precious resource and I don&#39;t want to damage it any further.&#xA;&#xA;So ya, as a self-employed individual, I could look for more opportunities and bill as many hours as I can, but that would be at the expense of my mental health, which would affect the quality of my work, and ultimately lead to less business.&#xA;&#xA;As it is, I work one to two hours per day on average. Sometimes when I have a project going, I can work eight, 12, even 16 hours daily for a week or two. Luckily these periods are few, and I deal with workload spikes very well, as long as the increased pressure and stress do not become the norm.&#xA;&#xA;It may seem that one/two hours a day is very little, but you have to consider the fact that I am basically always on call. It also means that I am very quick to respond to customer requests and urgent issues, and can provide timely, efficient and personalised service. I am basically my customers&#39; IT concierge.&#xA;&#xA;I work from home, I have no commute, I can nap whenever I need it, I can even travel if I want to, provided I have proper internet access. This all contributes to lowering the stress in my life, and ensures that I can manage the occasional mental crisis without sacrificing the quality of my work.&#xA;&#xA;And I still manage to make a low six figures, which I would not qualify as a lot (especially given the sharp increase in cost of living), but it is enough to keep us afloat while waiting for the next step (empty-nester life in a fully owned dwelling), at which point I will be able to reconsider some of my life choices.&#xA;&#xA;— Kicou]]&gt;</description>
      <content:encoded><![CDATA[<blockquote><p>“I don&#39;t get it, you could make $200k a year if you put some effort into it”</p></blockquote>

<p>Well, perhaps we have different priorities in life and do not define success in the same manner.</p>

<p>Maybe we need a little bit of personal history here:</p>
<ul><li>I was abused from age 5 to 15+</li>
<li>the abuse was constant, it was mostly physical and psychological</li>
<li>I also suffered abuse of sexual nature, but the way it happened was not systemic and was perpetrated by a different abuser —somehow it did not cause as much trauma</li>
<li>I was homeless at 15 and managed to make it through high-school without my teachers or schoolmates knowing about it (or at least I like to think that I successfully concealed my situation at the time); I remember it as a happy part of my life because it was also a period of great freedom</li></ul>

<p>As a result of this far-from-ideal start in life, I suffer from physical and psychological consequences that still affect my daily life as of today.</p>

<p>You wouldn&#39;t be able to tell if you met me at a party, for several reasons:</p>
<ul><li>I don&#39;t attend parties</li>
<li>I don&#39;t engage with strangers</li>
<li>my physical scars are internal, specifically inside my brain, and are only visible through medical imaging; they are real and very obvious in MRI scans</li>
<li>my psychological wounds are deep; I have lived with them most of my life, I knew I was not “normal”, but I had no idea how serious they were until I had a complete meltdown at age 40</li>
<li>I am very good at hiding how broken I am</li></ul>

<p>But my life is not all misfortune. I also had my share of luck:</p>
<ul><li>I am not stupid. Despite a limited ability to study (I have concentration issues), a great difficulty to have a social life, and a lot of scar tissue in my brain, I am pretty good at solving problems, which allows me to make a decent living as an IT professional</li>
<li>I met a wonderful woman 30 years ago, and we have been together ever since. She is my rock, and without her I wouldn&#39;t be alive today</li>
<li>when I reached the age of 40 my life spiralled out of control, but my (smart) family doctor quickly identified the issue by asking the right questions; this led to a diagnostic (PTSD, but actually C-PTSD, even though it doesn&#39;t formally exist in the DSM-5) and paved the road for a successful treatment. It took years but it saved my life</li>
<li>I live in a country where I was able to receive years of treatment and counselling without having to pay out of pocket. I did pay for some specialised treatments (EMDR, and a 2-month inpatient program), but without government-funded health care I would not be here today</li></ul>

<p>To add to the context: I am estranged from my blood family. They all live on the US west coast but I don&#39;t have contact with them. My wife&#39;s family is mostly in France and the US. She has relatives all across Canada but we are not really close. This means that we don&#39;t have a support network and are pretty much isolated. This situation was most difficult when the kids were young, but they&#39;re fine young adults now.</p>

<p>Mrs. Kicou spends a few months in France every year to assist her siblings in taking care of their aging parents. Her Dad, in particular, is bedridden, suffers from dementia, and requires 24/7 care. On of her sisters who lives in the US also does the same: they take turns to look after their parents.</p>

<p>After this very succinct and simplified summary of my personal journey and life situation, you may understand better that my goal in life hasn&#39;t been to build a career or amass wealth: most of my life has been about surviving this world.</p>

<p>Surviving materially, financially, and most importantly: mentally.</p>

<p>Even though things are better now from a mental wellness perspective, my priorities have not changed.</p>

<p>In terms of financial stability, things are okay but still not ideal:</p>
<ul><li>I carry debt, mostly due to medical treatment —it is not the care in itself that dug my hole, but the adjacent costs and the fact that I had zero income during that time. Two months may not seem like a long time, but as the sole breadwinner for the family, this put a pretty big dent in our finances</li>
<li>on the other hand, I am managing it: we fully own our two vehicles and will be done paying our house in less than two years. At that point the pressure will ease and I will focus heavily on paying off the remainder of our debt</li>
<li>one of our kid is done with university, she has left the nest and is living her independent life, but we still have another one in college; when he is done and finds a stable job, it will be another financial burden off our shoulders</li>
<li>we have almost no savings —I know it is not ideal but at least we will have our house, which means that we can eventually downsize and hopefully use some of the capital gain towards retirement.</li></ul>

<p>We are still walking a fine line, but things are looking up and I give it five-10 years before we have a more solid footing.</p>

<p>In the meantime I have to make sure my brain co-operates, which is why I am extremely careful to treat it well and give it a lot of rest. My brain is my most precious resource and I don&#39;t want to damage it any further.</p>

<p>So ya, as a self-employed individual, I could look for more opportunities and bill as many hours as I can, but that would be at the expense of my mental health, which would affect the quality of my work, and ultimately lead to less business.</p>

<p>As it is, I work one to two hours per day on average. Sometimes when I have a project going, I can work eight, 12, even 16 hours daily for a week or two. Luckily these periods are few, and I deal with workload spikes very well, as long as the increased pressure and stress do not become the norm.</p>

<p>It may seem that one/two hours a day is very little, but you have to consider the fact that I am basically always on call. It also means that I am very quick to respond to customer requests and urgent issues, and can provide timely, efficient and personalised service. I am basically my customers&#39; IT concierge.</p>

<p>I work from home, I have no commute, I can nap whenever I need it, I can even travel if I want to, provided I have proper internet access. This all contributes to lowering the stress in my life, and ensures that I can manage the occasional mental crisis without sacrificing the quality of my work.</p>

<p>And I still manage to make a low six figures, which I would not qualify as a lot (especially given the sharp increase in cost of living), but it is enough to keep us afloat while waiting for the next step (empty-nester life in a fully owned dwelling), at which point I will be able to reconsider some of my life choices.</p>

<p>— Kicou</p>
]]></content:encoded>
      <guid>https://blog.kicou.info/you-lack-ambition</guid>
      <pubDate>Mon, 22 May 2023 12:45:27 +0000</pubDate>
    </item>
    <item>
      <title>My Librem 5 - introduction, first impression</title>
      <link>https://blog.kicou.info/my-librem-5-introduction-first-impression</link>
      <description>&lt;![CDATA[I ordered the Purism Librem 5 Linux phone in January 2019 and it finally arrived, just shy of four years later.&#xA;&#xA;When I placed my order I already knew it would be an under-spec&#39;d device compared to any other 2018-2019 Android or Apple device, but the gap is even wider as 2023 is on the horizon.&#xA;&#xA;However, a low-performance device is not necessarily a bad thing: Linux on a consumer-grade mobile is still a very new concept, and running a usable phone is still new territory for Linux.&#xA;&#xA;Although the Librem 5 is a decently built device with &#34;good enough&#34; specifications on paper, the challenge of developing a platform suitable as a daily driver for a pocket multi-function device (let&#39;s face it: it&#39;s still called a phone, but that is not its main usage anymore) is to meet the increasingly demanding expectations of modern-day users, especially in comparison to the two prominent mobile competing platforms: Alphabet&#39;s Android and Apple&#39;s iOS/iPadOS.&#xA;&#xA;Linux is a good multipurpose OS: it shines on servers. Linux probably runs 99% of the internet, enjoys a quasi-monopoly in cloud computing, and is also leading in the embedded/IoT arena.&#xA;&#xA;The problem with Linux on &#34;smart&#34; phones is twofold:&#xA;&#xA;In order to be good, both in terms of processing power and energy efficiency, the operating system needs to be tightly integrated with the hardware. Up until now, a very select number of chip makers like Qualcomm are dominating the scene; their technologies are not only proprietary, but they also don&#39;t have open specifications. This means that they are black boxes with very controlled access points, which goes against the libre software philosophy, and raises questions regarding the user&#39;s privacy: who knows what really happens behind the scenes? So the nascent market of Linux phones had to settle for components that were open, both in specs and in licencing. This first point means that —at least for this first generation of hardware— there is a trade-off both in terms of performance and power consumption: we are still at the foundation level where the &#34;Linux for phone devices&#34; stack is being built and integrated with components that are specific to a battery-powered hand-held device.&#xA;&#xA;The user interface for a 6&#34; inch touch-screen device does not exist yet (at least it did not exist in 2018-2019). The PinePhone and even more so the Purism Librem5 initiatives have helped Open Source software make great strides in a matter of four years, and we are starting to see working proofs-of-concept such as the PinePhone Pro and the Librem5 that run OSes like Purism OS or Postmarket OS, with libraries like Purism-backed Phosh, as well as integration with the imaging and radio modules. There is still work to do, especially with hardware acceleration and full hardware support, but I would say that at the eve of 2023 we have reached a stage where we can consider these devices as &#34;working and somewhat usable prototypes&#34;.&#xA;&#xA;I bought a Pinephone BraveHeart edition when it came out (the very first version that looked like a phone) but I didn&#39;t have much time to play with it; making it work was very involved (very similar to fiddling with a PinebookPro, with which it shares a lot of similarities), and I have to say that it is under-powered. I see it more like a development platform than a potential daily driver. &#xA;&#xA;I already knew that when I bought it, but as a non-developer let&#39;s say that it is my way to help the cause of privacy-conscious Open Source operating systems on mobile devices. In the meantime the Pinephone Pro was released, but since I already had a Librem 5 on order, I did not even bother: both the Librem 5 and the Pinephone Pro, despite being different in design, are very similar in terms of hardware specifications and expectations.&#xA;&#xA;Granted, these phones are not state-of-the-art and lack in performance, but as I said earlier: it is a good thing when it comes to programming a new stack for them, because code will thus have to be optimised to run well, which means that in the end it will fly when it has to run on more powerful hardware.&#xA;&#xA;So here I am, now the proud owner of a brand new four-year-old device that I just received yesterday. I have already started playing with it a little bit, and here are my first impressions:&#xA;&#xA;It is bulky, but not outrageously so: it feels like a current phone with a shock-proof case. Except that it has no case.&#xA;&#xA;It feels well built. Although being very plasticky, it feels much sturdier than the Pinephone. But we are not comparing apples to apples: the Pinephone costs USD$199, the Librem 5 USD$899 (I purchased it when it was USD$699).&#xA;&#xA;It feels like it could become my main device with the current hardware. There is sill work to do on the software side, especially in terms of UI, but it runs decently and the underlying OS feels very capable and familiar.&#xA;&#xA;At its current stage, the Librem5 feels more like a full-featured small computer in the shape of the phone, which is both good and bad. It is good because I can ssh into it and I immediately feel like I am on one of my servers, with all the tools and package presents: this will be easy to manage. The bad is that it feels like a computer, and not like a phone: the interface is OK, but not suitable for daily usage in the palm of your hands. You still feel like if you want to accomplish anything you need to take your laptop and ssh into the phone.&#xA;&#xA;I have barely touched it so far, but here are my first remarks:&#xA;&#xA;I ran an apt update, apt upgrade to have the base OS up to date&#xA;I installed and enabled openssh-server&#xA;The touch keyboard is OK as long as you don&#39;t want to type accented characters—I wasn&#39;t able to find how to input éàÇÊö without switching to an AZERTY layout, except that I do not wish to use the French AZERTY keyboard&#xA;I have read reports that you must not insert/remove your SIM card while the power is on, or it will fry your card —I&#39;ll remember not to do that&#xA;I installed and enabled tuned, and run it in powersave mode to help with battery usage&#xA;I set up email (IMAP/S, SMTP/S) with no issues (the mail client is Geary)&#xA;In the &#34;Calls&#34; app, I set up my VoIP account (voip.ms, with SIP, TLS) and it kind of works —more on this in a later post&#xA;Playing Youtube videos in Firefox just works. I think the videos are hardware-accelerated: they were smooth and did not stutter&#xA;The UI is responsive, but feels a bit laggy at times. It also shows that this is a desktop UI adapted to mobile. It is getting better, but we are not 100% there yet&#xA;&#xA;So basically I can already use it to place/take calls, and to send and receive email. This is already an excellent start.&#xA;&#xA;That&#39;s it for now, I&#39;ll come back with more at a later time (or maybe not, don&#39;t hold your breath.)&#xA;&#xA;— Kicou]]&gt;</description>
      <content:encoded><![CDATA[<p>I ordered the <em>Purism Librem</em> 5 Linux phone in January 2019 and it finally arrived, just shy of four years later.</p>

<p>When I placed my order I already knew it would be an under-spec&#39;d device compared to any other 2018-2019 Android or Apple device, but the gap is even wider as 2023 is on the horizon.</p>

<p>However, a low-performance device is not necessarily a bad thing: Linux on a consumer-grade mobile is still a very new concept, and running a usable phone is still new territory for Linux.</p>

<p>Although the Librem 5 is a decently built device with “good enough” specifications on paper, the challenge of developing a platform suitable as a daily driver for a pocket multi-function device (let&#39;s face it: it&#39;s still called a phone, but that is not its main usage anymore) is to meet the increasingly demanding expectations of modern-day users, especially in comparison to the two prominent mobile competing platforms: Alphabet&#39;s Android and Apple&#39;s iOS/iPadOS.</p>

<p>Linux is a good multipurpose OS: it shines on servers. Linux probably runs 99% of the internet, enjoys a quasi-monopoly in cloud computing, and is also leading in the embedded/IoT arena.</p>

<p>The problem with Linux on “smart” phones is twofold:</p>
<ol><li><p>In order to be good, both in terms of processing power and energy efficiency, the operating system needs to be tightly integrated with the hardware. Up until now, a very select number of chip makers like Qualcomm are dominating the scene; their technologies are not only proprietary, but they also don&#39;t have open specifications. This means that they are black boxes with very controlled access points, which goes against the libre software philosophy, and raises questions regarding the user&#39;s privacy: who knows what really happens behind the scenes? So the nascent market of Linux phones had to settle for components that were open, both in specs and in licencing. This first point means that —at least for this first generation of hardware— there is a trade-off both in terms of performance and power consumption: we are still at the foundation level where the “Linux for phone devices” stack is being built and integrated with components that are specific to a battery-powered hand-held device.</p></li>

<li><p>The user interface for a 6” inch touch-screen device does not exist yet (at least it did not exist in 2018-2019). The PinePhone and even more so the Purism Librem5 initiatives have helped Open Source software make great strides in a matter of four years, and we are starting to see working proofs-of-concept such as the PinePhone Pro and the Librem5 that run OSes like Purism OS or Postmarket OS, with libraries like Purism-backed Phosh, as well as integration with the imaging and radio modules. There is still work to do, especially with hardware acceleration and full hardware support, but I would say that at the eve of 2023 we have reached a stage where we can consider these devices as “working and somewhat usable prototypes”.</p></li></ol>

<p>I bought a Pinephone <em>BraveHeart</em> edition when it came out (the very first version that looked like a phone) but I didn&#39;t have much time to play with it; making it work was very involved (very similar to fiddling with a PinebookPro, with which it shares a lot of similarities), and I have to say that it is under-powered. I see it more like a development platform than a potential daily driver.</p>

<p>I already knew that when I bought it, but as a non-developer let&#39;s say that it is my way to help the cause of privacy-conscious Open Source operating systems on mobile devices. In the meantime the Pinephone Pro was released, but since I already had a Librem 5 on order, I did not even bother: both the Librem 5 and the Pinephone Pro, despite being different in design, are very similar in terms of hardware specifications and expectations.</p>

<p>Granted, these phones are not state-of-the-art and lack in performance, but as I said earlier: it is a good thing when it comes to programming a new stack for them, because code will thus have to be optimised to run well, which means that in the end it will fly when it has to run on more powerful hardware.</p>

<p>So here I am, now the proud owner of a brand new four-year-old device that I just received yesterday. I have already started playing with it a little bit, and here are my first impressions:</p>
<ol><li><p>It is bulky, but not outrageously so: it feels like a current phone with a shock-proof case. Except that it has no case.</p></li>

<li><p>It feels well built. Although being very plasticky, it feels much sturdier than the Pinephone. But we are not comparing apples to apples: the Pinephone costs USD$199, the Librem 5 USD$899 (I purchased it when it was USD$699).</p></li>

<li><p>It feels like it <em>could</em> become my main device with the current hardware. There is sill work to do on the software side, especially in terms of UI, but it runs decently and the underlying OS feels very capable and familiar.</p></li>

<li><p>At its current stage, the Librem5 feels more like a full-featured small computer in the shape of the phone, which is both good and bad. It is good because I can ssh into it and I immediately feel like I am on one of my servers, with all the tools and package presents: this will be easy to manage. The bad is that it feels like a computer, and not like a phone: the interface is OK, but not suitable for daily usage in the palm of your hands. You still feel like if you want to accomplish anything you need to take your laptop and ssh into the phone.</p></li></ol>

<p>I have barely touched it so far, but here are my first remarks:</p>
<ul><li>I ran an <code>apt update</code>, <code>apt upgrade</code> to have the base OS up to date</li>
<li>I installed and enabled <code>openssh-server</code></li>
<li>The touch keyboard is OK as long as you don&#39;t want to type accented characters—I wasn&#39;t able to find how to input éàÇÊö without switching to an AZERTY layout, except that I <strong>do not</strong> wish to use the French AZERTY keyboard</li>
<li>I have read reports that <strong>you must not insert/remove your SIM card while the power is on</strong>, or it will fry your card —I&#39;ll remember not to do that</li>
<li>I installed and enabled <code>tuned</code>, and run it in powersave mode to help with battery usage</li>
<li>I set up email (IMAP/S, SMTP/S) with no issues (the mail client is Geary)</li>
<li>In the “Calls” app, I set up my VoIP account (voip.ms, with SIP, TLS) and it kind of works —more on this in a later post</li>
<li>Playing Youtube videos in Firefox just works. I think the videos are hardware-accelerated: they were smooth and did not stutter</li>
<li>The UI is responsive, but feels a bit laggy at times. It also shows that this is a desktop UI adapted to mobile. It is getting better, but we are not 100% there yet</li></ul>

<p>So basically I can already use it to place/take calls, and to send and receive email. This is already an excellent start.</p>

<p>That&#39;s it for now, I&#39;ll come back with more at a later time (or maybe not, don&#39;t hold your breath.)</p>

<p>— Kicou</p>
]]></content:encoded>
      <guid>https://blog.kicou.info/my-librem-5-introduction-first-impression</guid>
      <pubDate>Sat, 17 Dec 2022 20:02:28 +0000</pubDate>
    </item>
    <item>
      <title>Five years</title>
      <link>https://blog.kicou.info/five-years</link>
      <description>&lt;![CDATA[#Life #MentalHealth #SocialMedia&#xA;&#xA;Five years ago I was in a mental institution, undergoing treatment. It was an eight-week inpatient program for people with PTSD.&#xA;&#xA;I was about half-way through it and was already starting to feel positive changes. I was on my laptop, trying to figure out how to get rid of the toxicity in my life.&#xA;&#xA;Work was an obvious one. It had been a dream job for 12 years, but a year prior the company had &#34;merged&#34; with a bigger one located 350 kilometres away, and things had been going south since then. But I was on medical leave, so now was not the time to deal with it. I had plans, but they could wait.&#xA;&#xA;One more immediate concern was social media and the stress it brought to my life. I was not an avid user but there is this push-pull relationship with Twitter and Facebook. You are force-fed posts according to algorithms that are designed to elicit &#34;engagement&#34; through strong emotions like admiration, envy, shock, outrage —mostly shock and outrage. So there is this urge to react to other people&#39;s posts, but also to share &#34;interesting&#34; things about your own life with the hope to get some feedback in return, either in the form of praise or dissent.!--more--&#xA;&#xA;I had come to the conclusion that Facebook and Twitter were not safe spaces, and I deleted my accounts.&#xA;&#xA;I never looked back.&#xA;&#xA;But I had been on the internet for too long, and to be frank it is my main means of interacting with other humans. I am human, so even though I do not necessarily appreciate the company of my peers, I still have this urge to socialise in one form or another, because whether I like it or not I am part of a social species.&#xA;&#xA;Looking for alternatives, I found Diaspora —which I actually already knew and tried once again— but I wasn&#39;t able to embrace it. Then I found Mastodon. I had heard of Friendi.ca before and this seemed somewhat close. I learned about the concept of instances and federation. I am familiar with systems like e-mail or jabber, so it was not too hard to wrap my head around them.&#xA;&#xA;I signed up for a mainly French-speaking Mastodon instance called mamot.fr, after reading a few posts there to see if I could fit there. Mostly left-leaning open-source software enthusiasts, teachers, librarians, etc. It could have been framasoft.org —which seems to share a somewhat similar mindset— but I had to pick one, so mamot.fr it was.&#xA;&#xA;I quickly discovered that contrary to Twitter or Facebook, the user has much more agency in the way their social graph (or bubble) is constructed, which may be a negative to some because it takes some time to build: you don&#39;t have a ready-made &#34;suggested&#34; timeline, and therefore it requires a conscious effort of selecting who you want to follow, through a process of discovery. But to me it proved to be a huge positive because it means that I can carefully choose who I interact with, and I discover new people mainly through those with whom my already established contacts communicate. It takes longer but the quality ends up being higher.&#xA;&#xA;After a few months I decided that I wanted to take this a step further and set up my own self-hosted, single-user instance: this gives me full control of what other instances can talk to mine, without having to depend of an instance administrator (other than myself) or a moderation team.&#xA;&#xA;It may sound like a huge mistake to cut yourself from other instances, but so far so good: I haven&#39;t blocked many instances, but I don&#39;t want to see racist or sex-trade related content. The racist/nazi stuff because these are ideologies I oppose but don&#39;t want to waste my time arguing against, and the sex-trade content is because I am simply not interested. It is not a moral judgment on sex workers, but some instances are clearly meant to serve as a promotion platform (i.e. spam). It could have been people trying to sell me VPN tunnels or foam mattresses, it just so happened that I had sex workers spamming my timeline.&#xA;&#xA;Today I am still happily on Mastodon (or more broadly, the Fediverse), and intend to remain there for the foreseeable future. Exchanges seem to be more genuine and not exclusively geared towards boosting one&#39;s ego.&#xA;&#xA;As for my professional life, I went back to work after my (successful) treatment, feeling better but also stronger, and in a much better head space. I tried to make things work with my employer but after a year it became evident that things could no longer work. I quit and went the self-employment route, partnering with a few ex-coworkers.&#xA;&#xA;More than three years in, I earn about the same as when I was on salary (a little bit more actually), but I have so much more control over my time and my work decisions that my quality of life has tremendously improved in many ways. I am more efficient, I can go at my own pace, I have much less stress, I can take a break when I need one without having to justify myself, and I can spend a lot of time with my loved ones, taking care of things at home. I love my new lifestyle.&#xA;&#xA;Looking back at the outcome of my life-changing treatment five years ago, I can say that I have regained control of my life and I am much happier today!&#xA;&#xA;&lt;3&#xA;&#xA;— Kicou]]&gt;</description>
      <content:encoded><![CDATA[<p><a href="https://blog.kicou.info/tag:Life" class="hashtag"><span>#</span><span class="p-category">Life</span></a> <a href="https://blog.kicou.info/tag:MentalHealth" class="hashtag"><span>#</span><span class="p-category">MentalHealth</span></a> <a href="https://blog.kicou.info/tag:SocialMedia" class="hashtag"><span>#</span><span class="p-category">SocialMedia</span></a></p>

<p>Five years ago I was in a mental institution, undergoing treatment. It was an eight-week inpatient program for people with PTSD.</p>

<p>I was about half-way through it and was already starting to feel positive changes. I was on my laptop, trying to figure out how to get rid of the toxicity in my life.</p>

<p>Work was an obvious one. It had been a dream job for 12 years, but a year prior the company had “merged” with a bigger one located 350 kilometres away, and things had been going south since then. But I was on medical leave, so now was not the time to deal with it. I had plans, but they could wait.</p>

<p>One more immediate concern was social media and the stress it brought to my life. I was not an avid user but there is this push-pull relationship with Twitter and Facebook. You are force-fed posts according to algorithms that are designed to elicit “engagement” through strong emotions like admiration, envy, shock, outrage —mostly shock and outrage. So there is this urge to react to other people&#39;s posts, but also to share “interesting” things about your own life with the hope to get some feedback in return, either in the form of praise or dissent.</p>

<p>I had come to the conclusion that Facebook and Twitter were not safe spaces, and I deleted my accounts.</p>

<p>I never looked back.</p>

<p>But I had been on the internet for too long, and to be frank it is my main means of interacting with other humans. I am human, so even though I do not necessarily appreciate the company of my peers, I still have this urge to socialise in one form or another, because whether I like it or not I am part of a social species.</p>

<p>Looking for alternatives, I found Diaspora —which I actually already knew and tried once again— but I wasn&#39;t able to embrace it. Then I found Mastodon. I had heard of Friendi.ca before and this seemed somewhat close. I learned about the concept of instances and federation. I am familiar with systems like e-mail or jabber, so it was not too hard to wrap my head around them.</p>

<p>I signed up for a mainly French-speaking Mastodon instance called mamot.fr, after reading a few posts there to see if I could fit there. Mostly left-leaning open-source software enthusiasts, teachers, librarians, etc. It could have been framasoft.org —which seems to share a somewhat similar mindset— but I had to pick one, so mamot.fr it was.</p>

<p>I quickly discovered that contrary to Twitter or Facebook, the user has much more agency in the way their social graph (or bubble) is constructed, which may be a negative to some because it takes some time to build: you don&#39;t have a ready-made “suggested” timeline, and therefore it requires a conscious effort of selecting who you want to follow, through a process of discovery. But to me it proved to be a huge positive because it means that I can carefully choose who I interact with, and I discover new people mainly through those with whom my already established contacts communicate. It takes longer but the quality ends up being higher.</p>

<p>After a few months I decided that I wanted to take this a step further and set up my own self-hosted, single-user instance: this gives me full control of what other instances can talk to mine, without having to depend of an instance administrator (other than myself) or a moderation team.</p>

<p>It may sound like a huge mistake to cut yourself from other instances, but so far so good: I haven&#39;t blocked many instances, but I don&#39;t want to see racist or sex-trade related content. The racist/nazi stuff because these are ideologies I oppose but don&#39;t want to waste my time arguing against, and the sex-trade content is because I am simply not interested. It is not a moral judgment on sex workers, but some instances are clearly meant to serve as a promotion platform (i.e. spam). It could have been people trying to sell me VPN tunnels or foam mattresses, it just so happened that I had sex workers spamming my timeline.</p>

<p>Today I am still happily on Mastodon (or more broadly, the Fediverse), and intend to remain there for the foreseeable future. Exchanges seem to be more genuine and not exclusively geared towards boosting one&#39;s ego.</p>

<p>As for my professional life, I went back to work after my (successful) treatment, feeling better but also stronger, and in a much better head space. I tried to make things work with my employer but after a year it became evident that things could no longer work. I quit and went the self-employment route, partnering with a few ex-coworkers.</p>

<p>More than three years in, I earn about the same as when I was on salary (a little bit more actually), but I have so much more control over my time and my work decisions that my quality of life has tremendously improved in many ways. I am more efficient, I can go at my own pace, I have much less stress, I can take a break when I need one without having to justify myself, and I can spend a lot of time with my loved ones, taking care of things at home. I love my new lifestyle.</p>

<p>Looking back at the outcome of my life-changing treatment five years ago, I can say that I have regained control of my life and I am much happier today!</p>

<p>&lt;3</p>

<p>— Kicou</p>
]]></content:encoded>
      <guid>https://blog.kicou.info/five-years</guid>
      <pubDate>Wed, 06 Jul 2022 20:16:36 +0000</pubDate>
    </item>
    <item>
      <title>Windows 11 VM in Linux</title>
      <link>https://blog.kicou.info/windows-11-vm-in-linux</link>
      <description>&lt;![CDATA[#Windows #Linux #KVM #Libvirt&#xA;&#xA;This procedure has been tested in Arch Linux. Other distributions may have slightly different package requirements or naming conventions.&#xA;&#xA;Required packages&#xA;swtpm — provides TPM 2.0&#xA;edk2-ovmf — provides EFI/Secureboot filesystem image&#xA;&#xA;ISO images needed&#xA;Windows 11 installation disk&#xA;VirtIO driver disk&#xA;&#xA;Extract Windows OEM product key from host system&#xA;If the system was shipped with a pre-installed Windows OS, it has the Windows licencing information in BIOS&#xA;&#xA;$ sudo strings /sys/firmware/acpi/tables/MSDM&#xA;MSDMU&#xA;TLENOVOTP-N32  p&#xA;PTEC&#xA;AAAA1-AAAAA-AAAA1-1A1AA-11AA1 ← not my real product key&#xA;The last line is the product key!--more--&#xA;&#xA;Create a new VM&#xA;&#xA;   &#xA;4 GB of RAM and 2 vCPUs are the minumum requirements for Windows 11&#xA;&#xA;   &#xA;Windows 11 requires a minimum of 64 GB of disk space&#xA;&#xA;   &#xA;Make sure you check the box &#34;Customize configuration before install&#34; and hit &#34;Finish&#34;&#xA;&#xA;Change the &#34;Firmware&#34; setup to &#xA;You can now hit &#34;Begin Installation&#34; and proceed with the Windows 11 installation and initial setup&#xA;&#xA;Install Windows 11&#xA;&#xA;OS installation&#xA;Make sure you select the same OS edition as the one for which you have an OEM licence (e.g.: Windows 11 Professional).&#xA;&#xA;Initial setup&#xA;If you don&#39;t want to enrol a Microsoft Live account, answer that you want to use a Work or Active Directory account (Windows 11 Professional and up): this will take you to the local account creation screens.&#xA;&#xA;Paravirtualized drivers&#xA;VirtIO drivers provide better performance and should be used when possible.&#xA;The Spice video drivers also allow for seamless mouse cursor movement, dynamic resolution changes as well as drag-and-drop operations from Gnome to the Windows desktop (one way only)&#xA;&#xA;VirtIO drivers installation&#xA;mount the VirtIO driver/guest agent ISO&#xA;install the drivers and guest agent&#xA;&#xA;Change system disk (SATA→VirtIO)&#xA;&#xA;The default system disk is created as a SATA drive. Changing it to VirtIO immediately will not work because Windows has to load the VirtIO disk drivers at least once before it is able to boot from a VirtIO system disk. We need to created dummy VirtIO disk first.&#xA;&#xA;shut down the VM&#xA;add a 1GB VirtIO hard disk&#xA;power on the VM and let the OS load completely&#xA;sign in and check that Disk Manager sees an extra disk (you don&#39;t need to initialise it)&#xA;shut down the VM&#xA;delete the 1GB VirtIO drive&#xA;change the system disk type from SATA to VirtIO — you need to edit the XML file to perform this operation (either through virsh or from the virt-manager GUI, after having enabled XML file edition)&#xA;&#xA;Initial disk configuration:&#xA;disk type=&#34;file&#34; device=&#34;disk&#34;&#xA;  driver name=&#34;qemu&#34; type=&#34;qcow2&#34;/&#xA;  source file=&#34;/var/lib/libvirt/images/Windows11.qcow2&#34;/&#xA;  target dev=&#34;sda&#34; bus=&#34;sata&#34;/&#xA;/disk&#xA;&#xA;Modified disk configuration:&#xA;disk type=&#34;file&#34; device=&#34;disk&#34;&#xA;  driver name=&#34;qemu&#34; type=&#34;qcow2&#34;/&#xA;  source file=&#34;/var/lib/libvirt/images/Windows11.qcow2&#34;/&#xA;  target dev=&#34;vda&#34; bus=&#34;virtio&#34;/&#xA;  address type=&#34;pci&#34; domain=&#34;0x0000&#34; bus=&#34;0x05&#34; slot=&#34;0x00&#34; function=&#34;0x0&#34;/&#xA;/disk&#xA;&#xA;Other devices&#xA;Now that the VirtIO drivers have been installed in Windows, you can change the NIC type from Intel e1000e to VirtIO via the virt-manager GUI&#xA;&#xA;Activate Windows&#xA;Use the product key extracted from BIOS information (see above)&#xA;&#xA;You can now proceed witht he system updates and start using the Windows VM.&#xA;&#xA;— Kicou]]&gt;</description>
      <content:encoded><![CDATA[<p><a href="https://blog.kicou.info/tag:Windows" class="hashtag"><span>#</span><span class="p-category">Windows</span></a> <a href="https://blog.kicou.info/tag:Linux" class="hashtag"><span>#</span><span class="p-category">Linux</span></a> <a href="https://blog.kicou.info/tag:KVM" class="hashtag"><span>#</span><span class="p-category">KVM</span></a> <a href="https://blog.kicou.info/tag:Libvirt" class="hashtag"><span>#</span><span class="p-category">Libvirt</span></a></p>

<p>This procedure has been tested in Arch Linux. Other distributions may have slightly different package requirements or naming conventions.</p>

<h2 id="required-packages">Required packages</h2>
<ul><li><a href="https://archlinux.org/packages/community/x86_64/swtpm">swtpm</a> — provides TPM 2.0</li>
<li><a href="https://archlinux.org/packages/extra/any/edk2-ovmf">edk2-ovmf</a> — provides EFI/Secureboot filesystem image</li></ul>

<h3 id="iso-images-needed">ISO images needed</h3>
<ul><li><a href="https://www.microsoft.com/en-us/software-download/windows11">Windows 11 installation disk</a></li>
<li><a href="https://fedorapeople.org/groups/virt/virtio-win/direct-downloads/latest-virtio/virtio-win.iso">VirtIO driver disk</a></li></ul>

<h3 id="extract-windows-oem-product-key-from-host-system">Extract Windows OEM product key from host system</h3>

<p>If the system was shipped with a pre-installed Windows OS, it has the Windows licencing information in BIOS</p>

<pre><code class="language-bash">$ sudo strings /sys/firmware/acpi/tables/MSDM
MSDMU
TLENOVOTP-N32  p
PTEC
AAAA1-AAAAA-AAAA1-1A1AA-11AA1 ← not my real product key
</code></pre>

<p>The last line is the product key</p>

<h3 id="create-a-new-vm">Create a new VM</h3>

<p><img src="https://pixelfed-prod.nyc3.cdn.digitaloceanspaces.com/public/m/_v2/192044957266219008/2a69c66ec-4b94d5/Q1gIspgyQUWF/3W9HOJxk50KFvL07FaRFHSVZZgG2dOpLbtxs4kAe.png" alt=""></p>

<p><img src="https://pixelfed-prod.nyc3.cdn.digitaloceanspaces.com/public/m/_v2/192044957266219008/2a69c66ec-4b94d5/RfLOUTz15Rkv/vkjq9DE5yVu3LjHsvspFnMrWHmpfY6sKJR03URfS.png" alt=""></p>

<p><img src="https://pixelfed-prod.nyc3.cdn.digitaloceanspaces.com/public/m/_v2/192044957266219008/2a69c66ec-4b94d5/Nn2pdsCt1HbP/o8fHevJjiUdYJPftSIoMaK552gRFsRXiNxkLgaDV.png" alt=""><br>
4 GB of RAM and 2 vCPUs are the minumum requirements for Windows 11</p>

<p><img src="https://pixelfed-prod.nyc3.cdn.digitaloceanspaces.com/public/m/_v2/192044957266219008/2a69c66ec-4b94d5/hoaOcxug8JTG/8qIw1x9cKTAJfXlhsfhSHPqaYVaKR3R8iBpEyacD.png" alt=""><br>
Windows 11 requires a minimum of 64 GB of disk space</p>

<p><img src="https://pixelfed-prod.nyc3.cdn.digitaloceanspaces.com/public/m/_v2/192044957266219008/2a69c66ec-4b94d5/WcX0lD275w1u/sirngCFgzXSagJnQWkSnfKaki7ETHdjk9lDfF7zS.png" alt=""><br>
Make sure you check the box “Customize configuration before install” and hit “Finish”</p>

<p><img src="https://pixelfed-prod.nyc3.cdn.digitaloceanspaces.com/public/m/_v2/192044957266219008/2a69c66ec-4b94d5/CqsdENRKmAs1/OTGNWIyfXsL4QuctPK4Fg1hMryIr1ZcmLRMW3x82.png" alt="">
Change the “Firmware” setup to <code>UEFI x86_64: /usr/share/edk2-ovmf/x64/OVMF_CODE_secboot.fd</code></p>

<p>You can now hit “Begin Installation” and proceed with the Windows 11 installation and initial setup</p>

<h3 id="install-windows-11">Install Windows 11</h3>

<h4 id="os-installation">OS installation</h4>

<p>Make sure you select the same OS edition as the one for which you have an OEM licence (e.g.: Windows 11 Professional).</p>

<h4 id="initial-setup">Initial setup</h4>

<p>If you don&#39;t want to enrol a Microsoft Live account, answer that you want to use a Work or Active Directory account (Windows 11 Professional and up): this will take you to the local account creation screens.</p>

<h3 id="paravirtualized-drivers">Paravirtualized drivers</h3>

<p>VirtIO drivers provide better performance and should be used when possible.
The Spice video drivers also allow for seamless mouse cursor movement, dynamic resolution changes as well as drag-and-drop operations from Gnome to the Windows desktop (one way only)</p>

<h4 id="virtio-drivers-installation">VirtIO drivers installation</h4>
<ul><li>mount the VirtIO driver/guest agent ISO</li>
<li>install the drivers and guest agent</li></ul>

<h4 id="change-system-disk-sata-virtio">Change system disk (SATA→VirtIO)</h4>

<p>The default system disk is created as a SATA drive. Changing it to VirtIO immediately will not work because Windows has to load the VirtIO disk drivers at least once before it is able to boot from a VirtIO system disk. We need to created dummy VirtIO disk first.</p>
<ul><li>shut down the VM</li>
<li>add a 1GB VirtIO hard disk</li>
<li>power on the VM and let the OS load completely</li>
<li>sign in and check that Disk Manager sees an extra disk (you don&#39;t need to initialise it)</li>
<li>shut down the VM</li>
<li>delete the 1GB VirtIO drive</li>
<li>change the system disk type from SATA to VirtIO — you need to edit the XML file to perform this operation (either through virsh or from the virt-manager GUI, after having enabled XML file edition)</li></ul>

<p>Initial disk configuration:</p>

<pre><code class="language-xml">&lt;disk type=&#34;file&#34; device=&#34;disk&#34;&gt;
  &lt;driver name=&#34;qemu&#34; type=&#34;qcow2&#34;/&gt;
  &lt;source file=&#34;/var/lib/libvirt/images/Windows11.qcow2&#34;/&gt;
  &lt;target dev=&#34;sda&#34; bus=&#34;sata&#34;/&gt;
&lt;/disk&gt;
</code></pre>

<p>Modified disk configuration:</p>

<pre><code class="language-xml">&lt;disk type=&#34;file&#34; device=&#34;disk&#34;&gt;
  &lt;driver name=&#34;qemu&#34; type=&#34;qcow2&#34;/&gt;
  &lt;source file=&#34;/var/lib/libvirt/images/Windows11.qcow2&#34;/&gt;
  &lt;target dev=&#34;vda&#34; bus=&#34;virtio&#34;/&gt;
  &lt;address type=&#34;pci&#34; domain=&#34;0x0000&#34; bus=&#34;0x05&#34; slot=&#34;0x00&#34; function=&#34;0x0&#34;/&gt;
&lt;/disk&gt;
</code></pre>

<h4 id="other-devices">Other devices</h4>

<p>Now that the VirtIO drivers have been installed in Windows, you can change the NIC type from Intel e1000e to VirtIO via the virt-manager GUI</p>

<h3 id="activate-windows">Activate Windows</h3>

<p>Use the product key extracted from BIOS information (see above)</p>

<p>You can now proceed witht he system updates and start using the Windows VM.</p>

<p>— Kicou</p>
]]></content:encoded>
      <guid>https://blog.kicou.info/windows-11-vm-in-linux</guid>
      <pubDate>Fri, 22 Oct 2021 02:47:13 +0000</pubDate>
    </item>
    <item>
      <title>Surviving abuse</title>
      <link>https://blog.kicou.info/surviving-abuse</link>
      <description>&lt;![CDATA[The abuse lasted 15 years and this is why my head is so messed up today. I was only a kid. I had no point of reference, I didn&#39;t know right from wrong. I didn&#39;t think my life was unusual because it was all I knew.&#xA;&#xA;I won&#39;t recount what was done to me, this is not the place. If you want to have a glimpse, check the ACE (Adverse Childhood Experiences) scale: it ranges from 0 to 10 —0 being no form of abuse and 10 being the worst. A score of 4 ore more is considered very serious and at the source of long-term health effects in adult life.&#xA;&#xA;CDC - Adverse Childhood Experiecnces (ACEs)&#xA;NPR - Take The ACE Quiz — And Learn What It Does And Doesn&#39;t Mean&#xA;&#xA;I have a score of 8.&#xA;&#xA;The wildest thing is that I only realised that I had suffered severe childhood abuse when I reached the age of 40. At which point my world collapsed.!--more--&#xA;&#xA;But at the same time it expains so many things about my life up until then. Receiving a diagnosis on what I thought was just me being all fucked up, being able to put a name on it was a liberation:&#xA;&#xA;PTSD, major depression and anxiety: this is what I had been suffering from.&#xA;&#xA;Once I was able to put a name on what I was dealing with, things became clearer. I knew that the next thing to do was to fight, but I also knew that this is not the type of battle you can fight on your own. &#xA;&#xA;So I reached out. I sought and found help, and I started to open up.&#xA;&#xA;  First was the anger&#xA;  Then the grief, the sense of loss&#xA;  And the shame, the guilt&#xA;  The pain, the sadness&#xA;&#xA;It took me more than seven years to process this unhealthy mix of feelings and emotions. I learned to cope. I learned to deal with crises.&#xA;&#xA;My life took a turn for the better.&#xA;&#xA;With various therapists I have shared a lot of my hidden memories. It helped. There are however things I will never disclose to anyone, things so dark that they will forever remain sealed within. But it&#39;s OK now.&#xA;&#xA;I am better equipped to face life. I feel much stronger overall, strong enough to deal with my demons.&#xA;&#xA;I can stand on my own.   &#xA;I am a survivor.&#xA;&#xA;— Kicou]]&gt;</description>
      <content:encoded><![CDATA[<p>The abuse lasted 15 years and this is why my head is so messed up today. I was only a kid. I had no point of reference, I didn&#39;t know right from wrong. I didn&#39;t think my life was unusual because it was all I knew.</p>

<p>I won&#39;t recount what was done to me, this is not the place. If you want to have a glimpse, check the ACE (Adverse Childhood Experiences) scale: it ranges from 0 to 10 —0 being no form of abuse and 10 being the worst. A score of 4 ore more is considered very serious and at the source of long-term health effects in adult life.</p>
<ul><li><a href="https://www.cdc.gov/violenceprevention/aces/index.html">CDC – Adverse Childhood Experiecnces (ACEs)</a></li>
<li><a href="https://www.npr.org/sections/health-shots/2015/03/02/387007941/take-the-ace-quiz-and-learn-what-it-does-and-doesnt-mean">NPR – Take The ACE Quiz — And Learn What It Does And Doesn&#39;t Mean</a></li></ul>

<p>I have a score of 8.</p>

<p>The wildest thing is that I only realised that I had suffered severe childhood abuse when I reached the age of 40. At which point my world collapsed.</p>

<p>But at the same time it expains so many things about my life up until then. Receiving a diagnosis on what I thought was just me being all fucked up, being able to put a name on it was a liberation:</p>

<p><strong>PTSD</strong>, major depression and anxiety: this is what I had been suffering from.</p>

<p>Once I was able to put a name on what I was dealing with, things became clearer. I knew that the next thing to do was to fight, but I also knew that this is not the type of battle you can fight on your own.</p>

<p>So I reached out. I sought and found help, and I started to open up.</p>

<blockquote><p>First was the anger
Then the grief, the sense of loss
And the shame, the guilt
The pain, the sadness</p></blockquote>

<p>It took me more than seven years to process this unhealthy mix of feelings and emotions. I learned to cope. I learned to deal with crises.</p>

<p>My life took a turn for the better.</p>

<p>With various therapists I have shared a lot of my hidden memories. It helped. There are however things I will never disclose to anyone, things so dark that they will forever remain sealed within. But it&#39;s OK now.</p>

<p>I am better equipped to face life. I feel much stronger overall, strong enough to deal with my demons.</p>

<p>I can stand on my own.<br>
I am a survivor.</p>

<p>— Kicou</p>
]]></content:encoded>
      <guid>https://blog.kicou.info/surviving-abuse</guid>
      <pubDate>Mon, 17 May 2021 18:12:17 +0000</pubDate>
    </item>
    <item>
      <title>Integrating weather sensors with Home Assistant</title>
      <link>https://blog.kicou.info/integrating-weather-sensors-with-home-assistant</link>
      <description>&lt;![CDATA[We have a thermometer/hygrometer kit to keep track data:&#xA;&#xA;outside (sensor is under the deck)&#xA;in the greenhouse&#xA;in the garage (we had a third sensor, so we might as well put it somewhere)&#xA;inside (the display base has internal sensors)&#xA;&#xA;Home Assistant temperature tile&#xA;&#xA;It is actually easy to capture and decode RF signals using a DVB-T USB dongle, the RTL-SDR driver and the RTL-433 decoding software.!--more--&#xA;&#xA;An RTL8232-based DVB-T dongle is normally used to receive Digital Video Broadcasting TV signal in Europe. Even though it is useless for TV in North America (where the DVB standard is ATSC), a DVB-T receiver can also be used to decode a wide range of radio signals including FM or 433 MHz data signals.&#xA;&#xA;It so happens that besides the base sensors embedded in the display, the three separate sensors transmit data using 433 MHz RF signals.&#xA;&#xA;I purchased a RTL8232 DVB-T dongle for approximately $20 and used spare Raspberry Pi (original B+) to run RTL-433. I installed Raspbian and set up RTL-433 as follows:&#xA;&#xA;1. Install rtl-sdr&#xA;sudo apt-get install rtl-sdr&#xA;&#xA;This is the driver module. You need this for the OS to communicate with the DVB-T dongle.&#xA;&#xA;2. Install packages needed to build RTL-433&#xA;Currently RTL-433 is not in the Raspbian sofware main repository, and when enabling the testing repos, I start running into dependy issues, so I figured that building rtl-433 from source would probably be a safer bet.&#xA;&#xA;sudo apt-get install git git-core cmake build-essential     # build tools&#xA;sudo apt-get install libtool libusb-1.0.0-dev librtlsdr-dev doxygen  # needed to build rtl-433&#xA;&#xA;4. Build rtl-433&#xA;git clone https://github.com/merbanan/rtl433.git&#xA;cd rtl433&#xA;mkdir build&#xA;cd build&#xA;cmake ../&#xA;make&#xA;sudo make install&#xA;If everything went well you now have rtl433 in /usr/local/bin&#xA;&#xA;5. Create a shell script to run rtl433 with the parameters that correspond to your RF device&#39;s protocol&#xA;In my case, the transmitters are LaCrosse-TX141THBv2 units, which corresponds to protocol 73 in the rtl-433 documentation.&#xA;&#xA;!/bin/bash&#xA;&#xA;For LaCrosse TX141THB v2&#xA;rtl433 -R73 -F mqtt://localhost:1883,retain=1,devices=sensors/rtl433/model -M time:iso&#xA;&#xA;For LaCrosse TX141THB v2 and RediCheck ET-731 BBQ thermometer&#xA;The ET-731 uses protocol 71. It transmits at a sligtly different frequency, therefore&#xA;I need to alternate between frequencies every 120 seconds&#xA;rtl433 -f 433.92M -f 433.75M -H 120 -R73 -R71 -F mqtt://localhost:1883,retain=1,devices=sensors/rtl433/model -M time:iso&#xA;&#xA;6. Install and run an MQTT broker (if you don&#39;t already have one)&#xA;I went quick and dirty, installed it on the Pi itself, with anonymous updates allowed.&#xA;You should proabaly set up proper authentication.&#xA;&#xA;sudo apt-get install mosquitto&#xA;&#xA;Edit the mosquitto configuration /etc/mosquitto/mosquitto.conf:&#xA;Place your local configuration in /etc/mosquitto/conf.d/&#xA;&#xA;A full description of the configuration file is at&#xA;/usr/share/doc/mosquitto/examples/mosquitto.conf.example&#xA;&#xA;pidfile /var/run/mosquitto.pid&#xA;&#xA;persistence true&#xA;persistencelocation /var/lib/mosquitto/&#xA;&#xA;passwordfile /etc/mosquitto/pwfile&#xA;allowanonymous true&#xA;&#xA;logdest file /var/log/mosquitto/mosquitto.log&#xA;&#xA;includedir /etc/mosquitto/conf.d&#xA;&#xA;Enable and run mosquitto:&#xA;systemctl enable mosquitto&#xA;systemctl start mosquitto&#xA;&#xA;I collect MQTT information from HomeAssistant, using the MQTT integration.&#xA;&#xA;7. Install and configure Supervisor&#xA;Supervisor allows you to automatically start rtl433 and watch that it is still running.&#xA;If rtl433 stops, supervisor will restart it automatically.&#xA;&#xA;sudo apt-get install supervisor&#xA;&#xA;Then add an rtl433.conf config file in /etc/supervisor/conf.d/rtl433.conf&#xA;[program:rtl433]&#xA;command=/usr/local/bin/rtl433.sh&#xA;autostart=true&#xA;autrestart=true&#xA;stderrlogfile=/var/log/rtl433.err.log&#xA;stdoutlogfile=/var/log/rtl433.log&#xA;&#xA;Enable and start the supervisor service&#xA;systemctl enable supervisor&#xA;systemctl start supervisor&#xA;&#xA;— Kicou]]&gt;</description>
      <content:encoded><![CDATA[<p>We have a thermometer/hygrometer kit to keep track data:</p>
<ul><li>outside (sensor is under the deck)</li>
<li>in the greenhouse</li>
<li>in the garage (we had a third sensor, so we might as well put it somewhere)</li>
<li>inside (the display base has internal sensors)</li></ul>

<p><img src="https://pixelfed.social/storage/m/_v2/192044957266219008/b84b52654-1eb8f9/y8xBwu0gi5oH/r8rBPkGPmIJGbQ91r1T2WYJSIOJUO1h8k1RMngXT.png" alt="Home Assistant temperature tile"></p>

<p>It is actually easy to capture and decode RF signals using a DVB-T USB dongle, the RTL-SDR driver and the RTL-433 decoding software.</p>

<p>An RTL8232-based DVB-T dongle is normally used to receive Digital Video Broadcasting TV signal in Europe. Even though it is useless for TV in North America (where the DVB standard is ATSC), a DVB-T receiver can also be used to decode a wide range of radio signals including FM or 433 MHz data signals.</p>

<p>It so happens that besides the base sensors embedded in the display, the three separate sensors transmit data using 433 MHz RF signals.</p>

<p>I purchased a RTL8232 DVB-T dongle for approximately $20 and used spare Raspberry Pi (original B+) to run RTL-433. I installed Raspbian and set up RTL-433 as follows:</p>

<h3 id="1-install-rtl-sdr">1. Install rtl-sdr</h3>

<pre><code class="language-bash">sudo apt-get install rtl-sdr
</code></pre>

<p>This is the driver module. You need this for the OS to communicate with the DVB-T dongle.</p>

<h3 id="2-install-packages-needed-to-build-rtl-433">2. Install packages needed to build RTL-433</h3>

<p>Currently RTL-433 is not in the Raspbian sofware main repository, and when enabling the testing repos, I start running into dependy issues, so I figured that building rtl-433 from source would probably be a safer bet.</p>

<pre><code class="language-bash">sudo apt-get install git git-core cmake build-essential     # build tools
sudo apt-get install libtool libusb-1.0.0-dev librtlsdr-dev doxygen  # needed to build rtl-433
</code></pre>

<h3 id="4-build-rtl-433">4. Build rtl-433</h3>

<pre><code class="language-bash">git clone https://github.com/merbanan/rtl_433.git
cd rtl_433
mkdir build
cd build
cmake ../
make
sudo make install
</code></pre>

<p>If everything went well you now have rtl_433 in <code>/usr/local/bin</code></p>

<h3 id="5-create-a-shell-script-to-run-rtl-433-with-the-parameters-that-correspond-to-your-rf-device-s-protocol">5. Create a shell script to run rtl_433 with the parameters that correspond to your RF device&#39;s protocol</h3>

<p>In my case, the transmitters are LaCrosse-TX141THBv2 units, which corresponds to protocol 73 in the rtl-433 documentation.</p>

<pre><code class="language-bash">#!/bin/bash

# For LaCrosse TX141THB v2
rtl_433 -R73 -F mqtt://localhost:1883,retain=1,devices=sensors/rtl_433[/model][/channel] -M time:iso

# For LaCrosse TX141THB v2 and RediCheck ET-731 BBQ thermometer
# The ET-731 uses protocol 71. It transmits at a sligtly different frequency, therefore
# I need to alternate between frequencies every 120 seconds
#rtl_433 -f 433.92M -f 433.75M -H 120 -R73 -R71 -F mqtt://localhost:1883,retain=1,devices=sensors/rtl_433[/model][/channel] -M time:iso
</code></pre>

<h3 id="6-install-and-run-an-mqtt-broker-if-you-don-t-already-have-one">6. Install and run an MQTT broker (if you don&#39;t already have one)</h3>

<p>I went quick and dirty, installed it on the Pi itself, with anonymous updates allowed.
You should proabaly set up proper authentication.</p>

<pre><code class="language-bash">sudo apt-get install mosquitto
</code></pre>

<p>Edit the mosquitto configuration <code>/etc/mosquitto/mosquitto.conf</code>:</p>

<pre><code class="language-conf"># Place your local configuration in /etc/mosquitto/conf.d/
#
# A full description of the configuration file is at
# /usr/share/doc/mosquitto/examples/mosquitto.conf.example

pid_file /var/run/mosquitto.pid

persistence true
persistence_location /var/lib/mosquitto/

password_file /etc/mosquitto/pwfile
allow_anonymous true

log_dest file /var/log/mosquitto/mosquitto.log

include_dir /etc/mosquitto/conf.d
</code></pre>

<p>Enable and run mosquitto:</p>

<pre><code>systemctl enable mosquitto
systemctl start mosquitto
</code></pre>

<p>I collect MQTT information from HomeAssistant, using the MQTT integration.</p>

<h3 id="7-install-and-configure-supervisor">7. Install and configure Supervisor</h3>

<p>Supervisor allows you to automatically start rtl<em>433 and watch that it is still running.
If rtl</em>433 stops, supervisor will restart it automatically.</p>

<pre><code class="language-bash">sudo apt-get install supervisor
</code></pre>

<p>Then add an rtl_433.conf config file in <code>/etc/supervisor/conf.d/rtl_433.conf</code></p>

<pre><code class="language-conf">[program:rtl_433]
command=/usr/local/bin/rtl433.sh
autostart=true
autrestart=true
stderr_logfile=/var/log/rtl433.err.log
stdout_logfile=/var/log/rtl433.log
</code></pre>

<p>Enable and start the supervisor service</p>

<pre><code class="language-bash">systemctl enable supervisor
systemctl start supervisor
</code></pre>

<p>— Kicou</p>
]]></content:encoded>
      <guid>https://blog.kicou.info/integrating-weather-sensors-with-home-assistant</guid>
      <pubDate>Wed, 12 May 2021 18:01:28 +0000</pubDate>
    </item>
    <item>
      <title>We built a greenhouse</title>
      <link>https://blog.kicou.info/we-built-a-greenhouse</link>
      <description>&lt;![CDATA[Mrs Kicou was getting a bit antsy: having lost her job and being stuck at home, she needed something to keep herself busy. So she drew plans for a greenhouse and looked up buiding supplies all the while trying to keep cost down. With lock-down restrictions we weren&#39;t able to check the lumber in person, so we ordered everything on line.&#xA;&#xA;To avoid the need for a building permit we made it just under 100 sq ft: technically the greenhouse is a free-standing garden shed, i.e. it is structurally independent from the house. The only thing that is attached to the house is some flashing tape to close the gap between the garage wall and the greenhouse roof.&#xA;&#xA;We didn&#39;t go crazy with the polycarbonate: there is no way we can insulate the greenhouse properly against the Winter cold, so we just went for regular corrugated panels.!--more--&#xA;&#xA;It was still chilly in March, but in a matter of two weeks we managed to have the greenhouse up before it got rained or snowed on.&#xA;&#xA;We got lucky for the door: we found it on a curbside in our neighbourhood, just 200 metres from home. Some neighbour was getting rid of their old wooden storm door. Because the door opening of the greenhouse is a bit shorter than a regular door I had to trim the top and bottom, but otherwise it is a nice colourful addition the the structure.&#xA;&#xA;There are still a few finishing touches to be made, but as it is now it the greenhouse is mostly done.&#xA;&#xA;Here are some pics of the building process:&#xA;&#xA;The supplies&#xA;&#xA;The platform&#xA;&#xA;Once levelled, we start the framing&#xA;&#xA;Framing done&#xA;&#xA;Garage side door and window are now inside the greenhouse&#xA;&#xA;Polycarbonate panels&#xA;&#xA;We salvaged a nice wooden storm door&#xA;&#xA;The King is enjoying the long chair&#xA;&#xA;Still need to organise, but things are starting to grow&#xA;&#xA;— Kicou]]&gt;</description>
      <content:encoded><![CDATA[<p>Mrs Kicou was getting a bit antsy: having lost her job and being stuck at home, she needed something to keep herself busy. So she drew plans for a greenhouse and looked up buiding supplies all the while trying to keep cost down. With lock-down restrictions we weren&#39;t able to check the lumber in person, so we ordered everything on line.</p>

<p>To avoid the need for a building permit we made it just under 100 sq ft: technically the greenhouse is a free-standing garden shed, i.e. it is structurally independent from the house. The only thing that is attached to the house is some flashing tape to close the gap between the garage wall and the greenhouse roof.</p>

<p>We didn&#39;t go crazy with the polycarbonate: there is no way we can insulate the greenhouse properly against the Winter cold, so we just went for regular corrugated panels.</p>

<p>It was still chilly in March, but in a matter of two weeks we managed to have the greenhouse up before it got rained or snowed on.</p>

<p>We got lucky for the door: we found it on a curbside in our neighbourhood, just 200 metres from home. Some neighbour was getting rid of their old wooden storm door. Because the door opening of the greenhouse is a bit shorter than a regular door I had to trim the top and bottom, but otherwise it is a nice colourful addition the the structure.</p>

<p>There are still a few finishing touches to be made, but as it is now it the greenhouse is mostly done.</p>

<p>Here are some pics of the building process:</p>

<p><img src="https://pixelfed-prod.nyc3.cdn.digitaloceanspaces.com/public/m/_v2/192044957266219008/b84b52654-1eb8f9/J6qvYbASHyQu/ciSUgYZQMrGhXk7YOz3NjAIeA0pFZMPGE8UBIfhc.jpg" alt="The supplies"></p>

<p><img src="https://pixelfed-prod.nyc3.cdn.digitaloceanspaces.com/public/m/_v2/192044957266219008/b84b52654-1eb8f9/hFWZlI3qwYJw/klWsc3uTH9xgBAIdwGKQQeS4q8zcTIIrAc3UNYsF.jpg" alt="The platform"></p>

<p><img src="https://pixelfed-prod.nyc3.cdn.digitaloceanspaces.com/public/m/_v2/192044957266219008/b84b52654-1eb8f9/HnopSoZuzTbX/RzJ4GDpE0dO4LlFZP9bknB2XzieLN2xoRwPJJP95.jpg" alt="Once levelled, we start the framing"></p>

<p><img src="https://pixelfed-prod.nyc3.cdn.digitaloceanspaces.com/public/m/_v2/192044957266219008/b84b52654-1eb8f9/vDz4UOen5SkB/bL38lLLtune3DCBgiOnD8AxeKIS0yGFjfTdZU2y5.jpg" alt="Framing done"></p>

<p><img src="https://pixelfed-prod.nyc3.cdn.digitaloceanspaces.com/public/m/_v2/192044957266219008/b84b52654-1eb8f9/JNz37bDAz6Ot/ZVgAwzIWkfF9vcGrbhPZbAuiHghexQwnIns2YR7C.jpg" alt="Garage side door and window are now inside the greenhouse"></p>

<p><img src="https://pixelfed-prod.nyc3.cdn.digitaloceanspaces.com/public/m/_v2/192044957266219008/b84b52654-1eb8f9/xS2NlFmUyvRS/VtxhoZxXYkbrBcGp4wNbFLhdratDspJgwDmOyjFL.jpg" alt="Polycarbonate panels"></p>

<p><img src="https://pixelfed-prod.nyc3.cdn.digitaloceanspaces.com/public/m/_v2/192044957266219008/b84b52654-1eb8f9/eJNTAPtIIPtU/gyBGB2bLoGNZrXMjmK9eYxf6xZoozebAe50X4bli.jpg" alt="We salvaged a nice wooden storm door"></p>

<p><img src="https://pixelfed-prod.nyc3.cdn.digitaloceanspaces.com/public/m/_v2/192044957266219008/b84b52654-1eb8f9/ErYWxJEhuqP0/rKOcXv0H7dASWVpylnN1q7KwGWk3kgUmdUD4i3C2.jpg" alt="The King is enjoying the long chair"></p>

<p><img src="https://pixelfed-prod.nyc3.cdn.digitaloceanspaces.com/public/m/_v2/192044957266219008/b84b52654-1eb8f9/1TNzr3kQV458/dkKrkUdc2FvIuooyr5HLR1WHdQj9z6W008kVa7lY.jpg" alt="Still need to organise, but things are starting to grow"></p>

<p>— Kicou</p>
]]></content:encoded>
      <guid>https://blog.kicou.info/we-built-a-greenhouse</guid>
      <pubDate>Wed, 12 May 2021 17:50:25 +0000</pubDate>
    </item>
    <item>
      <title>Linux and me</title>
      <link>https://blog.kicou.info/linux-and-me</link>
      <description>&lt;![CDATA[In the Spring of 1992 I was a student and I wanted to learn about UNIX systems. I was looking for Minix, found 386BSD and Linux. Most of my fellow students adopted 386BSD because we used Sony NewsOS (a BSD-flavour UNIX) stations at school but 386BSD required SCSI disks, I couldn&#39;t afford a SCSI controller + hard drive.&#xA;&#xA;So I downloaded the Boot and Root floppy images of Linux 0.95 and this is how I became a Linux user.&#xA;&#xA;Currently, my daily desktop distributions are Pop!_OS (an Ubuntu derivative) and Manjaro ARM64. I have used SLS, Slackware, Debian, Yggdrasil, Mandrake, Fedora, RedHat. I tend to distro-hop a lot less nowadays. For production systems I deploy Ubuntu and Redhat/CentOS.&#xA;&#xA;I have worked for several IT services companies, large and small: I prefer small ones because they are run by humans.&#xA;&#xA;The last company I worked for was a small shop specialising in Linux and Open Source solutions. But the founders retired and sold to a larger MSP that only does Windows, and from then on things went downhill.&#xA;&#xA;After 12 years I resigned and became self-employed. So far I have no regrets.&#xA;&#xA;— Kicou]]&gt;</description>
      <content:encoded><![CDATA[<p>In the Spring of 1992 I was a student and I wanted to learn about UNIX systems. I was looking for Minix, found 386BSD and Linux. Most of my fellow students adopted 386BSD because we used Sony NewsOS (a BSD-flavour UNIX) stations at school but 386BSD required SCSI disks, I couldn&#39;t afford a SCSI controller + hard drive.</p>

<p>So I downloaded the Boot and Root floppy images of Linux 0.95 and this is how I became a Linux user.</p>

<p>Currently, my daily desktop distributions are Pop!_OS (an Ubuntu derivative) and Manjaro ARM64. I have used SLS, Slackware, Debian, Yggdrasil, Mandrake, Fedora, RedHat. I tend to distro-hop a lot less nowadays. For production systems I deploy Ubuntu and Redhat/CentOS.</p>

<p>I have worked for several IT services companies, large and small: I prefer small ones because they are run by humans.</p>

<p>The last company I worked for was a small shop specialising in Linux and Open Source solutions. But the founders retired and sold to a larger MSP that only does Windows, and from then on things went downhill.</p>

<p>After 12 years I resigned and became self-employed. So far I have no regrets.</p>

<p>— Kicou</p>
]]></content:encoded>
      <guid>https://blog.kicou.info/linux-and-me</guid>
      <pubDate>Tue, 11 May 2021 17:19:34 +0000</pubDate>
    </item>
    <item>
      <title>Jitsi Meet: How to display names</title>
      <link>https://blog.kicou.info/jitsi-meet-how-to-display-names</link>
      <description>&lt;![CDATA[#JitsiMeet #Videoconferencing&#xA;&#xA;2022-03 update: This post is now obsolete. Current versions of Jitsi Meet now display participants&#39; names as expected. I am leaving this post up because it may provide hints as to how to customise the display of your Jitsi instance.&#xA;&#xA;When using the tile view in a Jitsi Meet video-conference, I find it annoying that you cannot see people&#39;s names unless you hover over the person&#39;s tile with the mouse cursor.&#xA;&#xA;I mean, it is OK for a 5-person conference where you know everybody, but when communicating with 20 people at once it is nice to be able to tell who is who at a glance. Hovering over thumbnails is not very practical.&#xA;&#xA;I don&#39;t understand why Jitsi Meet does not make names visible at all times. It would be nice if it was at least a server setting. Alas it is not.&#xA;&#xA;But all hope is not lost: there is an easy way to enable permanent name display without having to rebuild Jitsi Meet. All it takes is a couple of CSS file edits on the server:&#xA;&#xA;!--more--&#xA;&#xA;1. Edit the file /usr/share/jitsi-meet/body.html and add the line:&#xA;&#xA;link rel=&#34;stylesheet&#34; href=&#34;css/custom.css?v=1&#34;&#xA;The file body.html is empty on a stock Jitsi Meet installation. If it already has content, just add the line somewhere at the beginning or at the end.&#xA;&#xA;Paths are based on a Debian/Ubuntu installation. Other distros may have a different directory structure.&#xA;&#xA;2. Create the file /usr/share/jitsi/meet/css/custom.css and populate it with the following code:&#xA;&#xA;alwaysOnTop .displayname,&#xA;.videocontainer .displayname,&#xA;.videocontainer .editdisplayname {&#xA;        position: absolute;&#xA;        bottom: 2%;&#xA;        top: auto;&#xA;        left: 5px;&#xA;        width: auto;&#xA;&#xA;        background-color: rgba(24, 24, 24, .66);&#xA;        color: #fff;&#xA;        text-shadow: 1px 1px #111111;&#xA;&#xA;        padding: 4px 8px 4px 8px;&#xA;        border-radius: 5px;&#xA;&#xA;        text-align: left;&#xA;        text-overflow: ellipsis;&#xA;        font-size: larger;&#xA;        font-weight: normal;&#xA;}&#xA;&#xA;.vertical-filmstrip .displayname,&#xA;.vertical-filmstrip .editdisplayname {&#xA;        bottom: 2%;&#xA;        left: 2px;&#xA;        width: calc(100% - 8px);&#xA;&#xA;        padding: 0px 3px 0px 3px;&#xA;        border-radius: 0px;&#xA;&#xA;        font-size: small;&#xA;        font-weight: normal;&#xA;}&#xA;&#xA;.display-video .displayNameContainer {&#xA;        / visibility: hidden /&#xA;        visibility: visible;;&#xA;}&#xA;&#xA;.display-name-on-video .avatar-container {&#xA;        / visibility: hidden /&#xA;        visibility: visible;&#xA;}&#xA;&#xA;.display-avatar-only .displayNameContainer {&#xA;        / visibility: hidden /&#xA;        visibility: visible;&#xA;}&#xA;&#xA;Once the files are saved, you are done: nothing to rebuild, nothing to compile, nothing to restart. Just refresh the page in your browser and the CSS change should take effect immediately.&#xA;&#xA;This trick will only work with web clients, but I guess mobile app users wouldn&#39;t benefit much from it anyway, given the reduced display area and the already crippled mobile tile view.&#xA;&#xA;---&#xA;References:&#xA;&#xA;https://community.jitsi.org/t/how-to-configure-that-the-participants-name-is-always-visible-during-the-conference/4996&#xA;https://community.jitsi.org/t/customizing-interface-to-always-show-names-almost-done-need-help/85676&#xA;&#xA;— Kicou]]&gt;</description>
      <content:encoded><![CDATA[<p><a href="https://blog.kicou.info/tag:JitsiMeet" class="hashtag"><span>#</span><span class="p-category">JitsiMeet</span></a> <a href="https://blog.kicou.info/tag:Videoconferencing" class="hashtag"><span>#</span><span class="p-category">Videoconferencing</span></a></p>

<p><em>2022-03 update: This post is now obsolete. Current versions of Jitsi Meet now display participants&#39; names as expected. I am leaving this post up because it may provide hints as to how to customise the display of your Jitsi instance.</em></p>

<p>When using the tile view in a Jitsi Meet video-conference, I find it annoying that you cannot see people&#39;s names unless you hover over the person&#39;s tile with the mouse cursor.</p>

<p>I mean, it is OK for a 5-person conference where you know everybody, but when communicating with 20 people at once it is nice to be able to tell who is who at a glance. Hovering over thumbnails is not very practical.</p>

<p>I don&#39;t understand why Jitsi Meet does not make names visible at all times. It would be nice if it was at least a server setting. Alas it is not.</p>

<p>But all hope is not lost: there is an easy way to enable permanent name display without having to rebuild Jitsi Meet. All it takes is a couple of CSS file edits on the server:</p>



<h4 id="1-edit-the-file-usr-share-jitsi-meet-body-html-and-add-the-line">1. Edit the file <code>/usr/share/jitsi-meet/body.html</code> and add the line:</h4>

<pre><code class="language-html">&lt;link rel=&#34;stylesheet&#34; href=&#34;css/custom.css?v=1&#34;&gt;
</code></pre>

<p>The file <code>body.html</code> is empty on a stock Jitsi Meet installation. If it already has content, just add the line somewhere at the beginning or at the end.</p>

<p>Paths are based on a Debian/Ubuntu installation. Other distros may have a different directory structure.</p>

<h4 id="2-create-the-file-usr-share-jitsi-meet-css-custom-css-and-populate-it-with-the-following-code">2. Create the file <code>/usr/share/jitsi/meet/css/custom.css</code> and populate it with the following code:</h4>

<pre><code class="language-css">#alwaysOnTop .displayname,
.videocontainer .displayname,
.videocontainer .editdisplayname {
        position: absolute;
        bottom: 2%;
        top: auto;
        left: 5px;
        width: auto;

        background-color: rgba(24, 24, 24, .66);
        color: #fff;
        text-shadow: 1px 1px #111111;

        padding: 4px 8px 4px 8px;
        border-radius: 5px;

        text-align: left;
        text-overflow: ellipsis;
        font-size: larger;
        font-weight: normal;
}

.vertical-filmstrip .displayname,
.vertical-filmstrip .editdisplayname {
        bottom: 2%;
        left: 2px;
        width: calc(100% - 8px);

        padding: 0px 3px 0px 3px;
        border-radius: 0px;

        font-size: small;
        font-weight: normal;
}

.display-video .displayNameContainer {
        /* visibility: hidden */
        visibility: visible;;
}

.display-name-on-video .avatar-container {
        /* visibility: hidden */
        visibility: visible;
}

.display-avatar-only .displayNameContainer {
        /* visibility: hidden */
        visibility: visible;
}
</code></pre>

<p>Once the files are saved, you are done: nothing to rebuild, nothing to compile, nothing to restart. Just refresh the page in your browser and the CSS change should take effect immediately.</p>

<p>This trick will only work with web clients, but I guess mobile app users wouldn&#39;t benefit much from it anyway, given the reduced display area and the already crippled mobile tile view.</p>

<hr>

<p>References:</p>
<ul><li><a href="https://community.jitsi.org/t/how-to-configure-that-the-participants-name-is-always-visible-during-the-conference/49962">https://community.jitsi.org/t/how-to-configure-that-the-participants-name-is-always-visible-during-the-conference/4996</a></li>
<li><a href="https://community.jitsi.org/t/customizing-interface-to-always-show-names-almost-done-need-help/85676">https://community.jitsi.org/t/customizing-interface-to-always-show-names-almost-done-need-help/85676</a></li></ul>

<p>— Kicou</p>
]]></content:encoded>
      <guid>https://blog.kicou.info/jitsi-meet-how-to-display-names</guid>
      <pubDate>Thu, 31 Dec 2020 02:49:38 +0000</pubDate>
    </item>
  </channel>
</rss>