<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
     xmlns:content="http://purl.org/rss/1.0/modules/content/"
     xmlns:dc="https://purl.org/dc/elements/1.1/"
     xmlns:dcterms="http://purl.org/dc/terms/"
     xmlns:media="http://search.yahoo.com/mrss/"
     xmlns:atom="http://www.w3.org/2005/Atom"
     xmlns:cf="https://www.futureplc.com/rss/content-flags"
>
    <channel>
                    <atom:link href="https://www.tomshardware.com/feeds/tag/apt" rel="self" type="application/rss+xml" />
                            <title><![CDATA[ Latest from Tom's Hardware in Apt ]]></title>
                <link>https://www.tomshardware.com/tag/apt</link>
        <description><![CDATA[ All the latest apt content from the Tom's Hardware team ]]></description>
                                    <lastBuildDate>Thu, 12 Jun 2025 14:53:45 +0000</lastBuildDate>
                            <language>en</language>
                                <item>
                                                            <title><![CDATA[ How to Run a Linux OS on your Chromebook ]]></title>
                                                                                                                                                                                                <link>https://www.tomshardware.com/software/linux/how-to-run-a-linux-os-on-your-chromebook</link>
                                                                            <description>
                            <![CDATA[ Running Linux on your Chromebook used to be fraught with hacks and complications, but now we can easily run a Linux virtual machine alongside Google’s cloud based OS. ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">Dtf2bryDgDYWfXdqB2Ur3i</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/vjg92iaFr9UbaN8tmRrfsf-1280-80.jpg" type="image/jpeg" length="0"></enclosure>
                                                                        <pubDate>Thu, 12 Jun 2025 14:53:45 +0000</pubDate>                                                                                                                                                                                                                                <category><![CDATA[Linux]]></category>
                                                    <category><![CDATA[Software]]></category>
                                                    <category><![CDATA[Operating Systems]]></category>
                                                                                                                    <dc:creator><![CDATA[ Les Pounder ]]></dc:creator>                                                                                    <dc:source><![CDATA[ https://cdn.mos.cms.futurecdn.net/mZ2MebAz6hhKR6vLUDUbsc.jpg ]]></dc:source>
                                                                <dc:description><![CDATA[ &lt;p&gt;Les Pounder is a creative technologist and for seven years has created projects to educate and inspire minds both young and old. He has worked with the Raspberry Pi Foundation to write and deliver their teacher training programme &quot;Picademy&quot;.&lt;/p&gt; ]]></dc:description>
                                                                                                                                <cf:isSponsored>false</cf:isSponsored>
                <cf:hasAffiliateLinks>false</cf:hasAffiliateLinks>
                <cf:isPaid>false</cf:isPaid>
                                                                                                                                <media:content type="image/jpeg" url="https://cdn.mos.cms.futurecdn.net/vjg92iaFr9UbaN8tmRrfsf-1280-80.jpg">
                                                            <media:credit><![CDATA[Pexels / OpenClipArt]]></media:credit>
                                                                                                                                                                                                                                    <media:description><![CDATA[Tux hiding behind a Chromebook]]></media:description>                                                            <media:text><![CDATA[Tux hiding behind a Chromebook]]></media:text>
                                <media:title type="plain"><![CDATA[Tux hiding behind a Chromebook]]></media:title>
                                                    </media:content>
                                                    <media:thumbnail url="https://cdn.mos.cms.futurecdn.net/vjg92iaFr9UbaN8tmRrfsf-1280-80.jpg" />
                                                                                                                                                                    <content:encoded >
                            <![CDATA[
                            <article>
                                <p>Chromebooks have come a long way and, in certain circumstances, they are now competent productivity machines out of the box. However, sometimes you need a more full-featured operating system than Chrome OS – Linux, for example – to do your work and run offline software.</p><p>In the past, there were many hacks to run Linux on your Chromebook, Crostini is an early example of such. But now Chrome OS has a built-in means to run Linux virtual machines with little configuration needed by the end user. Best of all, we can even run Linux GUI apps such as GIMP, Inkscape and LibreOffice. </p><p>In this how to, we shall learn how to install Linux on a Chromebook that’s running the latest version of Chrome OS. We will also learn how to search for, and install software using the package manager. Lastly we shall learn how to share files and directories between Chrome OS and the Linux virtual machine.</p><p>Note that some lower spec Chromebooks may struggle with Linux, chiefly because we are running a Linux OS inside of a container on top of the Chrome OS install. It does work, I tested it on my Lenovo Chromebook with just 4GB of RAM, but don't expect stellar performance.</p><h2 id="updating-your-chromebook">Updating Your Chromebook</h2><p>Making sure that your Chromebook is up to date is the first part of the process. Typically Chromebooks will keep themselves updated, but it is always best practice to update before undertaking any major tasks.</p><p>1. <strong>Click on the settings menu cog </strong>found via the bottom right menu.</p><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:665px;"><p class="vanilla-image-block" style="padding-top:75.79%;"><img id="" name="settings-cog.png" alt="Run Linux on Chromebook" src="https://cdn.mos.cms.futurecdn.net/hxUKr48efTvJh2svqP4qpb.png" mos="" align="middle" fullscreen="1" width="665" height="504" attribution="" endorsement="" class="expandable"><a href='https://cdn.mos.cms.futurecdn.net/hxUKr48efTvJh2svqP4qpb.png' target='_blank' class='expand-button icon-expand-image icon' ></a></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Hardware)</span></figcaption></figure><p>2. Using the search field,<strong> search for update.</strong></p><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1195px;"><p class="vanilla-image-block" style="padding-top:42.18%;"><img id="" name="search-check-for-update.png" alt="Run Linux on Chromebook" src="https://cdn.mos.cms.futurecdn.net/rrJVMKGj5KZ7THB9fv79fb.png" mos="" align="middle" fullscreen="1" width="1195" height="504" attribution="" endorsement="" class="expandable"><a href='https://cdn.mos.cms.futurecdn.net/rrJVMKGj5KZ7THB9fv79fb.png' target='_blank' class='expand-button icon-expand-image icon' ></a></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Hardware)</span></figcaption></figure><p>3. <strong>Select “Check for update”.</strong></p><p>4. <strong>Click on Check for updates.</strong> Your Chromebook will either start an update process or tell us that our machine is up-to-date.</p><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1195px;"><p class="vanilla-image-block" style="padding-top:28.79%;"><img id="" name="check-for-updates.png" alt="Run Linux on Chromebook" src="https://cdn.mos.cms.futurecdn.net/VGJkjawQkHUPs5vWTqF4KY.png" mos="" align="middle" fullscreen="1" width="1195" height="344" attribution="" endorsement="" class="expandable"><a href='https://cdn.mos.cms.futurecdn.net/VGJkjawQkHUPs5vWTqF4KY.png' target='_blank' class='expand-button icon-expand-image icon' ></a></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Hardware)</span></figcaption></figure><p><strong>To start the Linux install process</strong></p><p>1. <strong>Click on the settings menu cog found </strong>via the bottom right menu.</p><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:665px;"><p class="vanilla-image-block" style="padding-top:75.79%;"><img id="" name="settings-cog.png" alt="Run Linux on Chromebook" src="https://cdn.mos.cms.futurecdn.net/hxUKr48efTvJh2svqP4qpb.png" mos="" align="middle" fullscreen="1" width="665" height="504" attribution="" endorsement="" class="expandable"><a href='https://cdn.mos.cms.futurecdn.net/hxUKr48efTvJh2svqP4qpb.png' target='_blank' class='expand-button icon-expand-image icon' ></a></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Hardware)</span></figcaption></figure><p>2. <strong>Search for Linux </strong>and under Linux development environment, <strong>click on Turn On</strong> to start the install process.</p><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1199px;"><p class="vanilla-image-block" style="padding-top:36.20%;"><img id="" name="search-turn-on.png" alt="Run Linux on Chromebook" src="https://cdn.mos.cms.futurecdn.net/f25uiEPUPtbqGKwtdrT5mb.png" mos="" align="middle" fullscreen="1" width="1199" height="434" attribution="" endorsement="" class="expandable"><a href='https://cdn.mos.cms.futurecdn.net/f25uiEPUPtbqGKwtdrT5mb.png' target='_blank' class='expand-button icon-expand-image icon' ></a></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Hardware)</span></figcaption></figure><p>3. <strong>Click on Next</strong> to set up the environment.</p><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1391px;"><p class="vanilla-image-block" style="padding-top:80.16%;"><img id="" name="linux-setup.png" alt="Run Linux on Chromebook" src="https://cdn.mos.cms.futurecdn.net/FeMvLaXaxTYqredcVsTGJZ.png" mos="" align="middle" fullscreen="1" width="1391" height="1115" attribution="" endorsement="" class="expandable"><a href='https://cdn.mos.cms.futurecdn.net/FeMvLaXaxTYqredcVsTGJZ.png' target='_blank' class='expand-button icon-expand-image icon' ></a></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Hardware)</span></figcaption></figure><p>4. <strong>Create a user account, </strong>and <strong>set the disk size. Click on Install </strong>and wait for the installation to complete. We stuck to the default 10GB disk image.</p><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1391px;"><p class="vanilla-image-block" style="padding-top:80.16%;"><img id="" name="install.png" alt="Run Linux on Chromebook" src="https://cdn.mos.cms.futurecdn.net/W69y3bTaLsVFiwo5jBYEgY.png" mos="" align="middle" fullscreen="1" width="1391" height="1115" attribution="" endorsement="" class="expandable"><a href='https://cdn.mos.cms.futurecdn.net/W69y3bTaLsVFiwo5jBYEgY.png' target='_blank' class='expand-button icon-expand-image icon' ></a></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Hardware)</span></figcaption></figure><h2 id="using-the-linux-development-environment">Using the Linux Development Environment</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1920px;"><p class="vanilla-image-block" style="padding-top:62.50%;"><img id="" name="Linux.png" alt="Run Linux on Chromebook" src="https://cdn.mos.cms.futurecdn.net/SWuHwAQ28bByCumJ9adXDZ.png" mos="" align="middle" fullscreen="1" width="1920" height="1200" attribution="" endorsement="" class="expandable"><a href='https://cdn.mos.cms.futurecdn.net/SWuHwAQ28bByCumJ9adXDZ.png' target='_blank' class='expand-button icon-expand-image icon' ></a></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Hardware)</span></figcaption></figure><p>The Linux development environment is essentially a virtual machine running a Debian-based Linux distribution. This means that we can manage the installation of applications using the APT package manager.</p><p>To make sure that our Linux development environment is up-to-date we shall update the software repositories and upgrade the installation.</p><p>1. <strong>Update the list of available repositories.</strong> This is the list of available software, and the update will compare the lists on our Chromebook with those on the remote server. If the remote server has a newer list, then our list will be updated.</p><pre class="line-numbers language-c" language="c" ><code>sudo apt update</code></pre><p>2. <strong>Upgrade the software </strong>on your Linux development environment. This may return that there are no updates, but if there are it will download and install the packages.</p><pre class="line-numbers language-c" language="c" ><code>sudo apt upgrade -y</code></pre><p><strong>To install software we again use APT.</strong></p><p>1. <strong>Use </strong><em><strong>search</strong></em><strong> to search for an application or tool. </strong>In this case we are going to <strong>search for the GIMP</strong> image editor.</p><pre class="line-numbers language-c" language="c" ><code>sudo apt search gimp</code></pre><p>2. <strong>Scroll through the list of returned applications and you should see GIMP. </strong>This means that we can install the application.</p><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1289px;"><p class="vanilla-image-block" style="padding-top:50.27%;"><img id="" name="gimp-search.png" alt="Run Linux on Chromebook" src="https://cdn.mos.cms.futurecdn.net/yDxucLefDTGoUgzS6XuraY.png" mos="" align="middle" fullscreen="1" width="1289" height="648" attribution="" endorsement="" class="expandable"><a href='https://cdn.mos.cms.futurecdn.net/yDxucLefDTGoUgzS6XuraY.png' target='_blank' class='expand-button icon-expand-image icon' ></a></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Hardware)</span></figcaption></figure><p>3. <strong>Use the </strong><em><strong>install </strong></em><strong>command to install GIMP. </strong>This will take a few moments to install.</p><pre class="line-numbers language-c" language="c" ><code>sudo apt install gimp</code></pre><p>4. <strong>Start GIMP from the terminal.</strong></p><pre class="line-numbers language-c" language="c" ><code>gimp</code></pre><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1289px;"><p class="vanilla-image-block" style="padding-top:50.27%;"><img id="" name="gimp.png" alt="Run Linux on Chromebook" src="https://cdn.mos.cms.futurecdn.net/5kXJZZLiRPcQC85bVNdHPY.png" mos="" align="middle" fullscreen="1" width="1289" height="648" attribution="" endorsement="" class="expandable"><a href='https://cdn.mos.cms.futurecdn.net/5kXJZZLiRPcQC85bVNdHPY.png' target='_blank' class='expand-button icon-expand-image icon' ></a></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Hardware)</span></figcaption></figure><h2 id="running-linux-apps-in-chrome">Running Linux Apps in Chrome</h2><p>When a Linux app is installed, Chrome will add it to the “Linux Apps” group. We can also access the Linux terminal via this group. Essentially, when an application is selected, it will start the Linux virtual machine and then start the application.</p><p><strong>To start a Linux app</strong></p><p>1. <strong>Access the apps menu. </strong>We can access this via the search button on our keyboard, or by swiping from the bottom to the top of the screen.</p><p>2. <strong>Scroll to the end of the installed applications.</strong></p><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1920px;"><p class="vanilla-image-block" style="padding-top:62.50%;"><img id="" name="apps.png" alt="Run Linux on Chromebook" src="https://cdn.mos.cms.futurecdn.net/U6SaMS64XGKfdRtddcyvEY.png" mos="" align="middle" fullscreen="1" width="1920" height="1200" attribution="" endorsement="" class="expandable"><a href='https://cdn.mos.cms.futurecdn.net/U6SaMS64XGKfdRtddcyvEY.png' target='_blank' class='expand-button icon-expand-image icon' ></a></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Hardware)</span></figcaption></figure><p>3. <strong>Click on Linux Apps</strong>, a group of applications that are installed in the Linux development environment.</p><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1920px;"><p class="vanilla-image-block" style="padding-top:62.50%;"><img id="" name="linux apps.png" alt="Run Linux on Chromebook" src="https://cdn.mos.cms.futurecdn.net/cDRBPrtXQCcjCgyJHZU9pY.png" mos="" align="middle" fullscreen="1" width="1920" height="1200" attribution="" endorsement="" class="expandable"><a href='https://cdn.mos.cms.futurecdn.net/cDRBPrtXQCcjCgyJHZU9pY.png' target='_blank' class='expand-button icon-expand-image icon' ></a></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Hardware)</span></figcaption></figure><p>4. <strong>Click on GNU Image </strong>to launch GIMP.</p><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:572px;"><p class="vanilla-image-block" style="padding-top:110.49%;"><img id="" name="gimp-apps.png" alt="Run Linux on Chromebook" src="https://cdn.mos.cms.futurecdn.net/beFDAxqg3RX6eCs7zFYBUY.png" mos="" align="middle" fullscreen="1" width="572" height="632" attribution="" endorsement="" class="expandable"><a href='https://cdn.mos.cms.futurecdn.net/beFDAxqg3RX6eCs7zFYBUY.png' target='_blank' class='expand-button icon-expand-image icon' ></a></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Hardware)</span></figcaption></figure><p>Sometimes there is a file / directory that we want to share between the two operating systems and for this we have two ways to work with files and directories across both.</p><p><strong>To share an individual file</strong></p><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1920px;"><p class="vanilla-image-block" style="padding-top:62.50%;"><img id="" name="Linux Files.png" alt="Run Linux on Chromebook" src="https://cdn.mos.cms.futurecdn.net/VGqnBJ7KDJgMRJFRGDJBvY.png" mos="" align="middle" fullscreen="1" width="1920" height="1200" attribution="" endorsement="" class="expandable"><a href='https://cdn.mos.cms.futurecdn.net/VGqnBJ7KDJgMRJFRGDJBvY.png' target='_blank' class='expand-button icon-expand-image icon' ></a></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Hardware)</span></figcaption></figure><p>1. <strong>Open the Files application.</strong></p><p>2. <strong>Locate the file that you wish to share </strong>and <strong>drag it to the Linux Files directory.</strong> This directory was created when we installed Linux.</p><p>3. <strong>Open the Linux Terminal </strong>and <strong>use </strong><em><strong>ls</strong></em><strong> to list the contents of the directory.</strong> By default, the files shared via Linux Files are stored in our home directory.</p><p><strong>To share a directory</strong></p><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1920px;"><p class="vanilla-image-block" style="padding-top:62.50%;"><img id="" name="share-directory.png" alt="Run Linux on Chromebook" src="https://cdn.mos.cms.futurecdn.net/6sA95syGZR6kk3bUFK9Nwb.png" mos="" align="middle" fullscreen="1" width="1920" height="1200" attribution="" endorsement="" class="expandable"><a href='https://cdn.mos.cms.futurecdn.net/6sA95syGZR6kk3bUFK9Nwb.png' target='_blank' class='expand-button icon-expand-image icon' ></a></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Hardware)</span></figcaption></figure><p>1. <strong>Open the Files application.</strong></p><p>2. <strong>Navigate to My Files.</strong></p><p>3. <strong>Create a new folder, Linux Stuff.</strong></p><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:564px;"><p class="vanilla-image-block" style="padding-top:67.55%;"><img id="" name="share-new-folder.png" alt="Run Linux on Chromebook" src="https://cdn.mos.cms.futurecdn.net/mgCceA7yozmpMfCNaMFg2c.png" mos="" align="middle" fullscreen="1" width="564" height="381" attribution="" endorsement="" class="expandable"><a href='https://cdn.mos.cms.futurecdn.net/mgCceA7yozmpMfCNaMFg2c.png' target='_blank' class='expand-button icon-expand-image icon' ></a></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Hardware)</span></figcaption></figure><p>4. <strong>Right click and select </strong><em><strong>Share with Linux</strong></em><strong>.</strong> This will make the directory available as a shared folder with Linux.</p><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:620px;"><p class="vanilla-image-block" style="padding-top:122.10%;"><img id="" name="share-with-linux.png" alt="Run Linux on Chromebook" src="https://cdn.mos.cms.futurecdn.net/9X2DdHuGHGbzbUM9QXz88c.png" mos="" align="middle" fullscreen="1" width="620" height="757" attribution="" endorsement="" class="expandable"><a href='https://cdn.mos.cms.futurecdn.net/9X2DdHuGHGbzbUM9QXz88c.png' target='_blank' class='expand-button icon-expand-image icon' ></a></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Hardware)</span></figcaption></figure><p>5. <strong>Open the Linux Terminal.</strong></p><p>6. <strong>Navigate to the shared directory. </strong>The directory is mounted inside <em>/mnt/Chrome OS/MyFiles/Linux Stuff. </em><strong>Use the TAB key to auto-complete the path.</strong></p><pre class="line-numbers language-c" language="c" ><code>cd /mnt/Chrome OS/MyFiles/Linux Stuff</code></pre><p>Any files created in Linux or Chrome OS will be available and updated here.</p>
                                                            </article>
                            ]]>
                        </content:encoded>
                                                </item>
                                <item>
                                                            <title><![CDATA[ Third-Party Apps Made Easy — Simplify Linux App Installations Using Deb-Get ]]></title>
                                                                                                                                                                                                <link>https://www.tomshardware.com/software/linux/third-party-apps-made-easy-simplify-linux-app-installations-using-deb-get</link>
                                                                            <description>
                            <![CDATA[ Manage your third party applications as easily as software from the official repositories with deb-get. ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">oxzH9cXDPAvrpN5PuUXTeH</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/SK2m44iE2HSnEwMgR7nM9E-1280-80.jpg" type="image/jpeg" length="0"></enclosure>
                                                                        <pubDate>Wed, 11 Jun 2025 12:41:54 +0000</pubDate>                                                                                                                                                                                                                                <category><![CDATA[Linux]]></category>
                                                    <category><![CDATA[Software]]></category>
                                                    <category><![CDATA[Operating Systems]]></category>
                                                                                                                    <dc:creator><![CDATA[ Les Pounder ]]></dc:creator>                                                                                    <dc:source><![CDATA[ https://cdn.mos.cms.futurecdn.net/mZ2MebAz6hhKR6vLUDUbsc.jpg ]]></dc:source>
                                                                <dc:description><![CDATA[ &lt;p&gt;Les Pounder is a creative technologist and for seven years has created projects to educate and inspire minds both young and old. He has worked with the Raspberry Pi Foundation to write and deliver their teacher training programme &quot;Picademy&quot;.&lt;/p&gt; ]]></dc:description>
                                                                                                                                <cf:isSponsored>false</cf:isSponsored>
                <cf:hasAffiliateLinks>false</cf:hasAffiliateLinks>
                <cf:isPaid>false</cf:isPaid>
                                                                                                                                <media:content type="image/jpeg" url="https://cdn.mos.cms.futurecdn.net/SK2m44iE2HSnEwMgR7nM9E-1280-80.jpg">
                                                            <media:credit><![CDATA[Pexels / OpenClipArt]]></media:credit>
                                                                                                                                                                                                                                    <media:description><![CDATA[Deb-get, an alternative app store for Debian and Ubuntu Linux]]></media:description>                                                            <media:text><![CDATA[Deb-get, an alternative app store for Debian and Ubuntu Linux]]></media:text>
                                <media:title type="plain"><![CDATA[Deb-get, an alternative app store for Debian and Ubuntu Linux]]></media:title>
                                                    </media:content>
                                                    <media:thumbnail url="https://cdn.mos.cms.futurecdn.net/SK2m44iE2HSnEwMgR7nM9E-1280-80.jpg" />
                                                                                                                                                                    <content:encoded >
                            <![CDATA[
                            <article>
                                <p>Your Linux distro already comes with a <a href="https://www.tomshardware.com/how-to/add-remove-linux-software-using-apt"><u>great package manager</u></a> but sometimes you need applications that aren’t available via the official repositories. </p><p>Third party applications, such as Google Chrome, Slack, Zoom, Visual Studio Code are provided by their respective publishers. For Debian and Ubuntu systems these are provided as Debian package files (.deb) and for Fedora / Red Hat as RPM packages. These packages can be installed using your preferred OS GUI package manager, or they can be installed using a command line tool. But what if we had a tool which handled downloading, installing, upgrading and removing these third-party packages for us?</p><p><a href="https://github.com/wimpysworld/deb-get"><u>Deb-get, from Martin Wimpress</u></a> is “a high-level command line interface for the package management system to easily install and update packages published in 3rd party apt</p><p>repositories or via direct download.” With deb-get we can download and install third party packages without leaving the terminal.</p><p>How can we use deb-get and what applications are available? Let's find out.</p><p>We tested the process on two machines, a laptop running Ubuntu and a desktop running Kubuntu.</p><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:372px;"><p class="vanilla-image-block" style="padding-top:72.04%;"><img id="7UTSkRgGZoLZPGvgf8LzKf" name="Screenshot_37" alt="deb-get supported Ubuntu editions" src="https://cdn.mos.cms.futurecdn.net/7UTSkRgGZoLZPGvgf8LzKf.jpg" mos="" align="middle" fullscreen="1" width="372" height="268" attribution="" endorsement="" class="expandable"><a href='https://cdn.mos.cms.futurecdn.net/7UTSkRgGZoLZPGvgf8LzKf.jpg' target='_blank' class='expand-button icon-expand-image icon' ></a></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Hardware)</span></figcaption></figure><p>Not every Ubuntu or Debian release is supported, but if you are running any of the following, you are good.</p><ul><li>Debian<ul><li>Buster (10)</li><li>Bullseye (11)</li><li>Bookworm (12)</li><li>Trixie (13)</li><li>Forky (14)</li><li>Sid (Unstable)</li></ul></li><li>Ubuntu<ul><li>20.04</li><li>22.04</li><li>24.04</li><li>24.10</li><li>25.04</li><li>25.10</li></ul></li></ul><p>The installation process for deb-get uses, deb-get. We download a copy of the application from Wimpress’ Github repository and then run the command to install it onto our system.</p><p>1. <strong>Open a terminal </strong>and <strong>update the software repositories list.</strong> This enables our machine to install the latest software from the software repositories.</p><pre class="line-numbers language-bash" language="bash" ><code>sudo apt update</code></pre><p>2. <strong>Install the curl application.</strong></p><pre class="line-numbers language-bash" language="bash" ><code>sudo apt install curl</code></pre><p>Curl is used to download the deb-get application from the Github repository. It is highly likely that your version of curl is up-to-date, but it is always best to check.</p><p>3. <strong>Use curl to download deb-get to your machine, then run the installation using sudo.</strong></p><pre class="line-numbers language-bash" language="bash" ><code>curl -sL https://raw.githubusercontent.com/wimpysworld/deb-get/main/deb-get | sudo -E bash -s install deb-get</code></pre><h2 id="how-to-use-deb-get">How-to Use deb-get</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1461px;"><p class="vanilla-image-block" style="padding-top:70.16%;"><img id="" name="edge.png" alt="Linux Applications with Deb-Get" src="https://cdn.mos.cms.futurecdn.net/FmLmWS7pqnFR9BgVac6qnh.png" mos="" align="middle" fullscreen="1" width="1461" height="1025" attribution="" endorsement="" class="expandable"><a href='https://cdn.mos.cms.futurecdn.net/FmLmWS7pqnFR9BgVac6qnh.png' target='_blank' class='expand-button icon-expand-image icon' ></a></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Hardware)</span></figcaption></figure><p>Behaving in much the same way as apt and apt-get, deb-get has a similar set of commands to manage applications on our machine. </p><p>We start by installing an application, after consulting the <a href="https://github.com/wimpysworld/deb-get#readme"><u>list of supported software</u></a> we chose to install Microsoft’s Edge web browser for Linux.</p><p>1. <strong>Open a terminal </strong>and <strong>update the deb-get package index files.</strong> This is essentially the same as our software repositories list.</p><pre class="line-numbers language-bash" language="bash" ><code>sudo deb-get update</code></pre><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1163px;"><p class="vanilla-image-block" style="padding-top:61.74%;"><img id="" name="deb-get update.png" alt="Linux Applications with Deb-Get" src="https://cdn.mos.cms.futurecdn.net/fjYbqPNHCjepx8F2MewwUh.png" mos="" align="middle" fullscreen="1" width="1163" height="718" attribution="" endorsement="" class="expandable"><a href='https://cdn.mos.cms.futurecdn.net/fjYbqPNHCjepx8F2MewwUh.png' target='_blank' class='expand-button icon-expand-image icon' ></a></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Hardware)</span></figcaption></figure><p>2. <strong>Use deb-get with the install argument to download the latest stable version of Microsoft Edge for Linux. </strong>Remember to consult the support software list to get the name of the application that you wish to install.</p><pre class="line-numbers language-bash" language="bash" ><code>sudo deb-get install microsoft-edge-stable</code></pre><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1163px;"><p class="vanilla-image-block" style="padding-top:61.74%;"><img id="" name="install.png" alt="Linux Applications with Deb-Get" src="https://cdn.mos.cms.futurecdn.net/dvS4JSmdiDJLpm8jR6Uwvh.png" mos="" align="middle" fullscreen="1" width="1163" height="718" attribution="" endorsement="" class="expandable"><a href='https://cdn.mos.cms.futurecdn.net/dvS4JSmdiDJLpm8jR6Uwvh.png' target='_blank' class='expand-button icon-expand-image icon' ></a></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Hardware)</span></figcaption></figure><p>We can update all of the applications installed via deb-get via one command. It will even catch supported applications installed before deb-get has been installed. The application upgraded Zoom and Raspberry Pi Imager, both of which were installed before we installed deb-get.</p><pre class="line-numbers language-bash" language="bash" ><code>sudo deb-get upgrade</code></pre><p>To search for a particular application, we can use the <em>search</em> argument. For example, here is the command to search for Firefox. Note that the output shows the name that we should use for installation.</p><pre class="line-numbers language-bash" language="bash" ><code>sudo deb-get search firefox</code></pre><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1163px;"><p class="vanilla-image-block" style="padding-top:60.88%;"><img id="" name="deb-get search.png" alt="Linux Applications with Deb-Get" src="https://cdn.mos.cms.futurecdn.net/knjkT6ydqENg4W48uMf4Ph.png" mos="" align="middle" fullscreen="1" width="1163" height="708" attribution="" endorsement="" class="expandable"><a href='https://cdn.mos.cms.futurecdn.net/knjkT6ydqENg4W48uMf4Ph.png' target='_blank' class='expand-button icon-expand-image icon' ></a></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Hardware)</span></figcaption></figure><p>To show all of the applications that can be installed via deb-get we used the <em>list </em>argument.</p><pre class="line-numbers language-bash" language="bash" ><code>sudo deb-get list</code></pre><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1030px;"><p class="vanilla-image-block" style="padding-top:56.60%;"><img id="" name="show.gif" alt="Linux Applications with Deb-Get" src="https://cdn.mos.cms.futurecdn.net/GXWANA6AwBuhVXnrDjn4Ni.gif" mos="" align="middle" fullscreen="1" width="1030" height="583" attribution="" endorsement="" class="expandable"><a href='https://cdn.mos.cms.futurecdn.net/GXWANA6AwBuhVXnrDjn4Ni.gif' target='_blank' class='expand-button icon-expand-image icon' ></a></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Hardware)</span></figcaption></figure><p>To remove an application, we have two choices. The first is that we can perform a standard uninstall that will remove just the application. However, this leaves any user-generated configuration files in their respective directories.</p><pre class="line-numbers language-bash" language="bash" ><code>sudo deb-get remove <name of application></code></pre><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1163px;"><p class="vanilla-image-block" style="padding-top:61.74%;"><img id="" name="remove.png" alt="Linux Applications with Deb-Get" src="https://cdn.mos.cms.futurecdn.net/9LptTvS2EvhefLc3swpjEi.png" mos="" align="middle" fullscreen="1" width="1163" height="718" attribution="" endorsement="" class="expandable"><a href='https://cdn.mos.cms.futurecdn.net/9LptTvS2EvhefLc3swpjEi.png' target='_blank' class='expand-button icon-expand-image icon' ></a></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Hardware)</span></figcaption></figure><p>Secondly, if we wish to fully purge the application and any configuration files, then we can use the purge argument.</p><pre class="line-numbers language-bash" language="bash" ><code>sudo deb-get purge <name of application></code></pre><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1163px;"><p class="vanilla-image-block" style="padding-top:61.74%;"><img id="" name="purge.png" alt="Linux Applications with Deb-Get" src="https://cdn.mos.cms.futurecdn.net/6vybmR7PrFv6FGrYAjVt6i.png" mos="" align="middle" fullscreen="1" width="1163" height="718" attribution="" endorsement="" class="expandable"><a href='https://cdn.mos.cms.futurecdn.net/6vybmR7PrFv6FGrYAjVt6i.png' target='_blank' class='expand-button icon-expand-image icon' ></a></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Hardware)</span></figcaption></figure><p>To clean out your local repository of downloaded installation files we can use the clean argument. This command is generally used for housekeeping, ensuring that your system is kept tidy and that unwanted files are removed.</p><pre class="line-numbers language-bash" language="bash" ><code>sudo deb-get clean</code></pre><p>Deb-get is a remarkably useful tool to add to our Ubuntu installations. It makes short work of installing the software that we know and love, software that is either not available, or much older in the official repositories.</p><h2 id="related-tutorials">Related Tutorials</h2><ul><li><a href="https://www.tomshardware.com/how-to/check-disk-usage-linux">How To Check Disk Usage in Linux</a></li><li><a href="https://www.tomshardware.com/how-to/kill-process-linux">How To Kill a Process in Linux</a></li><li><a href="https://www.tomshardware.com/how-to/find-files-linux">How To Find Files in Linux</a></li></ul>
                                                            </article>
                            ]]>
                        </content:encoded>
                                                </item>
                                <item>
                                                            <title><![CDATA[ Boot Up in Style — Design Your Own GRUB Menu for Linux ]]></title>
                                                                                                                                                                                                <link>https://www.tomshardware.com/software/linux/boot-up-in-style-design-your-own-grub-menu-for-linux</link>
                                                                            <description>
                            <![CDATA[ Using Grub Customizer, add a custom background to your Grub boot menu. ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">exkn3Yp77drSZ8ztUbNiYZ</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/Grk4wawbhz8CkagZvCgXR9-1280-80.jpg" type="image/jpeg" length="0"></enclosure>
                                                                        <pubDate>Wed, 11 Jun 2025 10:45:45 +0000</pubDate>                                                                                                                                                                                                                                <category><![CDATA[Linux]]></category>
                                                    <category><![CDATA[Software]]></category>
                                                    <category><![CDATA[Operating Systems]]></category>
                                                                                                                    <dc:creator><![CDATA[ Les Pounder ]]></dc:creator>                                                                                    <dc:source><![CDATA[ https://cdn.mos.cms.futurecdn.net/mZ2MebAz6hhKR6vLUDUbsc.jpg ]]></dc:source>
                                                                <dc:description><![CDATA[ &lt;p&gt;Les Pounder is a creative technologist and for seven years has created projects to educate and inspire minds both young and old. He has worked with the Raspberry Pi Foundation to write and deliver their teacher training programme &quot;Picademy&quot;.&lt;/p&gt; ]]></dc:description>
                                                                                                                                <cf:isSponsored>false</cf:isSponsored>
                <cf:hasAffiliateLinks>false</cf:hasAffiliateLinks>
                <cf:isPaid>false</cf:isPaid>
                                                                                                                                <media:content type="image/jpeg" url="https://cdn.mos.cms.futurecdn.net/Grk4wawbhz8CkagZvCgXR9-1280-80.jpg">
                                                            <media:credit><![CDATA[Pexels / OpenClipArt]]></media:credit>
                                                                                                                                                                                                                                    <media:description><![CDATA[A custom GRUB menu for Linux]]></media:description>                                                            <media:text><![CDATA[A custom GRUB menu for Linux]]></media:text>
                                <media:title type="plain"><![CDATA[A custom GRUB menu for Linux]]></media:title>
                                                    </media:content>
                                                    <media:thumbnail url="https://cdn.mos.cms.futurecdn.net/Grk4wawbhz8CkagZvCgXR9-1280-80.jpg" />
                                                                                                                                                                    <content:encoded >
                            <![CDATA[
                            <article>
                                <p>On many Linux systems the boot process sees the usual BIOS screen, followed by Grub. The Grand Unified Bootloader (Grub) takes over from our BIOS and offers the user a choice of OS options and kernel choices. Typically we just press Enter or wait for Grub to disappear. Grub is utilitarian, it does the job and doesn’t care how it looks. But what if we could add a little flair to our boot process?</p><p><a href="https://launchpad.net/~danielrichter2007/+archive/ubuntu/grub-customizer"><u>Grub Customizer, by Daniel Richter</u></a>, is a GUI based application for easy configuration of Grub. Rather than manually editing text files we can easily edit and preview our changes before committing them to the system. </p><p>In this how to, we shall create a custom Grub background image using Grub Customizer and a PNG / JPEG image.</p><p>Making any changes to your Grub configuration is dangerous, and could result in a non-booting system. Before attempting these steps, ensure that your system is backed up.</p><h2 id="for-this-project-you-will-need">For this project you will need</h2><ul><li>A computer running Ubuntu</li></ul><h2 id="installing-grub-customizer">Installing Grub Customizer </h2><p>1. <strong>Open a terminal and add the Grub Customizer PPA to your list of repositories.</strong> A Personal Package Archive (PPA) is a software repository created for Ubuntu users to share pre-release software. Most PPAs are trustworthy. If in any doubt do not install, and read the source code before moving forwards.</p><pre class="line-numbers language-bash" language="bash" ><code>sudo add-apt-repository ppa:danielrichter2007/grub-customizer</code></pre><p>2. <strong>Update your list of repositories.</strong> This is always best practice before installing new software.</p><pre class="line-numbers language-bash" language="bash" ><code>sudo apt update</code></pre><p>3. <strong>Install Grub Customizer using the apt packaging tool.</strong></p><pre class="line-numbers language-bash" language="bash" ><code>sudo apt install grub-customizer</code></pre><h2 id="using-grub-customizer">Using Grub Customizer</h2><p>1. <strong>Click on Show Applications (3 x 3 grid of squares) to open the main menu.</strong></p><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:258px;"><p class="vanilla-image-block" style="padding-top:43.80%;"><img id="" name="Ubuntu1.jpg" alt="Grub Customizer" src="https://cdn.mos.cms.futurecdn.net/nvr294SSg79DoSmk2koWab.jpg" mos="" align="middle" fullscreen="1" width="258" height="113" attribution="" endorsement="" class="expandable"><a href='https://cdn.mos.cms.futurecdn.net/nvr294SSg79DoSmk2koWab.jpg' target='_blank' class='expand-button icon-expand-image icon' ></a></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Hardware)</span></figcaption></figure><p>2. <strong>Click on Grub Optimizer. </strong>You will be prompted to enter your sudo password, this is required as we are making changes that will be applied system-wide.</p><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:444px;"><p class="vanilla-image-block" style="padding-top:72.97%;"><img id="" name="Ubuntu2.jpg" alt="Grub Customizer" src="https://cdn.mos.cms.futurecdn.net/539if8FaCSNxbSjHQnqLSb.jpg" mos="" align="middle" fullscreen="1" width="444" height="324" attribution="" endorsement="" class="expandable"><a href='https://cdn.mos.cms.futurecdn.net/539if8FaCSNxbSjHQnqLSb.jpg' target='_blank' class='expand-button icon-expand-image icon' ></a></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Hardware)</span></figcaption></figure><p>3. <strong>Click on Appearance settings. </strong>Under List configuration, we can alter the list of available OS choices presented on boot. Change their names, create sub-menus etc. General settings provides options to automatically select an OS, pass kernel parameters and delays to the boot. Only alter these settings if you know what you are doing.</p><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:998px;"><p class="vanilla-image-block" style="padding-top:71.84%;"><img id="" name="Appearance.jpg" alt="Grub Customizer" src="https://cdn.mos.cms.futurecdn.net/7g7vX4EapqKTLtwaHXbJza.jpg" mos="" align="middle" fullscreen="1" width="998" height="717" attribution="" endorsement="" class="expandable"><a href='https://cdn.mos.cms.futurecdn.net/7g7vX4EapqKTLtwaHXbJza.jpg' target='_blank' class='expand-button icon-expand-image icon' ></a></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Hardware)</span></figcaption></figure><p>4. <strong>Click on Background image.</strong></p><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:994px;"><p class="vanilla-image-block" style="padding-top:73.14%;"><img id="" name="background.jpg" alt="Grub Customizer" src="https://cdn.mos.cms.futurecdn.net/Qrpcz6jTD7wLcgzxszPjua.jpg" mos="" align="middle" fullscreen="1" width="994" height="727" attribution="" endorsement="" class="expandable"><a href='https://cdn.mos.cms.futurecdn.net/Qrpcz6jTD7wLcgzxszPjua.jpg' target='_blank' class='expand-button icon-expand-image icon' ></a></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Hardware)</span></figcaption></figure><p>5. <strong>Click on + Other Locations and navigate to the directory with your images.</strong> Because we opened Grub Customizer using sudo / root powers, our “home” folder is that of the root user. A PNG or JPEG image at your monitor's default resolution is preferred.</p><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1322px;"><p class="vanilla-image-block" style="padding-top:38.12%;"><img id="" name="home.jpg" alt="Grub Customizer" src="https://cdn.mos.cms.futurecdn.net/qMUZNxPoKthCjsi8Jfvuqa.jpg" mos="" align="middle" fullscreen="1" width="1322" height="504" attribution="" endorsement="" class="expandable"><a href='https://cdn.mos.cms.futurecdn.net/qMUZNxPoKthCjsi8Jfvuqa.jpg' target='_blank' class='expand-button icon-expand-image icon' ></a></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Hardware)</span></figcaption></figure><p>6. <strong>With the background image now set, click on Save to write the changes.</strong></p><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:924px;"><p class="vanilla-image-block" style="padding-top:72.08%;"><img id="" name="image set.jpg" alt="Grub Customizer" src="https://cdn.mos.cms.futurecdn.net/ctTtNbzkcrMw5nveuyhLna.jpg" mos="" align="middle" fullscreen="1" width="924" height="666" attribution="" endorsement="" class="expandable"><a href='https://cdn.mos.cms.futurecdn.net/ctTtNbzkcrMw5nveuyhLna.jpg' target='_blank' class='expand-button icon-expand-image icon' ></a></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Hardware)</span></figcaption></figure><p>7. <strong>Click on Advanced Settings.</strong> This will open a menu containing extra Grub configuration steps.</p><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:329px;"><p class="vanilla-image-block" style="padding-top:62.92%;"><img id="" name="advanced settings.jpg" alt="Grub Customizer" src="https://cdn.mos.cms.futurecdn.net/aw6RCkc9fUxZqmsHzFH4fa.jpg" mos="" align="middle" fullscreen="1" width="329" height="207" attribution="" endorsement="" class="expandable"><a href='https://cdn.mos.cms.futurecdn.net/aw6RCkc9fUxZqmsHzFH4fa.jpg' target='_blank' class='expand-button icon-expand-image icon' ></a></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Hardware)</span></figcaption></figure><p>8. <strong>Set GRUB_TIMEOUT_STYLE to “menu”, and set GRUB_TIMEOUT to “10”, click Close and then Save the changes.</strong> This ensures that the Grub menu is displayed, and if we do not touch the keyboard, the system will default boot in 10 seconds.</p><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:527px;"><p class="vanilla-image-block" style="padding-top:125.05%;"><img id="" name="grub timeout.jpg" alt="Grub Customizer" src="https://cdn.mos.cms.futurecdn.net/hPrpjMU4MnDwcFha6S6Ria.jpg" mos="" align="middle" fullscreen="1" width="527" height="659" attribution="" endorsement="" class="expandable"><a href='https://cdn.mos.cms.futurecdn.net/hPrpjMU4MnDwcFha6S6Ria.jpg' target='_blank' class='expand-button icon-expand-image icon' ></a></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Hardware)</span></figcaption></figure><p>9. <strong>Reboot your computer, wait for the Grub menu to appear and then check that your background image loads correctly. </strong>If the image fails to load, repeat the previous steps and check the image file format.</p><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:640px;"><p class="vanilla-image-block" style="padding-top:75.00%;"><img id="" name="hero.png" alt="Grub Customizer" src="https://cdn.mos.cms.futurecdn.net/xJbNS4ymFFGUvy8Wq9ftaa.png" mos="" align="middle" fullscreen="1" width="640" height="480" attribution="" endorsement="" class="expandable"><a href='https://cdn.mos.cms.futurecdn.net/xJbNS4ymFFGUvy8Wq9ftaa.png' target='_blank' class='expand-button icon-expand-image icon' ></a></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Hardware)</span></figcaption></figure><h2 id="more-linux-tutorials">More Linux Tutorials</h2><ul><li><a href="https://www.tomshardware.com/how-to/run-nohup-in-linux">How to Use Nohup to Run Linux Scripts Unattended</a></li><li><a href="https://www.tomshardware.com/how-to/find-large-files-linux">How To Find Large Files on Linux</a></li><li><a href="https://www.tomshardware.com/how-to/use-ssh-connect-to-remote-computer">How to Use SSH to Connect to Remote Computers Using Windows, Linux or macOS</a></li></ul>
                                                            </article>
                            ]]>
                        </content:encoded>
                                                </item>
                                <item>
                                                            <title><![CDATA[ How To Add, Remove and Update Software in Debian and Ubuntu Using Apt ]]></title>
                                                                                                                                                                                                <link>https://www.tomshardware.com/software/linux/how-to-add-remove-and-update-software-in-debian-and-ubuntu-using-apt</link>
                                                                            <description>
                            <![CDATA[ Debian-based Linux distributions such as Ubuntu, Mint and Raspberry Pi OS use the Apt packaging application to manage software installations. ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">rGvhheDRrJHagMaMY2pmG5</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/iwZ7AzFWGUiyW7qZeKCvHe-1280-80.jpg" type="image/jpeg" length="0"></enclosure>
                                                                        <pubDate>Mon, 19 May 2025 16:19:35 +0000</pubDate>                                                                                                                                                                                                                                <category><![CDATA[Linux]]></category>
                                                    <category><![CDATA[Software]]></category>
                                                    <category><![CDATA[Operating Systems]]></category>
                                                                                                                    <dc:creator><![CDATA[ Les Pounder ]]></dc:creator>                                                                                    <dc:source><![CDATA[ https://cdn.mos.cms.futurecdn.net/mZ2MebAz6hhKR6vLUDUbsc.jpg ]]></dc:source>
                                                                <dc:description><![CDATA[ &lt;p&gt;Les Pounder is a creative technologist and for seven years has created projects to educate and inspire minds both young and old. He has worked with the Raspberry Pi Foundation to write and deliver their teacher training programme &quot;Picademy&quot;.&lt;/p&gt; ]]></dc:description>
                                                                                                                                <cf:isSponsored>false</cf:isSponsored>
                <cf:hasAffiliateLinks>false</cf:hasAffiliateLinks>
                <cf:isPaid>false</cf:isPaid>
                                                                                                                                <media:content type="image/jpeg" url="https://cdn.mos.cms.futurecdn.net/iwZ7AzFWGUiyW7qZeKCvHe-1280-80.jpg">
                                                            <media:credit><![CDATA[Future]]></media:credit>
                                                                                                                                                                                                                                    <media:description><![CDATA[Ubuntu 24.04 LTS with multiple terminals open]]></media:description>                                                            <media:text><![CDATA[Ubuntu 24.04 LTS with multiple terminals open]]></media:text>
                                <media:title type="plain"><![CDATA[Ubuntu 24.04 LTS with multiple terminals open]]></media:title>
                                                    </media:content>
                                                    <media:thumbnail url="https://cdn.mos.cms.futurecdn.net/iwZ7AzFWGUiyW7qZeKCvHe-1280-80.jpg" />
                                                                                                                                                                    <content:encoded >
                            <![CDATA[
                            <article>
                                <p>Linux has a multitude of ways to install software. We can build our own executables or use AppImage to run containerized applications. But at the heart of many Linux distros is a package management system, which for Debian based systems, such as the <a href="https://www.tomshardware.com/raspberry-pi">Raspberry Pi</a> and Ubuntu, is Apt.</p><p>Apt, the Advanced Packaging Tool is a command line application which handles the installation, categorization and removal of applications and their dependencies from the software repositories. Apt is the heart of Debian systems and the lessons learnt are applicable from the $35 Raspberry Pi to million dollar super computers. Apt is available via the Terminal and we can even administrate systems remotely using a remote connection such as SSH.</p><h2 id="which-linux-distros-use-apt">Which Linux distros use Apt?</h2><p>The list below is not exhaustive, but it illustrates that Apt is used in many Linux distributions.</p><ul><li>Debian</li><li>Raspberry Pi OS</li><li>Ubuntu and derivatives such as Kubuntu, Xubuntu, Lubuntu, Ubuntu Mate, Ubuntu Studio</li><li>Pop!_OS</li><li>MX Linux</li><li>Linux Mint</li><li>Peppermint OS</li></ul><p>You may be thinking, what about the other packaging tools? Yes there are many more alternatives, typically for other Linux distros. The likes of Fedora / Red Hat uses dnf, Arch based systems use pacman, and Suse uses zypper. You can also install software directly from source files, you just need to build the software before you install.</p><p>A command line tool may seem daunting but here we detail the most common commands that you will use to keep your Debian / Ubuntu systems updated with the latest software.</p><h2 id="so-why-not-just-use-apt-get">So why not just use apt-get?</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:813px;"><p class="vanilla-image-block" style="padding-top:70.60%;"><img id="" name="apt vs apt-get.png" alt="APT Package Management" src="https://cdn.mos.cms.futurecdn.net/Tn99ACYq6nSUv8XS4H22BB.png" mos="" align="middle" fullscreen="1" width="813" height="574" attribution="" endorsement="" class="expandable"><a href='https://cdn.mos.cms.futurecdn.net/Tn99ACYq6nSUv8XS4H22BB.png' target='_blank' class='expand-button icon-expand-image icon' ></a></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Hardware)</span></figcaption></figure><p>Apt the package manager was released in 1998. But apt, the command that is the focus of this how to, has been around since 2014, but it really came to notice with Ubuntu 16.04. But many users use “apt-get” instead so what’s the difference? They both serve the same purpose, software management, but with Apt it boils down to simplicity, with it being more user-friendly than "apt-get".</p><p>Take for example the commands that we used in this how-to.</p><div ><table><thead><tr><th class="firstcol " ><p>apt</p></th><th  ><p>apt-get</p></th><th  ><p>Function</p></th></tr></thead><tbody><tr><td class="firstcol " ><p>apt update</p></td><td  ><p>apt-get update</p></td><td  ><p>Update software repositories.</p></td></tr><tr><td class="firstcol " ><p>apt upgrade</p></td><td  ><p>apt-get upgrade</p></td><td  ><p>Upgrade system software.</p></td></tr><tr><td class="firstcol " ><p>apt install</p></td><td  ><p>apt-get install</p></td><td  ><p>Install an application.</p></td></tr><tr><td class="firstcol " ><p>apt remove</p></td><td  ><p>apt-get remove</p></td><td  ><p>Remove an application.</p></td></tr><tr><td class="firstcol " ><p>apt purge</p></td><td  ><p>apt-get purge</p></td><td  ><p>Remove an application and user configuration files.</p></td></tr></tbody></table></div><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:813px;"><p class="vanilla-image-block" style="padding-top:70.60%;"><img id="" name="apt commands.png" alt="APT Package Management" src="https://cdn.mos.cms.futurecdn.net/K8opzxQEkpJhdWiZRMcqnA.png" mos="" align="middle" fullscreen="1" width="813" height="574" attribution="" endorsement="" class="expandable"><a href='https://cdn.mos.cms.futurecdn.net/K8opzxQEkpJhdWiZRMcqnA.png' target='_blank' class='expand-button icon-expand-image icon' ></a></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Hardware)</span></figcaption></figure><p>But Apt does have a few extra commands, in fact we will use one in the how to.</p><div ><table><thead><tr><th class="firstcol " ><p>Command</p></th><th  ><p>Function</p></th></tr></thead><tbody><tr><td class="firstcol " ><p>apt search</p></td><td  ><p>Search for a specific application.</p></td></tr><tr><td class="firstcol " ><p>apt edit-sources</p></td><td  ><p>Edit /etc/apt/sources.list file which contains all of your software repositories. This is really a shortcut command which opens a text editor.</p></td></tr><tr><td class="firstcol " ><p>apt list</p></td><td  ><p>List all of the installed applications.</p></td></tr><tr><td class="firstcol " ><p>apt show</p></td><td  ><p>List the details of an application, including any dependencies.</p></td></tr><tr><td class="firstcol " ><p>apt moo</p></td><td  ><p>Uses ASCII to display a cow. Ok this is more a joke than a tool. See also cowsay.</p></td></tr></tbody></table></div><p>Apt is the tool to learn and use for everyday tasks. Apt-get is not being deprecated, but it would be wise to invest your time learning Apt.</p><h2 id="searching-for-software-with-apt">Searching for software with Apt</h2><p>Using Apt we can search the software repository for specific applications and keywords.</p><p>Open a terminal and use the apt search command followed by the name of an application. In our example, we use vlc to search for any applications that have vlc in the title. This command can generate a lot of results, but we can scroll up and down the list using our mouse / trackpad.</p><pre class="line-numbers language-python" language="python" ><code>$ apt search vlc</code></pre><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:813px;"><p class="vanilla-image-block" style="padding-top:70.60%;"><img id="" name="search.png" alt="APT Package Management" src="https://cdn.mos.cms.futurecdn.net/XYW5PV2CAtN2WGXjnV64aC.png" mos="" align="middle" fullscreen="1" width="813" height="574" attribution="" endorsement="" class="expandable"><a href='https://cdn.mos.cms.futurecdn.net/XYW5PV2CAtN2WGXjnV64aC.png' target='_blank' class='expand-button icon-expand-image icon' ></a></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Hardware)</span></figcaption></figure><p>To pause the output of the command, we can pipe (send the output) to “less”. The less command is used to store a page of output, which we can scroll or page through using the spacebar.</p><pre class="line-numbers language-python" language="python" ><code>$ apt search vlc | less</code></pre><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:813px;"><p class="vanilla-image-block" style="padding-top:70.60%;"><img id="" name="less.png" alt="APT Package Management" src="https://cdn.mos.cms.futurecdn.net/xrCb8sYGrgswV5XfuXBnuB.png" mos="" align="middle" fullscreen="1" width="813" height="574" attribution="" endorsement="" class="expandable"><a href='https://cdn.mos.cms.futurecdn.net/xrCb8sYGrgswV5XfuXBnuB.png' target='_blank' class='expand-button icon-expand-image icon' ></a></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Hardware)</span></figcaption></figure><p>If we need to be more specific we can pipe the output from the command and use “grep” to search for a specific keyword. Here we search for any VLC tools to use with Python 3.</p><pre class="line-numbers language-bash" language="bash" ><code>$ apt search vlc | grep “python3”</code></pre><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:866px;"><p class="vanilla-image-block" style="padding-top:72.63%;"><img id="B2ywUuRkJ7ukgkq6WTGjwb" name="grep" alt="Linux terminal" src="https://cdn.mos.cms.futurecdn.net/B2ywUuRkJ7ukgkq6WTGjwb.png" mos="" align="middle" fullscreen="1" width="866" height="629" attribution="" endorsement="" class="expandable"><a href='https://cdn.mos.cms.futurecdn.net/B2ywUuRkJ7ukgkq6WTGjwb.png' target='_blank' class='expand-button icon-expand-image icon' ></a></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Future)</span></figcaption></figure><p>Once we have found the appropriate application we can use the install command to install it onto our system.</p><h2 id="installing-linux-software-with-apt">Installing Linux Software With Apt</h2><p>After identifying our required application we next need to install it. Before we run an installation we need to update, ensuring that we get the latest software.</p><p>1. <strong>Open a terminal and</strong> <strong>use the update command</strong>. The update command will update the list of available packages for your machine. It is best practice to update, that way you will get the latest software.</p><pre class="line-numbers language-bash" language="bash" ><code>$ sudo apt update</code></pre><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:740px;"><p class="vanilla-image-block" style="padding-top:68.24%;"><img id="" name="apt update.png" alt="APT Package Management" src="https://cdn.mos.cms.futurecdn.net/jULpL4Zymjys2UVA6UNv3B.png" mos="" align="middle" fullscreen="1" width="740" height="505" attribution="" endorsement="" class="expandable"><a href='https://cdn.mos.cms.futurecdn.net/jULpL4Zymjys2UVA6UNv3B.png' target='_blank' class='expand-button icon-expand-image icon' ></a></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Hardware)</span></figcaption></figure><p>2. <strong>Use the install command</strong> to download and install your chosen application. In our example we install VLC, a popular media player.</p><pre class="line-numbers language-bash" language="bash" ><code>$ sudo apt install vlc</code></pre><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:813px;"><p class="vanilla-image-block" style="padding-top:70.60%;"><img id="" name="install.png" alt="APT Package Management" src="https://cdn.mos.cms.futurecdn.net/xRceNPGSpC2rkya2L4QLjB.png" mos="" align="middle" fullscreen="1" width="813" height="574" attribution="" endorsement="" class="expandable"><a href='https://cdn.mos.cms.futurecdn.net/xRceNPGSpC2rkya2L4QLjB.png' target='_blank' class='expand-button icon-expand-image icon' ></a></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Hardware)</span></figcaption></figure><p>After a few moments the application will be installed and available via the Terminal and via the Applications menu.</p><h2 id="upgrading-software-with-apt">Upgrading software with Apt</h2><p>To upgrade all of your installed software we can use the “upgrade” command. Using this with “update,” we can ensure that our software repositories are up-to-date, meaning that any new software is at the latest version.</p><p>1. Open a terminal and <strong>use the update command</strong>. The update command will update the list of available packages for your machine.</p><pre class="line-numbers language-bash" language="bash" ><code>$ sudo apt update</code></pre><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:740px;"><p class="vanilla-image-block" style="padding-top:68.24%;"><img id="" name="apt update.png" alt="APT Package Management" src="https://cdn.mos.cms.futurecdn.net/jULpL4Zymjys2UVA6UNv3B.png" mos="" align="middle" fullscreen="1" width="740" height="505" attribution="" endorsement="" class="expandable"><a href='https://cdn.mos.cms.futurecdn.net/jULpL4Zymjys2UVA6UNv3B.png' target='_blank' class='expand-button icon-expand-image icon' ></a></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Hardware)</span></figcaption></figure><p>2. <strong>Run the upgrade command</strong> to download and install the latest software. We use the -y switch to automatically agree to installing the software.</p><pre class="line-numbers language-bash" language="bash" ><code>$ sudo apt upgrade -y</code></pre><p>We can also chain together these commands into a one line script. Using “&&” between the commands we can instruct the system to chain the commands to run one after the other. The “&&” means that the second command will only run if the first command runs successfully.</p><pre class="line-numbers language-bash" language="bash" ><code>$ sudo apt update && sudo apt upgrade -y</code></pre><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:813px;"><p class="vanilla-image-block" style="padding-top:70.60%;"><img id="" name="upgrade-y.png" alt="APT Package Management" src="https://cdn.mos.cms.futurecdn.net/aYbC3b3oTureqL3EWd3q7D.png" mos="" align="middle" fullscreen="1" width="813" height="574" attribution="" endorsement="" class="expandable"><a href='https://cdn.mos.cms.futurecdn.net/aYbC3b3oTureqL3EWd3q7D.png' target='_blank' class='expand-button icon-expand-image icon' ></a></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Hardware)</span></figcaption></figure><p>Depending on the amount of required updates, this can take from a few seconds to multiple minutes.</p><h2 id="removing-software">Removing software</h2><p>There are two ways to uninstall an application from the system. The first “removes” the application from the system, leaving any user configuration files intact. This is the most common and safest means to remove software</p><p>Open a terminal and <strong>use the following command </strong>to remove the application. In our example we uninstalled VLC.</p><pre class="line-numbers language-bash" language="bash" ><code>$ sudo apt remove vlc</code></pre><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:813px;"><p class="vanilla-image-block" style="padding-top:70.60%;"><img id="" name="remove.png" alt="APT Package Management" src="https://cdn.mos.cms.futurecdn.net/TRhfQNn6NFrWELsSGuNZQC.png" mos="" align="middle" fullscreen="1" width="813" height="574" attribution="" endorsement="" class="expandable"><a href='https://cdn.mos.cms.futurecdn.net/TRhfQNn6NFrWELsSGuNZQC.png' target='_blank' class='expand-button icon-expand-image icon' ></a></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Hardware)</span></figcaption></figure><p>The second way is to “purge” the application and any config files from the system. This is a nuclear option, used to remove the application should we need a fresh start.</p><p>1. Open a terminal and <strong>use the purge command</strong> to remove VLC and any of its configuration files. Only use this command if you do not need or have backed up any configuration files.</p><pre class="line-numbers language-bash" language="bash" ><code>$ sudo apt purge vlc</code></pre><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:813px;"><p class="vanilla-image-block" style="padding-top:70.60%;"><img id="" name="purge.png" alt="APT Package Management" src="https://cdn.mos.cms.futurecdn.net/5tnwFDY45vznCKs8hiWZCC.png" mos="" align="middle" fullscreen="1" width="813" height="574" attribution="" endorsement="" class="expandable"><a href='https://cdn.mos.cms.futurecdn.net/5tnwFDY45vznCKs8hiWZCC.png' target='_blank' class='expand-button icon-expand-image icon' ></a></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Hardware)</span></figcaption></figure><p>2. <strong>Confirm </strong>that you are happy to purge the application and any configuration files.</p><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:813px;"><p class="vanilla-image-block" style="padding-top:70.60%;"><img id="" name="purge2.png" alt="APT Package Management" src="https://cdn.mos.cms.futurecdn.net/XY9UeAx9sSJmHDKtDG69LC.png" mos="" align="middle" fullscreen="" width="813" height="574" attribution="" endorsement="" class=""></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Hardware)</span></figcaption></figure>
                                                            </article>
                            ]]>
                        </content:encoded>
                                                </item>
                                <item>
                                                            <title><![CDATA[ How To Scan For Devices on Your Network ]]></title>
                                                                                                                                                                                                <link>https://www.tomshardware.com/how-to/scan-for-network-devices</link>
                                                                            <description>
                            <![CDATA[ Scan your network and discover the devices that reside within it. ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">DQSDTwikJge6eMMtcQcz6D</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/gM4w4UKP7PYxpM9fnqwf73-1280-80.jpg" type="image/jpeg" length="0"></enclosure>
                                                                        <pubDate>Wed, 06 Jul 2022 12:55:29 +0000</pubDate>                                                                                                                                <updated>Thu, 30 Jan 2025 13:42:19 +0000</updated>
                                                                                                                                            <category><![CDATA[Networking]]></category>
                                                                                                                    <dc:creator><![CDATA[ Les Pounder ]]></dc:creator>                                                                                    <dc:source><![CDATA[ https://cdn.mos.cms.futurecdn.net/mZ2MebAz6hhKR6vLUDUbsc.jpg ]]></dc:source>
                                                                <dc:description><![CDATA[ &lt;p&gt;Les Pounder is a creative technologist and for seven years has created projects to educate and inspire minds both young and old. He has worked with the Raspberry Pi Foundation to write and deliver their teacher training programme &quot;Picademy&quot;.&lt;/p&gt; ]]></dc:description>
                                                                                                                                <cf:isSponsored>false</cf:isSponsored>
                <cf:hasAffiliateLinks>false</cf:hasAffiliateLinks>
                <cf:isPaid>false</cf:isPaid>
                                                                                                                                <media:content type="image/jpeg" url="https://cdn.mos.cms.futurecdn.net/gM4w4UKP7PYxpM9fnqwf73-1280-80.jpg">
                                                            <media:credit><![CDATA[Shutterstock]]></media:credit>
                                                                                                                                                                                                                                    <media:description><![CDATA[Networking]]></media:description>                                                            <media:text><![CDATA[Networking]]></media:text>
                                <media:title type="plain"><![CDATA[Networking]]></media:title>
                                                    </media:content>
                                                    <media:thumbnail url="https://cdn.mos.cms.futurecdn.net/gM4w4UKP7PYxpM9fnqwf73-1280-80.jpg" />
                                                                                                                                                                    <content:encoded >
                            <![CDATA[
                            <article>
                                <p>Finding a device on your network is an important task. It is wise to keep an eye on what machines are on your network, and what they are doing.</p><p>Also knowing the hostname or IP address of a machine means we can remotely connect to it, for example via <a href="https://www.tomshardware.com/how-to/use-ssh-connect-to-remote-computer">SSH</a>. If, for example, you have a <a href="https://www.tomshardware.com/news/raspberry-pi">Raspberry Pi</a> hooked up but can’t remember its name, scanning the network will give you that information.</p><p>In this how-to, we will learn the various means to scan your home network and find the machines which are on it. To illustrate the task we’re going to search for a Raspberry Pi running the latest version of Raspberry Pi OS.</p><h2 id="finding-network-devices-via-your-router">Finding Network Devices Via Your Router</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:812px;"><p class="vanilla-image-block" style="padding-top:57.64%;"><img id="" name="image2.png" alt="Networking" src="https://cdn.mos.cms.futurecdn.net/4h34eoSqXdwcCDZvnFVVKe.png" mos="" align="middle" fullscreen="1" width="812" height="468" attribution="" endorsement="" class="expandable"><a href='https://cdn.mos.cms.futurecdn.net/4h34eoSqXdwcCDZvnFVVKe.png' target='_blank' class='expand-button icon-expand-image icon' ></a></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Hardware)</span></figcaption></figure><p>Each router is a little different, but most will offer a means to show all of the devices on your network. To see this, you will need to login to your router and navigate the options searching for “Devices”. Here we can see the Device Name (hostname) and the IP Address of machines on our network.</p><h2 id="finding-network-devices-via-an-app">Finding Network Devices Via An App</h2><p>Our preference is to use an app that will search our network and retrieve the details for us. We have used Fing on our Android devices for many years and it reliably returns the details of networked devices. Fing also offers an app for Windows and Mac.</p><p>1. <strong>Download and install </strong><a href="https://www.fing.com/products/fing-desktop"><strong>Fing</strong></a> for your OS.</p><p>2. <strong>Create an account </strong>and follow the sign up process.</p><p>3. <strong>Open Fing </strong>and <strong>click on Devices</strong>.</p><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1177px;"><p class="vanilla-image-block" style="padding-top:49.62%;"><img id="" name="image3.png" alt="Networking" src="https://cdn.mos.cms.futurecdn.net/nnGyQQVCrkYu2iuNmWW5Pe.png" mos="" align="middle" fullscreen="1" width="1177" height="584" attribution="" endorsement="" class="expandable"><a href='https://cdn.mos.cms.futurecdn.net/nnGyQQVCrkYu2iuNmWW5Pe.png' target='_blank' class='expand-button icon-expand-image icon' ></a></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Hardware)</span></figcaption></figure><p>4. <strong>Click on Refresh</strong> to run a search for networked devices.</p><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1181px;"><p class="vanilla-image-block" style="padding-top:32.01%;"><img id="" name="image8.png" alt="Networking" src="https://cdn.mos.cms.futurecdn.net/3JYRWMCuBiXnjrGwYTq7je.png" mos="" align="middle" fullscreen="1" width="1181" height="378" attribution="" endorsement="" class="expandable"><a href='https://cdn.mos.cms.futurecdn.net/3JYRWMCuBiXnjrGwYTq7je.png' target='_blank' class='expand-button icon-expand-image icon' ></a></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Hardware)</span></figcaption></figure><p>5. <strong>Click on the device</strong> that you wish to connect to. Our example uses a Raspberry Pi.</p><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:773px;"><p class="vanilla-image-block" style="padding-top:8.28%;"><img id="" name="image6.png" alt="Networking" src="https://cdn.mos.cms.futurecdn.net/Mmn5zXxFvJU78kdjn7irbe.png" mos="" align="middle" fullscreen="1" width="773" height="64" attribution="" endorsement="" class="expandable"><a href='https://cdn.mos.cms.futurecdn.net/Mmn5zXxFvJU78kdjn7irbe.png' target='_blank' class='expand-button icon-expand-image icon' ></a></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Hardware)</span></figcaption></figure><p>The hostname and IP address are now visible. Our hostname was “raspberrypi,” and we have two IP addresses as our Pi is connected via Wi-Fi and Ethernet.</p><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1173px;"><p class="vanilla-image-block" style="padding-top:60.61%;"><img id="" name="image7.png" alt="Networking" src="https://cdn.mos.cms.futurecdn.net/cqbAzFCcakyqvXnhPJfJfe.png" mos="" align="middle" fullscreen="1" width="1173" height="711" attribution="" endorsement="" class="expandable"><a href='https://cdn.mos.cms.futurecdn.net/cqbAzFCcakyqvXnhPJfJfe.png' target='_blank' class='expand-button icon-expand-image icon' ></a></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Hardware)</span></figcaption></figure><p>6. Scroll down and <strong>click on Find Open Ports </strong>to start a scan.</p><p>7. An optional step. Scroll down the page, click on <strong>Find open ports </strong>to run a port scan of the device. SSH is traditionally set to port 22.</p><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1177px;"><p class="vanilla-image-block" style="padding-top:77.66%;"><img id="" name="image1.gif" alt="Networking" src="https://cdn.mos.cms.futurecdn.net/XGhiTUdD4Gt6EMWk9cq8Ae.gif" mos="" align="middle" fullscreen="1" width="1177" height="914" attribution="" endorsement="" class="expandable"><a href='https://cdn.mos.cms.futurecdn.net/XGhiTUdD4Gt6EMWk9cq8Ae.gif' target='_blank' class='expand-button icon-expand-image icon' ></a></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Hardware)</span></figcaption></figure><h2 id="scan-for-network-devices-in-linux-and-macos">Scan for Network Devices in Linux and MacOS</h2><p>Linux users can use nmap, a network scanning tool to search for all the devices on their home network and then display their open ports. Here we are using an Ubuntu 22.04 install.</p><p>1. <strong>Open a terminal </strong>and <strong>update the list of software repositories</strong>.</p><pre class="line-numbers language-bash" language="bash" ><code>sudo apt update</code></pre><p>2. <strong>Install nmap</strong> using the apt package manager.</p><pre class="line-numbers language-bash" language="bash" ><code>sudo apt install nmap</code></pre><p>3. Using sudo, <strong>invoke the nmap command with the -Pn argument </strong>to scan all IP addresses on your network. Our network uses the IP range 192.168.0.0 to 192.168.0.255, your network may not. Adjust the IP address range to match your network.</p><pre class="line-numbers language-bash" language="bash" ><code>sudo nmap -Pn 192.168.0.0/24</code></pre><p>4. Scroll through the returned results to <strong>find the device </strong>that you wish to SSH into. Our target was a Raspberry Pi, and we can see two IP addresses that match. Both of these are the same machine, connected via Wi-Fi and Ethernet.</p><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1243px;"><p class="vanilla-image-block" style="padding-top:75.22%;"><img id="" name="image4.png" alt="Networking" src="https://cdn.mos.cms.futurecdn.net/wPrJgLXhzQTtZHweieV7Ue.png" mos="" align="middle" fullscreen="1" width="1243" height="935" attribution="" endorsement="" class="expandable"><a href='https://cdn.mos.cms.futurecdn.net/wPrJgLXhzQTtZHweieV7Ue.png' target='_blank' class='expand-button icon-expand-image icon' ></a></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Hardware)</span></figcaption></figure>
                                                            </article>
                            ]]>
                        </content:encoded>
                                                </item>
                                <item>
                                                            <title><![CDATA[ How to Save Disk Space in Raspberry Pi OS and Purge Bloat ]]></title>
                                                                                                                                                                                                <link>https://www.tomshardware.com/how-to/save-space-raspberry-pi-os</link>
                                                                            <description>
                            <![CDATA[ Identify and remove the packages that bloat your Raspberry Pi OS installation. All you need are a few commands and a little Linux know-how. ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">2rApie4uReLYAPMqZseR4T</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/CRoFcLPnNUJwGmGfaL8asi-1280-80.jpg" type="image/jpeg" length="0"></enclosure>
                                                                        <pubDate>Tue, 03 May 2022 16:55:43 +0000</pubDate>                                                                                                                                <updated>Thu, 30 Jan 2025 13:42:17 +0000</updated>
                                                                                                                                            <category><![CDATA[Raspberry Pi]]></category>
                                                                                                                    <dc:creator><![CDATA[ Les Pounder ]]></dc:creator>                                                                                    <dc:source><![CDATA[ https://cdn.mos.cms.futurecdn.net/mZ2MebAz6hhKR6vLUDUbsc.jpg ]]></dc:source>
                                                                <dc:description><![CDATA[ &lt;p&gt;Les Pounder is a creative technologist and for seven years has created projects to educate and inspire minds both young and old. He has worked with the Raspberry Pi Foundation to write and deliver their teacher training programme &quot;Picademy&quot;.&lt;/p&gt; ]]></dc:description>
                                                                                                                                <cf:isSponsored>false</cf:isSponsored>
                <cf:hasAffiliateLinks>false</cf:hasAffiliateLinks>
                <cf:isPaid>false</cf:isPaid>
                                                                                                                                <media:content type="image/jpeg" url="https://cdn.mos.cms.futurecdn.net/CRoFcLPnNUJwGmGfaL8asi-1280-80.jpg">
                                                            <media:credit><![CDATA[Shutterstock]]></media:credit>
                                                                                                                                                                                                                                    <media:description><![CDATA[ Save Disk Space in Raspberry Pi OS]]></media:description>                                                            <media:text><![CDATA[ Save Disk Space in Raspberry Pi OS]]></media:text>
                                <media:title type="plain"><![CDATA[ Save Disk Space in Raspberry Pi OS]]></media:title>
                                                    </media:content>
                                                    <media:thumbnail url="https://cdn.mos.cms.futurecdn.net/CRoFcLPnNUJwGmGfaL8asi-1280-80.jpg" />
                                                                                                                                                                    <content:encoded >
                            <![CDATA[
                            <article>
                                <p>There is no getting away from bloat. Be it the middle aged spread or the ever increasing size of applications. But how can we battle the bloat on our Raspberry Pi? You could install the many lighter Raspberry Pi distros (Raspberry Pi OS Lite, or Diet Pi for example). But what if we want to reduce our running installation?</p><p>Linux uses package managers to install and remove software packages. Software is downloaded from official (or third party) repositories and the package manager handles the installation of the software and its dependencies. For Raspberry Pi OS, we use the Advanced Packaging Tool (APT) as the OS is a derivative of the Debian OS. Using the apt tools we can add and remove software packages, but how can we surgically remove the packages causing the bloat? Linux has the tools to identify and list the packages, ready for us to trim the fat.</p><p>We’re going to use two different methods to identify the largest applications / packages that bloat your Raspberry Pi installation. One comes preinstalled, the other is online one line of code away. For the test we performed a fresh install of the latest 32-bit Raspberry Pi OS image to a 16GB micro SD card.</p><h2 id="check-the-current-size-of-the-raspberry-pi-os-install">Check the current size of the Raspberry Pi OS Install</h2><p>1.  <strong>Open a terminal and use the </strong><em><strong>df -h /</strong></em><strong> command to check the filesystem.</strong></p><pre class="line-numbers language-bash" language="bash" ><code>df -h /</code></pre><p>The df command is used to report the file system usage and has an extensive list of arguments to tailor the output to our needs. In this case we use the -h argument to format the output as “human readable”. The / instructs the command to look at the root filesystem of our drive, ignoring temporary files and ram disks.</p><p>2. <strong>Make a note of how much of the microSD card has been used. </strong>In our case we can see that our 16GB card (15GB available) has used 3.3GB, approximately 24% of the card for the OS install.</p><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:399px;"><p class="vanilla-image-block" style="padding-top:19.30%;"><img id="" name="df1.png" alt="Save Disk Space in Raspberry Pi OS" src="https://cdn.mos.cms.futurecdn.net/Wai9TKKE2z8FjLatFn9osh.png" mos="" align="middle" fullscreen="1" width="399" height="77" attribution="" endorsement="" class="expandable"><a href='https://cdn.mos.cms.futurecdn.net/Wai9TKKE2z8FjLatFn9osh.png' target='_blank' class='expand-button icon-expand-image icon' ></a></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Hardware)</span></figcaption></figure><h2 id="cutting-the-fat-from-raspberry-pi-os">Cutting the Fat from Raspberry Pi OS</h2><p>Finding the largest installed applications requires a little detective work and luckily Linux has the tools to do this. We can scan the database of installed applications and produce a list of the largest applications.</p><p>There are many ways to do this, but let&apos;s focus on two. The first uses the traditional tools, already installed on our Raspberry Pi. The <em>dpkg-query </em>command is used to query the installed applications and packages on our system.</p><p>1. <strong>Open a terminal.</strong></p><p>2. <strong>Use the dpkg-query command to list the installed applications. </strong>There is a lot to pick from this command.<br><em>-W</em> will list all the packages in a given pattern, a pattern that we shall later supply.<br><em>-f</em> specifies the format of the output.<br><em> &apos;${Installed-Size}\t${Package}\n&apos;</em> is the pattern and format we are searching for. In this case it is the size of the application, and the name. The installed-size value is given in bytes.</p><p><em>| sort -n -r</em> will pipe the output of the query as the input of the sort command. Using -n and -r it will sort the returned list from largest to smallest.</p><p><em>| head -n 20</em> is another pipe, this time it pipes the reverse sorted list into the <em>head</em> command which will display the 20 largest applications.</p><pre class="line-numbers language-bash" language="bash" ><code>dpkg-query -Wf '${Installed-Size}\t${Package}\n' | sort -n -r | head -n 20</code></pre><p>3. <strong>Check the output of the command and look for any applications that can be removed.</strong> There are going to be a few large applications that we can remove. At the top of our list is the Chromium web browser (370439 bytes).</p><p>4. <strong>Use the purge command to remove the application / package from the OS.</strong> To illustrate the step we purged Chromium from our install. The purge command will also remove any configuration files and dependencies, so use with care and only if you have backups of any config files.</p><pre class="line-numbers language-bash" language="bash" ><code>sudo apt-get purge -y chromium-browser</code></pre><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:635px;"><p class="vanilla-image-block" style="padding-top:31.65%;"><img id="" name="purge1.png" alt="Save Disk Space in Raspberry Pi OS" src="https://cdn.mos.cms.futurecdn.net/5VZ22f32BwmX2KivMQiHCi.png" mos="" align="middle" fullscreen="1" width="635" height="201" attribution="" endorsement="" class="expandable"><a href='https://cdn.mos.cms.futurecdn.net/5VZ22f32BwmX2KivMQiHCi.png' target='_blank' class='expand-button icon-expand-image icon' ></a></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Hardware)</span></figcaption></figure><p>5. <strong>Press Y to continue.</strong> The purge will take a few moments.</p><p>6. <strong>Use the </strong><em><strong>df -h / </strong></em><strong>command to confirm that we now have extra free space.</strong></p><pre class="line-numbers language-bash" language="bash" ><code>df -h /</code></pre><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:420px;"><p class="vanilla-image-block" style="padding-top:19.29%;"><img id="" name="df2.png" alt="Save Disk Space in Raspberry Pi OS" src="https://cdn.mos.cms.futurecdn.net/zJzvToxVx5K7bYatkCF8xh.png" mos="" align="middle" fullscreen="1" width="420" height="81" attribution="" endorsement="" class="expandable"><a href='https://cdn.mos.cms.futurecdn.net/zJzvToxVx5K7bYatkCF8xh.png' target='_blank' class='expand-button icon-expand-image icon' ></a></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Hardware)</span></figcaption></figure><p>We gained 370MB of extra space on our micro SD card.</p><p><br></p><h2 id="using-aptitude-to-save-disk-space-in-raspberry-pi-os">Using Aptitude to Save Disk Space in Raspberry Pi OS</h2><p>The other way uses an application, aptitude, which will do all the hard work for us. Aptitude is a simplified package management tool that acts as an abstraction of the common apt-get and dpkg commands. </p><p>1. <strong>Open a terminal and update the list of repositories.</strong></p><p><br></p><pre class="line-numbers language-bash" language="bash" ><code>sudo apt update</code></pre><p>2. <strong>Install aptitude.</strong></p><pre class="line-numbers language-bash" language="bash" ><code>sudo apt install aptitude</code></pre><p>3. <strong>List the top ten largest applications / packages. </strong>We sort the list via the size of each installed package and pipe the output to <em>tail</em> which will show the top ten packages. </p><pre class="line-numbers language-bash" language="bash" ><code>aptitude search "~i" --display-format "%p %I" --sort installsize | tail -10</code></pre><p>4. <strong>Look down the list and</strong> <strong>locate a package that can be safely removed.</strong> Note that the list is sorted in ascending order of size. Again we chose the Chromium web browser.</p><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:254px;"><p class="vanilla-image-block" style="padding-top:64.96%;"><img id="" name="apti2.png" alt="Screenshot of aptitude output" src="https://cdn.mos.cms.futurecdn.net/TyPVvoAQUv39qe29niAhTh.png" mos="" align="middle" fullscreen="1" width="254" height="165" attribution="" endorsement="" class="expandable"><a href='https://cdn.mos.cms.futurecdn.net/TyPVvoAQUv39qe29niAhTh.png' target='_blank' class='expand-button icon-expand-image icon' ></a></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Future)</span></figcaption></figure><p>5. <strong>Purge the package.</strong>  This is essentially the same as <em>apt-get purge</em>. Again we removed the Chromium Browser.</p><pre class="line-numbers language-bash" language="bash" ><code>sudo aptitude purge chromium-browser</code></pre><p>6. <strong>Press Y to continue.</strong> The purge will take a few moments.</p><p>7. <strong>Use the </strong><em><strong>df -h / </strong></em><strong>command to confirm that we now have extra free space.</strong></p><p><br></p><pre class="line-numbers language-bash" language="bash" ><code>df -h /</code></pre><p>We gained 240MB of extra space on our micro SD card.</p><p>Both of these methods can be used to target and remove unwanted packages, but a word of caution. You may take a look down the list and spot <em>raspberrypi-kernel </em>(283MB), <em>gcc-10</em>  (40MB) or <em>firmware </em>(various) and think that these are valid targets for your spring cleaning. But do your research before culling the packages. Some will be dependencies for important applications and others will be important system files. A quick Google search will save your sanity and time. </p><p><strong>MORE: </strong><a href="https://www.tomshardware.com/tomshardware/articles/6UXumZCAcpKeQYG5EUxH79"><strong>How to Set Up a Raspberry Pi for the First Time</strong></a></p><p><strong>MORE: </strong><a href="https://www.tomshardware.com/tomshardware/articles/oMaEfff5m9Cmx5VGqe5orf"><strong>How to Set Up a Headless Raspberry Pi</strong></a></p><p><strong>MORE: </strong><a href="https://www.tomshardware.com/tomshardware/articles/ATGecytvJUMS8wt2gVAwhS"><strong>How to Run Linux on your Chromebook</strong></a></p><iframe src="https://content.jwplatform.com/players/YdWWS5dA.html" id="YdWWS5dA" title="Raspberry Pi 4 Review: The New Gold Standard for Single-Board Computing" width="1920" height="1080" frameborder="0" scrolling="auto" allowfullscreen></iframe>
                                                            </article>
                            ]]>
                        </content:encoded>
                                                </item>
                                <item>
                                                            <title><![CDATA[ Pop!_OS Upgrades to Ubuntu 22.04 With New Release ]]></title>
                                                                                                                                                                                                <link>https://www.tomshardware.com/news/pop-os-update-22-04</link>
                                                                            <description>
                            <![CDATA[ Long Term Support from System 76 ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">UmHDYPzd5fvgjsuir8bJjH</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/L86aFG2hXh59FJijSNMmhS-1280-80.png" type="image/png" length="0"></enclosure>
                                                                        <pubDate>Tue, 26 Apr 2022 15:00:52 +0000</pubDate>                                                                                                                                <updated>Thu, 21 Aug 2025 12:51:04 +0000</updated>
                                                                                                                                            <category><![CDATA[Linux]]></category>
                                                    <category><![CDATA[Software]]></category>
                                                    <category><![CDATA[Operating Systems]]></category>
                                                                                                                    <dc:creator><![CDATA[ Ian Evenden ]]></dc:creator>                                                                                    <dc:source><![CDATA[ https://cdn.mos.cms.futurecdn.net/dY5MGBXCT6GV6ARt8oSiSj.jpg ]]></dc:source>
                                                                <dc:description><![CDATA[ &lt;p&gt;Ian is a UK-based news writer for Tom’s Hardware US. In 1992, he was given a 286-based PC because his parents hoped he’d become a programmer, and was instantly hooked despite the vagaries of MS-DOS. Pretty soon there was a 386 with Windows 3.1, a CD-ROM, and Sound Blaster card under the desk, followed by Pentium II, Athlon, i7 and Threadripper systems, most of which he built himself. After a brief eight-year dalliance with games consoles at Edge magazine, he began contributing to the likes of Maximum PC, PC Gamer, Windows Help and Advice and a few other magazines that have since closed - none of which were directly his fault. His desk today is a riot of PC monitors, Apple products, Raspberry Pi boards, purple unicorns, game controllers and camera lenses. He has no idea about programming.&lt;/p&gt; ]]></dc:description>
                                                                                                                                <cf:isSponsored>false</cf:isSponsored>
                <cf:hasAffiliateLinks>false</cf:hasAffiliateLinks>
                <cf:isPaid>false</cf:isPaid>
                                                                                                                                <media:content type="image/png" url="https://cdn.mos.cms.futurecdn.net/L86aFG2hXh59FJijSNMmhS-1280-80.png">
                                                            <media:credit><![CDATA[Future]]></media:credit>
                                                                                                                                                                                                                                    <media:description><![CDATA[Screenshot of Pop!_OS 22.04]]></media:description>                                                            <media:text><![CDATA[Screenshot of Pop!_OS 22.04]]></media:text>
                                <media:title type="plain"><![CDATA[Screenshot of Pop!_OS 22.04]]></media:title>
                                                    </media:content>
                                                    <media:thumbnail url="https://cdn.mos.cms.futurecdn.net/L86aFG2hXh59FJijSNMmhS-1280-80.png" />
                                                                                                                                                                    <content:encoded >
                            <![CDATA[
                            <article>
                                <p>Hard on the heels of last week’s release of <a href="https://www.tomshardware.com/uk/news/ubuntu-jammy-jellyfish" target="_blank">Ubuntu 22.04 LTS</a> comes a new release for <a href="https://blog.system76.com/post/682519660741148672/popos-2204-lts-has-landed" target="_blank">Pop!_OS</a>, the Ubuntu-based distro from <a href="https://pop.system76.com/" target="_blank">System 76</a> aimed at STEM and creative professionals.</p><div class="see-more see-more--clipped"><figure><blockquote class="twitter-tweet hawk-ignore" data-lang="en" cite="https://twitter.com/pop_os_official/status/1518622235170287616"><p lang="en" dir="ltr">Pop!_OS 22.04 LTS is here! New features and how to upgrade: https://t.co/o5Ii1w9R2Y What's your favorite new feature? #linux #popos #computers #landing pic.twitter.com/UY8uI2WiQs<a href="https://twitter.com/pop_os_official/status/1518622235170287616">April 25, 2022</a></p></blockquote></figure><div class="see-more__filter"></div></div><p>The distro is currently using Gnome 42 as its desktop, with System 76’s Cosmic UX. The Cosmic Desktop Environment remains in development, with an alpha expected this summer. <br>The new release brings all the improvements from Ubuntu 22.04, including kernel 5.16.19 (which will be regularly updated), and adds some more of its own, such as turning off automatic updates and streamlining them into a weekly notification to reduce distractions. There&apos;s a new Support panel for troubleshooting, including access to documentation, community support chat, and log files. </p><p>Further improvements include better multi-monitor support and fixed Hi-DPI layouts, plus new Nvidia GPU drivers. There&apos;s a scheduler that flings resources at whichever window is in focus, as well as a CPU governor that keeps the processor ticking over at the optimum frequency. Remote desktop is handled via RDP by default, and audio processing now uses PipeWire.</p><p>Pop!_OS uses both APT and Flatpak package management, and there are plenty of libraries and tools at the user’s disposal for things like software development, machine learning, and media production. Linux gamers are well catered-for too, with a mix of Steam, Lutris, and GameHub to make sure your game library is available, and the hybrid graphics engine allowing you to choose which apps get to use the GPU.</p><p>Absent from the updates is a new version of the <a href="https://www.tomshardware.com/uk/reviews/raspberry-pi-4" target="_blank">Raspberry Pi 4</a> <a href="https://www.tomshardware.com/uk/news/pop_os-coming-to-raspberry-pi" target="_blank">technical preview</a> of Pop!_OS, which remains stuck at 21.10. This is a shame, as Ubuntu 22.04 is highly Pi-compatible, all the way down to boards with 2GB of RAM, so we hope to see a Pi-specific release of the updated OS soon. </p>
                                                            </article>
                            ]]>
                        </content:encoded>
                                                </item>
                                <item>
                                                            <title><![CDATA[ Linux Mint Announces Latest Debian Based OS ]]></title>
                                                                                                                                                                                                <link>https://www.tomshardware.com/news/linux-mint-debian-edition-5</link>
                                                                            <description>
                            <![CDATA[ A new version of Linux Mint, based on Debian rather than Ubuntu, has been released ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">QDoVpWrpiS6xX2rfZSGJKT</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/hjX78GgjmYDVFN4Arvb2EW-1280-80.jpg" type="image/jpeg" length="0"></enclosure>
                                                                        <pubDate>Mon, 21 Mar 2022 16:44:42 +0000</pubDate>                                                                                                                                <updated>Thu, 30 Jan 2025 13:42:22 +0000</updated>
                                                                                                                                            <category><![CDATA[Linux]]></category>
                                                    <category><![CDATA[Software]]></category>
                                                    <category><![CDATA[Operating Systems]]></category>
                                                                                                                    <dc:creator><![CDATA[ Ian Evenden ]]></dc:creator>                                                                                    <dc:source><![CDATA[ https://cdn.mos.cms.futurecdn.net/dY5MGBXCT6GV6ARt8oSiSj.jpg ]]></dc:source>
                                                                <dc:description><![CDATA[ &lt;p&gt;Ian is a UK-based news writer for Tom’s Hardware US. In 1992, he was given a 286-based PC because his parents hoped he’d become a programmer, and was instantly hooked despite the vagaries of MS-DOS. Pretty soon there was a 386 with Windows 3.1, a CD-ROM, and Sound Blaster card under the desk, followed by Pentium II, Athlon, i7 and Threadripper systems, most of which he built himself. After a brief eight-year dalliance with games consoles at Edge magazine, he began contributing to the likes of Maximum PC, PC Gamer, Windows Help and Advice and a few other magazines that have since closed - none of which were directly his fault. His desk today is a riot of PC monitors, Apple products, Raspberry Pi boards, purple unicorns, game controllers and camera lenses. He has no idea about programming.&lt;/p&gt; ]]></dc:description>
                                                                                                                                <cf:isSponsored>false</cf:isSponsored>
                <cf:hasAffiliateLinks>false</cf:hasAffiliateLinks>
                <cf:isPaid>false</cf:isPaid>
                                                                                                                                <media:content type="image/jpeg" url="https://cdn.mos.cms.futurecdn.net/hjX78GgjmYDVFN4Arvb2EW-1280-80.jpg">
                                                            <media:credit><![CDATA[Linux Mint]]></media:credit>
                                                                                                                                                                                                                                    <media:description><![CDATA[The Linux Mint logo]]></media:description>                                                            <media:text><![CDATA[The Linux Mint logo]]></media:text>
                                <media:title type="plain"><![CDATA[The Linux Mint logo]]></media:title>
                                                    </media:content>
                                                    <media:thumbnail url="https://cdn.mos.cms.futurecdn.net/hjX78GgjmYDVFN4Arvb2EW-1280-80.jpg" />
                                                                                                                                                                    <content:encoded >
                            <![CDATA[
                            <article>
                                <p><a href="https://blog.linuxmint.com/?p=4287">Linux Mint has announced</a> the latest release of its Debian based operating system Linux Mint Debian Edition (LMDE), codename "Elsie" is based upon the latest Debian "Bullseye" release and is an alternative to the mainstream Ubuntu based Linux Mint. </p><figure role="gallery"><figure><img src="https://cdn.mos.cms.futurecdn.net/mxidY4XMMSdYMfCC7mTC3c.jpg" alt="The Linux Mint desktop" /><figcaption><small role="credit">Linux Mint</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/pJLtcyd5pNT9SGTTqfYV7c.jpg" alt="The Linux Mint desktop" /><figcaption><small role="credit">Linux Mint</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/bKzMou2nGkYJSbaCtpjVwb.jpg" alt="The Linux Mint desktop" /><figcaption><small role="credit">Linux Mint</small></figcaption></figure></figure><p>LMDE, or Linux Mint Debian Edition, is a backup version of Mint designed to preserve the work put into, and user experience of, Linux Mint should Ubuntu ever disappear to the great software graveyard in the sky. As Ubuntu is itself built on Debian architecture, to the uninitiated the difference is hard to discern. But under the hood there are notable software changes inline with the source operating system&apos;s philosophy. Following a successful beta release at the end of February, the time has come for a full version.</p><p>LMDE 5, codenamed Elsie, is made using the same Debian 11 Bullseye that <a href="https://www.tomshardware.com/news/raspberry-pi">Raspberry Pi</a> OS made such a <a href="https://www.tomshardware.com/news/raspberry-pi-os-bullseye-tested" target="_blank">difficult upgrade</a> to last year (as more recently and successfully did <a href="https://www.tomshardware.com/news/peppermint-os-11-new-bullseye-distro" target="_blank">Peppermint OS</a>). This, however, seems to be a much more fortunate project than Raspberry Pi’s, displaying the same Cinnamon desktop as the Ubuntu-based version of Mint, but with none of the Snap containerised software packages used by Canonical’s operating system. Instead, it uses the Flatpak application manager, along with a native Firefox app straight from Mozilla. Being a Debian based OS, Linux Mint also comes with the APT (Advanced Packaging Tool) to manage software installation.</p><p>The system requirements are modest, with just 2GB of RAM (4GB for a ‘comfortable experience’) and 20GB of disk space required. A screen resolution of 1024 x 768 is recommended, but on coarser displays there&apos;s a workaround involving Alt+dragging windows to get them on the screen. </p><p>Whatever the underlying architecture, there&apos;s no denying that, for a Windows user at least, Mint is a OS that makes a lot of sense on the desktop. The Menu and taskbar arrangement are familiar, there&apos;s some closed-source software such as Spotify and video codecs available, and if you want Ubuntu’s Snap, you can have it. </p><p>Otherwise, the full and familiar selection of Linux software is available, about 30,000 packages in total, including such stalwarts as GIMP, LibreOffice, and Inkscape. Mint celebrated its 15th anniversary last year, having been conceived in February 2006 by Clement Lefebvre, a French developer who wanted to implement solutions to common Linux community problems. The first release was based on Kubuntu, with the Gnome desktop landing in November the same year atop version 2.0 of the OS.</p><p><br></p><iframe src="https://content.jwplatform.com/players/LqlBSXUN.html" id="LqlBSXUN" title="Buy the Right Desktop PC" width="1920" height="1080" frameborder="0" scrolling="auto" allowfullscreen></iframe>
                                                            </article>
                            ]]>
                        </content:encoded>
                                                </item>
                                <item>
                                                            <title><![CDATA[ How to Do a Fuzzy File Search in Linux ]]></title>
                                                                                                                                                                                                <link>https://www.tomshardware.com/how-to/fuzzy-search-linux</link>
                                                                            <description>
                            <![CDATA[ Sometimes we’re not sure what we are looking for, and at the terminal that can lead to a little complexity. Fear not, fzf is the fuzzy search tool that we can use to search for files, directories and commands. ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">3v7tinGkuW6pa3kzoU2B7b</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/fh8DaACpZKAijGhQSBsHR3-1280-80.jpg" type="image/jpeg" length="0"></enclosure>
                                                                        <pubDate>Sun, 13 Mar 2022 10:00:53 +0000</pubDate>                                                                                                                                <updated>Thu, 30 Jan 2025 13:42:17 +0000</updated>
                                                                                                                                            <category><![CDATA[Linux]]></category>
                                                    <category><![CDATA[Software]]></category>
                                                    <category><![CDATA[Operating Systems]]></category>
                                                                                                                    <dc:creator><![CDATA[ Shashank Sharma ]]></dc:creator>                                                                                    <dc:source><![CDATA[ https://cdn.mos.cms.futurecdn.net/PVGiqXbSwkzW7tg3LcnoCP.jpeg ]]></dc:source>
                                                                <dc:description><![CDATA[ &lt;p&gt;Shashank Sharma is a trial lawyer by profession, but a through-and-through geek by choice. He&#039;s spent nearly two decades writing about Linux and Open Source software for several online and print publications around the English-speaking world, including Linux.com, Linux Journal, Newsforge, Linux Format, and Linux User &amp;amp; Developer. A CLI-junkie, Shashank has co-authored Apress&#039; Beginning Fedora, and when not drafting legal briefs, can be found detailing his CLI escapades on Tom&#039;s Hardware. A bibliophile at heart, he juggles his downtime reading fiction and working to master the art of storytelling.&lt;/p&gt; ]]></dc:description>
                                                                                                                                <cf:isSponsored>false</cf:isSponsored>
                <cf:hasAffiliateLinks>false</cf:hasAffiliateLinks>
                <cf:isPaid>false</cf:isPaid>
                                                                                                                                <media:content type="image/jpeg" url="https://cdn.mos.cms.futurecdn.net/fh8DaACpZKAijGhQSBsHR3-1280-80.jpg">
                                                            <media:credit><![CDATA[Tom&#039;s Hardware]]></media:credit>
                                                                                                                                                                                                                                    <media:description><![CDATA[Fuzzy File Search in Linux]]></media:description>                                                            <media:text><![CDATA[Fuzzy File Search in Linux]]></media:text>
                                <media:title type="plain"><![CDATA[Fuzzy File Search in Linux]]></media:title>
                                                    </media:content>
                                                    <media:thumbnail url="https://cdn.mos.cms.futurecdn.net/fh8DaACpZKAijGhQSBsHR3-1280-80.jpg" />
                                                                                                                                                                    <content:encoded >
                            <![CDATA[
                            <article>
                                <p>When looking for files on the Linuz desktop, you may often rely on the search feature of your favourite file manager. The conventional searching approach is to apply an exact search, so that only files or directories that are a perfect match to the search string are displayed. </p><p>A fuzzy search, on the other hand, performs an approximate search, and instead of identifying exact matches, displays matching results with each keystroke. The <a href="https://github.com/junegunn/fz"><u>fzf utility</u></a> identifies itself as a general-purpose fuzzy finder. Released under the MIT License, the cross-platform tool can be used across all flavours of Linux.</p><h2 id="installing-fzf-in-linux">Installing fzf in Linux</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:900px;"><p class="vanilla-image-block" style="padding-top:73.11%;"><img id="" name="LXF287.tut1_terminal.fzf_install_script.jpg" alt="Fuzzy File Search in Linux" src="https://cdn.mos.cms.futurecdn.net/ck9fwLCpzD2yiveXm7g695.jpg" mos="" align="middle" fullscreen="1" width="900" height="658" attribution="" endorsement="" class="expandable"><a href='https://cdn.mos.cms.futurecdn.net/ck9fwLCpzD2yiveXm7g695.jpg' target='_blank' class='expand-button icon-expand-image icon' ></a></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Hardware)</span></figcaption></figure><p>The latest release, version 0.29.0, is offered only in the latest releases of distributions such as Fedora. Manjaro, openSUSE Tumbleweed, Ubuntu, Debian and Arch, while most others carry older versions in their repositories.</p><p>To install on a Debian / Ubuntu system</p><p>1. <strong>Open a terminal.</strong></p><p>2. <strong>Update the list of repositories. </strong>This makes sure that we get the latest software.</p><pre class="line-numbers language-c" language="c" ><code>sudo apt update</code></pre><p>3. <strong>Install f2f using the apt package manager.</strong></p><pre class="line-numbers language-c" language="c" ><code>sudo apt install f2f</code></pre><p>Apart from using the software repositories, there are several other ways to install fzf, including using the package manager homebrew for Mac. Of course, you can also use Git to clone the project’s directory to your hard disk and then install fzf using the install script. The benefit of using Git versus the package manager is that we receive the bleeding edge version.</p><h2 id="to-install-via-git">To install via Git</h2><p>1. <strong>Open a terminal.</strong></p><p>2. <strong>Clone the repository.</strong></p><pre class="line-numbers language-c" language="c" ><code>git clone --depth 1 https://github.com/junegunn/fzf.git</code></pre><p>3. <strong>Change directory to the downloaded Git repository.</strong></p><pre class="line-numbers language-c" language="c" ><code>cd fzf</code></pre><p>4. <strong>Run the install script.</strong></p><pre class="line-numbers language-c" language="c" ><code>./install</code></pre><p>The fzf tool supports auto-completion and various key bindings. The install scripts asks if you wish to enable these and also offers to edit your ~/.bashrc file. Once enabled, you’ll be able to deploy the following keybindings to invoke fzf:</p><div ><table><thead><tr><th class="firstcol " >Keybinding</th><th  >Function</th><th  ></th></tr></thead><tbody><tr><td class="firstcol " >Ctrl+r</td><td  >Search the recent command history  based on $HISTFILE</td><td  ></td></tr><tr><td class="firstcol " >Ctrl+t</td><td  >Recursively search for the filename  in the $PWD</td><td  ></td></tr><tr><td class="firstcol " >Alt+c</td><td  >Recursively search for a directory  name under the $PWD, and cd into  the selected directory</td><td  ></td></tr></tbody></table></div><h2 id="working-with-fzf">Working with fzf</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:801px;"><p class="vanilla-image-block" style="padding-top:70.66%;"><img id="" name="Videos.gif" alt="Fuzzy File Search in Linux" src="https://cdn.mos.cms.futurecdn.net/cHE6jREpeKYgHMYZ7XKBr5.gif" mos="" align="middle" fullscreen="1" width="801" height="566" attribution="" endorsement="" class="expandable"><a href='https://cdn.mos.cms.futurecdn.net/cHE6jREpeKYgHMYZ7XKBr5.gif' target='_blank' class='expand-button icon-expand-image icon' ></a></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Hardware)</span></figcaption></figure><p>The fzf tool is only a finder so it makes little sense to invoke it by itself. Instead, you can use it in conjunction with other commands such as cd , or to open files in a text editor such as vim or nano. </p><p>Before we try that, let’s start with something simple.</p><p>1. <strong>Open a terminal.</strong></p><p>2. <strong>Press </strong><em><strong>Alt+c </strong></em><strong>to activate the directory lookup function.</strong> This function will only work in your present working directory (PWD). By default the terminal opens to our <em>home</em> directory.</p><p>3. <strong>Wait for the interactive prompt to load.</strong> The first time it loads, it may take a few moments for fzf to cache the data.</p><p>4. <strong>Start to type in the name of a directory, for example Videos.</strong> The interactive prompt will start to show directories which match the word.</p><p>5. <strong>Press Enter to change directory.</strong> If there are multiple entries use the up and down arrows to highlight, then press Enter to select.</p><p><strong>If nothing is found, exit fzf </strong>by pressing <em>CTRL + C</em> or <em>ESC</em>. </p><h2 id="using-fzf-tab-completion">Using fzf tab completion</h2><p>You can use fzf as a replacement for tab completion with all the terminal commands. To invoke fzf tab-completion, you must use the ** identifier with a command. Here we use fzf tab-completion with the <em>cd </em>(change directory command) to list all of the directories which match our search.</p><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:801px;"><p class="vanilla-image-block" style="padding-top:70.66%;"><img id="" name="cd.gif" alt="Fuzzy File Search in Linux" src="https://cdn.mos.cms.futurecdn.net/9CEFxHbfXgA4SmF3bH5yBn.gif" mos="" align="middle" fullscreen="1" width="801" height="566" attribution="" endorsement="" class="expandable"><a href='https://cdn.mos.cms.futurecdn.net/9CEFxHbfXgA4SmF3bH5yBn.gif' target='_blank' class='expand-button icon-expand-image icon' ></a></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Hardware)</span></figcaption></figure><p>1. <strong>Open a terminal.</strong></p><p>2. <strong>Type in the </strong><em><strong>cd </strong></em><strong>command then press space, followed by two **. Then press the TAB key to trigger tab-completion.</strong></p><pre class="line-numbers language-c" language="c" ><code>cd **<TAB></code></pre><p>3. <strong>Search for a directory. In our example we searched for Pictures. </strong>As you type, fzf will search for directories which match the search term. The arrow keys can be used to scroll through a list of entries.</p><p>4. <strong>Press Enter to select the directory, then press Enter again to change directory.</strong></p><p>Another example of tab-completion is using it along with the kill command to target a specific application / process and then kill it.</p><p>1. <strong>Open a terminal.</strong></p><p>2.<strong> Use tab-completion with the </strong><em><strong>kill </strong></em><strong>command.</strong></p><pre class="line-numbers language-c" language="c" ><code>kill -9 **</code></pre><p>3. <strong>Search for an application/process. </strong>We had Inkscape running in the background so chose to search for that.</p><p>4. <strong>Use the arrow keys to select the correct process </strong>and <strong>press Enter to select.</strong></p><p>5. <strong>Press Enter to run the kill command </strong>with the specified process. </p><h2 id="enhancing-the-search">Enhancing the Search</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:801px;"><p class="vanilla-image-block" style="padding-top:70.66%;"><img id="" name="extension.gif" alt="Fuzzy File Search in Linux" src="https://cdn.mos.cms.futurecdn.net/5azdaMS2RYoVtTiGUPjq9o.gif" mos="" align="middle" fullscreen="1" width="801" height="566" attribution="" endorsement="" class="expandable"><a href='https://cdn.mos.cms.futurecdn.net/5azdaMS2RYoVtTiGUPjq9o.gif' target='_blank' class='expand-button icon-expand-image icon' ></a></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Hardware)</span></figcaption></figure><p>By default, fzf starts in extended-search mode, which means that you can type space-separated keywords to narrow down the file or directory you’re looking for. </p><p>However, you can also utilise different techniques to improve the search results. Here we use the filename search to find Python files.</p><p>1. <strong>Open a terminal.</strong></p><p>2. <strong>Type in </strong><em><strong>less </strong></em><strong>and then press CTRL + T to open fzf’s file name search tool.</strong> To view a file we use <em>less</em> as it comes with built-in pagination and tools to scroll through large amounts of text.</p><p>3. <strong>Type in the file extension, </strong>in this case .py, <strong>and add a dollar sign to the end of the line.</strong></p><pre class="line-numbers language-c" language="c" ><code>.py$</code></pre><p>4. <strong>Use the arrow keys to select the correct file and press Enter </strong>to select.</p><p>5. <strong>Press Enter to open the file using </strong><em><strong>less</strong></em><strong>.</strong>  Search </p><h2 id="table-of-further-enhancements">Table of further enhancements</h2><div ><table><thead><tr><th class="firstcol " >Token</th><th  >Example</th><th  >Explanation</th></tr></thead><tbody><tr><td class="firstcol " >string</td><td  >string</td><td  >Searches for string</td></tr><tr><td class="firstcol " >&apos;</td><td  >&apos;string</td><td  >Performs an exact match for items that include the quoted string</td></tr><tr><td class="firstcol " >^string</td><td  >^LXF</td><td  >Lists items that start with LXF by performing a prefix exact-match</td></tr><tr><td class="firstcol " >.format$</td><td  >.odt$</td><td  >Lists files that end in .odt format by performing a suffix exact-match</td></tr><tr><td class="firstcol " >!string</td><td  >!dhc</td><td  >Lists items that don&apos;t include dhc by performing inverse-exact-match</td></tr><tr><td class="firstcol " >!^string</td><td  >~^LXF</td><td  >List items that don&apos;t start with LXF by performing inverse prefix exact-match</td></tr><tr><td class="firstcol " >!.format$</td><td  >!.odt$</td><td  >Lists files that don&apos;t end with .odt format by performing inverse suffix-exact-match</td></tr></tbody></table></div><p><em>This tutorial first appeared in </em><a href="https://linuxformat.com/"><u><em>issue 287 of Linux Format magazine.</em></u></a></p>
                                                            </article>
                            ]]>
                        </content:encoded>
                                                </item>
                                <item>
                                                            <title><![CDATA[ How To Run Long-running Scripts on a Raspberry Pi ]]></title>
                                                                                                                                                                                                <link>https://www.tomshardware.com/how-to/run-long-running-scripts-raspberry-pi</link>
                                                                            <description>
                            <![CDATA[ If you need to run a script that takes several minutes or gets run again and again, here’s how. ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">oMP67hgJNfNfA6bdnf4geh</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/Um9vmhVHnbwSvW2qZZ9jgi-1280-80.jpg" type="image/jpeg" length="0"></enclosure>
                                                                        <pubDate>Sat, 26 Feb 2022 14:00:38 +0000</pubDate>                                                                                                                                <updated>Thu, 30 Jan 2025 13:42:20 +0000</updated>
                                                                                                                                            <category><![CDATA[Raspberry Pi]]></category>
                                                                                                <author><![CDATA[ ryder+toms@ryderdamen.com (Ryder Damen) ]]></author>                    <dc:creator><![CDATA[ Ryder Damen ]]></dc:creator>                                                                                    <dc:source><![CDATA[ https://cdn.mos.cms.futurecdn.net/yHmRhXRwnn6Tza4pvE2MAY.jpg ]]></dc:source>
                                                                <dc:description><![CDATA[ &lt;p&gt;Ryder is a creative technologist and Raspberry Pi aficionado. While he spends most of his time on the software side of things, one of his favorite pastimes is taking old technology and giving it a new (often pointless) purpose. In his free time, he likes to create videos, longboard, and explore the vast Canadian wilderness.&lt;/p&gt; ]]></dc:description>
                                                                                                                                <cf:isSponsored>false</cf:isSponsored>
                <cf:hasAffiliateLinks>false</cf:hasAffiliateLinks>
                <cf:isPaid>false</cf:isPaid>
                                                                                                                                <media:content type="image/jpeg" url="https://cdn.mos.cms.futurecdn.net/Um9vmhVHnbwSvW2qZZ9jgi-1280-80.jpg">
                                                            <media:credit><![CDATA[Shutterstock]]></media:credit>
                                                                                                                                                                                                                                    <media:description><![CDATA[Raspberry Pi]]></media:description>                                                            <media:text><![CDATA[Raspberry Pi]]></media:text>
                                <media:title type="plain"><![CDATA[Raspberry Pi]]></media:title>
                                                    </media:content>
                                                    <media:thumbnail url="https://cdn.mos.cms.futurecdn.net/Um9vmhVHnbwSvW2qZZ9jgi-1280-80.jpg" />
                                                                                                                                                                    <content:encoded >
                            <![CDATA[
                            <article>
                                <p>When I first got started with a Raspberry Pi, I would often use it to tackle some long running scripts - like the continuous monitoring of a video feed, or a small script that gathered data from the web. The problem I faced was how to stay connected to the Pi long enough so that the script wouldn’t terminate.</p><p>You could connect a keyboard, monitor, and keep the pi running that way - but I prefer to work with my Raspberry Pi over SSH, so I can have all the comforts of my regular computer.</p><p>So how do you keep a script on your Pi running for a long time over SSH so it doesn’t time out and fail? There are a few ways.</p><h2 id="what-you-x2019-ll-need-for-this-project">What You’ll Need For This Project</h2><ul><li><a href="https://www.tomshardware.com/reviews/raspberry-pi-4"><u>Raspberry Pi 4</u></a> or Raspberry Pi 3 with power adapter</li><li><a href="https://www.amazon.com/SanDisk-2-Pack-microSDHC-Memory-2x32GB/dp/B08J4HJ98L">2x8 GB (or larger) microSD cards</a>, one for Raspberry Pi, another for the camera</li></ul><h2 id="how-to-run-long-running-scripts-on-your-raspberry-pi">How to run long-running scripts on your Raspberry Pi</h2><p>Before you get started, get your Raspberry Pi set up. If you haven’t done this before, see our article on how to <a href="https://www.tomshardware.com/how-to/set-up-raspberry-pi"><u>set up a Raspberry Pi</u></a> for the first time or how to do a <a href="https://www.tomshardware.com/reviews/raspberry-pi-headless-setup-how-to,6028.html"><u>headless Raspberry Pi install</u></a> (without the keyboard and screen). For this project, we recommend a <a href="https://www.tomshardware.com/reviews/raspberry-pi-headless-setup-how-to,6028.html"><u>headless Raspberry Pi install</u></a>.</p><p>Depending on the project you’re working on - there are two methods we’ll cover for handling long running scripts. If you’re running a script just once or twice - use the tmux method. If you’re setting up your Pi for a long-term project and want a script that restarts automatically - skip to the “service” method.</p><h2 id="using-tmux-on-your-raspberry-pi">Using tmux on your Raspberry Pi</h2><p>The tmux package allows you to create a separate shell which you can detach from and let it run in the background. If you had a one-off program that you know is going to take a long time (a make build command for instance), you can create a tmux session, run your long running command, detach from that session, and logout of the pi without worry. As long as you don’t interrupt the pi’s power supply, your script should continue to run. You can attach to the session and check in on it periodically and detach to let it run.</p><p>If this sounds like it fits your use case; here’s how to use it.</p><p>1. <strong>Install the tmux package.</strong></p><p><br></p><pre class="line-numbers language-python" language="python" ><code>sudo apt-get install -y tmux</code></pre><p>2. <strong>Create a new tmux session.</strong></p><pre class="line-numbers language-python" language="python" ><code># pick any session name you liketmux new -s your_session_name</code></pre><pre class="line-numbers language-python" language="python" ><code>python3 my_really_long_running_script.py</code></pre><p>3. <strong>Detach from the session</strong> by using the following keys:</p><pre class="line-numbers language-python" language="python" ><code>Hit “Ctrl + B”Then hit “D”</code></pre><p>You’ll be returned to your original session, with your long running script running in the background. You can log out at this point.</p><p>4. To <strong>re-attach to the session</strong> to check how it’s going, simply run the following</p><p><br></p><pre class="line-numbers language-python" language="python" ><code># list all the sessions runningtmux list-sessions# attach to your sessiontmux a -t your_session_name</code></pre><p>And that’s it. You can detach as described in step 4 again if you like. Tmux is best used for commands that you’re running one-off, like an installation step. If you’re looking to run something long term, continuously, with automatic restarting - you’ll want to create a service.</p><h2 id="creating-a-service-on-your-raspberry-pi">Creating A Service on your Raspberry Pi</h2><p>A service is best used for an application you’d like to run continuously on your pi. Maybe it’s a script that’s constantly checking for weather station data and sending it to the cloud, or a simple app that listens for requests to change a LED strip’s color. If you’re looking for something that can handle restarts automatically, and starts when the Pi starts - a service is a great solution.</p><p>1. To create a service, first <strong>test if the script you’d like to run is functioning properly. </strong>Make sure to use the full path to the file when invoking it.</p><pre class="line-numbers language-python" language="python" ><code>python3 /home/pi/my_script.py</code></pre><p>2. Next, we’ll <strong>create a file in /etc/systemd/system to define our service</strong>:</p><pre class="line-numbers language-python" language="python" ><code>sudo touch /etc/systemd/system/myscript.service</code></pre><p>3. We’ll then <strong>edit the file, adding the required information</strong> to define the service and allow it to restart on failure.</p><pre class="line-numbers language-python" language="python" ><code>sudo nano /etc/systemd/system/myscript.service</code></pre><p>Add the following lines to the file</p><pre class="line-numbers language-python" language="python" ><code>[Unit]Description=My long running scriptAfter=network.targetStartLimitIntervalSec=0[Service]Type=simpleUser=piRestart=alwaysRestartSec=1ExecStart=python3 /home/pi/my_script.py[Install]WantedBy=multi-user.target</code></pre><p>4. Once you’ve saved your file, <strong>start and enable the service</strong> - allowing it to run immediately, and also when the pi restarts.</p><pre class="line-numbers language-python" language="python" ><code>sudo systemctl start myscript && sudo systemctl enable myscript</code></pre><p>5. Your script will now run on your pi in the background, restarting automatically when it fails. You can <strong>check on it with the following command</strong>:</p><p><br></p><pre class="line-numbers language-python" language="python" ><code>sudo systemctl status myscript</code></pre><p>And that’s it. Many services are already running on your Pi as a part of it’s normal operation. By defining and enabling this service, you simply add your script to the rest of the things your Pi does just by being plugged in. If at any point you need to stop the service, you can do it with the following command:</p><p><br></p><pre class="line-numbers language-python" language="python" ><code>sudo systemctl stop myscript</code></pre><p>There are many other ways to accomplish running scripts in the background, but for Raspberry Pi projects, these two are my go-to commands. Happy building!</p><pre class="line-numbers language-python" language="python" ><code># pick any session name you liketmux new -s your_session_name</code></pre>
                                                            </article>
                            ]]>
                        </content:encoded>
                                                </item>
                                <item>
                                                            <title><![CDATA[ Peppermint OS 11 Unveils New Bullseye-Based Distro ]]></title>
                                                                                                                                                                                                <link>https://www.tomshardware.com/news/peppermint-os-11-new-bullseye-distro</link>
                                                                            <description>
                            <![CDATA[ Peppermint OS 11, a lightweight distro based on Debian Bullseye, has been revealed. ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">RuJHMP9mSJhTii4CyXYg5T</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/Frvpysz7Q2rsvGCazWujiK-1280-80.jpg" type="image/jpeg" length="0"></enclosure>
                                                                        <pubDate>Fri, 04 Feb 2022 14:45:31 +0000</pubDate>                                                                                                                                <updated>Thu, 30 Jan 2025 13:42:22 +0000</updated>
                                                                                                                                            <category><![CDATA[Linux]]></category>
                                                    <category><![CDATA[Software]]></category>
                                                    <category><![CDATA[Operating Systems]]></category>
                                                                                                                    <dc:creator><![CDATA[ Ian Evenden ]]></dc:creator>                                                                                    <dc:source><![CDATA[ https://cdn.mos.cms.futurecdn.net/dY5MGBXCT6GV6ARt8oSiSj.jpg ]]></dc:source>
                                                                <dc:description><![CDATA[ &lt;p&gt;Ian is a UK-based news writer for Tom’s Hardware US. In 1992, he was given a 286-based PC because his parents hoped he’d become a programmer, and was instantly hooked despite the vagaries of MS-DOS. Pretty soon there was a 386 with Windows 3.1, a CD-ROM, and Sound Blaster card under the desk, followed by Pentium II, Athlon, i7 and Threadripper systems, most of which he built himself. After a brief eight-year dalliance with games consoles at Edge magazine, he began contributing to the likes of Maximum PC, PC Gamer, Windows Help and Advice and a few other magazines that have since closed - none of which were directly his fault. His desk today is a riot of PC monitors, Apple products, Raspberry Pi boards, purple unicorns, game controllers and camera lenses. He has no idea about programming.&lt;/p&gt; ]]></dc:description>
                                                                                                                                <cf:isSponsored>false</cf:isSponsored>
                <cf:hasAffiliateLinks>false</cf:hasAffiliateLinks>
                <cf:isPaid>false</cf:isPaid>
                                                                                                                                <media:content type="image/jpeg" url="https://cdn.mos.cms.futurecdn.net/Frvpysz7Q2rsvGCazWujiK-1280-80.jpg">
                                                            <media:credit><![CDATA[Future]]></media:credit>
                                                                                                                                                                                                                                    <media:description><![CDATA[Peppermint OS 11]]></media:description>                                                            <media:text><![CDATA[Peppermint OS 11]]></media:text>
                                <media:title type="plain"><![CDATA[Peppermint OS 11]]></media:title>
                                                    </media:content>
                                                    <media:thumbnail url="https://cdn.mos.cms.futurecdn.net/Frvpysz7Q2rsvGCazWujiK-1280-80.jpg" />
                                                                                                                                                                    <content:encoded >
                            <![CDATA[
                            <article>
                                <p>It’s taken them three years, but <a href="https://peppermintos.com/" target="_blank">Peppermint OS,</a> a lightweight Linux distro for low-powered computers, has a new release - Peppermint OS 11 - and it’s a big change from its predecessor.</p><figure role="gallery"><figure><img src="https://cdn.mos.cms.futurecdn.net/7AQ9tgWLcfyLpkY8Ejm8EL.jpg" alt="Peppermint OS 11" /><figcaption><small role="credit">Future</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/ECDXXBSNryFjD9j4j8F48L.jpg" alt="Peppermint OS 11" /><figcaption><small role="credit">Future</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/SyVzRrfMHRRfpg6rg5L5xK.jpg" alt="Peppermint OS 11" /><figcaption><small role="credit">Future</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/7VaJqtEqgoeeZHxQKWhxqK.jpg" alt="Peppermint OS 11" /><figcaption><small role="credit">Future</small></figcaption></figure></figure><p>While Peppermint OS 10 was based on <a href="https://www.tomshardware.com/news/ubuntu-impish-indri-is-here" target="_blank">Ubuntu</a>, version 11 makes the jump to 64-bit Debian Bullseye, the 5.10 LTS kernel, and the lightweight Xfce 4.16 default desktop environment. This means you now get Calameres as the graphical installer instead of Ubuntu’s Ubiquity, and sees changes in the software selection too, with Nemo replacing Thunar as the default file manager, and new Welcome To Peppermint and Peppermint Hub apps that let you customise the OS and access its settings.</p><p>There&apos;s no web browser installed by default, but with Firefox ESR, Konquerer, Epiphany and more available from the Welcome app, that shouldn’t take too long to sort out. Of course being a Debian system you are free to install whatever web browser that you wish via the APT package manager. There are also plenty of themes, icon packs and wallpapers available to download from the Peppermint Extras section.</p><p>These help the OS greatly, as it has an austere look about it to begin with. Default wallpapers are plain, only one even sporting the Peppermint logo, but that’s only to be expected from a minimalist, lightweight OS with an ethos of “everything you need, nothing you don’t”. Peppermint&apos;s minimum specs state 1GB of RAM and any x86 processor, though 4GB of RAM is preferred. It can be installed on 12-year-old laptops, according to a video linked from the official site.</p><p>Other new features include having the Num Lock key enabled by default, which has been welcomed by commenters on the site, but may lead to some laptop keyboards behaving oddly. Privacy tools adblocker and Hblock are installable via Terminal, and should prevent ads from being seen across the whole system by modifying the /etc/hosts file so it contains the details of over 100,000 ad-serving domains (though remember, adverts are how many sites make money and pay their contributors). </p><p>Bullseye made a splash when it was used as the basis of the <a href="https://www.tomshardware.com/news/raspberry-pi-os-bullseye-tested" target="_blank">Raspberry Pi OS</a> late last year, but we’ve found using the Peppermint OS live CD via a virtual machine, to be straightforward and painless, even with the minimum amount of RAM. We were able to install apps and browse the Internet with ease. Updating is achieved via a simple shortcut in the system tray, and the system seems fast and responsive.</p><p>If you&apos;ve got some old kit laying around, then perhaps adding a little "pep" with <a href="https://peppermintos.com/">Peppermint OS</a> is what these machines need.</p><p><br></p><iframe src="https://content.jwplatform.com/players/LqlBSXUN.html" id="LqlBSXUN" title="Buy the Right Desktop PC" width="1920" height="1080" frameborder="0" scrolling="auto" allowfullscreen></iframe>
                                                            </article>
                            ]]>
                        </content:encoded>
                                                </item>
                                <item>
                                                            <title><![CDATA[ How to Build a Morse Code Transmitter Light with Raspberry Pi ]]></title>
                                                                                                                                                                                                <link>https://www.tomshardware.com/how-to/morse-code-light-raspberry-pi</link>
                                                                            <description>
                            <![CDATA[ Turn a large DJ light into a morse code communications device. ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">tHn3e8hDKLQnHzxQMJAm8A</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/CHKpf2xfxqufGEjocb9vyR-1280-80.jpg" type="image/jpeg" length="0"></enclosure>
                                                                        <pubDate>Sun, 16 Jan 2022 13:00:48 +0000</pubDate>                                                                                                                                <updated>Wed, 05 Feb 2025 14:50:08 +0000</updated>
                                                                                                                                            <category><![CDATA[Raspberry Pi]]></category>
                                                                                                <author><![CDATA[ ryder+toms@ryderdamen.com (Ryder Damen) ]]></author>                    <dc:creator><![CDATA[ Ryder Damen ]]></dc:creator>                                                                                    <dc:source><![CDATA[ https://cdn.mos.cms.futurecdn.net/yHmRhXRwnn6Tza4pvE2MAY.jpg ]]></dc:source>
                                                                <dc:description><![CDATA[ &lt;p&gt;Ryder is a creative technologist and Raspberry Pi aficionado. While he spends most of his time on the software side of things, one of his favorite pastimes is taking old technology and giving it a new (often pointless) purpose. In his free time, he likes to create videos, longboard, and explore the vast Canadian wilderness.&lt;/p&gt; ]]></dc:description>
                                                                                                                                <cf:isSponsored>false</cf:isSponsored>
                <cf:hasAffiliateLinks>false</cf:hasAffiliateLinks>
                <cf:isPaid>false</cf:isPaid>
                                                                                                                                <media:content type="image/jpeg" url="https://cdn.mos.cms.futurecdn.net/CHKpf2xfxqufGEjocb9vyR-1280-80.jpg">
                                                            <media:credit><![CDATA[Tom&#039;s Hardware]]></media:credit>
                                                                                                                                                                                                                                    <media:description><![CDATA[Morse Code Transmitter Light with Raspberry Pi]]></media:description>                                                            <media:text><![CDATA[Morse Code Transmitter Light with Raspberry Pi]]></media:text>
                                <media:title type="plain"><![CDATA[Morse Code Transmitter Light with Raspberry Pi]]></media:title>
                                                    </media:content>
                                                    <media:thumbnail url="https://cdn.mos.cms.futurecdn.net/CHKpf2xfxqufGEjocb9vyR-1280-80.jpg" />
                                                                                                                                                                    <content:encoded >
                            <![CDATA[
                            <article>
                                <p>I recently moved into a new place, and discovered that my friend and I live in buildings that face each other. We’re about a kilometer apart, but both our balconies have line of sight to each other. I’ve always wanted to build a communications network with my friends since I was a kid, so I dusted off an old book about Morse, one of my Raspberry P’s and got to work. I’m a big fan of mixing old and new technologies, so instead of using something modern, I decided to use Morse code.</p><p>This tutorial is the first in a two part series for building a building-to-building morse code communications system. In it, we’ll explore how to create a morse code transmitter using a Raspberry Pi and a DJ light.</p><h2 id="what-you-x2019-ll-need-for-this-project-2">What You’ll Need For This Project</h2><ul><li><a href="https://www.tomshardware.com/reviews/raspberry-pi-4"><u>Raspberry Pi 4</u></a> or Raspberry Pi 3 with power adapter</li><li><a href="https://www.amazon.ca/ENTTEC-Open-DMX-USB/dp/B00O9RY664"><u>Enttec Open DMX USB Adapter</u></a></li><li>DMX Capable RGB DJ Light</li><li>5-pin male to 3-pin female DMX cable</li><li>8 GB (or larger) microSD card</li><li>Monitor with HDMI and power cables. (Optional)</li></ul><h2 id="how-to-build-a-morse-code-transmitter-with-a-raspberry-pi">How to Build a Morse Code Transmitter with a Raspberry Pi</h2><p>Before you get started, get your Raspberry Pi set up. If you haven’t done this before, see our article on how to <a href="https://www.tomshardware.com/reviews/raspberry-pi-set-up-how-to,6029.html"><u>set up a Raspberry Pi</u></a> for the first time or how to do a <a href="https://www.tomshardware.com/reviews/raspberry-pi-headless-setup-how-to,6028.html"><u>headless Raspberry Pi install</u></a> (without the keyboard and screen). For this project, we recommend a <a href="https://www.tomshardware.com/reviews/raspberry-pi-headless-setup-how-to,6028.html"><u>headless Raspberry Pi install</u></a>.</p><p>1. <strong>Install git. </strong>We’ll need it to download the code from GitHub.</p><pre class="line-numbers language-python" language="python" ><code>sudo apt-get updatesudo apt-get -y install git</code></pre><p>2. <strong>Clone the repository to your home directory.</strong> This will ensure we have all the code necessary to run the project.</p><pre class="line-numbers language-python" language="python" ><code>cd ~/git clone https://github.com/rydercalmdown/building_to_building_morse.git</code></pre><p>3. <strong>Connect your Enttec Open DMX USB adapter to your Raspberry Pi </strong>with the included USB cable.</p><p><br></p><figure role="gallery"><figure><img src="https://cdn.mos.cms.futurecdn.net/t2q2SJ28E2ByJJSmZ89JvS.jpg" alt="Morse Code Transmitter Light with Raspberry Pi" /><figcaption><small role="credit">Tom's Hardware</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/BJenFrgkCpdWrGTUkWHFQS.jpg" alt="Morse Code Transmitter Light with Raspberry Pi" /><figcaption><small role="credit">Tom's Hardware</small></figcaption></figure></figure><p>4. <strong>Run the “make install” command </strong>to install all project dependencies. This script will take care of installing lower level dependencies, as well as the Python libraries you need for the project to run.</p><p><br></p><p><br></p><pre class="line-numbers language-python" language="python" ><code>cd ~/building_to_building_morse/make install</code></pre><p>5. <strong>Run the ola_dev_info command </strong>to retrieve the device and port number of the Enttec device.</p><pre class="line-numbers language-python" language="python" ><code>ola_dev_info | grep FT232R</code></pre><p>6. Using the device number (example 8) and port number (example 1) provided in the output, <strong>run the patch command </strong>to patch the device and port to DMX universe 0.</p><pre class="line-numbers language-python" language="python" ><code># patching device ( -d ) 8 and port ( -p ) 1 to universe 0.# replace 8 and 1 with the respective from the previous commandola_patch -d 8 -p 1 -u 0</code></pre><p>7. <strong>Connect your DMX light to the Enttec USB adapter</strong> with a DMX cable, and plug your light in.</p><figure role="gallery"><figure><img src="https://cdn.mos.cms.futurecdn.net/xsBMxVPzj6DRHgv9CrhRjS.jpg" alt="Morse Code Transmitter Light with Raspberry Pi" /><figcaption><small role="credit">Tom's Hardware</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/phq9qRCnsvgbPpNEG52YAT.jpg" alt="Morse Code Transmitter Light with Raspberry Pi" /><figcaption><small role="credit">Tom's Hardware</small></figcaption></figure></figure><p>8. <strong>Turn on your DMX light </strong>and ensure it’s running on DMX channel 001.</p><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1280px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="" name="image9.jpg" alt="Morse Code Transmitter Light with Raspberry Pi" src="https://cdn.mos.cms.futurecdn.net/L5cNY2K9dxZhHveuiF3EKT.jpg" mos="" align="middle" fullscreen="1" width="1280" height="720" attribution="" endorsement="" class="expandable"><a href='https://cdn.mos.cms.futurecdn.net/L5cNY2K9dxZhHveuiF3EKT.jpg' target='_blank' class='expand-button icon-expand-image icon' ></a></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Hardware)</span></figcaption></figure><p>9. <strong>Test your light with the following command </strong>on your Raspberry Pi. It should display a bright white.</p><p><br></p><pre class="line-numbers language-python" language="python" ><code>ola_streaming_client -d 255,255,255 -u 0</code></pre><p>10. <strong>Run the make transmit command</strong>; this will start a web server that can be accessed from a remote machine at your Pi’s IP address.</p><p><br></p><pre class="line-numbers language-python" language="python" ><code>make transmit</code></pre><p>11. On another machine, <strong>connect to the Pi’s IP address</strong> on port 8000 to see the enter-message command.</p><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1280px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="" name="image1.jpg" alt="Morse Code Transmitter Light with Raspberry Pi" src="https://cdn.mos.cms.futurecdn.net/SMLc4jJCgm5eUYcSB2ykkR.jpg" mos="" align="middle" fullscreen="1" width="1280" height="720" attribution="" endorsement="" class="expandable"><a href='https://cdn.mos.cms.futurecdn.net/SMLc4jJCgm5eUYcSB2ykkR.jpg' target='_blank' class='expand-button icon-expand-image icon' ></a></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Hardware)</span></figcaption></figure><p>12. <strong>Enter a message </strong>and <strong>click enter</strong>. The Pi will convert it to morse code, and flash the light with the corresponding morse.</p><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1280px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="" name="image5.jpg" alt="Morse Code Transmitter Light with Raspberry Pi" src="https://cdn.mos.cms.futurecdn.net/BLFWiADaENij2vHiwxKrZS.jpg" mos="" align="middle" fullscreen="1" width="1280" height="720" attribution="" endorsement="" class="expandable"><a href='https://cdn.mos.cms.futurecdn.net/BLFWiADaENij2vHiwxKrZS.jpg' target='_blank' class='expand-button icon-expand-image icon' ></a></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Hardware)</span></figcaption></figure><p>13. <strong>Set up your light </strong>facing a friend’s house, and get ready to build the receiving module.</p><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1280px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="" name="image3.jpg" alt="Morse Code Transmitter Light with Raspberry Pi" src="https://cdn.mos.cms.futurecdn.net/eykYqrcdRMXFMkiGjiTRCS.jpg" mos="" align="middle" fullscreen="1" width="1280" height="720" attribution="" endorsement="" class="expandable"><a href='https://cdn.mos.cms.futurecdn.net/eykYqrcdRMXFMkiGjiTRCS.jpg' target='_blank' class='expand-button icon-expand-image icon' ></a></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Hardware)</span></figcaption></figure><p>In a future tutorial, we’ll handle the more complicated task of receiving the messages, so your friends can actually understand what you’re communicating.</p><pre class="line-numbers language-python" language="python" ><code>--. --- --- -.. / .-.. ..- -.-. -.-</code></pre>
                                                            </article>
                            ]]>
                        </content:encoded>
                                                </item>
                                <item>
                                                            <title><![CDATA[ How to Build a Tweeting Weather Bot with Raspberry Pi ]]></title>
                                                                                                                                                                                                <link>https://www.tomshardware.com/how-to/build-twitter-weather-bot-raspberry-pi</link>
                                                                            <description>
                            <![CDATA[ Build an automated bot that captures images of the outdoors and tweets them, along with the weather on a regular basis. ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">7JkqUMEeS9HnQqCpYs9Kid</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/YXeQyExZtZQK27GKJwBHbL-1280-80.jpg" type="image/jpeg" length="0"></enclosure>
                                                                        <pubDate>Sun, 26 Dec 2021 14:00:45 +0000</pubDate>                                                                                                                                <updated>Wed, 05 Feb 2025 14:48:30 +0000</updated>
                                                                                                                                            <category><![CDATA[Raspberry Pi]]></category>
                                                                                                <author><![CDATA[ ryder+toms@ryderdamen.com (Ryder Damen) ]]></author>                    <dc:creator><![CDATA[ Ryder Damen ]]></dc:creator>                                                                                    <dc:source><![CDATA[ https://cdn.mos.cms.futurecdn.net/yHmRhXRwnn6Tza4pvE2MAY.jpg ]]></dc:source>
                                                                <dc:description><![CDATA[ &lt;p&gt;Ryder is a creative technologist and Raspberry Pi aficionado. While he spends most of his time on the software side of things, one of his favorite pastimes is taking old technology and giving it a new (often pointless) purpose. In his free time, he likes to create videos, longboard, and explore the vast Canadian wilderness.&lt;/p&gt; ]]></dc:description>
                                                                                                                                <cf:isSponsored>false</cf:isSponsored>
                <cf:hasAffiliateLinks>false</cf:hasAffiliateLinks>
                <cf:isPaid>false</cf:isPaid>
                                                                                                                                <media:content type="image/jpeg" url="https://cdn.mos.cms.futurecdn.net/YXeQyExZtZQK27GKJwBHbL-1280-80.jpg">
                                                            <media:credit><![CDATA[Tom&#039;s Hardware]]></media:credit>
                                                                                                                                                                                                                                    <media:description><![CDATA[Twitter Weather Bot with a Raspberry Pi]]></media:description>                                                            <media:text><![CDATA[Twitter Weather Bot with a Raspberry Pi]]></media:text>
                                <media:title type="plain"><![CDATA[Twitter Weather Bot with a Raspberry Pi]]></media:title>
                                                    </media:content>
                                                    <media:thumbnail url="https://cdn.mos.cms.futurecdn.net/YXeQyExZtZQK27GKJwBHbL-1280-80.jpg" />
                                                                                                                                                                    <content:encoded >
                            <![CDATA[
                            <article>
                                <p>When I first started getting into programming, one of my mentors built a project where he took an image every day, overlaid the current weather, and tweeted it. I remember at the time thinking there was no way I could ever build something that complicated. </p><p>Fast forward to now, it’s a relatively simple thing to put together - and in my opinion, a great starter project for someone getting involved with programming. So with all those in mind, let’s build a twitter bot that takes a photo every day and tweets it out, using a <a href="https://www.tomshardware.com/news/raspberry-pi"><u>Raspberry Pi</u></a>.</p><h2 id="what-you-x2019-ll-need-raspberry-pi-twitter-weather-bot">What You’ll Need: Raspberry Pi Twitter Weather Bot</h2><ul><li><a href="https://www.tomshardware.com/reviews/raspberry-pi-4"><u>Raspberry Pi 4</u></a> or Raspberry Pi 3 with power adapter</li><li><a href="https://www.amazon.com/Creative-Labs-Pebble-Black-Loudspeaker/dp/B0791H74NT/"><u>Desktop speakers or a megaphone with a 3.5mm input and 3.5mm cable</u></a></li><li><a href="https://www.amazon.com/WYZE-Indoor-Monitoring-Camera-MicroSD/dp/B08ZXQG4FX/"><u>Wyze Cam</u></a></li><li>8 GB (or larger) microSD card</li><li>A Twitter account</li><li>An OpenWeatherMap account</li></ul><h2 id="how-to-build-a-twitter-weather-bot-with-raspberry-pi">How to Build a Twitter Weather Bot with Raspberry Pi</h2><p>Before you get started, get your Raspberry Pi set up. If you haven’t done this before, see our article on how to <a href="https://www.tomshardware.com/reviews/raspberry-pi-set-up-how-to,6029.html"><u>set up a Raspberry Pi</u></a> for the first time or how to do a <a href="https://www.tomshardware.com/reviews/raspberry-pi-headless-setup-how-to,6028.html"><u>headless Raspberry Pi install</u></a> (without the keyboard and screen). For this project, we recommend a <a href="https://www.tomshardware.com/reviews/raspberry-pi-headless-setup-how-to,6028.html"><u>headless Raspberry Pi install</u></a>.</p><p>1. <strong>Install git. </strong>We’ll need it to download the code from GitHub.</p><pre class="line-numbers language-python" language="python" ><code>sudo apt-get updatesudo apt-get -y install git</code></pre><p>2. <strong>Clone the repository to your home directory.</strong> This will ensure we have all the code and audio files we need to run the project.</p><pre class="line-numbers language-python" language="python" ><code>cd ~/git clone https://github.com/rydercalmdown/weather_twitter_bot.git</code></pre><p>3. <strong>Run the “make install” command </strong>to install all project dependencies. This script will take care of installing lower level dependencies, as well as the Python libraries you need for the project to run. This can take up to 10-15 minutes on a Raspberry Pi Zero.</p><pre class="line-numbers language-python" language="python" ><code>cd ~/weather_twitter_bot/make install</code></pre><p>4. <strong>Get an API Key from </strong><a href="https://openweathermap.org/api"><u><strong>Open Weather Map</strong></u></a><strong>. </strong>You will need to sign up for an account and retrieve the key from there.</p><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1280px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="" name="image2.jpg" alt="Twitter Weather Bot with a Raspberry Pi" src="https://cdn.mos.cms.futurecdn.net/KPF4VrTvwJUpiYPEBLaSVL.jpg" mos="" align="middle" fullscreen="1" width="1280" height="720" attribution="" endorsement="" class="expandable"><a href='https://cdn.mos.cms.futurecdn.net/KPF4VrTvwJUpiYPEBLaSVL.jpg' target='_blank' class='expand-button icon-expand-image icon' ></a></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Hardware)</span></figcaption></figure><p>5. <strong>Create a twitter application</strong> by visiting the <a href="https://developer.twitter.com/"><u>Twitter Developer Portal</u></a> and clicking Create a Project and Create an Application.</p><p>6. <strong>Choose the development environment</strong> for your application, then hit next.</p><p>7. <strong>Name your application</strong> a unique name across the twitter-verse, like weatherbot-yournamehere, then click next.</p><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1280px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="" name="image8.jpg" alt="Twitter Weather Bot with a Raspberry Pi" src="https://cdn.mos.cms.futurecdn.net/BBZFF2FSsDAdJPBSPFHkBM.jpg" mos="" align="middle" fullscreen="1" width="1280" height="720" attribution="" endorsement="" class="expandable"><a href='https://cdn.mos.cms.futurecdn.net/BBZFF2FSsDAdJPBSPFHkBM.jpg' target='_blank' class='expand-button icon-expand-image icon' ></a></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Hardware)</span></figcaption></figure><p>8. <strong>Save the API_KEY and API_KEY_SECRET values</strong> on the next page, then close the dialog.</p><p>9. <strong>Navigate to your application settings</strong> and<strong> find the “App Permissions section”</strong>, then <strong>click edit</strong>. <strong>Modify the application permissions</strong> to “Read and write”, then click save.</p><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1280px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="" name="image5.jpg" alt="Twitter Weather Bot with a Raspberry Pi" src="https://cdn.mos.cms.futurecdn.net/kg6Mud4AisUnRpV6oJmhpL.jpg" mos="" align="middle" fullscreen="1" width="1280" height="720" attribution="" endorsement="" class="expandable"><a href='https://cdn.mos.cms.futurecdn.net/kg6Mud4AisUnRpV6oJmhpL.jpg' target='_blank' class='expand-button icon-expand-image icon' ></a></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Hardware)</span></figcaption></figure><p>10. At the top of the page,<strong> navigate to the “Keys and tokens” tab,</strong> then scroll down to “Access Token and Secret”). <strong>Click generate</strong>, and <strong>store the values for later.</strong></p><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1280px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="" name="image9.jpg" alt="Twitter Weather Bot with a Raspberry Pi" src="https://cdn.mos.cms.futurecdn.net/Kw8SjqWagMRPoYc8x77sJM.jpg" mos="" align="middle" fullscreen="1" width="1280" height="720" attribution="" endorsement="" class="expandable"><a href='https://cdn.mos.cms.futurecdn.net/Kw8SjqWagMRPoYc8x77sJM.jpg' target='_blank' class='expand-button icon-expand-image icon' ></a></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Hardware)</span></figcaption></figure><p>11. <strong>Flash the custom RTSP firmware to your Wyze camera</strong> <a href="https://support.wyze.com/hc/en-us/articles/360026245231-Wyze-Cam-RTSP"><u>using this tutorial</u></a>. Installing RTSP support allows us to connect to the camera and grab frames directly with Python. You will need a Wyze V2 or V3 camera and a microSD card.</p><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1280px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="" name="image4.jpg" alt="Twitter Weather Bot with a Raspberry Pi" src="https://cdn.mos.cms.futurecdn.net/kXYWEy3pX3DXinsfQA5FgL.jpg" mos="" align="middle" fullscreen="1" width="1280" height="720" attribution="" endorsement="" class="expandable"><a href='https://cdn.mos.cms.futurecdn.net/kXYWEy3pX3DXinsfQA5FgL.jpg' target='_blank' class='expand-button icon-expand-image icon' ></a></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Hardware)</span></figcaption></figure><p>12. <strong>Get the RTSP URL value</strong> from your Wyze application, and <strong>edit the RTSP_URI variable in the Makefile</strong> to point the Raspberry Pi to your camera. You can find the RTSP URL in the “Advanced Settings” section of your Wyze application on your phone.</p><p>13. <strong>Set the RTSP URL environment variable</strong> from your camera.</p><pre class="line-numbers language-python" language="python" ><code># If you’re using a Wyze cam, this can be retrieved from the Wyze applicationRTSP_URL=rtsp://username:password@10.0.0.1/live</code></pre><p>14. <strong>Export your weather API key.</strong></p><pre class="line-numbers language-python" language="python" ><code>Export WEATHER_API_KEY=your_openweathermap_api_key</code></pre><p>15. <strong>Export your twitter application credentials</strong>.</p><pre class="line-numbers language-python" language="python" ><code># From the first stage of the app creation processexport TWITTER_APP_API_KEY=your_keyexport TWITTER_APP_API_KEY_SECRET=your_secret# From the generate access token and secret stage of the app creation processexport TWITTER_ACCESS_TOKEN=your_tokenexport TWITTER_ACCESS_TOKEN_SECRET=your_secret</code></pre><p>Note, keep these values secret, they allow access to your twitter account. If you lose or leak them, you can regenerate them in the twitter developer console at any time.</p><p>16. <strong>Set up your camera to point outside</strong> for the best view.</p><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1280px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="" name="image1.jpg" alt="Twitter Weather Bot with a Raspberry Pi" src="https://cdn.mos.cms.futurecdn.net/3j3iygkYq3K8Niw9x5TdQL.jpg" mos="" align="middle" fullscreen="1" width="1280" height="720" attribution="" endorsement="" class="expandable"><a href='https://cdn.mos.cms.futurecdn.net/3j3iygkYq3K8Niw9x5TdQL.jpg' target='_blank' class='expand-button icon-expand-image icon' ></a></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Hardware)</span></figcaption></figure><p>17. <strong>Run the make run command.</strong></p><pre class="line-numbers language-python" language="python" ><code>make run</code></pre><figure role="gallery"><figure><img src="https://cdn.mos.cms.futurecdn.net/Dgzo655n7tLEnfUGrujF5M.jpg" alt="Twitter Weather Bot with a Raspberry Pi" /><figcaption><small role="credit">Tom's Hardware</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/AHSHemdJvdiRsMNyCkd7xL.jpg" alt="Twitter Weather Bot with a Raspberry Pi" /><figcaption><small role="credit">Tom's Hardware</small></figcaption></figure></figure><p>You now have a script that automatically takes a photo of the view, overlays the weather on top of it, and tweets the information out for the world to see. Use it at your leisure, or try automating it with <a href="https://www.tomshardware.com/how-to/run-script-at-boot-raspberry-pi"><u>crontab</u></a> - good luck!</p>
                                                            </article>
                            ]]>
                        </content:encoded>
                                                </item>
                                <item>
                                                            <title><![CDATA[ Creating an X Days Until Xmas Sign with Raspberry Pi ]]></title>
                                                                                                                                                                                                <link>https://www.tomshardware.com/how-to/raspberry-pi-x-days-countdown-sign</link>
                                                                            <description>
                            <![CDATA[ Show just how many days you have left before the holiday, on a 64x64 display. ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">3vkUGtAUx3DY4Ex5RWkd9M</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/jAD5Cphay6kPfwSjR2CzUL-1280-80.jpg" type="image/jpeg" length="0"></enclosure>
                                                                        <pubDate>Mon, 20 Dec 2021 17:47:05 +0000</pubDate>                                                                                                                                <updated>Thu, 30 Jan 2025 16:35:30 +0000</updated>
                                                                                                                                            <category><![CDATA[Raspberry Pi]]></category>
                                                                                                <author><![CDATA[ ryder+toms@ryderdamen.com (Ryder Damen) ]]></author>                    <dc:creator><![CDATA[ Ryder Damen ]]></dc:creator>                                                                                    <dc:source><![CDATA[ https://cdn.mos.cms.futurecdn.net/yHmRhXRwnn6Tza4pvE2MAY.jpg ]]></dc:source>
                                                                <dc:description><![CDATA[ &lt;p&gt;Ryder is a creative technologist and Raspberry Pi aficionado. While he spends most of his time on the software side of things, one of his favorite pastimes is taking old technology and giving it a new (often pointless) purpose. In his free time, he likes to create videos, longboard, and explore the vast Canadian wilderness.&lt;/p&gt; ]]></dc:description>
                                                                                                                                <cf:isSponsored>false</cf:isSponsored>
                <cf:hasAffiliateLinks>false</cf:hasAffiliateLinks>
                <cf:isPaid>false</cf:isPaid>
                                                                                                                                <media:content type="image/jpeg" url="https://cdn.mos.cms.futurecdn.net/jAD5Cphay6kPfwSjR2CzUL-1280-80.jpg">
                                                            <media:credit><![CDATA[Tom&#039;s Hardware]]></media:credit>
                                                                                                                                                                                                                                    <media:description><![CDATA[Raspberry Pi Countdown Sign]]></media:description>                                                            <media:text><![CDATA[Raspberry Pi Countdown Sign]]></media:text>
                                <media:title type="plain"><![CDATA[Raspberry Pi Countdown Sign]]></media:title>
                                                    </media:content>
                                                    <media:thumbnail url="https://cdn.mos.cms.futurecdn.net/jAD5Cphay6kPfwSjR2CzUL-1280-80.jpg" />
                                                                                                                                                                    <content:encoded >
                            <![CDATA[
                            <article>
                                <p>My city has a very popular Christmas market, with a giant sign advertising the number of days until Christmas. I wanted something similar for my apartment to improve my festive spirit, but more importantly let me know how long I have to get my gift shopping done.</p><p>Using a Raspberry Pi and an Adafruit 64x64 pixel matrix we can build a festive sign that displays the number of days left, as well as a number of festive Christmas GIFs to get you in the holiday spirit.</p><h2 id="what-you-x2019-ll-need-for-this-project-3">What You’ll Need For This Project</h2><ul><li><a href="https://www.tomshardware.com/reviews/raspberry-pi-4"><u>Raspberry Pi 4</u></a>, Raspberry Pi 3, or Raspberry Pi Zero with power adapter</li><li>8 GB (or larger) microSD card for Raspberry Pi</li><li><a href="https://www.adafruit.com/product/4732"><u>Adafruit 64x64 LED Matrix</u></a></li><li><a href="https://www.adafruit.com/product/3211"><u>Adafruit RGB Matrix Bonnet for Raspberry Pi</u></a></li><li>Soldering Iron & Solder</li><li>5V Power Supply with barrel connector</li><li>Small flat head screwdriver</li></ul><h2 id="how-to-build-a-x201c-x-days-until-xmas-x201d-sign-with-a-raspberry-pi">How to Build a “X Days Until Xmas” Sign with a Raspberry Pi</h2><p>Before you get started, get your Raspberry Pi set up. If you haven’t done this before, see our article on how to <a href="https://www.tomshardware.com/how-to/set-up-raspberry-pi"><u>set up a Raspberry Pi</u></a> for the first time or how to do a <a href="https://www.tomshardware.com/reviews/raspberry-pi-headless-setup-how-to,6028.html"><u>headless Raspberry Pi install</u></a> (without the keyboard and screen). For this project, we recommend a <a href="https://www.tomshardware.com/reviews/raspberry-pi-headless-setup-how-to,6028.html"><u>headless Raspberry Pi install</u></a>.</p><p>1. <strong>Install git. </strong>We’ll need it to download the code from GitHub.</p><pre class="line-numbers language-python" language="python" ><code>sudo apt-get updatesudo apt-get -y install git</code></pre><p>2. <strong>Clone the repository to your home directory.</strong> This will ensure we have all the code and audio files we need to run the project.</p><pre class="line-numbers language-python" language="python" ><code>cd ~/git clone https://github.com/rydercalmdown/days_until_xmas_sign.git</code></pre><p>3. <strong>Run the “make install” command </strong>to install all project dependencies. This script will take care of installing lower level dependencies, as well as the Python libraries you need for the project to run.</p><pre class="line-numbers language-python" language="python" ><code>cd ~/days_until_xmas_sign/make install</code></pre><p>4. <strong>Run the “make setup” command</strong> to download and run the Adafruit LED matrix setup script.</p><pre class="line-numbers language-python" language="python" ><code>make setup</code></pre><p>5. Follow the instructions in the setup script, <strong>selecting the Adafruit RGB Matrix Bonnet</strong>, and then <strong>selecting “CONVENIENCE” instead of “QUALITY” </strong>when prompted.</p><p>6. <strong>Select Reboot on the Pi</strong> when requested by the script.</p><pre class="line-numbers language-python" language="python" ><code>sudo reboot</code></pre><p>7. Connect the<strong> LED matrix to the included 5V power cable</strong>, careful to align them correctly.</p><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1280px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="" name="image1.jpg" alt="Raspberry Pi Countdown Sign" src="https://cdn.mos.cms.futurecdn.net/zb9d3Mt5XxriLi3mCgBQVK.jpg" mos="" align="middle" fullscreen="1" width="1280" height="720" attribution="" endorsement="" class="expandable"><a href='https://cdn.mos.cms.futurecdn.net/zb9d3Mt5XxriLi3mCgBQVK.jpg' target='_blank' class='expand-button icon-expand-image icon' ></a></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Hardware)</span></figcaption></figure><p>8. <strong>Flip over the Raspberry Pi LED Matrix Bonnet and apply a small bit of solder shorting the 8 and E pins </strong>on the back. This is necessary for the 64x64 matrix to function.</p><figure role="gallery"><figure><img src="https://cdn.mos.cms.futurecdn.net/qbqamCc3JzCE5mruHKEUdL.jpg" alt="Raspberry Pi Countdown Sign" /><figcaption><small role="credit">Tom's Hardware</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/eJtcZ9KUD7DCPxq5fX55HL.jpg" alt="Raspberry Pi Countdown Sign" /><figcaption><small role="credit">Tom's Hardware</small></figcaption></figure></figure><p>9. Using a small flat-head screwdriver, <strong>connect the other end of the power cable to the bonnet</strong>, careful to align ground and 5v in the correct places.</p><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1280px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="" name="image2.jpg" alt="Raspberry Pi Countdown Sign" src="https://cdn.mos.cms.futurecdn.net/fsKvfR7rR4JHcm8PrRBXcK.jpg" mos="" align="middle" fullscreen="1" width="1280" height="720" attribution="" endorsement="" class="expandable"><a href='https://cdn.mos.cms.futurecdn.net/fsKvfR7rR4JHcm8PrRBXcK.jpg' target='_blank' class='expand-button icon-expand-image icon' ></a></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Hardware)</span></figcaption></figure><p>10. <strong>Attach the data pins to the input side of the matrix</strong>; look for multiple arrows pointing in one direction on the board; the connection will be to the most “upstream” port, IE the source of the arrows, not the destination.</p><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1280px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="" name="image4.jpg" alt="Raspberry Pi Countdown Sign" src="https://cdn.mos.cms.futurecdn.net/8eaLjikD3XMhMzmdM6zVpK.jpg" mos="" align="middle" fullscreen="1" width="1280" height="720" attribution="" endorsement="" class="expandable"><a href='https://cdn.mos.cms.futurecdn.net/8eaLjikD3XMhMzmdM6zVpK.jpg' target='_blank' class='expand-button icon-expand-image icon' ></a></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Hardware)</span></figcaption></figure><p>11. <strong>Attach the other end of the data cable to the bonnet</strong>.</p><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1280px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="" name="image5.jpg" alt="Raspberry Pi Countdown Sign" src="https://cdn.mos.cms.futurecdn.net/VT8wRKdK9SQWPU6BE2BNxK.jpg" mos="" align="middle" fullscreen="1" width="1280" height="720" attribution="" endorsement="" class="expandable"><a href='https://cdn.mos.cms.futurecdn.net/VT8wRKdK9SQWPU6BE2BNxK.jpg' target='_blank' class='expand-button icon-expand-image icon' ></a></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Hardware)</span></figcaption></figure><p>12. <strong>Affix the bonnet on your Raspberry Pi GPIO pins</strong>, lining up and then pushing down on the GPIO pins until it&apos;s snug.</p><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1280px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="" name="image7.jpg" alt="Raspberry Pi Countdown Sign" src="https://cdn.mos.cms.futurecdn.net/d4tz8C6MU7aUnGUiEBkjML.jpg" mos="" align="middle" fullscreen="1" width="1280" height="720" attribution="" endorsement="" class="expandable"><a href='https://cdn.mos.cms.futurecdn.net/d4tz8C6MU7aUnGUiEBkjML.jpg' target='_blank' class='expand-button icon-expand-image icon' ></a></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Hardware)</span></figcaption></figure><p>13. Using a barrel connector, <strong>connect your 5V power supply to the bonnet</strong>.</p><p>14. <strong>Use the Make run command to start the application</strong>. If you’ve set everything up correctly, you should see logs with details about what’s being shown on the display, and the display should flash to life.</p><pre class="line-numbers language-python" language="python" ><code>cd ~/days_until_xmas_sign/make run</code></pre><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1280px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="" name="image8.jpg" alt="Raspberry Pi Countdown Sign" src="https://cdn.mos.cms.futurecdn.net/jAD5Cphay6kPfwSjR2CzUL.jpg" mos="" align="middle" fullscreen="1" width="1280" height="720" attribution="" endorsement="" class="expandable"><a href='https://cdn.mos.cms.futurecdn.net/jAD5Cphay6kPfwSjR2CzUL.jpg' target='_blank' class='expand-button icon-expand-image icon' ></a></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Hardware)</span></figcaption></figure><p>15. <strong>Download any gifs you may want into the src/images directory</strong>. I’ve left you a few starter christmas gifs, but feel free to add any of your own. As long as they end in .gif, the application will pick them up and display them. For best results, make sure they’re square.</p><p><br></p><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1280px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="" name="image3.jpg" alt="Raspberry Pi Countdown Sign" src="https://cdn.mos.cms.futurecdn.net/Ph5fvzFMtRJ4KEBbhX54iK.jpg" mos="" align="middle" fullscreen="1" width="1280" height="720" attribution="" endorsement="" class="expandable"><a href='https://cdn.mos.cms.futurecdn.net/Ph5fvzFMtRJ4KEBbhX54iK.jpg' target='_blank' class='expand-button icon-expand-image icon' ></a></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Hardware)</span></figcaption></figure><p>And that’s it - enjoy! The sign will display the number of days until xmas, with a gif break every 2 minutes. If you’re looking to customize this, you can do so by editing the src/display_controller.py variables. Make sure to get your shopping done early!</p>
                                                            </article>
                            ]]>
                        </content:encoded>
                                                </item>
                                <item>
                                                            <title><![CDATA[ How to Control DMX Lights with Raspberry Pi ]]></title>
                                                                                                                                                                                                <link>https://www.tomshardware.com/how-to/control-dmx-lights-raspberry-pi</link>
                                                                            <description>
                            <![CDATA[ DMX lighting is the standard used in entertainment settings such as in the theatre or by DJs. Using an adapter and the right code, you can control DMX from your Pi. ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">76K8JYCbsvWNAKAAhzjBJb</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/XaVACbwyQhCkzfvFzbKrBn-1280-80.jpg" type="image/jpeg" length="0"></enclosure>
                                                                        <pubDate>Sat, 11 Dec 2021 13:41:12 +0000</pubDate>                                                                                                                                <updated>Thu, 30 Jan 2025 13:42:17 +0000</updated>
                                                                                                                                            <category><![CDATA[Raspberry Pi]]></category>
                                                                                                <author><![CDATA[ ryder+toms@ryderdamen.com (Ryder Damen) ]]></author>                    <dc:creator><![CDATA[ Ryder Damen ]]></dc:creator>                                                                                    <dc:source><![CDATA[ https://cdn.mos.cms.futurecdn.net/yHmRhXRwnn6Tza4pvE2MAY.jpg ]]></dc:source>
                                                                <dc:description><![CDATA[ &lt;p&gt;Ryder is a creative technologist and Raspberry Pi aficionado. While he spends most of his time on the software side of things, one of his favorite pastimes is taking old technology and giving it a new (often pointless) purpose. In his free time, he likes to create videos, longboard, and explore the vast Canadian wilderness.&lt;/p&gt; ]]></dc:description>
                                                                                                                                <cf:isSponsored>false</cf:isSponsored>
                <cf:hasAffiliateLinks>false</cf:hasAffiliateLinks>
                <cf:isPaid>false</cf:isPaid>
                                                                                                                                <media:content type="image/jpeg" url="https://cdn.mos.cms.futurecdn.net/XaVACbwyQhCkzfvFzbKrBn-1280-80.jpg">
                                                            <media:credit><![CDATA[Tom&#039;s Hardware]]></media:credit>
                                                                                                                                                                                                                                    <media:description><![CDATA[Control DMX Lights with Raspberry Pi]]></media:description>                                                            <media:text><![CDATA[Control DMX Lights with Raspberry Pi]]></media:text>
                                <media:title type="plain"><![CDATA[Control DMX Lights with Raspberry Pi]]></media:title>
                                                    </media:content>
                                                    <media:thumbnail url="https://cdn.mos.cms.futurecdn.net/XaVACbwyQhCkzfvFzbKrBn-1280-80.jpg" />
                                                                                                                                                                    <content:encoded >
                            <![CDATA[
                            <article>
                                <p>I have an upcoming project where I’ll be controlling the exterior lights on a prominent building in my city, and in order to do that, I need to master controlling DMX fixtures with a Raspberry Pi. I have an old DJ style light sitting at home that uses the DMX protocol that is perfect for testing. With a Raspberry Pi and a DMX adapter, we can use a bit of python to program the fixture. Getting it to work was an arduous process, so I hope I can make it simpler for the next person. If you’re looking to control DMX lights with a Raspberry Pi, here’s the easy way to do it. </p><h2 id="what-you-x2019-ll-need-for-this-project-4">What You’ll Need For This Project</h2><ul><li><a href="https://www.tomshardware.com/reviews/raspberry-pi-4"><u>Raspberry Pi 4</u></a>, Raspberry Pi 3, or Raspberry Pi Zero with power adapter and SD card</li><li><a href="https://www.enttec.com/product/lighting-communication-protocols/dmx512/open-dmx-usb/"><u>Enttec Open DMX USB Adapter</u></a></li><li>A DMX-compatible lighting fixture</li><li>A 5-pin DMX cable (with 5 to 3 pin adapter if necessary for your fixture)</li></ul><h2 id="how-to-control-dmx-lights-with-a-raspberry-pi-the-easy-way-xa0">How to control DMX lights with a Raspberry Pi (the easy way) </h2><p>For this project, we’ll be using the <a href="https://github.com/OpenLightingProject/ola"><u>Open Lighting Architecture (OLA)</u></a> to send DMX frames to the lights. Before you get started, get your Raspberry Pi set up. If you haven’t done this before, see our article on how to <a href="https://www.tomshardware.com/how-to/set-up-raspberry-pi"><u>set up a Raspberry Pi</u></a> for the first time or how to do a <a href="https://www.tomshardware.com/reviews/raspberry-pi-headless-setup-how-to,6028.html"><u>headless Raspberry Pi install</u></a> (without the keyboard and screen). For this project, we recommend a <a href="https://www.tomshardware.com/reviews/raspberry-pi-headless-setup-how-to,6028.html"><u>headless Raspberry Pi install</u></a>.</p><p>1. <strong>Install base requirements</strong> necessary for the project, including OLA, python, and python-bindings for the project.</p><pre class="line-numbers language-python" language="python" ><code>sudo apt-get updatesudo apt-get install -y \   ola \   git \   ola-python \   python3-pip</code></pre><p>2. <strong>Add the pi user to the olad group.</strong></p><pre class="line-numbers language-python" language="python" ><code>sudo adduser pi olad</code></pre><p>3. Descend into the OLA configuration directory and <strong>back up a few plugin config files. </strong>We won’t use the backups, but it’s helpful in case you need to reference something later on.</p><pre class="line-numbers language-python" language="python" ><code>cd /etc/ola/sudo cp ola-ftdidmx.conf ola-ftdidmx.conf.baksudo cp ola-usbserial.conf ola-usbserial.conf.baksudo cp ola-opendmx.conf ola-opendmx.conf.bak</code></pre><p>4. <strong>Edit the ola-ftdidmx.conf file to set `enabled=false` to` enabled=true`</strong>. You can use a text editor, or the command below.</p><pre class="line-numbers language-python" language="python" ><code>sudo tee ./ola-ftdidmx.conf > /dev/null <<EOLenabled = truefrequency = 30EOL</code></pre><p>5. <strong>Edit the ola-usbserial.conf </strong>and <strong>ola-opendmx.conf files to set `enabled = false`</strong>. You can use a text editor, or the commands below.</p><pre class="line-numbers language-python" language="python" ><code>sudo tee ./ola-usbserial.conf > /dev/null <<EOFdevice_dir = /devdevice_prefix = ttyUSBdevice_prefix = cu.usbserial-device_prefix = ttyUenabled = falsepro_fps_limit = 190tri_use_raw_rdm = falseultra_fps_limit = 40EOFsudo tee ./ola-opendmx.conf > /dev/null <<EOFdevice = /dev/dmx0enabled = falseEOF</code></pre><p>6. <strong>Reload the plugins</strong> by restarting the OLA daemon.</p><pre class="line-numbers language-python" language="python" ><code>sudo killall -s SIGHUP olad</code></pre><p>7. <strong>Plug in your Enttec Open DMX USB adapter to your Raspberry Pi</strong>, any USB port will do.</p><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1280px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="" name="image6.jpg" alt="Control DMX Lights with Raspberry Pi" src="https://cdn.mos.cms.futurecdn.net/LR46rKg5TBArVosMn3PLLn.jpg" mos="" align="middle" fullscreen="1" width="1280" height="720" attribution="" endorsement="" class="expandable"><a href='https://cdn.mos.cms.futurecdn.net/LR46rKg5TBArVosMn3PLLn.jpg' target='_blank' class='expand-button icon-expand-image icon' ></a></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Hardware)</span></figcaption></figure><p>8. Using a DMX cable <strong>connect your Open DMX adapter to your fixture</strong>; make sure it is powered on and in DMX mode.</p><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1280px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="" name="image7.jpg" alt="Control DMX Lights with Raspberry Pi" src="https://cdn.mos.cms.futurecdn.net/YsoYNjy7aAv7UNe3pgeuVn.jpg" mos="" align="middle" fullscreen="1" width="1280" height="720" attribution="" endorsement="" class="expandable"><a href='https://cdn.mos.cms.futurecdn.net/YsoYNjy7aAv7UNe3pgeuVn.jpg' target='_blank' class='expand-button icon-expand-image icon' ></a></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Hardware)</span></figcaption></figure><p>9. <strong>Run the following command to discover your device</strong>, note the number next to device ID.</p><pre class="line-numbers language-python" language="python" ><code>ola_dev_info | grep FT232R</code></pre><p>Note: if your device is not discoverable, navigate to the web interface in step 11, and click “Reload plugins” - then try again.</p><p>10. <strong>Patch your device into a DMX universe</strong> (we’ll use universe 0) with the following command:</p><pre class="line-numbers language-python" language="python" ><code># Adjust device ID (-d 8), and port (-p 1) to match your device from the previous commandola_patch -d 8 -p 1 -u 0</code></pre><p>11. <strong>Visit the IP address of your Raspberry Pi </strong>in your web browser<strong>, followed by the port 9090</strong> to confirm the universe has been created.</p><pre class="line-numbers language-python" language="python" ><code>open http://10.0.0.1:9090</code></pre><p>12. In the web interface, <strong>select your universe, navigate to the DMX Console tab, </strong>and <strong>increase the sliders for each channel </strong>until you see your fixture start lighting up. For my fixture, channel 1 controls red, 2 controls blue, and 3 controls green. By adjusting individual channels we can control the color of the fixture.</p><figure role="gallery"><figure><img src="https://cdn.mos.cms.futurecdn.net/vRwqxGemxEf9ARfuXRFW3n.png" alt="Control DMX Lights with Raspberry Pi" /><figcaption><small role="credit">Tom's Hardware</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/UCt8wQuBp3ZijGwqeAEBbm.jpg" alt="Control DMX Lights with Raspberry Pi" /><figcaption><small role="credit">Tom's Hardware</small></figcaption></figure></figure><p>13. Using git, <strong>clone the example python repository</strong> to your home directory.</p><pre class="line-numbers language-python" language="python" ><code>cd ~/git clone https://github.com/rydercalmdown/dmx_lights.git</code></pre><p>14. Descend into the directory and <strong>install the repository requirements.</strong></p><pre class="line-numbers language-python" language="python" ><code>cd dmx_lightsmake install</code></pre><p>15. <strong>Start the flask server</strong> with the following command. You can then visit the IP address of the Pi on port 8000 to see the server.</p><pre class="line-numbers language-python" language="python" ><code>make run</code></pre><p>16. <strong>Change the colour of the lights </strong>by visiting the wash endpoints with curl or in your browser.</p><pre class="line-numbers language-python" language="python" ><code>curl http://IP_ADDRESS_OF_YOUR_PI:8000/wash/red/curl http://IP_ADDRESS_OF_YOUR_PI:8000/wash/random/curl http://IP_ADDRESS_OF_YOUR_PI:8000/wash/blue/curl http://IP_ADDRESS_OF_YOUR_PI:8000/blackout/</code></pre><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1280px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="" name="image3.jpg" alt="Control DMX Lights with Raspberry Pi" src="https://cdn.mos.cms.futurecdn.net/pk7c8btimcpWVdaYoajutm.jpg" mos="" align="middle" fullscreen="1" width="1280" height="720" attribution="" endorsement="" class="expandable"><a href='https://cdn.mos.cms.futurecdn.net/pk7c8btimcpWVdaYoajutm.jpg' target='_blank' class='expand-button icon-expand-image icon' ></a></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Hardware)</span></figcaption></figure><p>Hopefully, this gives you an example of how to get started with python and a Raspberry Pi to control DMX fixtures. Getting this to work properly for me was a weekend-long affair, but by following these instructions you should be able to get it done in under an hour. Good luck!</p><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1280px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="" name="image2.jpg" alt="Control DMX Lights with Raspberry Pi" src="https://cdn.mos.cms.futurecdn.net/yvq4hJKt3TkLZqvt3wUNkm.jpg" mos="" align="middle" fullscreen="1" width="1280" height="720" attribution="" endorsement="" class="expandable"><a href='https://cdn.mos.cms.futurecdn.net/yvq4hJKt3TkLZqvt3wUNkm.jpg' target='_blank' class='expand-button icon-expand-image icon' ></a></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Hardware)</span></figcaption></figure>
                                                            </article>
                            ]]>
                        </content:encoded>
                                                </item>
                                <item>
                                                            <title><![CDATA[ How To Build a Piano LED Light  Strip with Raspberry Pi ]]></title>
                                                                                                                                                                                                <link>https://www.tomshardware.com/how-to/build-piano-led-trip-raspberry-pi</link>
                                                                            <description>
                            <![CDATA[ Using a Raspberry Pi, you can make a light strip illuminate whenever you hit the appropriate keys. ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">6zpYZ8HfbSWBLpSSmGo2ak</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/u2hDpwUaoRfjtkMvLj9scM-1280-80.jpg" type="image/jpeg" length="0"></enclosure>
                                                                        <pubDate>Sat, 04 Dec 2021 15:30:15 +0000</pubDate>                                                                                                                                <updated>Wed, 05 Feb 2025 14:48:29 +0000</updated>
                                                                                                                                            <category><![CDATA[Raspberry Pi]]></category>
                                                                                                <author><![CDATA[ ryder+toms@ryderdamen.com (Ryder Damen) ]]></author>                    <dc:creator><![CDATA[ Ryder Damen ]]></dc:creator>                                                                                    <dc:source><![CDATA[ https://cdn.mos.cms.futurecdn.net/yHmRhXRwnn6Tza4pvE2MAY.jpg ]]></dc:source>
                                                                <dc:description><![CDATA[ &lt;p&gt;Ryder is a creative technologist and Raspberry Pi aficionado. While he spends most of his time on the software side of things, one of his favorite pastimes is taking old technology and giving it a new (often pointless) purpose. In his free time, he likes to create videos, longboard, and explore the vast Canadian wilderness.&lt;/p&gt; ]]></dc:description>
                                                                                                                                <cf:isSponsored>false</cf:isSponsored>
                <cf:hasAffiliateLinks>false</cf:hasAffiliateLinks>
                <cf:isPaid>false</cf:isPaid>
                                                                                                                                <media:content type="image/jpeg" url="https://cdn.mos.cms.futurecdn.net/u2hDpwUaoRfjtkMvLj9scM-1280-80.jpg">
                                                            <media:credit><![CDATA[Tom&#039;s Hardware]]></media:credit>
                                                                                                                                                                                                                                    <media:description><![CDATA[Raspberry Pi Piano LEDs]]></media:description>                                                            <media:text><![CDATA[Raspberry Pi Piano LEDs]]></media:text>
                                <media:title type="plain"><![CDATA[Raspberry Pi Piano LEDs]]></media:title>
                                                    </media:content>
                                                    <media:thumbnail url="https://cdn.mos.cms.futurecdn.net/u2hDpwUaoRfjtkMvLj9scM-1280-80.jpg" />
                                                                                                                                                                    <content:encoded >
                            <![CDATA[
                            <article>
                                <p>I often see piano tutorial videos on YouTube where lights appear to illuminate the players’ hands right as they play the keys. Using the power of a MIDI, a Raspberry Pi, and some programmable LEDs, I wanted to see if I could turn my piano into something similar. If you dabble in technology as much as you do music - here’s how to build a LED strip for your piano that lights up as you play it. </p><h2 id="what-you-x2019-ll-need-for-this-project-5">What You’ll Need For This Project</h2><ul><li><a href="https://www.tomshardware.com/reviews/raspberry-pi-4"><u>Raspberry Pi 4</u></a> or Raspberry Pi 3, or Raspberry Pi Zero with power adapter and SD card</li><li>Digital Piano with MIDI USB output and corresponding USB cable</li><li>Programmable LED strip (1 meter or greater)</li><li>Jumper cables</li></ul><iframe src="https://content.jwplatform.com/players/DS2deUui.html" id="DS2deUui" title="Piano Keys Preview" width="1920" height="1080" frameborder="0" scrolling="auto" allowfullscreen></iframe><h2 id="how-to-turn-a-raspberry-pi-into-a-piano-led-light-up-strip">How to Turn a Raspberry Pi into a Piano LED Light Up Strip</h2><p>Before you get started, get your Raspberry Pi set up. If you haven’t done this before, see our article on how to <a href="https://www.tomshardware.com/how-to/set-up-raspberry-pi"><u>set up a Raspberry Pi</u></a> for the first time or how to do a <a href="https://www.tomshardware.com/reviews/raspberry-pi-headless-setup-how-to,6028.html"><u>headless Raspberry Pi install</u></a> (without the keyboard and screen). For this project, we recommend a <a href="https://www.tomshardware.com/reviews/raspberry-pi-headless-setup-how-to,6028.html"><u>headless Raspberry Pi install</u></a>.</p><p>1. <strong>Install git. </strong>We’ll need it to download the code from GitHub.</p><pre class="line-numbers language-python" language="python" ><code>sudo apt-get updatesudo apt-get -y install git</code></pre><p>2. <strong>Clone the repository to your home directory.</strong> This will ensure we have all the code and audio files we need to run the project.</p><pre class="line-numbers language-python" language="python" ><code>cd ~/git clone https://github.com/rydercalmdown/piano_key_illuminator.git</code></pre><p>3. <strong>Run the “make install” command </strong>to install all project dependencies. This script will take care of installing lower level dependencies, as well as the Python libraries you need for the project to run. This should take about 10-15 minutes on a Raspberry Pi 4.</p><pre class="line-numbers language-python" language="python" ><code>cd ~/piano_key_illuminator/make install</code></pre><p>4. <strong>Unbox your LED strip and affix it to the piano</strong> with the sticky tape on the back. If it’s not long enough to cover the entire length of the keys, place it in the middle of the piano.</p><figure role="gallery"><figure><img src="https://cdn.mos.cms.futurecdn.net/R4tuLTZaynQoPyzqTJsAtL.jpg" alt="Raspberry Pi Piano LEDs" /><figcaption><small role="credit">Tom's Hardware</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/jHPGeSoDifn6KAbWRAWZSM.jpg" alt="Raspberry Pi Piano LEDs" /><figcaption><small role="credit">Tom's Hardware</small></figcaption></figure></figure><p>5. <strong>Attach the 5V and ground pins</strong> of your LED strip to your Raspberry Pi board pins 4 and 6 respectively.</p><p>6. <strong>Attach the data-in pin</strong> of your LED strip to your Raspberry Pi board pin 12.</p><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1280px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="" name="image2.jpg" alt="Raspberry Pi Piano LEDs" src="https://cdn.mos.cms.futurecdn.net/FHeuo8ZRASRC5vcnVVzB5M.jpg" mos="" align="middle" fullscreen="1" width="1280" height="720" attribution="" endorsement="" class="expandable"><a href='https://cdn.mos.cms.futurecdn.net/FHeuo8ZRASRC5vcnVVzB5M.jpg' target='_blank' class='expand-button icon-expand-image icon' ></a></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Hardware)</span></figcaption></figure><p>7. Using a USB cable, <strong>attach the MIDI out of your piano to your Raspberry Pi </strong>(any USB port).</p><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1280px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="" name="image4.jpg" alt="Raspberry Pi Piano LEDs" src="https://cdn.mos.cms.futurecdn.net/NWCn5pzNDuMfkWhufoD5MM.jpg" mos="" align="middle" fullscreen="1" width="1280" height="720" attribution="" endorsement="" class="expandable"><a href='https://cdn.mos.cms.futurecdn.net/NWCn5pzNDuMfkWhufoD5MM.jpg' target='_blank' class='expand-button icon-expand-image icon' ></a></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Hardware)</span></figcaption></figure><p>8. <strong>Turn the piano on and confirm it is listed</strong> with the following command. You should see the name of your instrument.</p><pre class="line-numbers language-python" language="python" ><code>amidi -l</code></pre><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:606px;"><p class="vanilla-image-block" style="padding-top:20.30%;"><img id="" name="image6.png" alt="Raspberry Pi Piano LEDs" src="https://cdn.mos.cms.futurecdn.net/rUmtFjdCz3TSkwgK5HPQXM.png" mos="" align="middle" fullscreen="1" width="606" height="123" attribution="" endorsement="" class="expandable"><a href='https://cdn.mos.cms.futurecdn.net/rUmtFjdCz3TSkwgK5HPQXM.png' target='_blank' class='expand-button icon-expand-image icon' ></a></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Hardware)</span></figcaption></figure><p>9. <strong>Set the self.lc.led_count variable</strong> in the src/app.py file to the number of LEDs on your strip (default 60).</p><p><br></p><pre class="line-numbers language-python" language="python" ><code>nano src/app.py# self.lc.led_count = 60</code></pre><p>10. Use the following command to <strong>start the application</strong> on the Raspberry Pi. If successful, the LEDs will flash a few times before the application starts. When a key is depressed, the corresponding LED will illuminate, and the console will show the ID of that key.</p><pre class="line-numbers language-python" language="python" ><code>make run</code></pre><pre class="line-numbers language-python" language="python" ><code>INFO:root:41 - note_onINFO:root:41 - note_off</code></pre><p>11. <strong>Press the lowest key</strong> on your piano covered by the LED strip, <strong>then the highest</strong>. <strong>Note the number/id</strong> of these keys in the console output and <strong>set the following variables in app.py</strong>:</p><p><br></p><pre class="line-numbers language-python" language="python" ><code>INFO:root:30 - note_onINFO:root:30 - note_offINFO:root:101 - note_onINFO:root:101 - note_off</code></pre><pre class="line-numbers language-python" language="python" ><code>self.lc.highest_key = 101self.lc.lowest_key = 30</code></pre><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1280px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="" name="image3.jpg" alt="Raspberry Pi Piano LEDs" src="https://cdn.mos.cms.futurecdn.net/kjfGurkZKSHVZevNESi5FM.jpg" mos="" align="middle" fullscreen="" width="1280" height="720" attribution="" endorsement="" class=""></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Hardware)</span></figcaption></figure><p>12. <strong>Run the program</strong> as before. With the adjusted settings, it will now approximate which LED to illuminate based on which key is pressed. This is done due to different LED strips having different spacing, or not having enough to cover the entire board.</p><pre class="line-numbers language-python" language="python" ><code>make run</code></pre>
                                                            </article>
                            ]]>
                        </content:encoded>
                                                </item>
                                <item>
                                                            <title><![CDATA[ How to Build an E-Paper To-Do List with Raspberry Pi ]]></title>
                                                                                                                                                                                                <link>https://www.tomshardware.com/how-to/raspberry-pi-e-paper-reminder</link>
                                                                            <description>
                            <![CDATA[ Use your Raspberry Pi to set up a reminder screen with all of your upcoming tasks on it. ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">NBdAW2CaxxoZ8Ejsrn44xX</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/cEDjjkV8xixzAMCsuNU2PC-1280-80.jpg" type="image/jpeg" length="0"></enclosure>
                                                                        <pubDate>Sun, 14 Nov 2021 14:00:07 +0000</pubDate>                                                                                                                                <updated>Wed, 05 Feb 2025 14:49:34 +0000</updated>
                                                                                                                                            <category><![CDATA[Raspberry Pi]]></category>
                                                                                                <author><![CDATA[ ryder+toms@ryderdamen.com (Ryder Damen) ]]></author>                    <dc:creator><![CDATA[ Ryder Damen ]]></dc:creator>                                                                                    <dc:source><![CDATA[ https://cdn.mos.cms.futurecdn.net/yHmRhXRwnn6Tza4pvE2MAY.jpg ]]></dc:source>
                                                                <dc:description><![CDATA[ &lt;p&gt;Ryder is a creative technologist and Raspberry Pi aficionado. While he spends most of his time on the software side of things, one of his favorite pastimes is taking old technology and giving it a new (often pointless) purpose. In his free time, he likes to create videos, longboard, and explore the vast Canadian wilderness.&lt;/p&gt; ]]></dc:description>
                                                                                                                                <cf:isSponsored>false</cf:isSponsored>
                <cf:hasAffiliateLinks>false</cf:hasAffiliateLinks>
                <cf:isPaid>false</cf:isPaid>
                                                                                                                                <media:content type="image/jpeg" url="https://cdn.mos.cms.futurecdn.net/cEDjjkV8xixzAMCsuNU2PC-1280-80.jpg">
                                                            <media:credit><![CDATA[Tom&#039;s Hardware]]></media:credit>
                                                                                                                                                                                                                                    <media:description><![CDATA[Raspberry Pi E-Paper Reminder]]></media:description>                                                            <media:text><![CDATA[Raspberry Pi E-Paper Reminder]]></media:text>
                                <media:title type="plain"><![CDATA[Raspberry Pi E-Paper Reminder]]></media:title>
                                                    </media:content>
                                                    <media:thumbnail url="https://cdn.mos.cms.futurecdn.net/cEDjjkV8xixzAMCsuNU2PC-1280-80.jpg" />
                                                                                                                                                                    <content:encoded >
                            <![CDATA[
                            <article>
                                <p>I’ve often struggled with procrastination, and to-do applications have been lifesaving. I sometimes find myself needing a reminder to just focus on getting the most important task done before working on anything else. </p><p>With that in mind, I created a simple photo frame to sit on my desk and remind me of my most important task of the day using e-paper and a Raspberry Pi. I wanted to use e-Paper specifically since it’s low-power and not as distracting as a standard display would be. If you’re the kind of person who likes a simple reminder of your most important tasks, here’s how to build it for yourself.</p><h2 id="what-you-x2019-ll-need-for-this-project-6">What You’ll Need For This Project</h2><ul><li><a href="https://www.tomshardware.com/reviews/raspberry-pi-4"><u>Raspberry Pi 4</u></a>, Raspberry Pi 3, or Raspberry Pi Zero with power adapter</li><li>8 GB (or larger) microSD card for Raspberry Pi</li><li><a href="https://www.waveshare.com/product/7.5inch-e-paper-hat.htm"><u>7.5” Black & White Waveshare E-Paper Display & Hat</u></a></li><li>5x7 Photo Frame</li><li>A ToDoist account with Tasks in it</li><li>Black construction paper</li></ul><h2 id="how-to-build-a-to-do-reminder-frame-with-e-paper-and-a-raspberry-pi">How to Build a To Do Reminder Frame with E-Paper and a Raspberry Pi</h2><p>Before you get started, get your Raspberry Pi set up. If you haven’t done this before, see our article on how to <a href="https://www.tomshardware.com/how-to/set-up-raspberry-pi"><u>set up a Raspberry Pi</u></a> for the first time or how to do a <a href="https://www.tomshardware.com/reviews/raspberry-pi-headless-setup-how-to,6028.html"><u>headless Raspberry Pi install</u></a> (without the keyboard and screen). For this project, we recommend a <a href="https://www.tomshardware.com/reviews/raspberry-pi-headless-setup-how-to,6028.html"><u>headless Raspberry Pi install</u></a>.</p><p>1. <strong>Install git. </strong>We’ll need it to download the code from GitHub.</p><pre class="line-numbers language-python" language="python" ><code>sudo apt-get updatesudo apt-get -y install git</code></pre><p>2. <strong>Clone the repository to your home directory.</strong> This will ensure we have all the code and audio files we need to run the project.</p><pre class="line-numbers language-python" language="python" ><code>cd ~/git clone https://github.com/rydercalmdown/todo_reminder_frame.git</code></pre><p>3. <strong>Run the “make install” command </strong>to install all project dependencies. This script will take care of installing lower level dependencies, as well as the Python libraries you need for the project to run.</p><pre class="line-numbers language-python" language="python" ><code>cd ~/todo_reminder_frame/make install</code></pre><p>4. <strong>Locate the VCC and Ground pins</strong> on the e-paper hat, <strong>connect them to Raspberry Pi BOARD pins 4 and 6</strong> respectively.</p><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1280px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="" name="image6.jpg" alt="Raspberry Pi E-Paper Reminder" src="https://cdn.mos.cms.futurecdn.net/huPNHW8EykkDq2xkTxtxzB.jpg" mos="" align="middle" fullscreen="1" width="1280" height="720" attribution="" endorsement="" class="expandable"><a href='https://cdn.mos.cms.futurecdn.net/huPNHW8EykkDq2xkTxtxzB.jpg' target='_blank' class='expand-button icon-expand-image icon' ></a></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Hardware)</span></figcaption></figure><p>5. <strong>Locate the DIN and CLK pins</strong> on the e-paper hat and <strong>connect them to Raspberry Pi BOARD pins 19 and 23</strong> respectively.</p><p>6. <strong>Locate the CS and DC pins</strong> on the e-paper hat and <strong>connect them to Raspberry Pi BOARD pins 24 and 22</strong> respectively.</p><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1280px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="" name="image3.jpg" alt="Raspberry Pi E-Paper Reminder" src="https://cdn.mos.cms.futurecdn.net/JkTih2wdAR3nt2j52aH2TB.jpg" mos="" align="middle" fullscreen="1" width="1280" height="720" attribution="" endorsement="" class="expandable"><a href='https://cdn.mos.cms.futurecdn.net/JkTih2wdAR3nt2j52aH2TB.jpg' target='_blank' class='expand-button icon-expand-image icon' ></a></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Hardware)</span></figcaption></figure><p>7. <strong>Locate the RST and BUSY pins</strong> on the e-Paper hat, <strong>connect them to Raspberry Pi BOARD pins 11 and 18</strong> respectively.</p><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1280px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="" name="image5.jpg" alt="Raspberry Pi E-Paper Reminder" src="https://cdn.mos.cms.futurecdn.net/8KiRABTko9bAvKKuWwJrmB.jpg" mos="" align="middle" fullscreen="1" width="1280" height="720" attribution="" endorsement="" class="expandable"><a href='https://cdn.mos.cms.futurecdn.net/8KiRABTko9bAvKKuWwJrmB.jpg' target='_blank' class='expand-button icon-expand-image icon' ></a></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Hardware)</span></figcaption></figure><p>8. Using the included ribbon cable, <strong>connect your e-paper display hat to your e-paper display</strong>, if not already connected.</p><p>9. <strong>Enable the SPI interface</strong> by opening raspi-config and following through the menus.</p><pre class="line-numbers language-python" language="python" ><code>sudo raspi-config> 3 - Interface Options> p4 - SPI> Enable> Finish</code></pre><p>10. <strong>Restart</strong> your Raspberry Pi.</p><pre class="line-numbers language-python" language="python" ><code>sudo reboot</code></pre><p>11. <strong>Create a </strong><a href="https://todoist.com/"><u><strong>ToDoist account</strong></u></a> and <strong>add to-dos</strong>, if you haven’t already.</p><p>12. <strong>Visit your </strong><a href="https://todoist.com/app/settings/integrations"><u><strong>ToDoist integration settings</strong></u></a> and <strong>copy your API token </strong>at the bottom.</p><p>13. <strong>Export your API token </strong>to your environment.</p><pre class="line-numbers language-python" language="python" ><code>nano ~/.bash_profile# Add the following line near the end of the fileexport TODOIST_PERSONAL_TOKEN=your_copied_token# Ctrl X, then Y, then enter to save and exit.</code></pre><p>14. Re-source your environment and <strong>run a test</strong>. You should see some logs appear indicating the display is retrieving tasks.</p><pre class="line-numbers language-python" language="python" ><code>source ~/.bash_profilecd ~/todo_reminder_framemake run</code><code>INFO:root:Starting displayINFO:root:Starting 7.5 inch E-Paper ModuleINFO:root:Running displayINFO:root:Checking for updatesINFO:root:Getting latest taskINFO:root:Latest task has changedINFO:root:Updating display with latest taskINFO:root:Getting image bufferINFO:root:Writing image to paper</code></pre><p>15. <strong>Check that your display is updating</strong>. It should flash and update with your most urgent task. If nothing is happening, and the logs look normal, you may have a pin out of place. For further troubleshooting, <a href="https://www.waveshare.com/wiki/7.5inch_e-Paper_HAT"><u>visit the manufacturing guide</u></a>.</p><p>16. <strong>Remove the back from your 5x7 photo frame</strong> and tuck in the e-paper display.</p><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1280px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="" name="image2.jpg" alt="Raspberry Pi E-Paper Reminder" src="https://cdn.mos.cms.futurecdn.net/U454g4Hg8gba3XgFNmZPJB.jpg" mos="" align="middle" fullscreen="1" width="1280" height="720" attribution="" endorsement="" class="expandable"><a href='https://cdn.mos.cms.futurecdn.net/U454g4Hg8gba3XgFNmZPJB.jpg' target='_blank' class='expand-button icon-expand-image icon' ></a></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Hardware)</span></figcaption></figure><p>17. <strong>Tuck in the e-paper display</strong> with a piece of black construction paper over the top to cover up the edges.</p><figure role="gallery"><figure><img src="https://cdn.mos.cms.futurecdn.net/rxx9cYH6gQwQ9Qz2xYWiBC.jpg" alt="Raspberry Pi E-Paper Reminder" /><figcaption><small role="credit">Tom's Hardware</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/Frkv6GaRtBTAxfD4HpqdvC.jpg" alt="Raspberry Pi E-Paper Reminder" /><figcaption><small role="credit">Tom's Hardware</small></figcaption></figure></figure><p>18. <strong>Close the back of the frame</strong>, allowing the ribbon cable to carefully wrap around.</p><figure role="gallery"><figure><img src="https://cdn.mos.cms.futurecdn.net/jKQ6W3wngZyGCcbbrTAG5B.jpg" alt="Raspberry Pi E-Paper Reminder" /><figcaption><small role="credit">Tom's Hardware</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/iWMcx3kxUirWqft8k4X9cB.jpg" alt="Raspberry Pi E-Paper Reminder" /><figcaption><small role="credit">Tom's Hardware</small></figcaption></figure></figure><p>19. <strong>Tuck the hat and the Pi behind the frame</strong>, or hot glue them into place behind the frame.</p><p>20. <strong>Run the application</strong>. It will periodically check for the latest highest priority task with the soonest deadline in your ToDoList application.</p><pre class="line-numbers language-python" language="python" ><code>make run</code></pre><figure role="gallery"><figure><img src="https://cdn.mos.cms.futurecdn.net/FATccBAVoreUXezFvpiHdC.jpg" alt="Raspberry Pi E-Paper Reminder" /><figcaption><small role="credit">Tom's Hardware</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/PU3SAjVURWQt6TiRbVXBnC.jpg" alt="Raspberry Pi E-Paper Reminder" /><figcaption><small role="credit">Tom's Hardware</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/cEDjjkV8xixzAMCsuNU2PC.jpg" alt="Raspberry Pi E-Paper Reminder" /><figcaption><small role="credit">Tom's Hardware</small></figcaption></figure></figure>
                                                            </article>
                            ]]>
                        </content:encoded>
                                                </item>
                                <item>
                                                            <title><![CDATA[ How To Upgrade Raspberry Pi OS to Bullseye from Buster ]]></title>
                                                                                                                                                                                                <link>https://www.tomshardware.com/how-to/upgrade-raspberry-pi-os-to-bullseye-from-buster</link>
                                                                            <description>
                            <![CDATA[ The latest Raspberry Pi OS is out and you can easily upgrade your existing installation with just a few commands. ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">KF6ZFWyD22PvYrc7ydMn5N</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/G9avzV3bDZXvRSnVwfn9XB-1280-80.png" type="image/png" length="0"></enclosure>
                                                                        <pubDate>Mon, 08 Nov 2021 19:57:23 +0000</pubDate>                                                                                                                                <updated>Thu, 30 Jan 2025 13:42:20 +0000</updated>
                                                                                                                                            <category><![CDATA[Raspberry Pi]]></category>
                                                                                                                    <dc:creator><![CDATA[ Les Pounder ]]></dc:creator>                                                                                    <dc:source><![CDATA[ https://cdn.mos.cms.futurecdn.net/mZ2MebAz6hhKR6vLUDUbsc.jpg ]]></dc:source>
                                                                <dc:description><![CDATA[ &lt;p&gt;Les Pounder is a creative technologist and for seven years has created projects to educate and inspire minds both young and old. He has worked with the Raspberry Pi Foundation to write and deliver their teacher training programme &quot;Picademy&quot;.&lt;/p&gt; ]]></dc:description>
                                                                                                                                <cf:isSponsored>false</cf:isSponsored>
                <cf:hasAffiliateLinks>false</cf:hasAffiliateLinks>
                <cf:isPaid>false</cf:isPaid>
                                                                                                                                <media:content type="image/png" url="https://cdn.mos.cms.futurecdn.net/G9avzV3bDZXvRSnVwfn9XB-1280-80.png">
                                                            <media:credit><![CDATA[Tom&#039;s Hardware]]></media:credit>
                                                                                                                                                                                                                                    <media:description><![CDATA[Upgrade Raspberry Pi OS to Bullseye]]></media:description>                                                            <media:text><![CDATA[Upgrade Raspberry Pi OS to Bullseye]]></media:text>
                                <media:title type="plain"><![CDATA[Upgrade Raspberry Pi OS to Bullseye]]></media:title>
                                                    </media:content>
                                                    <media:thumbnail url="https://cdn.mos.cms.futurecdn.net/G9avzV3bDZXvRSnVwfn9XB-1280-80.png" />
                                                                                                                                                                    <content:encoded >
                            <![CDATA[
                            <article>
                                <p><a href="https://www.tomshardware.com/news/raspberry-pi-os-bullseye-released"><u>A new Raspberry Pi OS based upon Debian 11</u></a> (Codenamed: Bullseye, following a Toy Story character naming convention) has been dropped and it has Raspberry Pi fans clamouring to install the latest OS on their favorite single board computer.</p><p>There are big changes for the latest Raspberry Pi OS, including a free speed boost for Raspberry Pi 4 / Compute Module 4 owners who have a certain SoC model, and a new compositing window manager which speeds up overall desktop performance.</p><p>Raspberry Pi OS “Bullseye” works with all models of Raspberry Pi, but the best performance is found using <a href="https://www.tomshardware.com/reviews/raspberry-pi-4"><u>Raspberry Pi 4</u></a>, <a href="https://www.tomshardware.com/reviews/raspberry-pi-compute-module-4"><u>Compute Module 4</u></a> and <a href="https://www.tomshardware.com/news/raspberry-pi-400-review-faster-cpu-new-layout-better-thermals"><u>Pi 400</u></a>. These models can benefit from the speed boost (except the Pi 400, where it is the default). If they have 2GB of RAM or greater, they can also use the new compositing window manager.</p><p>The ideal way to install the latest OS is to backup all your project and data files and then do a clean install using Raspberry Pi Imager to write to a microSD card, but it is possible to upgrade an old Debian 10 “Buster” based Raspberry Pi OS to Bullseye.There is a caveat, however, as it may not be the smoothest of upgrades. So before you take the plunge make sure that you have a backup of any important files and projects.</p><h2 id="how-to-upgrade-to-the-latest-raspberry-pi-os">How to Upgrade to the Latest Raspberry Pi OS</h2><p>1. Open a terminal and <strong>update the software repositories </strong>lists.</p><p><br></p><pre class="line-numbers language-python" language="python" ><code>$ sudo apt update</code></pre><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:649px;"><p class="vanilla-image-block" style="padding-top:23.42%;"><img id="" name="bullseye upgrade.png" alt="Upgrade Raspberry Pi OS to Bullseye" src="https://cdn.mos.cms.futurecdn.net/qEjjTSayAN6eeNFCnEUnwB.png" mos="" align="middle" fullscreen="1" width="649" height="152" attribution="" endorsement="" class="expandable"><a href='https://cdn.mos.cms.futurecdn.net/qEjjTSayAN6eeNFCnEUnwB.png' target='_blank' class='expand-button icon-expand-image icon' ></a></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Hardware)</span></figcaption></figure><p>2. <strong>Run a full upgrade</strong> of your installation.</p><p><br></p><pre class="line-numbers language-python" language="python" ><code>$ sudo apt dist-upgrade -y</code></pre><p>3. <strong>Update the Raspberry Pi firmware</strong>.</p><p><br></p><pre class="line-numbers language-python" language="python" ><code>$ sudo rpi-update</code></pre><p>4. <strong>Open the sources.list file</strong> ready for editing.</p><pre class="line-numbers language-python" language="python" ><code>$ sudo nano /etc/apt/sources.list</code></pre><p>5. Using the arrow keys, scroll down the file and <strong>locate the following line</strong>.</p><pre class="line-numbers language-python" language="python" ><code>deb http://raspbian.raspberrypi.org/raspbian/ buster main contrib non-free rpi</code></pre><p>6. <strong>Change the line</strong> from buster to bullseye and press CTRL + X, then press Y and Enter to save and exit.</p><p><br></p><pre class="line-numbers language-python" language="python" ><code>deb http://raspbian.raspberrypi.org/raspbian/ bullseye main contrib non-free rpi</code></pre><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:849px;"><p class="vanilla-image-block" style="padding-top:45.35%;"><img id="" name="bullseye.png" alt="Upgrade Raspberry Pi OS to Bullseye" src="https://cdn.mos.cms.futurecdn.net/iCEEBsx4p9Yqc7HDUmTt5C.png" mos="" align="middle" fullscreen="1" width="849" height="385" attribution="" endorsement="" class="expandable"><a href='https://cdn.mos.cms.futurecdn.net/iCEEBsx4p9Yqc7HDUmTt5C.png' target='_blank' class='expand-button icon-expand-image icon' ></a></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Hardware)</span></figcaption></figure><p>7. <strong>Update the Bullseye software repositories</strong>.</p><p><br></p><pre class="line-numbers language-python" language="python" ><code>$ sudo apt update</code></pre><p>8. <strong>Run another distribution upgrade</strong> to install the Bullseye software requirements.</p><p><br></p><pre class="line-numbers language-python" language="python" ><code>$ sudo apt dist-upgrade</code></pre><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:929px;"><p class="vanilla-image-block" style="padding-top:58.88%;"><img id="" name="bullseye upgrade in progress.png" alt="Upgrade Raspberry Pi OS to Bullseye" src="https://cdn.mos.cms.futurecdn.net/66oLpm3TjfRo8GwUTxe9rB.png" mos="" align="middle" fullscreen="1" width="929" height="547" attribution="" endorsement="" class="expandable"><a href='https://cdn.mos.cms.futurecdn.net/66oLpm3TjfRo8GwUTxe9rB.png' target='_blank' class='expand-button icon-expand-image icon' ></a></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Hardware)</span></figcaption></figure><p>9. <strong>Clean up the installation files</strong>.</p><p><br></p><pre class="line-numbers language-python" language="python" ><code>$ sudo apt autoclean</code></pre><p>10. <strong>Reboot</strong> your Raspberry Pi for the change to take effect.</p><p><br></p><pre class="line-numbers language-python" language="python" ><code>$ sudo reboot</code></pre><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1912px;"><p class="vanilla-image-block" style="padding-top:57.79%;"><img id="" name="bullseye_vnc_1080P.png" alt="Upgrade Raspberry Pi OS to Bullseye" src="https://cdn.mos.cms.futurecdn.net/xWtFo6j5yEgzh9WwBwy7jB.png" mos="" align="middle" fullscreen="1" width="1912" height="1105" attribution="" endorsement="" class="expandable"><a href='https://cdn.mos.cms.futurecdn.net/xWtFo6j5yEgzh9WwBwy7jB.png' target='_blank' class='expand-button icon-expand-image icon' ></a></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Hardware)</span></figcaption></figure><p>You are now running the latest version of Raspberry Pi OS based upon “Bullseye”.</p>
                                                            </article>
                            ]]>
                        </content:encoded>
                                                </item>
                                <item>
                                                            <title><![CDATA[ How To Build A Smart Fog Machine with a Raspberry Pi ]]></title>
                                                                                                                                                                                                <link>https://www.tomshardware.com/how-to/raspberry-pi-smart-fog-machine</link>
                                                                            <description>
                            <![CDATA[ Waste no more fog juice and use a Raspberry Pi to activate your fog machine when people are detected. ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">ZfE9TyHRsepHqFG64bFoeL</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/UGBLU38xAPpBCuZhcv5txg-1280-80.jpg" type="image/jpeg" length="0"></enclosure>
                                                                        <pubDate>Sun, 24 Oct 2021 15:13:33 +0000</pubDate>                                                                                                                                <updated>Wed, 05 Feb 2025 14:50:35 +0000</updated>
                                                                                                                                            <category><![CDATA[Raspberry Pi]]></category>
                                                                                                <author><![CDATA[ ryder+toms@ryderdamen.com (Ryder Damen) ]]></author>                    <dc:creator><![CDATA[ Ryder Damen ]]></dc:creator>                                                                                    <dc:source><![CDATA[ https://cdn.mos.cms.futurecdn.net/yHmRhXRwnn6Tza4pvE2MAY.jpg ]]></dc:source>
                                                                <dc:description><![CDATA[ &lt;p&gt;Ryder is a creative technologist and Raspberry Pi aficionado. While he spends most of his time on the software side of things, one of his favorite pastimes is taking old technology and giving it a new (often pointless) purpose. In his free time, he likes to create videos, longboard, and explore the vast Canadian wilderness.&lt;/p&gt; ]]></dc:description>
                                                                                                                                <cf:isSponsored>false</cf:isSponsored>
                <cf:hasAffiliateLinks>false</cf:hasAffiliateLinks>
                <cf:isPaid>false</cf:isPaid>
                                                                                                                                <media:content type="image/jpeg" url="https://cdn.mos.cms.futurecdn.net/UGBLU38xAPpBCuZhcv5txg-1280-80.jpg">
                                                            <media:credit><![CDATA[Tom&#039;s Hardware]]></media:credit>
                                                                                                                                                                                                                                    <media:description><![CDATA[Raspberry Pi Smart Fog Machine]]></media:description>                                                            <media:text><![CDATA[Raspberry Pi Smart Fog Machine]]></media:text>
                                <media:title type="plain"><![CDATA[Raspberry Pi Smart Fog Machine]]></media:title>
                                                    </media:content>
                                                    <media:thumbnail url="https://cdn.mos.cms.futurecdn.net/UGBLU38xAPpBCuZhcv5txg-1280-80.jpg" />
                                                                                                                                                                    <content:encoded >
                            <![CDATA[
                            <article>
                                <p>Halloween is upon us, and this year I&apos;m building a series of smart Halloween decorations that are also <a href="https://www.tomshardware.com/features/best-raspberry-pi-projects"><u>Raspberry Pi projects</u></a>.  So far, I’ve created a <a href="https://www.tomshardware.com/how-to/raspberry-pi-zombie-arm"><u>Raspberry Pi-powered zombie arm</u></a> that slaps guests and a <a href="https://www.tomshardware.com/how-to/build-a-person-following-creepy-head-for-halloween-with-a-raspberry-pi"><u>person-following creepy head</u></a>.</p><p>However, one of my all time favourite decorations is a fog machine. The only unfortunate thing about them is that they&apos;re analog. Now, with a bit of hacking, we&apos;re going to be connecting a fog machine to a Raspberry Pi, and activating it with person detection. This way, we only use fog juice when there are people close by. Here&apos;s how to get started.</p><h2 id="what-you-x2019-ll-need-for-this-project-7">What You’ll Need For This Project</h2><ul><li><a href="https://www.amazon.com/Raspberry-Model-2019-Quad-Bluetooth/dp/B07TC2BK1X"><u>Raspberry Pi 4</u></a></li><li><a href="https://www.amazon.com/JBtek-Channel-Module-Arduino-Raspberry/dp/B00KTEN3TM/"><u>A relay module compatible with the Raspberry Pi</u></a></li><li>At least 6 jumper cables</li><li><a href="https://www.tomshardware.com/best-picks/best-soldering-irons">A soldering iron</a> and solder</li><li>A fog machine with a remote control (I picked mine up from walmart)</li><li>Wyze Cam V2 / V3 or Raspberry Pi camera</li></ul><h2 id="how-to-build-a-smart-fog-machine-with-a-raspberry-pi">How To Build a Smart Fog Machine with a Raspberry Pi</h2><p>1. <strong>Set up your Raspberry Pi</strong>. If you don’t know how to do this, check out our story on how to <a href="https://www.tomshardware.com/how-to/set-up-raspberry-pi">set up your <u>Raspberry Pi for the first time</u> </a>or <a href="https://www.tomshardware.com/reviews/raspberry-pi-headless-setup-how-to,6028.html"><u>how to set up a headless Raspberry Pi</u></a> (without monitor or keyboard).</p><p>2. <strong>Install git </strong>as necessary, and <strong>clone the repository </strong>to your Raspberry Pi.</p><pre class="line-numbers language-python" language="python" ><code>cd ~/sudo apt-get update && sudo apt-get -y install gitgit clone https://github.com/rydercalmdown/smart_fog_machine.git</code></pre><p>3. <strong>Descend into the cloned repository </strong>and <strong>run the installation command</strong> to install all lower-level and python-based requirements for the project to work.</p><pre class="line-numbers language-python" language="python" ><code>cd ~/smart_fog_machinemake install</code></pre><p>4. <strong>Test your fog machine</strong>. Pressing the button once should cause the fog machine to turn on, pressing it again should cause it to turn off. Holding the button on my particular machine results in the same behavior as pressing it. </p><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1280px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="" name="image7.jpg" alt="Raspberry Pi Smart Fog Machine" src="https://cdn.mos.cms.futurecdn.net/93qTmDumcsoxk6Qj7vT3qh.jpg" mos="" align="middle" fullscreen="1" width="1280" height="720" attribution="" endorsement="" class="expandable"><a href='https://cdn.mos.cms.futurecdn.net/93qTmDumcsoxk6Qj7vT3qh.jpg' target='_blank' class='expand-button icon-expand-image icon' ></a></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Hardware)</span></figcaption></figure><p>5. <strong>Remove the screws from the back of your remote</strong> and <strong>open up the back panel</strong>.</p><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1280px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="" name="image9.jpg" alt="Raspberry Pi Smart Fog Machine" src="https://cdn.mos.cms.futurecdn.net/GDi5BJdnFMXRGWCiLsAG5i.jpg" mos="" align="middle" fullscreen="1" width="1280" height="720" attribution="" endorsement="" class="expandable"><a href='https://cdn.mos.cms.futurecdn.net/GDi5BJdnFMXRGWCiLsAG5i.jpg' target='_blank' class='expand-button icon-expand-image icon' ></a></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Hardware)</span></figcaption></figure><p>6. Put the batteries in your remote if they are missing, and <strong>locate the solder points</strong> that are connected to the fog button.</p><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1280px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="" name="image11.jpg" alt="Raspberry Pi Smart Fog Machine" src="https://cdn.mos.cms.futurecdn.net/PGxEhpNDjYFkoBzg5a8ULi.jpg" mos="" align="middle" fullscreen="1" width="1280" height="720" attribution="" endorsement="" class="expandable"><a href='https://cdn.mos.cms.futurecdn.net/PGxEhpNDjYFkoBzg5a8ULi.jpg' target='_blank' class='expand-button icon-expand-image icon' ></a></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Hardware)</span></figcaption></figure><p>7. Using a jumper cable, <strong>short the pins until you find the ones that cause the LED on the front of the remote to flash</strong>. In my case, that was the top right and bottom left pins when the remote  is on its back and the IR LED is pointed upwards. If your remote doesn’t have a status LED on the front, you can view the activity of the IR LED with the front-facing camera on your phone.</p><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1280px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="" name="image10.jpg" alt="Raspberry Pi Smart Fog Machine" src="https://cdn.mos.cms.futurecdn.net/mxFeHDGaBezKqcNWma7xBi.jpg" mos="" align="middle" fullscreen="1" width="1280" height="720" attribution="" endorsement="" class="expandable"><a href='https://cdn.mos.cms.futurecdn.net/mxFeHDGaBezKqcNWma7xBi.jpg' target='_blank' class='expand-button icon-expand-image icon' ></a></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Hardware)</span></figcaption></figure><p>8. Once the pins are found that activate the LED, <strong>solder two jumper wires onto them</strong>.</p><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1280px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="" name="image3.jpg" alt="Raspberry Pi Smart Fog Machine" src="https://cdn.mos.cms.futurecdn.net/ZLHnBmnnfjdbK62tP28kMh.jpg" mos="" align="middle" fullscreen="1" width="1280" height="720" attribution="" endorsement="" class="expandable"><a href='https://cdn.mos.cms.futurecdn.net/ZLHnBmnnfjdbK62tP28kMh.jpg' target='_blank' class='expand-button icon-expand-image icon' ></a></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Hardware)</span></figcaption></figure><p>9. <strong>Create a hole for the jumper wires to exit the back of the case</strong>. I used my soldering iron to burn a small divot in the side of my remote.</p><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1280px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="" name="image4.jpg" alt="Raspberry Pi Smart Fog Machine" src="https://cdn.mos.cms.futurecdn.net/FUtEM5XqMTgHoraUNZ7SUh.jpg" mos="" align="middle" fullscreen="1" width="1280" height="720" attribution="" endorsement="" class="expandable"><a href='https://cdn.mos.cms.futurecdn.net/FUtEM5XqMTgHoraUNZ7SUh.jpg' target='_blank' class='expand-button icon-expand-image icon' ></a></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Hardware)</span></figcaption></figure><p>10. <strong>Close up your remote and test it.</strong> The status LED should blink upon push of the button, as well as shorting the two jumper wires coming out from the case. </p><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1280px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="" name="image8.jpg" alt="Raspberry Pi Smart Fog Machine" src="https://cdn.mos.cms.futurecdn.net/FxWCay59PxBjtFvVWBNgwh.jpg" mos="" align="middle" fullscreen="1" width="1280" height="720" attribution="" endorsement="" class="expandable"><a href='https://cdn.mos.cms.futurecdn.net/FxWCay59PxBjtFvVWBNgwh.jpg' target='_blank' class='expand-button icon-expand-image icon' ></a></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Hardware)</span></figcaption></figure><p>11. <strong>Connect the VCC pin of your relay to the BOARD pin #4</strong> on your Raspberry Pi.</p><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1280px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="" name="image12.jpg" alt="Raspberry Pi Smart Fog Machine" src="https://cdn.mos.cms.futurecdn.net/mFnNoSxSmcgKvqnoWZFmUi.jpg" mos="" align="middle" fullscreen="1" width="1280" height="720" attribution="" endorsement="" class="expandable"><a href='https://cdn.mos.cms.futurecdn.net/mFnNoSxSmcgKvqnoWZFmUi.jpg' target='_blank' class='expand-button icon-expand-image icon' ></a></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Hardware)</span></figcaption></figure><p>12. <strong>Connect the Ground pin to Raspberry Pi BOARD pin #6.</strong></p><p>13. <strong>Connect the channel 4 pin</strong> of your relay to the Raspberry Pi <strong>BOARD pin #5</strong>. </p><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1280px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="" name="image6.jpg" alt="Raspberry Pi Smart Fog Machine" src="https://cdn.mos.cms.futurecdn.net/eta8kfvfLDCuCSNBQe5qih.jpg" mos="" align="middle" fullscreen="1" width="1280" height="720" attribution="" endorsement="" class="expandable"><a href='https://cdn.mos.cms.futurecdn.net/eta8kfvfLDCuCSNBQe5qih.jpg' target='_blank' class='expand-button icon-expand-image icon' ></a></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Hardware)</span></figcaption></figure><p>14. <strong>Connect the two jumper wires coming from the remote to the common, and normally open ports of channel 4 of your relay</strong>. On my relay, these are the leftmost ports. You should not see your LED flash at this time.</p><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1280px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="" name="image5.jpg" alt="Raspberry Pi Smart Fog Machine" src="https://cdn.mos.cms.futurecdn.net/Y4deLLCLu8W5s3NF2m52bh.jpg" mos="" align="middle" fullscreen="1" width="1280" height="720" attribution="" endorsement="" class="expandable"><a href='https://cdn.mos.cms.futurecdn.net/Y4deLLCLu8W5s3NF2m52bh.jpg' target='_blank' class='expand-button icon-expand-image icon' ></a></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Hardware)</span></figcaption></figure><p>15. <strong>Flash the custom RTSP firmware to your Wyze camera</strong> <a href="https://support.wyze.com/hc/en-us/articles/360026245231-Wyze-Cam-RTSP"><u>using this tutorial</u></a>. Installing RTSP support allows us to connect to the camera and grab frames directly with Python.</p><p>16. <strong>Get the RTSP URL value</strong> from your Wyze application, and <strong>edit the RTSP_URL variable in the Makefile</strong> to point the Raspberry Pi to your camera. You can find the RTSP URL in the “Advanced Settings” section of your Wyze application on your phone.</p><pre class="line-numbers language-python" language="python" ><code>nano Makefile# Edit the file with your RTSP URL from your cameraRTSP_URL=rtsp://your_username:your_password@your_camera_ip/live</code></pre><p>17. <strong>Test your system with the make run command</strong>. The LED should flash on your remote briefly as the system starts up and tests itself. It should also flash when a person is detected by the camera.</p><pre class="line-numbers language-python" language="python" ><code>make run</code></pre><p>18. <strong>Position the remote so it has a clear line of sight to your fog machine.</strong></p><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1280px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="" name="image2.jpg" alt="Raspberry Pi Smart Fog Machine" src="https://cdn.mos.cms.futurecdn.net/vsTPA43knqCfC3uqYQvyDh.jpg" mos="" align="middle" fullscreen="1" width="1280" height="720" attribution="" endorsement="" class="expandable"><a href='https://cdn.mos.cms.futurecdn.net/vsTPA43knqCfC3uqYQvyDh.jpg' target='_blank' class='expand-button icon-expand-image icon' ></a></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Hardware)</span></figcaption></figure><p>19. <strong>Plug in your fog machine</strong>, <strong>use the make run command</strong>, <strong>aim the camera </strong>at a person, and the fog machine in your desired direction, and enjoy!</p><pre class="line-numbers language-python" language="python" ><code>make run</code></pre><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1280px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="" name="image1.jpg" alt="Raspberry Pi Smart Fog Machine" src="https://cdn.mos.cms.futurecdn.net/UGBLU38xAPpBCuZhcv5txg.jpg" mos="" align="middle" fullscreen="1" width="1280" height="720" attribution="" endorsement="" class="expandable"><a href='https://cdn.mos.cms.futurecdn.net/UGBLU38xAPpBCuZhcv5txg.jpg' target='_blank' class='expand-button icon-expand-image icon' ></a></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Hardware)</span></figcaption></figure><p>If you’re looking for more of a challenge, I’d recommend cloning the IR code with an IR receiver compatible with the Raspberry Pi, and retransmitting it with an IR LED. This was my original plan, but I unfortunately wasn’t able to get things functional on time - but there’s always next year! Happy Halloween!</p>
                                                            </article>
                            ]]>
                        </content:encoded>
                                                </item>
                                <item>
                                                            <title><![CDATA[ Better Linux Gaming With Steam and Proton ]]></title>
                                                                                                                                                                                                <link>https://www.tomshardware.com/how-to/game-with-steam-on-linux</link>
                                                                            <description>
                            <![CDATA[ With a few easy to use tweaks we can run our entire Steam library on Linux. ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">ymqsKxp4pYVk8AZqp7FBc5</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/oK6pVXSt5svSXC6HA4qQQm-1280-80.jpg" type="image/jpeg" length="0"></enclosure>
                                                                        <pubDate>Sun, 10 Oct 2021 13:00:57 +0000</pubDate>                                                                                                                                <updated>Wed, 05 Feb 2025 15:11:43 +0000</updated>
                                                                                                                                            <category><![CDATA[Linux]]></category>
                                                    <category><![CDATA[Software]]></category>
                                                    <category><![CDATA[Operating Systems]]></category>
                                                                                                                    <dc:creator><![CDATA[ Michael Reed ]]></dc:creator>                                                                                                        <dc:description><![CDATA[ null ]]></dc:description>
                                                                                                                                <cf:isSponsored>false</cf:isSponsored>
                <cf:hasAffiliateLinks>false</cf:hasAffiliateLinks>
                <cf:isPaid>false</cf:isPaid>
                                                                                                                                <media:content type="image/jpeg" url="https://cdn.mos.cms.futurecdn.net/oK6pVXSt5svSXC6HA4qQQm-1280-80.jpg">
                                                            <media:credit><![CDATA[Future]]></media:credit>
                                                                                                                                                                                                                                    <media:description><![CDATA[Linux Gaming With Steam]]></media:description>                                                            <media:text><![CDATA[Linux Gaming With Steam]]></media:text>
                                <media:title type="plain"><![CDATA[Linux Gaming With Steam]]></media:title>
                                                    </media:content>
                                                    <media:thumbnail url="https://cdn.mos.cms.futurecdn.net/oK6pVXSt5svSXC6HA4qQQm-1280-80.jpg" />
                                                                                                                                                                    <content:encoded >
                            <![CDATA[
                            <article>
                                <p>If you&apos;re at all interested in gaming on PCs, you’ve probably come across Steam, Valve’s platform for distributing, updating and running games. Steam makes it possible to purchase a game, install it over the internet and then run it from the Steam interface. Ah, but that brings us back to the age-old Linux gaming conundrum of support, as not every PC game is designed to run on anything other than Microsoft Windows. </p><p>That said, there are plenty of Steam games that will run on Linux, and quite often, a Windows Steam game can be convinced to run on Linux even though some ‘fettling’ by the user may be required. This approach is officially supported by Steam using a system called Proton. Getting all of these things running, and then possibly optimising the results, is what we’ll be looking at in this tutorial.</p><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:960px;"><p class="vanilla-image-block" style="padding-top:75.00%;"><img id="" name="image2.jpg" alt="Linux Gaming With Steam" src="https://cdn.mos.cms.futurecdn.net/eA5MVTDH9UNnWk4exzqsgm.jpg" mos="" align="middle" fullscreen="1" width="960" height="720" attribution="" endorsement="" class="expandable"><a href='https://cdn.mos.cms.futurecdn.net/eA5MVTDH9UNnWk4exzqsgm.jpg' target='_blank' class='expand-button icon-expand-image icon' ></a></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Future)</span></figcaption></figure><p>Steam itself is installed through a custom program called the Steam Installer. This makes sense, because Steam updates itself and the games you install with it, without relying on Linux’s own update systems. These days, the installer is in the official repositories of many Linux distributions such as Ubuntu and Fedora and their derivatives. As Steam is proprietary software you may have to enable a specific repository, such as ‘Multiverse’ for Ubuntu or ‘Nonfree’ on Fedora. </p><p>To install Steam on Ubuntu open a terminal and type</p><pre class="line-numbers language-c" language="c" ><code>$ sudo apt install steam-installer .</code></pre><p>If you’re running a DEB-based distribution, but you can’t find the Steam installer in the official repositories:</p><p>1. <strong>Download the the installer</strong> directly from the <a href="https://store.steampowered.com/about/"><u>Steam website</u></a></p><p>2. <strong>Open a terminal</strong>.</p><p>3. <strong>Install the downloaded file</strong>. </p><pre class="line-numbers language-c" language="c" ><code>$ sudo dpkg -i [name of archive]  as the super user.</code></pre><p>The Steam application should now be available via your distros menu.</p><p>There is also another, unofficial, way of installing Steam that all Linux users might find interesting, and that is installation via the Flatpak system. This offers a few advantages of its own in terms of privacy and sandboxing, as Steam is a system unto itself once it’s on your system. Installation instructions can be found on the <a href="https://flathub.org/apps/details/com.valvesoftware.Steam"><u>Flathub site.</u></a></p><h2 id="running-windows-games-via-steam-on-linux-xa0">Running Windows Games via Steam on Linux </h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1920px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="" name="image3.jpg" alt="Linux Gaming With Steam" src="https://cdn.mos.cms.futurecdn.net/aCAWZahwXuEsji5kZzvw6n.jpg" mos="" align="middle" fullscreen="1" width="1920" height="1080" attribution="" endorsement="" class="expandable"><a href='https://cdn.mos.cms.futurecdn.net/aCAWZahwXuEsji5kZzvw6n.jpg' target='_blank' class='expand-button icon-expand-image icon' ></a></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Future)</span></figcaption></figure><p>There are many great games that run via Steam on Linux, but what if you want to run a game that doesn’t offer a Linux version? In such cases, there is a good chance that it can be made to run using a system called Proton. </p><p>An official part of Steam on Linux, Proton makes use of both Wine and DXVK, layers that translate Windows software and graphics calls into native Linux ones. However, there are some caveats. Firstly, compared with how the game runs natively on Windows, performance and stability might be an issue. Secondly, it does raise some ethical questions as, arguably, running the Windows version under Linux might reduce pressure on the developers to make a Linux native version of a game. </p><p>Getting back to the first point, the best way to get answers about the viability of running a particular game is to search for it on the <a href="https://www.protondb.com/"><u>ProtonDB website</u></a> to see what luck other Linux users had with it. The database itself is well organised and includes information about when the testing was carried out and what the specific hardware and software configuration used was. The level of success of running the game on Linux is rated from ‘Borked’ to ‘Platinum’. So, if you find a recent, highly-encouraging report about the game running well on a similar set-up to your own, the odds are good. In addition, ProtonDB reports contain information on tweaks you can use to make stubborn games run properly.</p><p>To run Windows versions of games on Linux:</p><p>1. <strong>Go to Steam > Settings > Steam Play</strong>.</p><p>2. To enable approved games <strong>select ‘Enable Steam Play for supported titles’. </strong>Or to enable all games, <strong>select ‘Enable Steam Play for other titles’. </strong>For the latter option check the game&apos;s ProtonDB entry for compatibility and issues. </p><h2 id="troubleshooting-and-tweaking-steam-on-linux">Troubleshooting and Tweaking Steam on Linux</h2><p>If you look through ProtonDB, you’ll notice quite a lot of references to <a href="https://wiki.winehq.org/Winetricks"><u>Winetricks</u></a>. So what is it? Winetricks is a helper script that installs various Windows components that are needed by games. The script pulls through the component and makes it visible to the Wine subsystem, and it’s worth knowing about, even if you’re using Wine outside of Steam.</p><p>To install Winetricks:</p><p>1. <strong>Open a terminal </strong>and <strong>change directory to Downloads</strong>. </p><pre class="line-numbers language-c" language="c" ><code>$ cd "${HOME}/Downloads"</code></pre><p>2.  <strong>Download Winetricks</strong>.</p><pre class="line-numbers language-c" language="c" ><code>$ wget  https://raw.githubusercontent.com/Winetricks/winetricks/master/src/winetricks</code></pre><p>3. <strong>Change the file permissions </strong>to set Winetricks as an executable file. </p><pre class="line-numbers language-c" language="c" ><code>$ chmod +x winetricks</code></pre><p>4. Using Winetricks, <strong>install CoreFonts</strong>, used by Windows applications via Wine.</p><pre class="line-numbers language-c" language="c" ><code>$ ./winetricks corefonts</code></pre><p>Things can get complicated if you want to apply Winetricks fixes to a specific Proton game, but not by much. Thankfully, there is a helper script called <a href="https://github.com/Matoking/protontricks"><u>Protontricks</u></a> for just this purpose.</p><p>1. <strong>Install Protontricks</strong>. Open a terminal and use the Python packaging tool “pip” to install. </p><pre class="line-numbers language-c" language="c" ><code>$ pip3 install prototricks</code></pre><p>2. To apply Protontricks to a specific game, you need to <strong>discover the specific game ID</strong> of that game using Protontricks itself. For example typing <em>protontricks -s fallout</em> found Fallout and Fallout 4 installed on our Linux gaming machine. </p><pre class="line-numbers language-c" language="c" ><code>$ protontricks -s <NAME OF GAME></code></pre><p>3.  Visit the <a href="https://www.protondb.com/"><u>ProtonDB</u></a> entry for that game. For example, we looked at the entry for <a href="https://www.protondb.com/app/1091500"><u>Cyberpunk 2077</u></a> which has a gold rating, but requires a few tweaks in order to work.</p><p>4. <strong>Use the Winetricks commands</strong> that match the requirements for your game. Typically the syntax is.</p><pre class="line-numbers language-c" language="c" ><code>$ protontricks [game ID] [Winetricks command]</code></pre><p>5. <strong>Start your freshly-patched game</strong> via Steam.</p><h2 id="special-options-for-steam-on-linux-games-xa0">Special Options for Steam on Linux Games </h2><p>Some games may need special launch options to be added in order for them to run correctly. To do so:</p><p>1. <strong>Right click on the game name</strong> in your Steam Library and <strong>select General</strong>.</p><p>2. <strong>Type in the launch options </strong>from the ProtonDB entry. Typically these end with the string %command%.If there are multiple launch options, ensure that there is only one %command%</p><p>You may need to edit a game INI file.</p><p>1. <strong>Right click on the game name </strong>in your Steam Library, select Properties.</p><p>2. In the Local Files section <strong>click on Browse </strong>to locate the INI file.</p><p>This guide originally appeared in issue 281 of <a href="https://www.linuxformat.com/"><u><em>Linux Format magazine</em></u></a>. </p>
                                                            </article>
                            ]]>
                        </content:encoded>
                                                </item>
                                <item>
                                                            <title><![CDATA[ How to Build A Person-Following Creepy Head for Halloween with a Raspberry Pi ]]></title>
                                                                                                                                                                                                <link>https://www.tomshardware.com/how-to/build-a-person-following-creepy-head-for-halloween-with-a-raspberry-pi</link>
                                                                            <description>
                            <![CDATA[ Scare your friends and neighbors with a creepy mannequin head that follows them around, based on A.I. person detection. ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">vE9ygsGEmVVTEU78j2BcFK</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/aezbgPkUxLD2vDywcANyiX-1280-80.png" type="image/png" length="0"></enclosure>
                                                                        <pubDate>Sat, 02 Oct 2021 13:00:54 +0000</pubDate>                                                                                                                                <updated>Wed, 05 Feb 2025 14:50:18 +0000</updated>
                                                                                                                                            <category><![CDATA[Raspberry Pi]]></category>
                                                                                                <author><![CDATA[ ryder+toms@ryderdamen.com (Ryder Damen) ]]></author>                    <dc:creator><![CDATA[ Ryder Damen ]]></dc:creator>                                                                                    <dc:source><![CDATA[ https://cdn.mos.cms.futurecdn.net/yHmRhXRwnn6Tza4pvE2MAY.jpg ]]></dc:source>
                                                                <dc:description><![CDATA[ &lt;p&gt;Ryder is a creative technologist and Raspberry Pi aficionado. While he spends most of his time on the software side of things, one of his favorite pastimes is taking old technology and giving it a new (often pointless) purpose. In his free time, he likes to create videos, longboard, and explore the vast Canadian wilderness.&lt;/p&gt; ]]></dc:description>
                                                                                                                                <cf:isSponsored>false</cf:isSponsored>
                <cf:hasAffiliateLinks>false</cf:hasAffiliateLinks>
                <cf:isPaid>false</cf:isPaid>
                                                                                                                                <media:content type="image/png" url="https://cdn.mos.cms.futurecdn.net/aezbgPkUxLD2vDywcANyiX-1280-80.png">
                                                            <media:credit><![CDATA[Tom&#039;s Hardware]]></media:credit>
                                                                                                                                                                                                                                    <media:description><![CDATA[Halloween Mannequin Head - Raspberry Pi]]></media:description>                                                            <media:text><![CDATA[Halloween Mannequin Head - Raspberry Pi]]></media:text>
                                <media:title type="plain"><![CDATA[Halloween Mannequin Head - Raspberry Pi]]></media:title>
                                                    </media:content>
                                                    <media:thumbnail url="https://cdn.mos.cms.futurecdn.net/aezbgPkUxLD2vDywcANyiX-1280-80.png" />
                                                                                                                                                                    <content:encoded >
                            <![CDATA[
                            <article>
                                <p>Halloween is coming, and what better way to celebrate the season than by using machine learning and a <a href="https://www.tomshardware.com/news/raspberry-pi"><u>Raspberry Pi</u></a> to accomplish something spooky! This year I’ve built a mannequin head that uses person detection and a simple servo motor to detect when a person is walking by and turn the head to follow them. I’m using a simple styrofoam mannequin head with some coloured in eyes from the dollar store, but you’re welcome to dress it up to fit your house’s theme or use a completely different kind of head or object. As long as you can use a servo to rotate it, the result is the same.</p><p>This project won’t require any machine learning training, and is more or less plug and play just in time for the season. Here’s how to build it.</p><h2 id="what-you-x2019-ll-need-for-this-project-xa0">What You’ll Need For This Project </h2><ul><li><a href="https://www.tomshardware.com/reviews/raspberry-pi-4"><u>Raspberry Pi 4</u></a> or Raspberry Pi 3 with power adapter and MicroSD card</li><li><a href="https://www.amazon.ca/Pacific-Female-Styrofoam-Mannequin-Head/dp/B074VSB349/"><u>Mannequin Head (styrofoam or something equally light weight works best)</u></a></li><li><a href="https://www.amazon.ca/MMOBIEL-Airplane-Helicopter-Compatible-Raspberry/dp/B097RD8RB7/"><u>5V Micro-Servo motor compatible with a Raspberry Pi</u></a></li><li>Hot Glue Gun</li><li>Misc. Blocks of Wood or Cardboard</li><li><a href="https://www.amazon.com/WYZE-Indoor-Monitoring-Camera-MicroSD/dp/B08ZXQG4FX/"><u>Wyze Cam V2</u></a> (Wyze Cam V3 is not yet compatible) or Raspberry Pi Camera</li></ul><h2 id="how-to-build-a-person-following-halloween-mannequin-head-for-halloween-xa0">How To Build A Person-Following Halloween Mannequin Head for Halloween </h2><p>Before you get started, get your Raspberry Pi set up. If you haven’t done this before, see our article on how to <a href="https://www.tomshardware.com/reviews/raspberry-pi-set-up-how-to,6029.html"><u>set up a Raspberry Pi</u></a> for the first time or how to do a <a href="https://www.tomshardware.com/reviews/raspberry-pi-headless-setup-how-to,6028.html"><u>headless Raspberry Pi install</u></a> (without the keyboard and screen). For this project, we recommend a headless Raspberry Pi install.</p><p>1. <strong>Install git. </strong>We’ll need it to download the code from GitHub. </p><pre class="line-numbers language-python" language="python" ><code>sudo apt-get updatesudo apt-get -y install git</code></pre><p>2. <strong>Clone the repository to your home directory.</strong> This will ensure we have all the code and audio files we need to run the project. </p><pre class="line-numbers language-python" language="python" ><code>cd ~/git clone https://github.com/rydercalmdown/halloween_mannequin_head.git</code></pre><p>3. <strong>Run the “make install” command </strong>to install all project dependencies. This script will take care of installing lower level dependencies, as well as the Python libraries you need for the project to run. This should take about 10-15 minutes on a Raspberry Pi 4 as it needs some time to install machine learning libraries and models. </p><pre class="line-numbers language-python" language="python" ><code>cd ~/halloween_mannequin_head/make install</code></pre><p>4. <strong>Choose your camera</strong>; if you’re using a Wyze V2 camera, skip to step 6. If you’re using a Raspberry Pi camera, move to step 5. Both will work, but the advantage of the Wyze camera is the ability to mount it in a different place away from your Pi (and mannequin head).</p><p>5. <strong>Connect your Raspberry Pi camera directly to the Raspberry Pi</strong> and test it with the following command. Do not set the STREAM_URI environment variable, it will by default use the Pi camera. Skip to step 8.</p><pre class="line-numbers language-python" language="python" ><code>sudo raspistill -o test.jpeg</code></pre><p>6. <strong>Flash the RTSP custom firmware to your Wyze Camera</strong> using <a href="https://support.wyze.com/hc/en-us/articles/360026245231-Wyze-Cam-RTSP"><u>these instructions</u></a>. This will allow us to access the stream from the camera wirelessly with the Raspberry Pi. This will only work with a Wyze V2 camera.</p><p>7. <strong>Get the RTSP URL value</strong> from your Wyze application, and <strong>edit the STREAM_URI variable in the Makefile</strong> to point the Raspberry Pi to your camera. You can find the RTSP URL in the “Advanced Settings” section of your Wyze application on your phone. </p><pre class="line-numbers language-python" language="python" ><code>nano Makefile# Only edit this if you’re using a RTSP camera; leave blank if you’re using a Pi cameraSTREAM_URI=rtsp://username:password@camera_ip_address/live</code></pre><p>8. Hot <strong>glue your servo motor to a base piece of wood</strong>, or directly to the place you intend on mounting the mannequin head. I drilled out a small piece of wood to use as my base and fit the motor inside. </p><figure role="gallery"><figure><img src="https://cdn.mos.cms.futurecdn.net/KzSmS7dBPh72K3HQGRGuVY.png" alt="Halloween Mannequin Head - Raspberry Pi" /><figcaption><small role="credit">Tom's Hardware</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/acLjJzHqb7k8uzuzStUKyX.png" alt="Halloween Mannequin Head - Raspberry Pi" /><figcaption><small role="credit">Tom's Hardware</small></figcaption></figure></figure><p>9. Hot <strong>glue the servo bracket with the motor to the base of the mannequin head</strong>. I used a small piece of wood to reinforce the connection, but depending on yours you might not need one. Make sure the bracket can still connect to the motor.</p><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1280px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="" name="image8.png" alt="Halloween Mannequin Head - Raspberry Pi" src="https://cdn.mos.cms.futurecdn.net/7drax6Kdi8rn3eKMgs267Z.png" mos="" align="middle" fullscreen="1" width="1280" height="720" attribution="" endorsement="" class="expandable"><a href='https://cdn.mos.cms.futurecdn.net/7drax6Kdi8rn3eKMgs267Z.png' target='_blank' class='expand-button icon-expand-image icon' ></a></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Hardware)</span></figcaption></figure><p>10. Using jumper cables <strong>attach the 5V and ground pins of the servo motor to Raspberry Pi pins #4 and #6</strong> respectively.</p><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1280px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="" name="image1.png" alt="Halloween Mannequin Head - Raspberry Pi" src="https://cdn.mos.cms.futurecdn.net/QsYGxHUhK5r2S9t4MoUeKX.png" mos="" align="middle" fullscreen="" width="1280" height="720" attribution="" endorsement="" class=""></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Hardware)</span></figcaption></figure><p>11. Using a jumper cable, <strong>attach the data pin of the servo motor to board pin #3</strong> on the Raspberry Pi. This pin allows control of the servo motor by the Pi directly.</p><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1280px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="" name="image7.png" alt="Halloween Mannequin Head - Raspberry Pi" src="https://cdn.mos.cms.futurecdn.net/vReyyGe3og8MfAKmTDn4qY.png" mos="" align="middle" fullscreen="1" width="1280" height="720" attribution="" endorsement="" class="expandable"><a href='https://cdn.mos.cms.futurecdn.net/vReyyGe3og8MfAKmTDn4qY.png' target='_blank' class='expand-button icon-expand-image icon' ></a></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Hardware)</span></figcaption></figure><p>12. Using the bracket, <strong>connect the mannequin head so it sits on top of the servo motor</strong> and <strong>mount the device and camera</strong> in your desired location.</p><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1280px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="" name="image2.png" alt="Halloween Mannequin Head - Raspberry Pi" src="https://cdn.mos.cms.futurecdn.net/CHvPRQ3TpLMyrz3ACFYcWX.png" mos="" align="middle" fullscreen="1" width="1280" height="720" attribution="" endorsement="" class="expandable"><a href='https://cdn.mos.cms.futurecdn.net/CHvPRQ3TpLMyrz3ACFYcWX.png' target='_blank' class='expand-button icon-expand-image icon' ></a></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Hardware)</span></figcaption></figure><p>13. <strong>Use the make run command</strong> to test the system. Step into frame of the camera and move left to right to have the servo turn. </p><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1280px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="" name="image3.png" alt="Halloween Mannequin Head - Raspberry Pi" src="https://cdn.mos.cms.futurecdn.net/aezbgPkUxLD2vDywcANyiX.png" mos="" align="middle" fullscreen="1" width="1280" height="720" attribution="" endorsement="" class="expandable"><a href='https://cdn.mos.cms.futurecdn.net/aezbgPkUxLD2vDywcANyiX.png' target='_blank' class='expand-button icon-expand-image icon' ></a></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Hardware)</span></figcaption></figure><p>14. <strong>Adjust the mannequin head</strong> on the servo by lifting it and recentering it to calibrate it to follow you properly.</p><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1280px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="" name="image5.png" alt="Halloween Mannequin Head - Raspberry Pi" src="https://cdn.mos.cms.futurecdn.net/rwANzLLLqv5Z3reUEXRbGY.png" mos="" align="middle" fullscreen="1" width="1280" height="720" attribution="" endorsement="" class="expandable"><a href='https://cdn.mos.cms.futurecdn.net/rwANzLLLqv5Z3reUEXRbGY.png' target='_blank' class='expand-button icon-expand-image icon' ></a></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Hardware)</span></figcaption></figure><p>15. <strong>Buy your trick or treat candy</strong> and get it ready for halloween.</p>
                                                            </article>
                            ]]>
                        </content:encoded>
                                                </item>
                                <item>
                                                            <title><![CDATA[ How to Build a Satellite-Powered, Raspberry Pi Security Camera for Off-the-Grid Locations ]]></title>
                                                                                                                                                                                                <link>https://www.tomshardware.com/how-to/build-satellite-powered-raspberry-pi-security-camera</link>
                                                                            <description>
                            <![CDATA[ Build a satellite powered remote camera that keeps an eye on your property, even it’s way off of the grid. ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">fR8NSP6nuDFtqRJPwCmGSd</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/ypB6MBc2wBXfwAvc9BcU6Z-1280-80.png" type="image/png" length="0"></enclosure>
                                                                        <pubDate>Sat, 25 Sep 2021 13:00:59 +0000</pubDate>                                                                                                                                <updated>Wed, 05 Feb 2025 14:49:01 +0000</updated>
                                                                                                                                            <category><![CDATA[Raspberry Pi]]></category>
                                                                                                <author><![CDATA[ ryder+toms@ryderdamen.com (Ryder Damen) ]]></author>                    <dc:creator><![CDATA[ Ryder Damen ]]></dc:creator>                                                                                    <dc:source><![CDATA[ https://cdn.mos.cms.futurecdn.net/yHmRhXRwnn6Tza4pvE2MAY.jpg ]]></dc:source>
                                                                <dc:description><![CDATA[ &lt;p&gt;Ryder is a creative technologist and Raspberry Pi aficionado. While he spends most of his time on the software side of things, one of his favorite pastimes is taking old technology and giving it a new (often pointless) purpose. In his free time, he likes to create videos, longboard, and explore the vast Canadian wilderness.&lt;/p&gt; ]]></dc:description>
                                                                                                                                <cf:isSponsored>false</cf:isSponsored>
                <cf:hasAffiliateLinks>false</cf:hasAffiliateLinks>
                <cf:isPaid>false</cf:isPaid>
                                                                                                                                <media:content type="image/png" url="https://cdn.mos.cms.futurecdn.net/ypB6MBc2wBXfwAvc9BcU6Z-1280-80.png">
                                                            <media:credit><![CDATA[Tom&#039;s Hardware]]></media:credit>
                                                                                                                                                                                                                                    <media:description><![CDATA[Raspberry Pi Security Camera]]></media:description>                                                            <media:text><![CDATA[Raspberry Pi Security Camera]]></media:text>
                                <media:title type="plain"><![CDATA[Raspberry Pi Security Camera]]></media:title>
                                                    </media:content>
                                                    <media:thumbnail url="https://cdn.mos.cms.futurecdn.net/ypB6MBc2wBXfwAvc9BcU6Z-1280-80.png" />
                                                                                                                                                                    <content:encoded >
                            <![CDATA[
                            <article>
                                <p>A friend of mine recently had a break in at his cabin up north. He wanted to know if I had any recommendations on technology that could let him keep an eye on things from far away. The only challenge is his cabin is relatively remote, and cell service or internet isn’t available in the area. With that in mind, I wanted to design a solution that would keep an eye on things using a Raspberry Pi, a bit of edge computing, and a satellite connection.</p><p>For this project I’m using the <a href="https://swarm.space/tracking/"><u>Swarm satellite constellation</u></a>; it’s a low cost solution for providing satellite connectivity for internet-of-things devices in remote locations. Where one solution would be to livestream images from a camera using a high-bandwidth connection for off-site processing, this project does on-site processing (edge computing) instead sending only the results, letting us keep this project running for a long time at the low cost of $5 a month. Here’s how to build a remote cabin monitoring and alerting system with a Raspberry Pi, a camera, and the Swarm Eval Kit. </p><h2 id="what-you-x2019-ll-need-for-this-project-8">What You’ll Need For This Project</h2><ul><li><a href="https://www.tomshardware.com/reviews/raspberry-pi-4"><u>Raspberry Pi 4</u></a> or Raspberry Pi 3 with power adapter</li><li>8 GB (or larger) microSD card</li><li>Raspberry Pi Camera</li><li><a href="https://swarm.space/products/"><u>Swarm Eval Kit & Data Plan</u></a></li><li>An internet connection for the initial setup</li></ul><h2 id="how-to-build-a-remote-cabin-monitoring-system-with-a-raspberry-pi">How To Build A Remote Cabin Monitoring System with a Raspberry Pi</h2><p>Before you get started, get your Raspberry Pi set up. If you haven’t done this before, see our article on how to <a href="https://www.tomshardware.com/how-to/set-up-raspberry-pi"><u>set up a Raspberry Pi</u></a> for the first time or how to do a <a href="https://www.tomshardware.com/reviews/raspberry-pi-headless-setup-how-to,6028.html"><u>headless Raspberry Pi install</u></a> (without the keyboard and screen). For this project, we recommend a <a href="https://www.tomshardware.com/reviews/raspberry-pi-headless-setup-how-to,6028.html"><u>headless Raspberry Pi install</u></a>.</p><p>1. <strong>Install git. </strong>We’ll need it to download the code from GitHub. </p><pre class="line-numbers language-python" language="python" ><code>sudo apt-get updatesudo apt-get -y install git</code></pre><p>2. <strong>Clone the repository to your home directory.</strong> This will download all the necessary source code for person detection and communicating with the Swarm tile. </p><pre class="line-numbers language-python" language="python" ><code>cd ~/git clone https://github.com/rydercalmdown/remote_cabin_monitor.git</code></pre><p>3. <strong>Run the “make install” command </strong>to install all project dependencies. This script will take care of installing lower level dependencies, as well as the Python libraries you need for the project to run. The machine learning library we’re using to detect people is packaged within one of the Python libraries, so it may take a few minutes to install.</p><pre class="line-numbers language-python" language="python" ><code>cd ~/remote_cabin_monitor/make install</code></pre><p>4. <strong>Connect your Raspberry Pi Camera to the Raspberry Pi</strong> and mount it in the desired location.</p><figure role="gallery"><figure><img src="https://cdn.mos.cms.futurecdn.net/QtoNgPcybNDxPRBwiR7jXZ.png" alt="Raspberry Pi Security Camera" /><figcaption><small role="credit">Tom's Hardware</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/nNBY3L5dsjr69LtNdpgCJa.png" alt="Raspberry Pi Security Camera" /><figcaption><small role="credit">Tom's Hardware</small></figcaption></figure></figure><p>5. <strong>Test your Raspberry Pi Camera</strong> by taking a snapshot with the following command.</p><pre class="line-numbers language-python" language="python" ><code>raspistill -o test.jpeg</code></pre><p>6. <strong>Assemble and register your Swarm Eval Kit</strong> using the <a href="https://swarm.space/wp-content/uploads/2021/09/Swarm-Eval-Kit-Quickstart-Guide.pdf"><u>instructions in the quickstart guide</u></a>. This will get it connected to the network for transmitting data. </p><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1280px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="" name="image10.png" alt="Raspberry Pi Security Camera" src="https://cdn.mos.cms.futurecdn.net/PSboA3Bg2HZt6iTrzW3tda.png" mos="" align="middle" fullscreen="1" width="1280" height="720" attribution="" endorsement="" class="expandable"><a href='https://cdn.mos.cms.futurecdn.net/PSboA3Bg2HZt6iTrzW3tda.png' target='_blank' class='expand-button icon-expand-image icon' ></a></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Hardware)</span></figcaption></figure><p>7. <strong>Turn on your Swarm Eval Kit </strong>system with the button on the side.</p><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1280px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="" name="image2.png" alt="Raspberry Pi Security Camera" src="https://cdn.mos.cms.futurecdn.net/AY25ZYHYwWNtJNwp5AqwrY.png" mos="" align="middle" fullscreen="1" width="1280" height="720" attribution="" endorsement="" class="expandable"><a href='https://cdn.mos.cms.futurecdn.net/AY25ZYHYwWNtJNwp5AqwrY.png' target='_blank' class='expand-button icon-expand-image icon' ></a></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Hardware)</span></figcaption></figure><p>8. <strong>Set your Raspberry Pi Wi-Fi to the Swarm Evaluation Kit SSID</strong>. This will need to be done directly on the pi with an external monitor and keyboard. Any SSH connections to the pi will be dropped when the pi switches to the Swarm SSID.</p><p>The easiest way to do this is by using raspi-config (sudo raspi-config), navigating to System Options->WIreless LAN and then entering the Swarm Eval Kit’s SSID (you’ll have to find this on another device where it will be swarm-xxxx) and entering a default password of 12345678.</p><figure role="gallery"><figure><img src="https://cdn.mos.cms.futurecdn.net/nBq6jEewxj5pCCKBQii2gY.png" alt="Raspberry Pi Security Camera" /><figcaption><small role="credit">Tom's Hardware</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/QfMcfL7agVLCKf7oCujzEZ.png" alt="Raspberry Pi Security Camera" /><figcaption><small role="credit">Tom's Hardware</small></figcaption></figure></figure><p>9. <strong>Run the application to test it</strong>. If the Raspberry Pi is connected to the Swarm Kit successfully, it will send a startup email over the network. Depending on your satellite availability it can take some time to arrive in your inbox; <a href="https://kube.tools.swarm.space/pass-checker/"><u>use this pass checker</u></a> to determine when a satellite will be overhead.</p><pre class="line-numbers language-python" language="python" ><code>cd ~/remote_cabin_monitormake run</code></pre><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1280px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="" name="image7.png" alt="Raspberry Pi Security Camera" src="https://cdn.mos.cms.futurecdn.net/j6AQYz5zbgvjzG8D87PZbZ.png" mos="" align="middle" fullscreen="1" width="1280" height="720" attribution="" endorsement="" class="expandable"><a href='https://cdn.mos.cms.futurecdn.net/j6AQYz5zbgvjzG8D87PZbZ.png' target='_blank' class='expand-button icon-expand-image icon' ></a></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Hardware)</span></figcaption></figure><p>10. <strong>Configure the application to run on boot</strong> by adding a line to the /etc/rc.local file.</p><pre class="line-numbers language-python" language="python" ><code>sudo nano /etc/rc.local# Add the following line before the last line. /home/pi/remote_cabin_monitor/env/bin/activate && export EMAIL_FROM=youremail@example.com && export EMAIL_TO=youremail@example.com && /home/pi/remote_cabin_monitor/env/bin/python /home/pi/remote_cabin_monitor/src/app.py &</code></pre><p>11. <strong>Place the Swarm Eval Kit in view of the sky</strong>, and mount the Raspberry Pi and camera in your desired location.</p><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1280px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="" name="image8.png" alt="Raspberry Pi Security Camera" src="https://cdn.mos.cms.futurecdn.net/CyaykASrDzJByNVLL8dowZ.png" mos="" align="middle" fullscreen="1" width="1280" height="720" attribution="" endorsement="" class="expandable"><a href='https://cdn.mos.cms.futurecdn.net/CyaykASrDzJByNVLL8dowZ.png' target='_blank' class='expand-button icon-expand-image icon' ></a></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Hardware)</span></figcaption></figure><p>When running, the Raspberry Pi will continuously pull images from the camera and check them for the presence of a person. If a person is detected, the Pi will send a message to the Swarm Eval Kit, which will then communicate with a constellation of satellites via VHF. The satellites will relay the message to a downlink, and you’ll then receive an email indicating a person has been detected. The Pi will also send an email every 24 hours that no people have been detected in order to let you know it’s still working.</p><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1280px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="" name="image5.png" alt="Raspberry Pi Security Camera" src="https://cdn.mos.cms.futurecdn.net/YDXRCBRPDy3df2ZYnedULZ.png" mos="" align="middle" fullscreen="1" width="1280" height="720" attribution="" endorsement="" class="expandable"><a href='https://cdn.mos.cms.futurecdn.net/YDXRCBRPDy3df2ZYnedULZ.png' target='_blank' class='expand-button icon-expand-image icon' ></a></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Hardware)</span></figcaption></figure><p>This type of system can also be modified to send more than just person-detection data. Leak detection, fire detection, and any kind of sensor that can communicate with a Raspberry Pi are all possible to send over the network.</p>
                                                            </article>
                            ]]>
                        </content:encoded>
                                                </item>
                                <item>
                                                            <title><![CDATA[ Who can it be now? How to Build a Raspberry Pi Doorbell that Recognizes Friends ]]></title>
                                                                                                                                                                                                <link>https://www.tomshardware.com/how-to/facial-recognition-doorbell-raspberry-pi</link>
                                                                            <description>
                            <![CDATA[ Using a Raspberry Pi and a camera, you can identify which friend is at your door and have the system announce them by name. ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">kBMwX4LiN3GvELrafWuPEF</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/JWjxAtkjgi6N2USV65c5oh-1280-80.png" type="image/png" length="0"></enclosure>
                                                                        <pubDate>Sat, 18 Sep 2021 14:00:30 +0000</pubDate>                                                                                                                                <updated>Wed, 05 Feb 2025 14:49:20 +0000</updated>
                                                                                                                                            <category><![CDATA[Raspberry Pi]]></category>
                                                                                                <author><![CDATA[ ryder+toms@ryderdamen.com (Ryder Damen) ]]></author>                    <dc:creator><![CDATA[ Ryder Damen ]]></dc:creator>                                                                                    <dc:source><![CDATA[ https://cdn.mos.cms.futurecdn.net/yHmRhXRwnn6Tza4pvE2MAY.jpg ]]></dc:source>
                                                                <dc:description><![CDATA[ &lt;p&gt;Ryder is a creative technologist and Raspberry Pi aficionado. While he spends most of his time on the software side of things, one of his favorite pastimes is taking old technology and giving it a new (often pointless) purpose. In his free time, he likes to create videos, longboard, and explore the vast Canadian wilderness.&lt;/p&gt; ]]></dc:description>
                                                                                                                                <cf:isSponsored>false</cf:isSponsored>
                <cf:hasAffiliateLinks>false</cf:hasAffiliateLinks>
                <cf:isPaid>false</cf:isPaid>
                                                                                                                                <media:content type="image/png" url="https://cdn.mos.cms.futurecdn.net/JWjxAtkjgi6N2USV65c5oh-1280-80.png">
                                                            <media:credit><![CDATA[Tom&#039;s Hardware]]></media:credit>
                                                                                                                                                                                                                                    <media:description><![CDATA[Facial-Recognition Doorbell with a Raspberry Pi]]></media:description>                                                            <media:text><![CDATA[Facial-Recognition Doorbell with a Raspberry Pi]]></media:text>
                                <media:title type="plain"><![CDATA[Facial-Recognition Doorbell with a Raspberry Pi]]></media:title>
                                                    </media:content>
                                                    <media:thumbnail url="https://cdn.mos.cms.futurecdn.net/JWjxAtkjgi6N2USV65c5oh-1280-80.png" />
                                                                                                                                                                    <content:encoded >
                            <![CDATA[
                            <article>
                                <p>I want to buy a smart doorbell, but the cost of them is a little outside of my budget. Instead, I’m using a Raspberry Pi, a speaker system, and a camera to build a smart doorbell system for a fraction of the cost.</p><p>In our last project, <a href="https://www.tomshardware.com/how-to/raspberry-pi-person-detecting-doorbell"><u>we created a doorbell system which rang when a person was at the door</u></a>. This time we’ll expand on the code to allow the project to identify when people we know are at the door, and announce it accordingly. This will let us choose to either run to the door, or hide upstairs when our friends or inlaws drop by unexpectedly. </p><h2 id="what-you-x2019-ll-need-for-this-project-9">What You’ll Need For This Project</h2><ul><li><a href="https://www.tomshardware.com/reviews/raspberry-pi-4"><u>Raspberry Pi 4</u></a> or Raspberry Pi 3 with power adapter</li><li><a href="https://www.amazon.com/Creative-Labs-Pebble-Black-Loudspeaker/dp/B0791H74NT/"><u>Desktop speakers or a megaphone with a 3.5mm input and 3.5mm cable</u></a></li><li><a href="https://www.amazon.com/WYZE-Indoor-Monitoring-Camera-MicroSD/dp/B08ZXQG4FX/"><u>Wyze Cam V2</u></a> (Wyze Cam V3 is not yet compatible)</li><li>2x8 GB (or larger) microSD cards, one for Raspberry Pi, another for the camera.</li><li>Monitor with HDMI and power cables. (Optional)</li></ul><h2 id="how-to-turn-a-raspberry-pi-into-a-facial-recognition-doorbell-system-xa0">How to Turn a Raspberry Pi into a Facial Recognition Doorbell System </h2><p>Before you get started, get your Raspberry Pi set up. If you haven’t done this before, see our article on how to <a href="https://www.tomshardware.com/how-to/set-up-raspberry-pi"><u>set up a Raspberry Pi</u></a> for the first time or how to do a <a href="https://www.tomshardware.com/reviews/raspberry-pi-headless-setup-how-to,6028.html"><u>headless Raspberry Pi install</u></a> (without the keyboard and screen). For this project, we recommend a <a href="https://www.tomshardware.com/reviews/raspberry-pi-headless-setup-how-to,6028.html"><u>headless Raspberry Pi install</u></a>. </p><p>1.<strong> Install git. </strong>We’ll need it to download the code from GitHub.</p><pre class="line-numbers language-python" language="python" ><code>sudo apt-get updatesudo apt-get -y install git</code></pre><p>2. <strong>Clone the repository to your home directory.</strong> This will ensure we have all the code and audio files we need to run the project.</p><pre class="line-numbers language-python" language="python" ><code>cd ~/git clone https://github.com/rydercalmdown/facial_recognition_doorbell.git</code></pre><p>3. <strong>Run the “make install” command </strong>to install all project dependencies. This script will take care of installing lower level dependencies, as well as the Python libraries you need for the project to run. This should take about 10-15 minutes on a Raspberry Pi 4.</p><pre class="line-numbers language-python" language="python" ><code>cd ~/facial_recognition_doorbell/make install</code></pre><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1280px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="" name="image7.png" alt="Facial-Recognition Doorbell with a Raspberry Pi" src="https://cdn.mos.cms.futurecdn.net/nan6tZGWidkLbatcoFHhsh.png" mos="" align="middle" fullscreen="1" width="1280" height="720" attribution="" endorsement="" class="expandable"><a href='https://cdn.mos.cms.futurecdn.net/nan6tZGWidkLbatcoFHhsh.png' target='_blank' class='expand-button icon-expand-image icon' ></a></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Hardware)</span></figcaption></figure><p>4. <strong>Set the 3.5mm audio output to be the default </strong>audio output in raspi-config. You do this by launching raspi-config (entering <em>sudo raspi-config</em> at the command prompt) and navigating to System Options -> Audio -> Headphones 1. The pi allows for audio to be outputted to either the 3.5mm analog output, or over the HDMI port. If you do not have a monitor attached, headphones may be the only option. </p><pre class="line-numbers language-python" language="python" ><code>sudo raspi-config# Navigate to System Options -> Audio -> Headphones 1</code></pre><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1280px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="" name="image5.png" alt="Facial-Recognition Doorbell with a Raspberry Pi" src="https://cdn.mos.cms.futurecdn.net/CdcMKUTikUCfiW8iCizMeh.png" mos="" align="middle" fullscreen="1" width="1280" height="720" attribution="" endorsement="" class="expandable"><a href='https://cdn.mos.cms.futurecdn.net/CdcMKUTikUCfiW8iCizMeh.png' target='_blank' class='expand-button icon-expand-image icon' ></a></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Hardware)</span></figcaption></figure><p>5. <strong>Plug your speakers into </strong>your Raspberry Pi using a 3.5mm cable. </p><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1280px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="" name="image1.png" alt="Facial-Recognition Doorbell with a Raspberry Pi" src="https://cdn.mos.cms.futurecdn.net/NYahQsk8WgKKMF2jVM4c7h.png" mos="" align="middle" fullscreen="1" width="1280" height="720" attribution="" endorsement="" class="expandable"><a href='https://cdn.mos.cms.futurecdn.net/NYahQsk8WgKKMF2jVM4c7h.png' target='_blank' class='expand-button icon-expand-image icon' ></a></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Hardware)</span></figcaption></figure><p>6. <strong>Test your speakers by playing the doorbell audio file</strong>. You should hear a doorbell sound from your speakers. In my case I’m using a megaphone, but feel free to use whatever speakers you have available. </p><pre class="line-numbers language-python" language="python" ><code>mpg321 /home/pi/facial_recognition_doorbell/src/audio/doorbell.mp3</code></pre><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1280px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="" name="image2.png" alt="Facial-Recognition Doorbell with a Raspberry Pi" src="https://cdn.mos.cms.futurecdn.net/3Kfbz4JDGvSXTsamsZveDh.png" mos="" align="middle" fullscreen="1" width="1280" height="720" attribution="" endorsement="" class="expandable"><a href='https://cdn.mos.cms.futurecdn.net/3Kfbz4JDGvSXTsamsZveDh.png' target='_blank' class='expand-button icon-expand-image icon' ></a></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Hardware)</span></figcaption></figure><p>7. <strong>Test text to speech on your pi</strong> by running the following command. You should hear the text spoken out loud through your speakers.</p><pre class="line-numbers language-python" language="python" ><code>say ‘hello there’# Press Ctrl + C to exit if stuck</code></pre><p>8. <strong>Flash the custom RTSP firmware to your Wyze camera</strong> <a href="https://support.wyze.com/hc/en-us/articles/360026245231-Wyze-Cam-RTSP"><u>using this tutorial</u></a>. Installing RTSP support allows us to connect to the camera and grab frames directly with Python. You will need a Wyze V2 camera and a microSD card.</p><p>9. <strong>Get the RTSP URL value</strong> from your Wyze application, and <strong>edit the RTSP_URI variable in the Makefile</strong> to point the Raspberry Pi to your camera. You can find the RTSP URL in the “Advanced Settings” section of your Wyze application on your phone.</p><p><br></p><pre class="line-numbers language-python" language="python" ><code>cd ~/facial_recognition_doorbell/nano Makefile# STREAM_URI=rtsp://your_username:your_password@camera_ip_address/live</code></pre><p>10. <strong>Install your camera facing outwards from your front door</strong>. Keep in mind the Wyze V2 is not weather proof, so I’m keeping mine in a covered area. Ideally the camera should be mounted above the door pointing directly towards any person who would approach. This allows the facial recognition to work best. </p><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1280px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="" name="image3.png" alt="Facial-Recognition Doorbell with a Raspberry Pi" src="https://cdn.mos.cms.futurecdn.net/xEL2b7dNtMYtqRagtSjTQh.png" mos="" align="middle" fullscreen="1" width="1280" height="720" attribution="" endorsement="" class="expandable"><a href='https://cdn.mos.cms.futurecdn.net/xEL2b7dNtMYtqRagtSjTQh.png' target='_blank' class='expand-button icon-expand-image icon' ></a></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Hardware)</span></figcaption></figure><p>11. <strong>Download photos of known people and save them with their file names</strong>. Any .jpeg, .jpg or .png photo with someone’s face will work. There should be only one face per photo, and it’s not necessary to use more than one photo for each person. I have one for each one of my friends that comes by my house.</p><pre class="line-numbers language-python" language="python" ><code>ryder.jpeg</code></pre><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1280px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="" name="image4.png" alt="Facial-Recognition Doorbell with a Raspberry Pi" src="https://cdn.mos.cms.futurecdn.net/tsdTPeCps6PHmpT5gnzaWh.png" mos="" align="middle" fullscreen="1" width="1280" height="720" attribution="" endorsement="" class="expandable"><a href='https://cdn.mos.cms.futurecdn.net/tsdTPeCps6PHmpT5gnzaWh.png' target='_blank' class='expand-button icon-expand-image icon' ></a></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Hardware)</span></figcaption></figure><p>12. <strong>Copy the photos of known people into the src/faces directory.</strong> </p><pre class="line-numbers language-python" language="python" ><code>mv ryder.jpeg /home/pi/facial_recognition_doorbell/src/faces/</code></pre><p>13. <strong>Run the “make run” command </strong>on the pi to <strong>start the doorbell system</strong>. The system will first look for the detection of a person. When a person is detected, the doorbell will ring, and the system will start identifying any known faces from the faces directory. If a face is found, the system will announce the person at the door using text to speech. </p><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1280px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="" name="image6.png" alt="Facial-Recognition Doorbell with a Raspberry Pi" src="https://cdn.mos.cms.futurecdn.net/JWjxAtkjgi6N2USV65c5oh.png" mos="" align="middle" fullscreen="1" width="1280" height="720" attribution="" endorsement="" class="expandable"><a href='https://cdn.mos.cms.futurecdn.net/JWjxAtkjgi6N2USV65c5oh.png' target='_blank' class='expand-button icon-expand-image icon' ></a></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Hardware)</span></figcaption></figure><p>We now have a system that will ring whenever a person is at the door, and announce their name if we have their photo on file. </p>
                                                            </article>
                            ]]>
                        </content:encoded>
                                                </item>
                                <item>
                                                            <title><![CDATA[ How To Build a Person-Detecting Doorbell with Raspberry Pi ]]></title>
                                                                                                                                                                                                <link>https://www.tomshardware.com/how-to/raspberry-pi-person-detecting-doorbell</link>
                                                                            <description>
                            <![CDATA[ Make the bell ring using facial detection, without anyone even pushing a button. ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">FBNin29y9ZtgNLooumERe7</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/VTGJsjmAELgowxAxKEEAH5-1280-80.png" type="image/png" length="0"></enclosure>
                                                                        <pubDate>Sun, 29 Aug 2021 13:00:47 +0000</pubDate>                                                                                                                                <updated>Wed, 05 Feb 2025 14:48:59 +0000</updated>
                                                                                                                                            <category><![CDATA[Raspberry Pi]]></category>
                                                                                                <author><![CDATA[ ryder+toms@ryderdamen.com (Ryder Damen) ]]></author>                    <dc:creator><![CDATA[ Ryder Damen ]]></dc:creator>                                                                                    <dc:source><![CDATA[ https://cdn.mos.cms.futurecdn.net/yHmRhXRwnn6Tza4pvE2MAY.jpg ]]></dc:source>
                                                                <dc:description><![CDATA[ &lt;p&gt;Ryder is a creative technologist and Raspberry Pi aficionado. While he spends most of his time on the software side of things, one of his favorite pastimes is taking old technology and giving it a new (often pointless) purpose. In his free time, he likes to create videos, longboard, and explore the vast Canadian wilderness.&lt;/p&gt; ]]></dc:description>
                                                                                                                                <cf:isSponsored>false</cf:isSponsored>
                <cf:hasAffiliateLinks>false</cf:hasAffiliateLinks>
                <cf:isPaid>false</cf:isPaid>
                                                                                                                                <media:content type="image/png" url="https://cdn.mos.cms.futurecdn.net/VTGJsjmAELgowxAxKEEAH5-1280-80.png">
                                                            <media:credit><![CDATA[Tom&#039;s Hardware]]></media:credit>
                                                                                                                                                                                                                                    <media:description><![CDATA[Detecting Doorbell with Raspberry Pi]]></media:description>                                                            <media:text><![CDATA[Detecting Doorbell with Raspberry Pi]]></media:text>
                                <media:title type="plain"><![CDATA[Detecting Doorbell with Raspberry Pi]]></media:title>
                                                    </media:content>
                                                    <media:thumbnail url="https://cdn.mos.cms.futurecdn.net/VTGJsjmAELgowxAxKEEAH5-1280-80.png" />
                                                                                                                                                                    <content:encoded >
                            <![CDATA[
                            <article>
                                <p>I don’t have a doorbell, and while I could go out and buy a wireless one - I never pass up an opportunity to over-complicate something for the sake of learning to do something new. Today we’re dipping our toes into home security by building an automatic person-detecting doorbell system using a security camera and a Raspberry Pi.</p><p>While we’re using a doorbell sound effect in today’s project, this technology can be easily adapted to monitor other areas of your home, alerting you with a sound effect if someone’s in your garage, backyard, or anywhere else you can put a camera. </p><p>Here’s how to use a Raspberry Pi, a security camera, and a bit of machine learning to detect if someone’s at your door and play a doorbell sound effect.</p><h2 id="what-you-x2019-ll-need-for-this-project-xa0-2">What You’ll Need For This Project </h2><ul><li><a href="https://www.tomshardware.com/reviews/raspberry-pi-4"><u>Raspberry Pi 4</u></a> or Raspberry Pi 3 with power adapter</li><li><a href="https://www.amazon.com/Creative-Labs-Pebble-Black-Loudspeaker/dp/B0791H74NT/"><u>Desktop speakers or a megaphone with a 3.5mm input and 3.5mm cable</u></a></li><li><a href="https://www.amazon.com/WYZE-Indoor-Monitoring-Camera-MicroSD/dp/B08ZXQG4FX/"><u>Wyze Cam V2</u></a> (Wyze Cam V3 is not yet compatible)</li><li>2x8 GB (or larger) microSD cards, one for Raspberry Pi, another for the camera.</li><li>Monitor with HDMI and power cables. (Optional)</li></ul><h2 id="how-to-turn-a-raspberry-pi-into-a-person-detecting-doorbell">How to Turn a Raspberry Pi into a Person-Detecting Doorbell</h2><p>Before you get started, get your Raspberry Pi set up. If you haven’t done this before, see our article on how to <a href="https://www.tomshardware.com/how-to/set-up-raspberry-pi"><u>set up a Raspberry Pi</u></a> for the first time or how to do a <a href="https://www.tomshardware.com/reviews/raspberry-pi-headless-setup-how-to,6028.html"><u>headless Raspberry Pi install</u></a> (without the keyboard and screen). For this project, we recommend a <a href="https://www.tomshardware.com/reviews/raspberry-pi-headless-setup-how-to,6028.html"><u>headless Raspberry Pi install</u></a>.</p><p>1. <strong>Install git. </strong>We’ll need it to download the code from GitHub.</p><p><br></p><pre class="line-numbers language-python" language="python" ><code>sudo apt-get updatesudo apt-get -y install git</code></pre><p>2. <strong>Clone the repository to your home directory.</strong> This will ensure we have all the code and audio files we need to run the project.</p><pre class="line-numbers language-python" language="python" ><code>cd ~/git clone https://github.com/rydercalmdown/person_detecting_doorbell.git</code></pre><p>3. <strong>Run the “make install” command </strong>to install all project dependencies. This script will take care of installing lower level dependencies, as well as the Python libraries you need for the project to run. The machine learning library we’re using to detect people is packaged within one of the Python libraries, so it may take a few minutes to install.</p><pre class="line-numbers language-python" language="python" ><code>cd ~/person_detecting_doorbell/make install</code></pre><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1280px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="" name="image2.png" alt="Detecting Doorbell with Raspberry Pi" src="https://cdn.mos.cms.futurecdn.net/7UZRsePfKHopthwWzvuAU4.png" mos="" align="middle" fullscreen="1" width="1280" height="720" attribution="" endorsement="" class="expandable"><a href='https://cdn.mos.cms.futurecdn.net/7UZRsePfKHopthwWzvuAU4.png' target='_blank' class='expand-button icon-expand-image icon' ></a></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Hardware)</span></figcaption></figure><p>4. <strong>Set the 3.5mm audio output to be the default </strong>audio output in raspi-config. You do this by launching raspi-config (entering <em>sudo raspi-config</em> at the command prompt) and navigating to System Options -> Audio -> Headphones 1. The pi allows for audio to be outputted to either the 3.5mm analog output, or over the HDMI port. If you do not have a monitor attached, Headphones may be the only option.</p><pre class="line-numbers language-python" language="python" ><code>sudo raspi-config# Navigate to System Options -> Audio -> Headphones 1</code></pre><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1280px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="" name="image1.png" alt="Detecting Doorbell with Raspberry Pi" src="https://cdn.mos.cms.futurecdn.net/a5vCcCNvjZp3Jw8gEGEXL4.png" mos="" align="middle" fullscreen="1" width="1280" height="720" attribution="" endorsement="" class="expandable"><a href='https://cdn.mos.cms.futurecdn.net/a5vCcCNvjZp3Jw8gEGEXL4.png' target='_blank' class='expand-button icon-expand-image icon' ></a></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Hardware)</span></figcaption></figure><p>5. <strong>Plug your speakers into </strong>your Raspberry Pi using a 3.5mm cable. </p><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1280px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="" name="image3.png" alt="Detecting Doorbell with Raspberry Pi" src="https://cdn.mos.cms.futurecdn.net/oLtVPQBbzqSyt9RkPyZcn4.png" mos="" align="middle" fullscreen="1" width="1280" height="720" attribution="" endorsement="" class="expandable"><a href='https://cdn.mos.cms.futurecdn.net/oLtVPQBbzqSyt9RkPyZcn4.png' target='_blank' class='expand-button icon-expand-image icon' ></a></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Hardware)</span></figcaption></figure><p>6. <strong>Test your speakers by playing the doorbell audio file</strong>. You should hear a doorbell sound from your speakers. In my case I’m using a megaphone, but feel free to use whatever speakers you have available.</p><pre class="line-numbers language-python" language="python" ><code>mpg321 /home/pi/person_detecting_doorbell/src/audio/doorbell.mp3</code></pre><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1280px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="" name="image4.png" alt="Detecting Doorbell with Raspberry Pi" src="https://cdn.mos.cms.futurecdn.net/2GrpkgLQ4KirnzmdrTJqs4.png" mos="" align="middle" fullscreen="1" width="1280" height="720" attribution="" endorsement="" class="expandable"><a href='https://cdn.mos.cms.futurecdn.net/2GrpkgLQ4KirnzmdrTJqs4.png' target='_blank' class='expand-button icon-expand-image icon' ></a></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Hardware)</span></figcaption></figure><p>7.  <strong>Flash the custom RTSP firmware to your Wyze camera</strong> <a href="https://support.wyze.com/hc/en-us/articles/360026245231-Wyze-Cam-RTSP"><u>using this tutorial</u></a>. Installing RTSP support allows us to connect to the camera and grab frames directly with Python. You will need a Wyze V2 camera and a microSD card.</p><p>8. <strong>Get the RTSP URL value</strong> from your Wyze application, and <strong>edit the RTSP_URI variable in the Makefile</strong> to point the Raspberry Pi to your camera. You can find the RTSP URL in the “Advanced Settings” section of your Wyze application on your phone.</p><p><br></p><pre class="line-numbers language-python" language="python" ><code>cd ~/person_detecting_doorbell/nano Makefile# STREAM_URI=rtsp://your_username:your_passport@camera_ip_address/live</code></pre><p>9. <strong>Install your camera facing your front door</strong>. You can place it anywhere you like, but I have mine mounted outside. Keep in mind the Wyze V2 is not weather proof, so I’m keeping mine in a covered area. </p><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1280px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="" name="image5.png" alt="Detecting Doorbell with Raspberry Pi" src="https://cdn.mos.cms.futurecdn.net/FyQB8gzvcGMUfa4ctRrf45.png" mos="" align="middle" fullscreen="1" width="1280" height="720" attribution="" endorsement="" class="expandable"><a href='https://cdn.mos.cms.futurecdn.net/FyQB8gzvcGMUfa4ctRrf45.png' target='_blank' class='expand-button icon-expand-image icon' ></a></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Hardware)</span></figcaption></figure><p>10. <strong>Run the “make run” command </strong>on the pi to <strong>start the doorbell system</strong>. When a person is detected in the frame, the doorbell will ring continuously with a 5 second delay in between rings until the person leaves the frame. </p><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1280px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="" name="image7.png" alt="Detecting Doorbell with Raspberry Pi" src="https://cdn.mos.cms.futurecdn.net/73ks8uQSme8oeZMc6e9DP5.png" mos="" align="middle" fullscreen="1" width="1280" height="720" attribution="" endorsement="" class="expandable"><a href='https://cdn.mos.cms.futurecdn.net/73ks8uQSme8oeZMc6e9DP5.png' target='_blank' class='expand-button icon-expand-image icon' ></a></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Hardware)</span></figcaption></figure><p>You can adjust the delay between rings in app.py, and modify the doorbell sound effect by replacing the .mp3 file within the repository. Now all that’s left to do is wait for people to arrive.</p><p>Pro tip: use a sound effect of barking dogs instead of a doorbell to make this more of a security system than a doorbell.</p>
                                                            </article>
                            ]]>
                        </content:encoded>
                                                </item>
                                <item>
                                                            <title><![CDATA[ How to Build a Raspberry Pi-Powered  Teleprompter ]]></title>
                                                                                                                                                                                                <link>https://www.tomshardware.com/how-to/build-raspberry-pi-teleprompter</link>
                                                                            <description>
                            <![CDATA[ Using a Raspberry Pi, some electronics and some 3D printed parts, you can create a teleprompter to help with making videos. ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">cjsPbWt8uPFooAxcsBVMcY</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/YR5uFBWspFjdABdtXvfQaG-1280-80.png" type="image/png" length="0"></enclosure>
                                                                        <pubDate>Sun, 22 Aug 2021 14:07:30 +0000</pubDate>                                                                                                                                <updated>Wed, 05 Feb 2025 14:48:47 +0000</updated>
                                                                                                                                            <category><![CDATA[Raspberry Pi]]></category>
                                                                                                                    <dc:creator><![CDATA[ Liz Clark ]]></dc:creator>                                                                                                        <dc:description><![CDATA[ null ]]></dc:description>
                                                                                                                                <cf:isSponsored>false</cf:isSponsored>
                <cf:hasAffiliateLinks>false</cf:hasAffiliateLinks>
                <cf:isPaid>false</cf:isPaid>
                                                                                                                                <media:content type="image/png" url="https://cdn.mos.cms.futurecdn.net/YR5uFBWspFjdABdtXvfQaG-1280-80.png">
                                                            <media:credit><![CDATA[Tom&#039;s Hardware]]></media:credit>
                                                                                                                                                                                                                                    <media:description><![CDATA[Raspberry Pi-Powered  Teleprompter]]></media:description>                                                            <media:text><![CDATA[Raspberry Pi-Powered  Teleprompter]]></media:text>
                                <media:title type="plain"><![CDATA[Raspberry Pi-Powered  Teleprompter]]></media:title>
                                                    </media:content>
                                                    <media:thumbnail url="https://cdn.mos.cms.futurecdn.net/YR5uFBWspFjdABdtXvfQaG-1280-80.png" />
                                                                                                                                                                    <content:encoded >
                            <![CDATA[
                            <article>
                                <p>There are many options out there for content creators when it comes to teleprompters, but most affordable ones involve an app on your phone that can be clunky or extra hardware that may not work well with your camera setup. However, you can build your own Raspberry Pi-powered teleprompter,  using some Python code, basic electronic components and 3D printed parts. </p><h2 id="what-you-x2019-ll-need-raspberry-pi-teleprompter">What You’ll Need: Raspberry Pi Teleprompter</h2><ul><li><a href="https://www.microcenter.com/product/621439/raspberry-pi-4-model-b---2gb-ddr4">Raspberry Pi 4B</a></li><li>3 tactile momentary buttons</li><li>sliding switch</li><li><a href="https://www.adafruit.com/product/2310">Adafruit Perma-Proto HAT</a></li><li><a href="https://www.adafruit.com/product/2218">Adafruit TFP401 HDMI/DVI Decoder</a> to 40-pin TTL Breakout Without Touch</li><li><a href="https://www.adafruit.com/product/1680)">5" 40-pin 800x480 TFT Display without Touchscreen</a></li><li>HDMI to Micro-HDMI cable</li><li>Black PLA Filament</li><li>Wire and Soldering Iron</li></ul><h2 id="software-setup-of-raspberry-pi-teleprompter-install-dependencies-and-scripts">Software Setup of Raspberry Pi Teleprompter: Install Dependencies and Scripts</h2><p>The Python code requires a few dependencies. You&apos;ll need to install two libraries: Tkinter and pynput, along with Adafruit’s Blinka layer.</p><p>1.  <strong>Install Tkinter</strong> using the apt-get command in the terminal. Tkinter is a Python library for creating basic graphical user interfaces and here it&apos;s being used to create the teleprompter application portion of the project.  </p><pre class="line-numbers language-python" language="python" ><code>sudo apt-get install python-tk</code></pre><p>2. <strong>Install Pynput using pip3</strong>. Pynput is a keyboard and mouse simulator Python library. For this project, it&apos;s being used to simulate mouse scrolling for the text box created with Tkinter.</p><pre class="line-numbers language-python" language="python" ><code>pip3 install pynput</code></pre><p>3. <strong>Install Blinka</strong>,, an Adafruit CircuitPython compatibility layer for single-board computers running Linux. Blinka also lets you run CircuitPython libraries alongside Python libraries. The basic setup just involves entering these three commands:</p><pre class="line-numbers language-python" language="python" ><code>sudo pip3 install --upgrade adafruit-python-shellwget https://raw.githubusercontent.com/adafruit/Raspberry-Pi-Installer-Scripts/master/raspi-blinka.pysudo python3 raspi-blinka.py</code></pre><p>If you have issues, see Adafruit’s <a href="https://learn.adafruit.com/circuitpython-on-raspberrypi-linux/installing-circuitpython-on-raspberry-pi"><u>Blinka install guide</u></a>.</p><p>4. <strong>Download all three .py files </strong>from my <a href="https://github.com/BlitzCityDIY/raspberryPi-teleprompter/tree/main/Python%20%26%20Bash%20scripts"><u>github page</u></a> and place them in  your /home/pi directory. </p><h2 id="python-scripts-for-raspberry-pi-teleprompter">Python Scripts for Raspberry Pi Teleprompter</h2><p>The software for the teleprompter involves two Python scripts (you downloaded above) plus one Bash script. The first Python is the actual teleprompter app written with Tkinter. The code creates a scrollable text box where you can display your scripts. There is also a button on the side of the app. When you click it, you can open text files to load into the text box. If you need to make any edits to your script while it is open in the app, you can type directly into the text box.</p><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:800px;"><p class="vanilla-image-block" style="padding-top:60.00%;"><img id="" name="image_1.png" alt="Raspberry Pi-Powered  Teleprompter" src="https://cdn.mos.cms.futurecdn.net/Ef5oDmKqusLjLFQufq9BQF.png" mos="" align="middle" fullscreen="1" width="800" height="480" attribution="" endorsement="" class="expandable"><a href='https://cdn.mos.cms.futurecdn.net/Ef5oDmKqusLjLFQufq9BQF.png' target='_blank' class='expand-button icon-expand-image icon' ></a></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Hardware)</span></figcaption></figure><p>The second Python script is for controlling the teleprompter app with external digital inputs. In this program, we&apos;re using the pynput library and Blinka, to simulate mouse scrolling inputs and the buttons. It can be thought of as the control interface for the Tkinter script.</p><p>When the switch is engaged, pynput will begin scrolling allowing your teleprompter to run. Two buttons are also available to increase or decrease the speed for the scrolling. Finally, one additional button is available to toggle between having the teleprompter app be full screen or windowed on the Pi.</p><p>We can use a bash script to run the two Python scripts concurrently. The Bash script is launched from the terminal using “sudo ./tele.sh”. </p><h2 id="wiring-xa0-the-raspberry-pi-teleprompter">Wiring  the Raspberry Pi Teleprompter</h2><p>To interface with the buttons to control the teleprompter on the Raspberry Pi, we&apos;re using an Adafruit Perma-Proto HAT. It is a breadboard-style blank board that lets you easily solder circuits for use with the Pi. It has power, ground and GPIO pins broken out and labeled. </p><p>The Fritzing circuit diagram will show you how to wire up the three buttons and the sliding switch. The two buttons on the upper left of the Perma-Proto HAT control the speed of the teleprompter and the one button on the right switches between fullscreen and windowed mode.</p><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1347px;"><p class="vanilla-image-block" style="padding-top:67.71%;"><img id="" name="image_2.png" alt="Raspberry Pi-Powered  Teleprompter" src="https://cdn.mos.cms.futurecdn.net/S88o2JbkyirCw3CUzxbAcF.png" mos="" align="middle" fullscreen="1" width="1347" height="912" attribution="" endorsement="" class="expandable"><a href='https://cdn.mos.cms.futurecdn.net/S88o2JbkyirCw3CUzxbAcF.png' target='_blank' class='expand-button icon-expand-image icon' ></a></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Hardware)</span></figcaption></figure><p>The switch controls whether the teleprompter is running or not. Additionally, the HDMI decoder board can receive ground and 5V power from the Perma-Proto HAT. Otherwise, it needs to be powered through USB.</p><h2 id="3d-printing-the-raspberry-pi-teleprompter">3D Printing the Raspberry Pi Teleprompter</h2><p>There are three 3D printed parts you need to create the body of the teleprompter. The .STL files can be downloaded from my <a href="https://github.com/BlitzCityDIY/raspberryPi-teleprompter"><u>GitHub page</u></a>. The two larger parts snap fit together to make the main portion of the teleprompter. One side has a tripod mount and a cutout for a DSLR lens to fit into. The other side has mounts and cutouts for the reflective acrylic, screen and Raspberry Pi. </p><p>It&apos;s important to print the part, or paint it after, in black. It needs to be dark so that you can see the reflection of the screen in the acrylic. </p><p>The third 3D printed part is a PCB mount for the HDMI decoder board that is used with the 5-inch HDMI monitor that carries the video signal from the Raspberry Pi.</p><h2 id="assembling-the-raspberry-pi-teleprompter-xa0">Assembling the Raspberry Pi Teleprompter </h2><p>After you’ve 3D printed your parts, it’s time to put them together.</p><p>1. <strong>Attach two M2.5 standoffs </strong>with two M2.5 nuts in the front mounting holes of the front 3D printed part for the Raspberry Pi. </p><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1280px;"><p class="vanilla-image-block" style="padding-top:75.00%;"><img id="" name="image_3.png" alt="Raspberry Pi-Powered  Teleprompter" src="https://cdn.mos.cms.futurecdn.net/8eT2i7hsghQCmvamzk7wcS.png" mos="" align="middle" fullscreen="1" width="1280" height="960" attribution="" endorsement="" class="expandable"><a href='https://cdn.mos.cms.futurecdn.net/8eT2i7hsghQCmvamzk7wcS.png' target='_blank' class='expand-button icon-expand-image icon' ></a></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Hardware)</span></figcaption></figure><p>2.  <strong>Attach the PCB mount for the HDMI decoder </strong>PCB with four M3 nuts and screws at the bottom of the 3D printed part. </p><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1280px;"><p class="vanilla-image-block" style="padding-top:75.00%;"><img id="" name="image_4.png" alt="Raspberry Pi-Powered  Teleprompter" src="https://cdn.mos.cms.futurecdn.net/9dgL3Z9umLBaB9gzKqSnJT.png" mos="" align="middle" fullscreen="1" width="1280" height="960" attribution="" endorsement="" class="expandable"><a href='https://cdn.mos.cms.futurecdn.net/9dgL3Z9umLBaB9gzKqSnJT.png' target='_blank' class='expand-button icon-expand-image icon' ></a></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Hardware)</span></figcaption></figure><p>3. <strong>Us</strong>e <strong>two M2.5 standoffs to attach </strong>the Raspberry Pi  to the mounted M2.5 standoffs. The Pi is going to be mounted to the front of the teleprompter for easy access.</p><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1280px;"><p class="vanilla-image-block" style="padding-top:75.00%;"><img id="" name="image_5.png" alt="Raspberry Pi-Powered  Teleprompter" src="https://cdn.mos.cms.futurecdn.net/WUHzKEzM9cQQLVJjftrkdT.png" mos="" align="middle" fullscreen="1" width="1280" height="960" attribution="" endorsement="" class="expandable"><a href='https://cdn.mos.cms.futurecdn.net/WUHzKEzM9cQQLVJjftrkdT.png' target='_blank' class='expand-button icon-expand-image icon' ></a></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Hardware)</span></figcaption></figure><p>4. <strong>Place the Perma-Proto HAT on the Raspberry Pi&apos;s GPIO header </strong>and <strong>secure it to the M2.5 standoffs </strong>with two M2.5 screws.</p><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1280px;"><p class="vanilla-image-block" style="padding-top:75.00%;"><img id="" name="image_6.png" alt="Raspberry Pi-Powered  Teleprompter" src="https://cdn.mos.cms.futurecdn.net/JBrm2uhnFRqEdXPknmARxT.png" mos="" align="middle" fullscreen="1" width="1280" height="960" attribution="" endorsement="" class="expandable"><a href='https://cdn.mos.cms.futurecdn.net/JBrm2uhnFRqEdXPknmARxT.png' target='_blank' class='expand-button icon-expand-image icon' ></a></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Hardware)</span></figcaption></figure><p>5. <strong>Insert the 5" screen into the 3D printed part </strong>and carefully <strong>run its flexible connector through the bottom </strong>of the case. Be careful because the connector can easily become damaged. Then insert the connector into the slot on the HDMI decoder board.</p><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1280px;"><p class="vanilla-image-block" style="padding-top:75.00%;"><img id="" name="image_7.png" alt="Raspberry Pi-Powered  Teleprompter" src="https://cdn.mos.cms.futurecdn.net/a9F78po4b7x6SFxrrbZjMU.png" mos="" align="middle" fullscreen="1" width="1280" height="960" attribution="" endorsement="" class="expandable"><a href='https://cdn.mos.cms.futurecdn.net/a9F78po4b7x6SFxrrbZjMU.png' target='_blank' class='expand-button icon-expand-image icon' ></a></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Hardware)</span></figcaption></figure><p>6. <strong>Mount the HDMI decoder board </strong>with 4 M3 screws onto the 3D printed PCB carrier.</p><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1280px;"><p class="vanilla-image-block" style="padding-top:75.00%;"><img id="" name="image_8.png" alt="Raspberry Pi-Powered  Teleprompter" src="https://cdn.mos.cms.futurecdn.net/DCYwDaBBPxrnc2w6s8wpvS.png" mos="" align="middle" fullscreen="1" width="1280" height="960" attribution="" endorsement="" class="expandable"><a href='https://cdn.mos.cms.futurecdn.net/DCYwDaBBPxrnc2w6s8wpvS.png' target='_blank' class='expand-button icon-expand-image icon' ></a></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Hardware)</span></figcaption></figure><p>7. <strong>Run an HDMI cable between the Raspberry Pi and the HDMI decoder board</strong>. You can use any cable, but a modular, ribbon cable can keep the build compact. However, much like the screen&apos;s connector they can be fragile so handle with care.</p><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1280px;"><p class="vanilla-image-block" style="padding-top:75.00%;"><img id="" name="image_9.png" alt="Raspberry Pi-Powered  Teleprompter" src="https://cdn.mos.cms.futurecdn.net/ThnLhMeovdMxd6PTuooGkU.png" mos="" align="middle" fullscreen="1" width="1280" height="960" attribution="" endorsement="" class="expandable"><a href='https://cdn.mos.cms.futurecdn.net/ThnLhMeovdMxd6PTuooGkU.png' target='_blank' class='expand-button icon-expand-image icon' ></a></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Hardware)</span></figcaption></figure><p>And that concludes the hardware assembly for the teleprompter!</p><p>8. <strong>Cut a piece of acrylic</strong> approximately 109 mm by 127 mm. Do this using a safety knife or other cutting tool that is recommended for acrylic. Then slide the acrylic into the slots on the 3D printed part.  </p><h2 id="display-setup-of-raspberry-pi-teleprompter">Display Setup of Raspberry Pi Teleprompter</h2><p>The final step is to invert the Raspberry Pi&apos;s display so that it is mirrored on the screen and is reflected properly in the acrylic. To do this, you&apos;ll edit the /boot/config.txt file a bit. We’ll list the changes below but  you can also see them in my <a href="https://github.com/BlitzCityDIY/raspberryPi-teleprompter/blob/main/config.txt"><u>sample config.txt file</u></a>.</p><p>1. <strong>Open /boot/config.txt for editing</strong>.</p><pre class="line-numbers language-python" language="python" ><code>sudo nano /boot/config.txt</code></pre><p>2. <strong>Disable the FKMS graphics driver</strong> by putting a # sign (for comment out) in front of any line that has dtoverlay=vc4-kms-v3d on it.  Normally this isn&apos;t recommended, but legacy graphics gives you more control over flipping and inverting the display. </p><p>3. <strong>Force an 800 x 480 resolution</strong> by making sure the “force a specific HDMI mode” section looks like what you see below. The resolution of the screen is also forced to 800x480, because since the HDMI decoder does not have scaling.</p><pre class="line-numbers language-python" language="python" ><code># uncomment to force a specific HDMI mode (this will force VGA)hdmi_group=2hdmi_mode=1hdmi_mode=87hdmi_cvt 800 480 60 6 0 0 0</code></pre><p>4. <strong>Add the line display_rotate=0x20000 </strong>to the bottom of config.txt in order to invert the display.</p><pre class="line-numbers language-python" language="python" ><code>display_rotate=0x20000</code></pre><p>5. <strong>Save and reboot your Pi</strong>.</p><p>After rebooting, your Pi&apos;s display will be mirrored but appear correctly in the acrylic, making it ready to be a teleprompter.</p><h2 id="using-the-raspberry-pi-teleprompter">Using the Raspberry Pi Teleprompter</h2><p>There are a few different workflows that you can use with your Raspberry Pi teleprompter. You can use VNC or SSH to access the Pi remotely to load your video scripts and run your code or you can still use a wireless keyboard and mouse to use the teleprompter&apos;s display as a monitor for the Pi. </p><p>Going further, you may choose to have the bash script run every time you start up (see <a href="http://tomshardware.com/how-to/run-script-at-boot-raspberry-pi"><u>how to run a script at Raspberry Pi boot</u></a>). However you choose to use it, you will have a compact and open source teleprompter option to use during your videos or presentations.</p>
                                                            </article>
                            ]]>
                        </content:encoded>
                                                </item>
                                <item>
                                                            <title><![CDATA[ How To Recover Deleted Files From Any Drive in Linux ]]></title>
                                                                                                                                                                                                <link>https://www.tomshardware.com/how-to/recover-deleted-files-from-any-drive-in-linux</link>
                                                                            <description>
                            <![CDATA[ Testdisk and Photorec are powerful tools to recover accidentally deleted data from many different drives. ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">FNLFRcmq9iZf3osKZjNFhR</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/i3dVcrx6ZK6bSpdb7cY45K-1280-80.png" type="image/png" length="0"></enclosure>
                                                                        <pubDate>Sat, 21 Aug 2021 13:00:49 +0000</pubDate>                                                                                                                                <updated>Thu, 30 Jan 2025 13:42:20 +0000</updated>
                                                                                                                                            <category><![CDATA[Linux]]></category>
                                                    <category><![CDATA[Software]]></category>
                                                    <category><![CDATA[Operating Systems]]></category>
                                                                                                                    <dc:creator><![CDATA[ Shashank Sharma ]]></dc:creator>                                                                                    <dc:source><![CDATA[ https://cdn.mos.cms.futurecdn.net/PVGiqXbSwkzW7tg3LcnoCP.jpeg ]]></dc:source>
                                                                <dc:description><![CDATA[ &lt;p&gt;Shashank Sharma is a trial lawyer by profession, but a through-and-through geek by choice. He&#039;s spent nearly two decades writing about Linux and Open Source software for several online and print publications around the English-speaking world, including Linux.com, Linux Journal, Newsforge, Linux Format, and Linux User &amp;amp; Developer. A CLI-junkie, Shashank has co-authored Apress&#039; Beginning Fedora, and when not drafting legal briefs, can be found detailing his CLI escapades on Tom&#039;s Hardware. A bibliophile at heart, he juggles his downtime reading fiction and working to master the art of storytelling.&lt;/p&gt; ]]></dc:description>
                                                                                                                                <cf:isSponsored>false</cf:isSponsored>
                <cf:hasAffiliateLinks>false</cf:hasAffiliateLinks>
                <cf:isPaid>false</cf:isPaid>
                                                                                                                                <media:content type="image/png" url="https://cdn.mos.cms.futurecdn.net/i3dVcrx6ZK6bSpdb7cY45K-1280-80.png">
                                                            <media:credit><![CDATA[Tom&#039;s Hardware]]></media:credit>
                                                                                                                                                                                                                                    <media:description><![CDATA[Linux File Recovery]]></media:description>                                                            <media:text><![CDATA[Linux File Recovery]]></media:text>
                                <media:title type="plain"><![CDATA[Linux File Recovery]]></media:title>
                                                    </media:content>
                                                    <media:thumbnail url="https://cdn.mos.cms.futurecdn.net/i3dVcrx6ZK6bSpdb7cY45K-1280-80.png" />
                                                                                                                                                                    <content:encoded >
                            <![CDATA[
                            <article>
                                <p>Hardware failure and a careless user feeling adventurous with powerful utilities such as  dd  and fdisk can lead to data loss in Linux. Not only that, sometimes spring cleaning a partition or directory can also lead to accidentally deleting some useful files. Should that happen, there’s no reason to despair. With the PhotoRec utility, you can easily recover a variety of files, be it documents, images, music,  archives and so on. </p><p>Developed by CGSecurity and released under the GPL, PhotoRec is distributed as a companion utility of Testdisk, which can be used to recover and restore partitions. You can use either of these tools to recover files, but each has a job that it’s best suited for. Testdisk is best suited for recovering lost partitions. Whether this is on account of you overwriting or deleting a partition, or a partition becoming unreadable for any reason, Testdisk can help you restore the partition, or at the very least, recover data from it. But if all you’re interested in is recovering deleted files from a partition, hard disk or even a USB drive, you can use PhotoRec. Although initially designed to only recover image files (hence the name), PhotoRec can be used to recover just about any manner of file. </p><p>Even better, PhotoRec works by ignoring the underlying filesystem on the specified partition, disk or USB drive. Instead, it focuses on the unique signatures left by the different file types to identify them. This is why PhotoRec can work with FAT, NTFS, ext3, ext4 and other partition types.</p><p>In contrast, Testdisk only supports a limited number of filesystems. The greatest drawback of PhotoRec – if any tool that can seemingly pull deleted files out of the digital ether can have a drawback – is that it doesn’t retain the original filenames. This means that recovered files all sport a gibberish alpha-numeric name. If this is a deal-breaker for you, consider using Testdisk first to recover your lost files. </p><p>To Install Testdisk open a terminal window and first update the software repositories before installing testdisk. We’re using an Ubuntu machine for our installation.</p><pre class="line-numbers language-bash" language="bash" ><code>$ sudo apt install testdisk</code></pre><p>If you are using a Fedora or other RPM based distro, use dnf instead.</p><pre class="line-numbers language-bash" language="bash" ><code>$ sudo dnf install testdisk</code></pre><h2 id="get-recoverin-x2019-xa0">Get Recoverin’ </h2><p>Before you start using PhotoRec, it’s important to understand how a filesystem handles deleted files. When you delete a file, it isn’t immediately zapped into oblivion. Instead, the file system merely marks the file as deleted and assigns the space the file occupied as available for use. This means that until that space is taken up by another file, the original file is still there and can be retrieved using specialised data recovery tools.  </p><p>It’s for this reason why you should ideally stop using the system as soon as you realise that you’ve deleted an important file, because you’ll minimise the risk of its space being occupied. Although both PhotoRec  and Testdisk can recover files from deleted and then overwritten partitions, it decreases the chances of recovering all the files.</p><p>1. <strong>Using the file manager, create a directory</strong> where you wish to store the files recovered by PhotoRec. This directory should not be on the same partition or device from which you are attempting to recover files.</p><p>2. <strong>Open the terminal and fire up PhotoRec with sudo powers.</strong></p><pre class="line-numbers language-bash" language="bash" ><code>$ sudo photorec</code></pre><p>You’ll be presented with the welcome screen that lists all the partitions as well as connected disks and devices.</p><p>3. Using the up and down arrow keys <strong>select the drive that you wish to recover,</strong> then use the left and right keys to<strong> select </strong><em><strong>Proceed</strong></em> and <strong>press Enter.</strong> You can help speed things up by restricting the recovery to search for specific file types, such as pdf, jpg or mp3. <br><br>After selecting the device or partition from which you wish to recover deleted files, use the right/left arrow keys to select the<strong> File Opt</strong> button and press Enter. If your selected device comprises several partitions, PhotoRec will display all the partitions and enable you to choose the partition that was home to the deleted file. </p><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:854px;"><p class="vanilla-image-block" style="padding-top:69.67%;"><img id="" name="image4.png" alt="Linux File Recovery" src="https://cdn.mos.cms.futurecdn.net/WCQKXuonXBHjBzxVY5PMFK.png" mos="" align="middle" fullscreen="1" width="854" height="595" attribution="" endorsement="" class="expandable"><a href='https://cdn.mos.cms.futurecdn.net/WCQKXuonXBHjBzxVY5PMFK.png' target='_blank' class='expand-button icon-expand-image icon' ></a></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Hardware)</span></figcaption></figure><p>4. <strong>Select the filesystem type used on the drive that you wish to recover.</strong> If the drive had typical Linux partitions, select ext2/ext3. For anything else, choose the Other option.</p><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:854px;"><p class="vanilla-image-block" style="padding-top:69.67%;"><img id="" name="image1.png" alt="Linux File Recovery" src="https://cdn.mos.cms.futurecdn.net/uk49QDYpcKoLrwXG7zznyJ.png" mos="" align="middle" fullscreen="1" width="854" height="595" attribution="" endorsement="" class="expandable"><a href='https://cdn.mos.cms.futurecdn.net/uk49QDYpcKoLrwXG7zznyJ.png' target='_blank' class='expand-button icon-expand-image icon' ></a></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Hardware)</span></figcaption></figure><p>5. Using the up and down arrow keys<strong>, select whether to search and recover files from the free space of the drive, or from the entire drive.</strong> </p><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:854px;"><p class="vanilla-image-block" style="padding-top:69.67%;"><img id="" name="image3.png" alt="Linux File Recovery" src="https://cdn.mos.cms.futurecdn.net/EpeTiv2ozaLHECtXNPuM9K.png" mos="" align="middle" fullscreen="1" width="854" height="595" attribution="" endorsement="" class="expandable"><a href='https://cdn.mos.cms.futurecdn.net/EpeTiv2ozaLHECtXNPuM9K.png' target='_blank' class='expand-button icon-expand-image icon' ></a></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Hardware)</span></figcaption></figure><p>6. <strong>Select the destination for the recovered files. </strong>Pressing Enter will open directories. When ready <strong>press C to set the destination</strong> and start the recovery process </p><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:854px;"><p class="vanilla-image-block" style="padding-top:69.67%;"><img id="" name="image5.png" alt="Linux File Recovery" src="https://cdn.mos.cms.futurecdn.net/QowqHb6FqDuP2Gt9SnCUMK.png" mos="" align="middle" fullscreen="1" width="854" height="595" attribution="" endorsement="" class="expandable"><a href='https://cdn.mos.cms.futurecdn.net/QowqHb6FqDuP2Gt9SnCUMK.png' target='_blank' class='expand-button icon-expand-image icon' ></a></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Hardware)</span></figcaption></figure><h2 id="making-sense-of-recovered-files-xa0">Making Sense of Recovered Files </h2><p>Depending on the size of the partition or device, PhotoRec can take quite a while to perform the complete search for files. PhotoRec creates several directories such as <strong>recup_dir.1</strong> or <strong>recup_dir.2</strong> within the specified destination directory for recovered files. You’ll find all the recovered files within these directories, but PhotoRec makes no attempt at sorting the different files based on their name or file formats.</p><p>You can, however, resort to some quick CLI-fu to organise the recovered files.</p><p>1. <strong>Create directories for different file formats, such as mp3 or jpg. </strong></p><p>2. <strong>Use the  mv  command to move files </strong>of a specific format to the relevant directory. For example here we move all of the jpeg images into the images directory.</p><pre class="line-numbers language-bash" language="bash" ><code>$ mv ~/miracles-happen/recup_dir.*/*.jpg ~/miracle-happens/images/ </code></pre><p><em>This tutorial first appeared in an issue of </em><a href="https://linuxformat.com/"><u><em>Linux Format</em></u></a><em> magazine.</em> </p>
                                                            </article>
                            ]]>
                        </content:encoded>
                                                </item>
                                <item>
                                                            <title><![CDATA[ How to Stress Test Your CPU in Linux ]]></title>
                                                                                                                                                                                                <link>https://www.tomshardware.com/how-to/stress-test-cpu-in-linux</link>
                                                                            <description>
                            <![CDATA[ Monitor your system performance then run custom stress tests, all from one simple terminal interface. ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">gDUyCdvTPs7eSYAhB9feoR</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/geySqoXXQ7v5iicxSyTTK4-1280-80.jpg" type="image/jpeg" length="0"></enclosure>
                                                                        <pubDate>Sun, 08 Aug 2021 15:58:14 +0000</pubDate>                                                                                                                                <updated>Thu, 21 Aug 2025 09:49:05 +0000</updated>
                                                                                                                                            <category><![CDATA[Linux]]></category>
                                                    <category><![CDATA[Software]]></category>
                                                    <category><![CDATA[Operating Systems]]></category>
                                                                                                                    <dc:creator><![CDATA[ Shashank Sharma ]]></dc:creator>                                                                                    <dc:source><![CDATA[ https://cdn.mos.cms.futurecdn.net/PVGiqXbSwkzW7tg3LcnoCP.jpeg ]]></dc:source>
                                                                <dc:description><![CDATA[ &lt;p&gt;Shashank Sharma is a trial lawyer by profession, but a through-and-through geek by choice. He&#039;s spent nearly two decades writing about Linux and Open Source software for several online and print publications around the English-speaking world, including Linux.com, Linux Journal, Newsforge, Linux Format, and Linux User &amp;amp; Developer. A CLI-junkie, Shashank has co-authored Apress&#039; Beginning Fedora, and when not drafting legal briefs, can be found detailing his CLI escapades on Tom&#039;s Hardware. A bibliophile at heart, he juggles his downtime reading fiction and working to master the art of storytelling.&lt;/p&gt; ]]></dc:description>
                                                                                                                                <cf:isSponsored>false</cf:isSponsored>
                <cf:hasAffiliateLinks>false</cf:hasAffiliateLinks>
                <cf:isPaid>false</cf:isPaid>
                                                                                                                                <media:content type="image/jpeg" url="https://cdn.mos.cms.futurecdn.net/geySqoXXQ7v5iicxSyTTK4-1280-80.jpg">
                                                            <media:credit><![CDATA[Future]]></media:credit>
                                                                                                                                                                                                                                    <media:description><![CDATA[Stress Test Your CPU in Linux]]></media:description>                                                            <media:text><![CDATA[Stress Test Your CPU in Linux]]></media:text>
                                <media:title type="plain"><![CDATA[Stress Test Your CPU in Linux]]></media:title>
                                                    </media:content>
                                                    <media:thumbnail url="https://cdn.mos.cms.futurecdn.net/geySqoXXQ7v5iicxSyTTK4-1280-80.jpg" />
                                                                                                                                                                    <content:encoded >
                            <![CDATA[
                            <article>
                                <p>A key matrix for determining the vitality of a Linux distro, or the hardware that it runs on, is system performance. Depending on your purpose, you can choose from a variety of dedicated tools to monitor the different components such as CPU frequency, temperature and memory utilisation. But if you favour the CLI, like us, you’ll rather enjoy working with S-TUI.</p><p>With S-TUI, which is an acronym for Stress-Terminal UI, you can simultaneously monitor CPU temperature, frequency, power and utilisation. The utility presents all the information graphically and can even be used to  export the data into CSV files. Better still, you can configure S-TUI to automatically launch scripts when the values of any of the components being monitored breaches the defined threshold values. When coupled with stress, another command-line utility, S-TUI can also be used to stress-test your system.</p><h2 id="installing-s-tui-xa0">Installing S-TUI </h2><p>Although S-TUI isn’t available in the software repositories of most popular desktop distributions, installing the tool is fairly straightforward, and the <a href="https://github.com/amanusk/s-tui">project’s GitHub page</a> describes various installation techniques. For our install we shall use Ubuntu 21.04. </p><p>1.  In the terminal<strong>, Update the available software repositories </strong>and <strong>install the Python 3 packaging tool.</strong> </p><pre class="line-numbers language-python" language="python" ><code>$ sudo apt update$ sudo apt install python3-pip</code></pre><p>2. <strong>Install S-TUI </strong>using pip3.</p><pre class="line-numbers language-python" language="python" ><code>$ sudo pip install s-tui</code></pre><p>3.  <strong>Run S-TUI.</strong></p><pre class="line-numbers language-python" language="python" ><code>$ s-tui</code></pre><p>Unlike many other command-line utilities, S-TUI requires no configuration and you can begin using it immediately after installation. </p><h2 id="using-s-tui-xa0">Using S-TUI </h2><p>At the top of the sidebar on the left are the details about your CPU. Our Lenovo test machine was correctly identified as running an Intel Core i3-5005U CPU @ 2.00GHz processor. This is because S-TUI utilises various other native tools and utilities to gather the relevant information. For instance, the same information and far more details can be ascertained from running the cat /proc/cpuinfo command.</p><p>When you first launch S-TUI, it displays all four parameters – Frequency, Utilization,Temperature and Power – and refreshes the data for each every two seconds. </p><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1445px;"><p class="vanilla-image-block" style="padding-top:44.43%;"><img id="" name="Refresh.gif" alt="Stress Test Your CPU in Linux" src="https://cdn.mos.cms.futurecdn.net/uudWd4FJMEF2FJAs4Spka4.gif" mos="" align="middle" fullscreen="1" width="1445" height="642" attribution="" endorsement="" class="expandable"><a href='https://cdn.mos.cms.futurecdn.net/uudWd4FJMEF2FJAs4Spka4.gif' target='_blank' class='expand-button icon-expand-image icon' ></a></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Future)</span></figcaption></figure><p>To change the refresh rate from two seconds to 0.1, change the value of Refresh[s]:2.0 on the sidebar to 0.1, note that this will put extra strain on your Pi.</p><p>Use the up and down arrow keys to navigate the sidebar, but S-TUI also supports the use of H and J  to scroll, much like you would in Vim. S-TUI will also work with mouse input.</p><h2 id="using-s-tui-to-stress-test-your-machine-xa0">Using S-TUI to Stress Test Your Machine </h2><p>By default, S-TUI is configured to only monitor your system. To push our machine to its limits we installed “stress” a stress testing terminal tool. Stress works with all types of CPUs, we use it to stress test Raspberry Pis as part of the stressberry Python benchmarking tool.</p><p>1. <strong>To install stress, open a terminal</strong> and enter the following. </p><pre class="line-numbers language-python" language="python" ><code>$ sudo apt install stress</code></pre><p>2. <strong>Open S-TUI.</strong></p><pre class="line-numbers language-python" language="python" ><code>$ s-tui</code></pre><p>3. <strong>Using the arrow keys, navigate to Stress and press the spacebar.</strong> Alternatively you can also use the mouse to select. You will see the CPU graphs rapidly update, showing the current processor temperature, frequency and utilization. The stress test will run indefinitely. </p><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:957px;"><p class="vanilla-image-block" style="padding-top:60.40%;"><img id="" name="Stress.gif" alt="Stress Test Your CPU in Linux" src="https://cdn.mos.cms.futurecdn.net/2SDF5gocuC59k4pYq94Ei4.gif" mos="" align="middle" fullscreen="" width="957" height="578" attribution="" endorsement="" class=""></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Future)</span></figcaption></figure><p>4. <strong>Turn off the stress test </strong>by navigating to Monitor and pressing the spacebar, or by clicking with your mouse.</p><p>5. To set a time limited stress test, <strong>navigate / click on Stress Options </strong>and <strong>change the Time out to your desired time (in seconds).</strong> Set the Sqrt() worker count to match the number of cores for your CPU. Click Save when done. </p><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:959px;"><p class="vanilla-image-block" style="padding-top:60.38%;"><img id="" name="Stress-options.png" alt="Stress Test Your CPU in Linux" src="https://cdn.mos.cms.futurecdn.net/WLgQ82szioucS4NhQWimx4.png" mos="" align="middle" fullscreen="" width="959" height="579" attribution="" endorsement="" class=""></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Future)</span></figcaption></figure><p>6. <strong>Click on / navigate to Stress and press spacebar </strong>to run the timed test. Here we set the duration to be 30 seconds, and left the worker count at 4. </p><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:957px;"><p class="vanilla-image-block" style="padding-top:60.40%;"><img id="" name="Stress-30.gif" alt="Stress Test Your CPU in Linux" src="https://cdn.mos.cms.futurecdn.net/pTDggYDgtRSJc73BY7V8r4.gif" mos="" align="middle" fullscreen="" width="957" height="578" attribution="" endorsement="" class=""></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Future)</span></figcaption></figure><h2 id="saving-your-test-results-xa0">Saving Your Test Results </h2><p>The collected data is lost as soon as you exit S-TUI, because the tool doesn’t save it by default.</p><p>To automatically save the collected information to a timestamped CSV file when you exit S-TUI, invoke the command as so.</p><p><br></p><p><br></p><pre class="line-numbers language-python" language="python" ><code>$ s-tui -c</code></pre><p>To specify your own file name, invoke the command with a “--csv-file” provide a filename.</p><pre class="line-numbers language-python" language="python" ><code>$ s-tui --csv-file <name of file>.csv</code></pre><p>If you prefer your data in a JSON format, then we can output the data in JSON format, but only the current status, not a running log.</p><pre class="line-numbers language-python" language="python" ><code>$ s-tui -j</code></pre><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:954px;"><p class="vanilla-image-block" style="padding-top:60.69%;"><img id="" name="s-tui json.png" alt="Stress Test Your CPU in Linux" src="https://cdn.mos.cms.futurecdn.net/6RcqRsoUcNWeZngJzXEd65.png" mos="" align="middle" fullscreen="1" width="954" height="579" attribution="" endorsement="" class="expandable"><a href='https://cdn.mos.cms.futurecdn.net/6RcqRsoUcNWeZngJzXEd65.png' target='_blank' class='expand-button icon-expand-image icon' ></a></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Future)</span></figcaption></figure>
                                                            </article>
                            ]]>
                        </content:encoded>
                                                </item>
                                <item>
                                                            <title><![CDATA[ How to Build a Raspberry Pi Alarm that Sprays Porch Pirates ]]></title>
                                                                                                                                                                                                <link>https://www.tomshardware.com/how-to/raspberry-pi-porch-pirate-alarm</link>
                                                                            <description>
                            <![CDATA[ With a Raspberry Pi, you can create an A.I. driven alarm system that turns on sprinklers and sirens when a thief takes your packages. ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">x95zsyV4rhS8ic3WvX8M77</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/khLmeiGANRfuoBc8A99JTP-1280-80.jpg" type="image/jpeg" length="0"></enclosure>
                                                                        <pubDate>Sat, 07 Aug 2021 13:43:38 +0000</pubDate>                                                                                                                                <updated>Thu, 21 Aug 2025 12:53:58 +0000</updated>
                                                                                                                                            <category><![CDATA[Raspberry Pi]]></category>
                                                                                                <author><![CDATA[ ryder+toms@ryderdamen.com (Ryder Damen) ]]></author>                    <dc:creator><![CDATA[ Ryder Damen ]]></dc:creator>                                                                                    <dc:source><![CDATA[ https://cdn.mos.cms.futurecdn.net/yHmRhXRwnn6Tza4pvE2MAY.jpg ]]></dc:source>
                                                                <dc:description><![CDATA[ &lt;p&gt;Ryder is a creative technologist and Raspberry Pi aficionado. While he spends most of his time on the software side of things, one of his favorite pastimes is taking old technology and giving it a new (often pointless) purpose. In his free time, he likes to create videos, longboard, and explore the vast Canadian wilderness.&lt;/p&gt; ]]></dc:description>
                                                                                                                                <cf:isSponsored>false</cf:isSponsored>
                <cf:hasAffiliateLinks>false</cf:hasAffiliateLinks>
                <cf:isPaid>false</cf:isPaid>
                                                                                                                                <media:content type="image/jpeg" url="https://cdn.mos.cms.futurecdn.net/khLmeiGANRfuoBc8A99JTP-1280-80.jpg">
                                                            <media:credit><![CDATA[Shutterstock, Tom&#039;s Hardware]]></media:credit>
                                                                                                                                                                                                                                    <media:description><![CDATA[Raspberry Pi Alarm that Sprays Porch Pirates]]></media:description>                                                            <media:text><![CDATA[Raspberry Pi Alarm that Sprays Porch Pirates]]></media:text>
                                <media:title type="plain"><![CDATA[Raspberry Pi Alarm that Sprays Porch Pirates]]></media:title>
                                                    </media:content>
                                                    <media:thumbnail url="https://cdn.mos.cms.futurecdn.net/khLmeiGANRfuoBc8A99JTP-1280-80.jpg" />
                                                                                                                                                                    <content:encoded >
                            <![CDATA[
                            <article>
                                <p>These days, everyone gets packages delivered on a regular basis and, if you don’t notice a drop off right away, a “porch pirate” could steal your stuff. According to C + R research, <a href="http://crresearch.com/blog/2020-package-theft-statistics-report"><u>43 percent of Americans </u></a>had at least one package stolen in 2020. </p><p>To solve this problem, I built a Raspberry-Pi powered system that uses a camera and machine learning to determine if a package has been stolen from your door. When it detects the problem, it can either sound an alarm, turn on your sprinklers to wet the offenders or even shoot flour at the thieves. Tom’s Hardware covered my project in a <a href="https://www.tomshardware.com/news/raspberry-pi-package-security-system"><u>previous news article</u></a>, but today I’m going to show you how to do it yourself.</p><p>If you’ve never worked with machine learning before, this should be an easy enough project to get your feet wet. We’ll be using a type of computer vision called image classification to determine if there is, or is not a package at your front door. To train it, we’ll be using a tool called Google Cloud AutoML which takes away a lot of the complexity behind training a machine learning model.</p><h2 id="what-you-x2019-ll-need-for-this-project-xa0-3">What You’ll Need For This Project </h2><ul><li><a href="https://www.tomshardware.com/reviews/raspberry-pi-4"><u>Raspberry Pi 4</u></a> with Internet connectivity and a memory card of at least 16GB</li><li>Raspberry Pi Power Supply</li><li><a href="https://www.amazon.com/LEDMO-Power-Supply-Transformers-Adapter/dp/B01461MOGQ/"><u>12 volt power supply</u></a></li><li><a href="https://www.amazon.com/JBtek-Channel-Module-Arduino-Raspberry/dp/B00KTEN3TM/"><u>A relay module compatible with the Raspberry Pi</u></a></li><li>At least 5 jumper cables</li><li><a href="https://www.amazon.com/Orbit-57280-Female-Threaded-Sprinkler/dp/B01MG1VV2M"><u>12 volt sprinkler valve</u></a></li><li>A few feet of extra wiring suitable for a 12v circuit</li><li>A Google Cloud Account for <a href="https://cloud.google.com/automl"><u>Google Cloud AutoML</u></a> (this will cost approximately $10-15)</li><li><a href="https://www.amazon.ca/Security-Protection-Outdoor-Various-Connection/dp/B07R1XFK6K"><u>A 12 volt siren</u></a></li><li><a href="https://www.amazon.com/1080p-Indoor-Monitoring-Camera-MicroSD/dp/B08ZXQG4FX"><u>A Wyze V2 camera (with memory card) or other RTSP compatible camera</u></a></li></ul><h2 id="initial-setup-xa0">Initial Setup </h2><p>To get started, we’ll need to set up a few things to gather data for our machine learning model. </p><p>1. <strong>Set up your Raspberry Pi</strong>. If you don’t know how to do this, check out our story on how to set up your <a href="https://www.tomshardware.com/reviews/raspberry-pi-set-up-how-to,6029.html"><u>Raspberry Pi for the first time</u></a> or <a href="https://www.tomshardware.com/reviews/raspberry-pi-headless-setup-how-to,6028.html"><u>how to set up a headless Raspberry Pi</u></a> (without monitor or keyboard).</p><p>2. Plug in your pi, Install base dependencies, and <strong>clone the repository </strong>to your Raspberry Pi.</p><pre class="line-numbers language-python" language="python" ><code>cd ~/sudo apt-get update && sudo apt-get -y install git python3-pip && python3 -m pip install virtualenvgit clone https://github.com/rydercalmdown/package_theft_preventor.git</code></pre><p>3. <strong>Descend into the training directory</strong> and <strong>set up a virtual environment</strong>.</p><pre class="line-numbers language-python" language="python" ><code>cd package_theft_preventor/trainingpython3 -m virtualenv -p python3 env</code></pre><p>4. <strong>Activate your virtual environment</strong> and <strong>install python requirements</strong>.</p><pre class="line-numbers language-python" language="python" ><code>source env/bin/activatepip install -r requirements.txt</code></pre><p>5. <strong>Set up your RTSP camera </strong>and point it at your front door. If you’re using a Wyze Cam V2, flash the custom RTSP firmware (<a href="https://support.wyze.com/hc/en-us/articles/360026245231-Wyze-Cam-RTSP"><u>instructions available here</u></a>).  </p><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1280px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="" name="image14.png" alt="Raspberry Pi Alarm that Sprays Porch Pirates" src="https://cdn.mos.cms.futurecdn.net/fk7nwqzeMfHBupjrmfuyLR.png" mos="" align="middle" fullscreen="1" width="1280" height="720" attribution="" endorsement="" class="expandable"><a href='https://cdn.mos.cms.futurecdn.net/fk7nwqzeMfHBupjrmfuyLR.png' target='_blank' class='expand-button icon-expand-image icon' ></a></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Hardware)</span></figcaption></figure><p>6. <strong>Get the RTSP url from your camera’s settings</strong> and <strong>set it as the stream url</strong> in the training/Makefile file.</p><pre class="line-numbers language-python" language="python" ><code>nano Makefile# update stream_url with your stream URLRTSP_URL=rtsp://username:password@10.0.0.1/live</code></pre><p>7. <strong>Run the code to test image collection</strong>. You should start to see images appear in the data directory.</p><pre class="line-numbers language-python" language="python" ><code>make no-package-images</code></pre><p>8. <strong>Use the code to collect images of your front door</strong> at various points throughout the day. The code takes a photo every 10 seconds which should account for various lighting and weather conditions. You will want approximately 1000 photos without a package to get started. </p><pre class="line-numbers language-python" language="python" ><code># take photos of your door without packagesmake no-package-images</code></pre><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1280px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="" name="image6.png" alt="Raspberry Pi Alarm that Sprays Porch Pirates" src="https://cdn.mos.cms.futurecdn.net/wkqPePpnhbxtiwoNTjbbSP.png" mos="" align="middle" fullscreen="1" width="1280" height="720" attribution="" endorsement="" class="expandable"><a href='https://cdn.mos.cms.futurecdn.net/wkqPePpnhbxtiwoNTjbbSP.png' target='_blank' class='expand-button icon-expand-image icon' ></a></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Hardware)</span></figcaption></figure><p>9. Once you’ve gathered enough images without packages, we’ll need to <strong>start taking images with various packages</strong>. Use a variety of different sized boxes and envelopes, in different positions and orientations around your door. When you have a good number of photos of various packages, and an equal number of your door without packages at various points throughout the day, you’re ready to start training. </p><pre class="line-numbers language-python" language="python" ><code>make package-images</code></pre><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1280px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="" name="image9.png" alt="Raspberry Pi Alarm that Sprays Porch Pirates" src="https://cdn.mos.cms.futurecdn.net/w4NZwYMnq3DXY4V57YeyzP.png" mos="" align="middle" fullscreen="1" width="1280" height="720" attribution="" endorsement="" class="expandable"><a href='https://cdn.mos.cms.futurecdn.net/w4NZwYMnq3DXY4V57YeyzP.png' target='_blank' class='expand-button icon-expand-image icon' ></a></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Hardware)</span></figcaption></figure><p>10. Go through the training/data directory and <strong>delete any photos that may not have turned out</strong>, or may not be good for training.</p><p>11. <strong>Create a Google Cloud Storage bucket</strong> to store your images in. You will need a Google Cloud account, and the <a href="https://cloud.google.com/sdk/docs/install"><u>gcloud command line tool</u></a> installed on your local machine. You will also need a <a href="https://cloud.google.com/resource-manager/docs/creating-managing-projects"><u>Google Cloud project</u></a> if this is your first time using Google Cloud. </p><pre class="line-numbers language-python" language="python" ><code># gsutil is installed with gcloudgsutil mb gs://your_bucket_name_here -p your-project-name-here -l us-central1</code></pre><p>12. <strong>Set your bucket name as GCS_BASE in the training/Makefile file</strong>.</p><pre class="line-numbers language-python" language="python" ><code>nano Makefile# edit GCS_BASE=gs://your_bucket_name_here</code></pre><p>13. <strong>Run the make generate-csv command</strong> to generate the CSV required for training.</p><pre class="line-numbers language-python" language="python" ><code>make generate-csv</code></pre><p>14. <strong>Upload the generated CSV</strong> to your new bucket.</p><pre class="line-numbers language-python" language="python" ><code>gsutil cp training_data.csv gs://your_bucket_name_here</code></pre><p>15. <strong>Upload your images</strong> to your new bucket. </p><pre class="line-numbers language-python" language="python" ><code>gsutil cp -r data gs://your_bucket_name_here/data</code></pre><p>16. <strong>Navigate to the Google Cloud AutoML Vision Dashboard</strong> in the <a href="https://console.cloud.google.com/vision/dashboard"><u>Google Cloud Console</u></a>. <strong>Click “Get Started”</strong> with AutoML Vision.</p><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1280px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="" name="image11.png" alt="Google Cloud AutoML Vision Dashboard" src="https://cdn.mos.cms.futurecdn.net/AKJWduAYU33oaRitgT5SLQ.png" mos="" align="middle" fullscreen="1" width="1280" height="720" attribution="" endorsement="" class="expandable"><a href='https://cdn.mos.cms.futurecdn.net/AKJWduAYU33oaRitgT5SLQ.png' target='_blank' class='expand-button icon-expand-image icon' ></a></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Hardware)</span></figcaption></figure><p>17. <strong>Click “New Data Set” </strong>and choose a name for this data set. <strong>Select “Single-Label Classification” </strong>as the model objective, and <strong>click “Create Dataset”</strong>.</p><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1280px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="" name="image2.png" alt="Create New Dataset" src="https://cdn.mos.cms.futurecdn.net/amJj6p9KHktQFx97TtJqjN.png" mos="" align="middle" fullscreen="1" width="1280" height="720" attribution="" endorsement="" class="expandable"><a href='https://cdn.mos.cms.futurecdn.net/amJj6p9KHktQFx97TtJqjN.png' target='_blank' class='expand-button icon-expand-image icon' ></a></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Hardware)</span></figcaption></figure><p>18. <strong>Choose “Select a CSV file on Cloud Storage”</strong>, and <strong>provide the Google Cloud storage path</strong> to your uploaded CSV file in the box below, then click continue. </p><pre class="line-numbers language-python" language="python" ><code>gs://your_bucket_name_here/training_data.csv</code></pre><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1280px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="" name="image15.png" alt="Select a CSV file on Cloud Storage" src="https://cdn.mos.cms.futurecdn.net/5iUxyscEidsiWGYUQ4ZQUR.png" mos="" align="middle" fullscreen="1" width="1280" height="720" attribution="" endorsement="" class="expandable"><a href='https://cdn.mos.cms.futurecdn.net/5iUxyscEidsiWGYUQ4ZQUR.png' target='_blank' class='expand-button icon-expand-image icon' ></a></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Hardware)</span></figcaption></figure><p>19. Google Cloud will return you to the import screen. After about 10 minutes you’ll be automatically taken to the “Images” section of your data set. <strong>Verify all your images are uploaded and properly labeled as package or no_package</strong>.</p><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1280px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="" name="image10.png" alt="Verify all your images are uploaded" src="https://cdn.mos.cms.futurecdn.net/cAg4xcziKKsiky6SVUw9EQ.png" mos="" align="middle" fullscreen="1" width="1280" height="720" attribution="" endorsement="" class="expandable"><a href='https://cdn.mos.cms.futurecdn.net/cAg4xcziKKsiky6SVUw9EQ.png' target='_blank' class='expand-button icon-expand-image icon' ></a></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Hardware)</span></figcaption></figure><p>20. In the “Train” tab, <strong>click “Train New Model” and choose a name</strong>. Then <strong>choose “Edge”</strong> so the model can be downloaded from Google Cloud once complete. Then click Continue.</p><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1280px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="" name="image16.png" alt="Define New Model" src="https://cdn.mos.cms.futurecdn.net/rRvFBGnKz8UzcT4SXAAJaR.png" mos="" align="middle" fullscreen="1" width="1280" height="720" attribution="" endorsement="" class="expandable"><a href='https://cdn.mos.cms.futurecdn.net/rRvFBGnKz8UzcT4SXAAJaR.png' target='_blank' class='expand-button icon-expand-image icon' ></a></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Hardware)</span></figcaption></figure><p>21. <strong>Click “Faster Predictions”</strong> for model optimization, since we’ll be running on a Raspberry Pi with limited computational power. Then <strong>Click Continue</strong>. </p><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1280px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="" name="image8.png" alt="Optimize Model Options" src="https://cdn.mos.cms.futurecdn.net/nkDttuj8cPiMwqUzddSJmP.png" mos="" align="middle" fullscreen="1" width="1280" height="720" attribution="" endorsement="" class="expandable"><a href='https://cdn.mos.cms.futurecdn.net/nkDttuj8cPiMwqUzddSJmP.png' target='_blank' class='expand-button icon-expand-image icon' ></a></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Hardware)</span></figcaption></figure><p>22. <strong>Accept the default recommendation for the node hour budget</strong>, but please note you will be charged for the hours these machines are training your model. At the time of writing this, the approximate cost is $3.15 USD per node hour, so this model should cost a little over $12 to train.</p><p>23. <strong>Click the start training button.</strong> You will get an email when your training is complete.</p><p>24. When training is complete, <strong>navigate to the “Test & Use” tab and download the model as a TF Lite file</strong>. As a destination, choose the bucket you saved your training data in, and download it with the following command. It will download a dict.txt, and model.tflite and a tflite_metadata.json file. You now have a machine learning model trained to identify whether there is or is not a package at your door.</p><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1280px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="" name="image3.png" alt="Download Model as TF Lite file." src="https://cdn.mos.cms.futurecdn.net/MEsVJCF8quGj2xmZmiBYpN.png" mos="" align="middle" fullscreen="1" width="1280" height="720" attribution="" endorsement="" class="expandable"><a href='https://cdn.mos.cms.futurecdn.net/MEsVJCF8quGj2xmZmiBYpN.png' target='_blank' class='expand-button icon-expand-image icon' ></a></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Hardware)</span></figcaption></figure><pre class="line-numbers language-python" language="python" ><code>gsutil cp -r gs://your_bucket_name_here/model-export/ ./</code></pre><h2 id="setting-up-the-raspberry-pi-package-alarm-system-xa0">Setting Up The Raspberry Pi Package Alarm System </h2><p>1. <strong>Navigate to the root of the repository and run the installation command</strong> to install all lower-level and python-based requirements for the project to work.</p><pre class="line-numbers language-python" language="python" ><code>cd ~/package_theft_preventormake install</code></pre><p>2. <strong>Copy your downloaded model files from your computer to your Raspberry Pi </strong>and use them to replace the existing files in the src/models directory.</p><pre class="line-numbers language-python" language="python" ><code># From your desktop machinemv training/model-export/dict.txt /home/pi/package_theft_preventor/src/models/dict.txtmv training/model-export/tflite_metadata.json /home/pi/package_theft_preventor/src/models/tflite_metadata.jsonmv training/model-export/model.tflite /home/pi/package_theft_preventor/src/models/model.tflite</code></pre><p>3. <strong>Set the STREAM_URL in the Makefile </strong>to the RTSP stream URL of the camera pointing towards your door. This will be the same URL as the one you used to train your model.</p><pre class="line-numbers language-python" language="python" ><code>nano Makefile# Edit STREAM_URL=rtsp://username:password@camera_host/endpoint</code></pre><p>4. <strong>Connect the VCC and ground pins of your relay board to your Raspberry Pi, </strong>using board pins 4 (VCC) and 6 (ground) respectively.</p><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1280px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="" name="image17.png" alt="Raspberry Pi Alarm that Sprays Porch Pirates" src="https://cdn.mos.cms.futurecdn.net/AUad6TDsw2w5yqFD2ZBwzR.png" mos="" align="middle" fullscreen="1" width="1280" height="720" attribution="" endorsement="" class="expandable"><a href='https://cdn.mos.cms.futurecdn.net/AUad6TDsw2w5yqFD2ZBwzR.png' target='_blank' class='expand-button icon-expand-image icon' ></a></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Hardware)</span></figcaption></figure><p>5. <strong>Connect the data pins on the relay to the following Raspberry Pi BCM pins</strong>. You can modify the order, just keep track of which channel each pin is connected to for later wiring.</p><pre class="line-numbers language-python" language="python" ><code>Relay Pin 1 = Raspberry Pi BCM Pin 27 (Sprinkler Pin)Relay Pin 2 = Raspberry Pi BCM Pin 17 (Siren Pin)Relay Pin 3 = Raspberry Pi BCM Pin 22 (Air Solenoid Pin)</code></pre><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1280px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="" name="image18.png" alt="Raspberry Pi Alarm that Sprays Porch Pirates" src="https://cdn.mos.cms.futurecdn.net/8SvH2rYHV9s74Sqdg4HxYS.png" mos="" align="middle" fullscreen="1" width="1280" height="720" attribution="" endorsement="" class="expandable"><a href='https://cdn.mos.cms.futurecdn.net/8SvH2rYHV9s74Sqdg4HxYS.png' target='_blank' class='expand-button icon-expand-image icon' ></a></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Hardware)</span></figcaption></figure><p><em>Note:</em> For my project I used a combination of a 12v siren, a 12v sprinkler controller, and a 12v air solenoid to trigger a variety of alarms. For the purposes of this tutorial we’ll be connecting only a siren - and I don’t recommend connecting anything other than that for real life use. If you’re connecting other modules, follow the same three steps as below.</p><p>6. <strong>Wire the positive end of your 12 volt power supply into the common port of relay channel 2.</strong></p><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1280px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="" name="image1.png" alt="Raspberry Pi Alarm that Sprays Porch Pirates" src="https://cdn.mos.cms.futurecdn.net/9btUrqAhKnqmbfHhXYZzcN.png" mos="" align="middle" fullscreen="1" width="1280" height="720" attribution="" endorsement="" class="expandable"><a href='https://cdn.mos.cms.futurecdn.net/9btUrqAhKnqmbfHhXYZzcN.png' target='_blank' class='expand-button icon-expand-image icon' ></a></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Hardware)</span></figcaption></figure><p>7. <strong>Connect your 12v siren to the normally open port of relay channel 2.</strong> </p><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1280px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="" name="image7.png" alt="Raspberry Pi Alarm that Sprays Porch Pirates" src="https://cdn.mos.cms.futurecdn.net/2uA8GFUkEPEzk93s2JhNfP.png" mos="" align="middle" fullscreen="1" width="1280" height="720" attribution="" endorsement="" class="expandable"><a href='https://cdn.mos.cms.futurecdn.net/2uA8GFUkEPEzk93s2JhNfP.png' target='_blank' class='expand-button icon-expand-image icon' ></a></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Hardware)</span></figcaption></figure><p>8. <strong>Connect the other end of the siren directly to the 12v power supply ground.</strong></p><p>9. If you’re connecting a sprinkler, <strong>wire in your 12v sprinkler controller </strong>in the exact steps above using <strong>Relay channel 1</strong>, connecting the common port of relay channel 1 to the positive end of the power supply, one end of the sprinkler controller to the relay, and the other end of the sprinkler controller to ground. The code controls the sprinkler and the siren independently. </p><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1280px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="" name="image4.png" alt="Raspberry Pi Alarm that Sprays Porch Pirates" src="https://cdn.mos.cms.futurecdn.net/idKmL9RBWdAdSygqsz6o2P.png" mos="" align="middle" fullscreen="1" width="1280" height="720" attribution="" endorsement="" class="expandable"><a href='https://cdn.mos.cms.futurecdn.net/idKmL9RBWdAdSygqsz6o2P.png' target='_blank' class='expand-button icon-expand-image icon' ></a></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Hardware)</span></figcaption></figure><p>10. If connecting a sprinkler,<strong> connect the supply end to a pressurized water source </strong>and turn on the tap. Connect the other end to a hose leading to a sprinkler. </p><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1280px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="" name="image13.png" alt="Raspberry Pi Alarm that Sprays Porch Pirates" src="https://cdn.mos.cms.futurecdn.net/PNiAHdYyXaWfanExavv95R.png" mos="" align="middle" fullscreen="1" width="1280" height="720" attribution="" endorsement="" class="expandable"><a href='https://cdn.mos.cms.futurecdn.net/PNiAHdYyXaWfanExavv95R.png' target='_blank' class='expand-button icon-expand-image icon' ></a></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Hardware)</span></figcaption></figure><p>11. <strong>Connect your 12v power supply to a power source.</strong></p><p>12. <strong>Add a photo of your face to the src/faces directory as a .jpg file (optional).</strong> This enables the system to periodically check to see if you are in the area, and disarm the system accordingly.</p><p>13. <strong>Start the system and test it.</strong> You will see a variety of log statements indicating the current state the system is in: </p><pre class="line-numbers language-python" language="python" ><code>make run# Starting stream - The system is connecting to the camera# System watching - The system is classifying images of your porch as package/no_package right now# System Armed - A package has been definitively detected, if it is removed the alarm will go off# Activating Alarm - The package has been removed, activating the alarm</code></pre><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1280px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="" name="image5.png" alt="Raspberry Pi Alarm that Sprays Porch Pirates" src="https://cdn.mos.cms.futurecdn.net/ZiNSw9yYSeDVGRxnyMdbFP.png" mos="" align="middle" fullscreen="1" width="1280" height="720" attribution="" endorsement="" class="expandable"><a href='https://cdn.mos.cms.futurecdn.net/ZiNSw9yYSeDVGRxnyMdbFP.png' target='_blank' class='expand-button icon-expand-image icon' ></a></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Hardware)</span></figcaption></figure><p>14. <strong>Invite your friends to steal packages from you</strong> to test out your new theft alarm. Mine had a great time doing it.</p><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1280px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="" name="image12.png" alt="Raspberry Pi Alarm that Sprays Porch Pirates" src="https://cdn.mos.cms.futurecdn.net/3qo33n44qLb66L3e4oggeQ.png" mos="" align="middle" fullscreen="1" width="1280" height="720" attribution="" endorsement="" class="expandable"><a href='https://cdn.mos.cms.futurecdn.net/3qo33n44qLb66L3e4oggeQ.png' target='_blank' class='expand-button icon-expand-image icon' ></a></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Hardware)</span></figcaption></figure><p>Once you’re satisfied, your Raspberry Pi package theft detection system should work. However, we’d advise caution as, if it doesn’t work perfectly, you could end up alerting  </p>
                                                            </article>
                            ]]>
                        </content:encoded>
                                                </item>
                                <item>
                                                            <title><![CDATA[ How To Cut and Trim Videos with VidCutter ]]></title>
                                                                                                                                                                                                <link>https://www.tomshardware.com/how-to/vidcutter-linux-video-editor</link>
                                                                            <description>
                            <![CDATA[ A minimalist video editor utility to help you quickly cut home videos. ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">eTp5ip63eKa497eg7m4PQK</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/ymLLLdsuBpy9FDYHPCgCmT-1280-80.png" type="image/png" length="0"></enclosure>
                                                                        <pubDate>Sun, 18 Jul 2021 16:43:44 +0000</pubDate>                                                                                                                                <updated>Thu, 30 Jan 2025 13:42:18 +0000</updated>
                                                                                                                                            <category><![CDATA[Linux]]></category>
                                                    <category><![CDATA[Software]]></category>
                                                    <category><![CDATA[Operating Systems]]></category>
                                                                                                                    <dc:creator><![CDATA[ Shashank Sharma ]]></dc:creator>                                                                                    <dc:source><![CDATA[ https://cdn.mos.cms.futurecdn.net/PVGiqXbSwkzW7tg3LcnoCP.jpeg ]]></dc:source>
                                                                <dc:description><![CDATA[ &lt;p&gt;Shashank Sharma is a trial lawyer by profession, but a through-and-through geek by choice. He&#039;s spent nearly two decades writing about Linux and Open Source software for several online and print publications around the English-speaking world, including Linux.com, Linux Journal, Newsforge, Linux Format, and Linux User &amp;amp; Developer. A CLI-junkie, Shashank has co-authored Apress&#039; Beginning Fedora, and when not drafting legal briefs, can be found detailing his CLI escapades on Tom&#039;s Hardware. A bibliophile at heart, he juggles his downtime reading fiction and working to master the art of storytelling.&lt;/p&gt; ]]></dc:description>
                                                                                                                                <cf:isSponsored>false</cf:isSponsored>
                <cf:hasAffiliateLinks>false</cf:hasAffiliateLinks>
                <cf:isPaid>false</cf:isPaid>
                                                                                                                                <media:content type="image/png" url="https://cdn.mos.cms.futurecdn.net/ymLLLdsuBpy9FDYHPCgCmT-1280-80.png">
                                                            <media:credit><![CDATA[Tom&#039;s Hardware]]></media:credit>
                                                                                                                                                                                                                                    <media:description><![CDATA[Vidcutter]]></media:description>                                                            <media:text><![CDATA[Vidcutter]]></media:text>
                                <media:title type="plain"><![CDATA[Vidcutter]]></media:title>
                                                    </media:content>
                                                    <media:thumbnail url="https://cdn.mos.cms.futurecdn.net/ymLLLdsuBpy9FDYHPCgCmT-1280-80.png" />
                                                                                                                                                                    <content:encoded >
                            <![CDATA[
                            <article>
                                <p>Video editors are incredibly powerful and vastly complex applications which can be used to edit your amateur videos into professional looking masterpieces, complete with a background score, but only if you have the patience to master the interface. Sometimes all you need is a quick cut of unwanted parts from a video, or to merge some clips together. Feature-rich video editors would be overkill for those tasks. Instead, you can use VidCutter, a minimalist video editor that uses Ffmpeg to perform surgery on your video files.</p><p>Released under the GPLv3 license, VidCutter follows the old Unix philosophy of doing one thing well. Unlike more complex applications such as DaVinci Resolve, Adobe Premiere etc., VidCutter is designed to only cut video files, or join them together, albeit without any special effects. This makes VidCutter ideal for home users, or even amateur broadcasters who only needs a few tweaks to their video before publishing.</p><h2 id="how-to-install-vidcutter-xa0">How To Install Vidcutter </h2><p>Vidcutter is primarily a Linux video editor, and in this tutorial we shall install the Snap package version on our Ubuntu 20.04 system. There are installation candidates for other versions of Linux, along with versions for <a href="https://github.com/ozmartian/vidcutter#microsoft-windows"><u>Windows and macOS.</u></a></p><p>1. <strong>Open a terminal and install Vidcutter using the snap package manager.</strong></p><pre class="line-numbers language-python" language="python" ><code>$ sudo snap install vidcutter</code></pre><p>2. <strong>Press the Super (Windows) key and type “vidcutter” and press Enter to launch the application.</strong> This can also be done via the Terminal.</p><p><br></p><h2 id="install-vidcutter-using-apt-package-manager">Install Vidcutter Using Apt Package Manager</h2><p>If you would prefer to install Vidcutter via the Apt package manager, then there is a Personal Package Archive (PPA) for Ubuntu users.</p><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:768px;"><p class="vanilla-image-block" style="padding-top:71.48%;"><img id="" name="vidcutter-ppa.png" alt="Vidcutter" src="https://cdn.mos.cms.futurecdn.net/sZRpjf7Srhyw2i9Ky7g8zT.png" mos="" align="middle" fullscreen="1" width="768" height="549" attribution="" endorsement="" class="expandable"><a href='https://cdn.mos.cms.futurecdn.net/sZRpjf7Srhyw2i9Ky7g8zT.png' target='_blank' class='expand-button icon-expand-image icon' ></a></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Hardware)</span></figcaption></figure><p>1. <strong>In a terminal, add the PPA to your list of repositories. Press Enter when prompted to enable this.</strong></p><pre class="line-numbers language-python" language="python" ><code>$ sudo add-apt-repository ppa:ozmartian</code></pre><p>2. <strong>Update your software repositories.</strong></p><pre class="line-numbers language-python" language="python" ><code>$ sudo apt update</code></pre><p>3. <strong>Install Vidcutter.</strong></p><pre class="line-numbers language-python" language="python" ><code>sudo apt install vidcutter</code></pre><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:768px;"><p class="vanilla-image-block" style="padding-top:71.48%;"><img id="" name="apt-install-vidcutter.png" alt="Vidcutter" src="https://cdn.mos.cms.futurecdn.net/zyd6BacjgF7PDGh7kLMsRT.png" mos="" align="middle" fullscreen="1" width="768" height="549" attribution="" endorsement="" class="expandable"><a href='https://cdn.mos.cms.futurecdn.net/zyd6BacjgF7PDGh7kLMsRT.png' target='_blank' class='expand-button icon-expand-image icon' ></a></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Hardware)</span></figcaption></figure><p>4. <strong>Press the Super (Windows) key and type “vidcutter” and press Enter to launch the application.</strong> This can also be done via the Terminal. </p><h2 id="how-to-use-vidcutter-xa0">How To Use Vidcutter </h2><p>Vidcutter’s interface is fairly straightforward and customisable. We can switch between a light or dark theme, toggle between text-only buttons, or buttons with text beneath them. The latter option makes sense, especially for novice users, even though Vidcutter is quite intuitive to use.</p><p>To start working on a video file,</p><ol><li><strong>Click on the open media button, and then select the file you wish to use</strong>.</li><li><strong>Click the Start Clip button</strong> to identify the start point of the portion you wish to keep.</li><li><strong>While the video is playing, click the End Clip button </strong>to identify its end.</li><li><strong>Repeat this process</strong> to edit the video into sections until you are happy with the edit.</li><li><strong>Click on Save Media</strong> to save your edited clip.</li></ol><p>Unlike other video editing tools, VidCutter doesn’t offer extensive export options. Instead, you have a tool that supports a variety of formats, such as AVI, MP4, MPEG 1/2, WMV, MP3, MOV, 3GP, FLV etc., and automatically retains the format of the parent clip when saving shortened clips. </p><h2 id="removing-audio-from-clips-xa0">Removing Audio From Clips </h2><p>Sometimes we need to remove the audio from a video, for example when we wish to add narration or background music. Vidcutter can easily remove audio from clips with just a few clicks. </p><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:937px;"><p class="vanilla-image-block" style="padding-top:76.20%;"><img id="" name="remove-sound.png" alt="Vidcutter" src="https://cdn.mos.cms.futurecdn.net/evX7SR95KZM2pVsGxor6YT.png" mos="" align="middle" fullscreen="1" width="937" height="714" attribution="" endorsement="" class="expandable"><a href='https://cdn.mos.cms.futurecdn.net/evX7SR95KZM2pVsGxor6YT.png' target='_blank' class='expand-button icon-expand-image icon' ></a></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Hardware)</span></figcaption></figure><ol><li><strong>Load a video into Vidcutter.</strong></li><li><strong>Right click on the clip and select Media Streams.</strong></li><li><strong>Click on the checkbox under Audio in the Media Streams dialog to remove the audio.</strong></li></ol><p>The Vidcutter developers are constantly working to improve VidCutter. And while Vidcutter will never compare to a full video editor, it is a useful tool to make quick edits via a simple user interface. </p>
                                                            </article>
                            ]]>
                        </content:encoded>
                                                </item>
                                <item>
                                                            <title><![CDATA[ How to make a Raspberry Pi Home Air Quality Monitor ]]></title>
                                                                                                                                                                                                <link>https://www.tomshardware.com/how-to/raspberry-pi-air-quality-monitor</link>
                                                                            <description>
                            <![CDATA[ With a Raspberry Pi and a SDS011 sensor, you can monitor particulates as small as 2.5 micrometers. ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">B2DW5VGi5MLZsknDzao2Ng</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/PupDxrFnV5E2jWdVRDsLiC-1280-80.jpg" type="image/jpeg" length="0"></enclosure>
                                                                        <pubDate>Sat, 03 Jul 2021 13:00:26 +0000</pubDate>                                                                                                                                <updated>Thu, 30 Jan 2025 16:35:33 +0000</updated>
                                                                                                                                            <category><![CDATA[Raspberry Pi]]></category>
                                                                                                <author><![CDATA[ ryder+toms@ryderdamen.com (Ryder Damen) ]]></author>                    <dc:creator><![CDATA[ Ryder Damen ]]></dc:creator>                                                                                    <dc:source><![CDATA[ https://cdn.mos.cms.futurecdn.net/yHmRhXRwnn6Tza4pvE2MAY.jpg ]]></dc:source>
                                                                <dc:description><![CDATA[ &lt;p&gt;Ryder is a creative technologist and Raspberry Pi aficionado. While he spends most of his time on the software side of things, one of his favorite pastimes is taking old technology and giving it a new (often pointless) purpose. In his free time, he likes to create videos, longboard, and explore the vast Canadian wilderness.&lt;/p&gt; ]]></dc:description>
                                                                                                                                <cf:isSponsored>false</cf:isSponsored>
                <cf:hasAffiliateLinks>false</cf:hasAffiliateLinks>
                <cf:isPaid>false</cf:isPaid>
                                                                                                                                <media:content type="image/jpeg" url="https://cdn.mos.cms.futurecdn.net/PupDxrFnV5E2jWdVRDsLiC-1280-80.jpg">
                                                            <media:credit><![CDATA[Tom&#039;s Hardware]]></media:credit>
                                                                                                                                                                                                                                    <media:description><![CDATA[Raspberry Pi Air Quality Monitor]]></media:description>                                                            <media:text><![CDATA[Raspberry Pi Air Quality Monitor]]></media:text>
                                <media:title type="plain"><![CDATA[Raspberry Pi Air Quality Monitor]]></media:title>
                                                    </media:content>
                                                    <media:thumbnail url="https://cdn.mos.cms.futurecdn.net/PupDxrFnV5E2jWdVRDsLiC-1280-80.jpg" />
                                                                                                                                                                    <content:encoded >
                            <![CDATA[
                            <article>
                                <p>I’ve been more concerned about the quality of air in my house recently. I’ll soon be paying for a service to clean the furnace and duct work, and I wanted a way to determine if there’s been any measurable impact or change. Fortunately, using a SDS011 sensor, a <a href="https://www.tomshardware.com/news/raspberry-pi"><u>Raspberry Pi </u></a>and a bit of software, I can create a simple home air quality monitor. Here’s how to do it. </p><h2 id="what-you-x2019-ll-need-for-this-project-xa0-4">What You’ll Need For This Project </h2><ul><li><a href="https://www.tomshardware.com/reviews/raspberry-pi-4"><u><strong>Raspberry Pi 4</strong></u></a> or Raspberry Pi 3 with power adapter</li><li><strong>8 GB (or larger) microSD card </strong>with Raspberry Pi OS. See our list of <a href="https://www.tomshardware.com/best-picks/raspberry-pi-microsd-cards"><u>best microSD cards for Raspberry Pi</u></a>. </li><li><a href="https://www.amazon.ca/Facibom-Sensor-Precision-Quality-Detection/dp/B08LD82T7S/"><u><strong>SDS011 sensor</strong></u></a></li><li><strong>A small block of wood</strong> for mounting the pi and sensor (optional)</li><li><strong>Hot glue</strong> for mounting the pi and sensor (optional)</li></ul><h2 id="how-to-make-a-raspberry-pi-home-air-quality-monitor-xa0">How to Make a Raspberry Pi Home Air Quality Monitor </h2><p>Before you get started, make sure that you have your Raspberry Pi OS set up. If you haven’t done this before, see our article on how to <a href="https://www.tomshardware.com/how-to/set-up-raspberry-pi"><u>set up a Raspberry Pi</u></a> for the first time or how to do a <a href="https://www.tomshardware.com/reviews/raspberry-pi-headless-setup-how-to,6028.html"><u>headless Raspberry Pi install</u></a> (without the keyboard and screen).</p><p>1. <strong>Install git</strong>, which will allow us to clone the code from github.com</p><pre class="line-numbers language-python" language="python" ><code>sudo apt-get update && sudo apt-get install -y git</code></pre><p>2. <strong>Clone the repository</strong> with example code. This code takes care of communication with the sensor, and sets up a simple server for monitoring on your home network. </p><pre class="line-numbers language-python" language="python" ><code>cd ~/git clone https://github.com/rydercalmdown/pi_air_quality_monitor.git</code></pre><p>3. <strong>Run the installation command</strong> after descending into the repository. This will take care of installing all base dependencies, like Docker and Docker Compose to make this project run. </p><pre class="line-numbers language-python" language="python" ><code>cd pi_air_quality_monitormake install</code></pre><p>4. <strong>Run the build command to build the docker images</strong>. This may take a bit of time depending on your Raspberry Pi. </p><pre class="line-numbers language-python" language="python" ><code>make build</code></pre><p>5. <strong>Connect the SDS011 sensor to the USB adapter</strong> it comes with using the provided jumper cable. </p><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1280px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="" name="image6.jpg" alt="Raspberry Pi Air Quality Monitor" src="https://cdn.mos.cms.futurecdn.net/XwzgdKig7yFymM7S79uCuD.jpg" mos="" align="middle" fullscreen="1" width="1280" height="720" attribution="" endorsement="" class="expandable"><a href='https://cdn.mos.cms.futurecdn.net/XwzgdKig7yFymM7S79uCuD.jpg' target='_blank' class='expand-button icon-expand-image icon' ></a></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Hardware)</span></figcaption></figure><p>6. <strong>Connect the SDS011 USB adapter to your Raspberry Pi</strong>. You may see a flashing red light, but if not, don’t worry. </p><figure role="gallery"><figure><img src="https://cdn.mos.cms.futurecdn.net/L6UW9R4wtfp7LrgYBfFwKC.jpg" alt="Raspberry Pi Air Quality Monitor" /><figcaption><small role="credit">Tom's Hardware</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/6B5DLY869KDVUbePnBNuzB.jpg" alt="Raspberry Pi Air Quality Monitor" /><figcaption><small role="credit">Tom's Hardware</small></figcaption></figure></figure><p>7. <strong>Mount the SDS011 sensor and your Raspberry Pi to a small block of wood.</strong> This step is optional, you can also use a case, but I like the open air look of the system. If mounting the sensor inside a component, make sure the air inlet port is connected to the outside of the case. </p><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1280px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="" name="image5.jpg" alt="Raspberry Pi Air Quality Monitor" src="https://cdn.mos.cms.futurecdn.net/XqVVQ3vEJy5rv55s6qKQBD.jpg" mos="" align="middle" fullscreen="1" width="1280" height="720" attribution="" endorsement="" class="expandable"><a href='https://cdn.mos.cms.futurecdn.net/XqVVQ3vEJy5rv55s6qKQBD.jpg' target='_blank' class='expand-button icon-expand-image icon' ></a></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Hardware)</span></figcaption></figure><p>8. <strong>Run the server</strong> to start taking measurements. </p><pre class="line-numbers language-python" language="python" ><code>make run</code></pre><p>9. <strong>Navigate to your Pi’s IP address on port 8000</strong> to view the web server, and a small graph of recent measurements of air quality. You’ll see a graph. </p><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1280px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="" name="image1.jpg" alt="Raspberry Pi Air Quality Monitor" src="https://cdn.mos.cms.futurecdn.net/C6RyMvn4u99QgD82xn9NhB.jpg" mos="" align="middle" fullscreen="1" width="1280" height="720" attribution="" endorsement="" class="expandable"><a href='https://cdn.mos.cms.futurecdn.net/C6RyMvn4u99QgD82xn9NhB.jpg' target='_blank' class='expand-button icon-expand-image icon' ></a></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Hardware)</span></figcaption></figure><p>The sensor in this <a href="https://www.tomshardware.com/features/best-raspberry-pi-projects"><u>Raspberry Pi Project</u></a> measures two metrics: <a href="https://www.epa.gov/pm-pollution/particulate-matter-pm-basics"><u>PM2.5 and PM10</u></a>. PM stands for particulate matter and the number after is the amount of micrometers, 2.5 or 10. Particles of PM2.5 are particularly bad for your health if they contain toxic substances.</p><p>This server shows running measurements for the last 30 minutes, but could be easily adapted to do more. I’ll be comparing my values from now until after my HVAC system is cleaned, and hopefully I’ll see a measurable difference. After that, I’ll be putting this in a water proof box to measure air quality outside, to give me an idea of how it varies over time.</p>
                                                            </article>
                            ]]>
                        </content:encoded>
                                                </item>
                                <item>
                                                            <title><![CDATA[ How to Track Satellite Fly-Bys with Raspberry Pi ]]></title>
                                                                                                                                                                                                <link>https://www.tomshardware.com/news/how-to-track-satellite-fly-bys-with-raspberry-pi</link>
                                                                            <description>
                            <![CDATA[ Find out when a satellite is overhead by getting an announcement / SMS from your Raspberry Pi. ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">VvjQeZUXqbDfL6Ti5FudhQ</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/28MiCPEjEvaHNvbWHexs8A-1280-80.png" type="image/png" length="0"></enclosure>
                                                                        <pubDate>Sun, 30 May 2021 12:00:16 +0000</pubDate>                                                                                                                                <updated>Thu, 30 Jan 2025 16:35:38 +0000</updated>
                                                                                                                                            <category><![CDATA[Raspberry Pi]]></category>
                                                                                                <author><![CDATA[ ryder+toms@ryderdamen.com (Ryder Damen) ]]></author>                    <dc:creator><![CDATA[ Ryder Damen ]]></dc:creator>                                                                                    <dc:source><![CDATA[ https://cdn.mos.cms.futurecdn.net/yHmRhXRwnn6Tza4pvE2MAY.jpg ]]></dc:source>
                                                                <dc:description><![CDATA[ &lt;p&gt;Ryder is a creative technologist and Raspberry Pi aficionado. While he spends most of his time on the software side of things, one of his favorite pastimes is taking old technology and giving it a new (often pointless) purpose. In his free time, he likes to create videos, longboard, and explore the vast Canadian wilderness.&lt;/p&gt; ]]></dc:description>
                                                                                                                                <cf:isSponsored>false</cf:isSponsored>
                <cf:hasAffiliateLinks>false</cf:hasAffiliateLinks>
                <cf:isPaid>false</cf:isPaid>
                                                                                                                                <media:content type="image/png" url="https://cdn.mos.cms.futurecdn.net/28MiCPEjEvaHNvbWHexs8A-1280-80.png">
                                                            <media:credit><![CDATA[Tom&#039;s Hardware]]></media:credit>
                                                                                                                                                                                                                                    <media:description><![CDATA[How to Track Satellite Fly-Bys with Raspberry Pi]]></media:description>                                                            <media:text><![CDATA[How to Track Satellite Fly-Bys with Raspberry Pi]]></media:text>
                                <media:title type="plain"><![CDATA[How to Track Satellite Fly-Bys with Raspberry Pi]]></media:title>
                                                    </media:content>
                                                    <media:thumbnail url="https://cdn.mos.cms.futurecdn.net/28MiCPEjEvaHNvbWHexs8A-1280-80.png" />
                                                                                                                                                                    <content:encoded >
                            <![CDATA[
                            <article>
                                <p>With SpaceX’s Starlink being made available in my area, I became curious about just how many satellites were overhead at any given time. Fortunately, the US Space Command tracks and makes available data for tracking the live positions of objects in orbit. We can download this data, and use a Raspberry Pi and some speakers to announce when a particular satellite is making an overhead pass. You can also get an SMS message sent to your phone in addition to the audio. </p><h2 id="what-you-x2019-ll-need-for-this-project-xa0-5">What You’ll Need For This Project </h2><ul><li><a href="https://www.tomshardware.com/reviews/raspberry-pi-4"><u>Raspberry Pi 4</u></a> or Raspberry Pi 3 with power adapter</li><li><strong>8 GB (or larger) microSD card </strong>with Raspberry Pi OS. See our list of <a href="https://www.tomshardware.com/best-picks/raspberry-pi-microsd-cards"><u>best microSD cards for Raspberry Pi</u></a>. </li><li><strong>Desktop speakers</strong> with a 3.5mm audio input</li></ul><h2 id="how-to-make-a-raspberry-pi-satellite-tracker-xa0">How to make a Raspberry Pi Satellite Tracker </h2><p>Before you get started, make sure that you have your Raspberry Pi OS set up. If you haven’t done this before, see our article on how to <a href="https://www.tomshardware.com/reviews/raspberry-pi-set-up-how-to,6029.html"><u>set up a Raspberry Pi</u></a> for the first time or how to do a <a href="https://www.tomshardware.com/reviews/raspberry-pi-headless-setup-how-to,6028.html"><u>headless Raspberry Pi install</u></a> (without the keyboard and screen).</p><p>1. <strong>Install git</strong>, which will allow us to clone the code from github.com</p><pre class="line-numbers language-python" language="python" ><code>sudo apt-get update && sudo apt-get install -y git</code></pre><p>2. <strong>Clone the repository </strong>and descend into the directory created.</p><pre class="line-numbers language-python" language="python" ><code>git clone https://github.com/rydercalmdown/pi_satellite_announcer.gitcd pi_satellite_announcer</code></pre><p>3. <strong>Run the installation command</strong>. It will take care of installing a virtual environment, any necessary low level dependencies, and the python requirements.</p><pre class="line-numbers language-python" language="python" ><code>make install</code></pre><p>4. <strong>Visit space-track.org </strong>and <strong>create a new account</strong>. This will let us download two-line element (TLE) data tracked by  the US Space Command. The code will update data from this website once per day, and store it locally to minimize stress on their servers.</p><figure class="van-image-figure " data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1920px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="" name="image4.png" alt="How to Track Satellite Fly-Bys with Raspberry Pi" src="https://cdn.mos.cms.futurecdn.net/TbVDSievT2n3Zv3r855rf9.png" mos="" align="middle" fullscreen="1" width="1920" height="1080" attribution="" endorsement="" class="expandable"><a href='https://cdn.mos.cms.futurecdn.net/TbVDSievT2n3Zv3r855rf9.png' target='_blank' class='expand-button icon-expand-image icon' ></a></p></div></div><figcaption itemprop="caption description" class=""><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Hardware)</span></figcaption></figure><p>5. Once registered, return to your raspberry pi and <strong>edit your environment.sh file </strong>- replace the template values with your space-track username and password. </p><pre class="line-numbers language-python" language="python" ><code>nano environment.sh# Your spacetrack credentials# export SPACETRACK_USERNAME=youremail@example.com# export SPACETRACK_PASSWORD=your_spacetrack_password</code></pre><p>6. <strong>Retrieve your home latitude and longitude values </strong>from Google maps by right clicking on the map and selecting the first option.</p><figure class="van-image-figure " data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1920px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="" name="image1.png" alt="How to Track Satellite Fly-Bys with Raspberry Pi" src="https://cdn.mos.cms.futurecdn.net/hYtuDsT8FF4zX5VSeBQaV9.png" mos="" align="middle" fullscreen="1" width="1920" height="1080" attribution="" endorsement="" class="expandable"><a href='https://cdn.mos.cms.futurecdn.net/hYtuDsT8FF4zX5VSeBQaV9.png' target='_blank' class='expand-button icon-expand-image icon' ></a></p></div></div><figcaption itemprop="caption description" class=""><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Hardware)</span></figcaption></figure><p>7. <strong>Copy your latitude and longitude values into environment.sh,</strong> and <strong>set your desired radius</strong> in kilometers. For example, a radius of 20 kilometers would only report satellites overhead if their position on the ground is less than 20 kilometers away from you - they could be at any altitude. </p><figure class="van-image-figure " data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1920px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="" name="image5.png" alt="How to Track Satellite Fly-Bys with Raspberry Pi" src="https://cdn.mos.cms.futurecdn.net/sfN2yPFqan6Nybs9n9dwj9.png" mos="" align="middle" fullscreen="1" width="1920" height="1080" attribution="" endorsement="" class="expandable"><a href='https://cdn.mos.cms.futurecdn.net/sfN2yPFqan6Nybs9n9dwj9.png' target='_blank' class='expand-button icon-expand-image icon' ></a></p></div></div><figcaption itemprop="caption description" class=""><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Hardware)</span></figcaption></figure><p>8. <strong>Plug in speakers</strong> to the 3.5mm audio port on your raspberry pi, and <strong>test that you can hear them </strong>with the following command. I’m using a megaphone, but any speakers with a 3.5mm audio input will work.  You may need to increase the volume with the alsamixer command. If you run into trouble, try configuring your audio in the raspi-config menu. </p><pre class="line-numbers language-python" language="python" ><code># Test speakersespeak -a 200 "this is a test" --stdout | aplay# Adjust volumealsamixer</code></pre><figure class="van-image-figure " data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1920px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="" name="image6.png" alt="How to Track Satellite Fly-Bys with Raspberry Pi" src="https://cdn.mos.cms.futurecdn.net/8uSCiDMtXc9GooFPXLJVNA.png" mos="" align="middle" fullscreen="1" width="1920" height="1080" attribution="" endorsement="" class="expandable"><a href='https://cdn.mos.cms.futurecdn.net/8uSCiDMtXc9GooFPXLJVNA.png' target='_blank' class='expand-button icon-expand-image icon' ></a></p></div></div><figcaption itemprop="caption description" class=""><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Hardware)</span></figcaption></figure><p> 9. <a href="https://www.twilio.com/"><u><strong>Set up a twilio account</strong></u></a><strong>. </strong>We’ll use this to send a text message when a satellite appears overhead. If you don’t wish to use twilio, you can edit app.py and set the ‘use_twilio’ variable to False.</p><p>10. <strong>Follow the setup instructions for a twilio account. </strong><a href="https://www.twilio.com/docs/sms/quickstart/python"><u>Detailed instructions can be found on Twilio’s site here.</u></a> You will need to create a phone number, and get your account credentials to perform the send actions.</p><p>11. Once you have your credentials and phone number, <strong>Add them to the environment.sh file.</strong></p><pre class="line-numbers language-python" language="python" ><code>nano environment.sh# Twilio credentialsexport TWILIO_ACCOUNT_SID=your_account_idexport TWILIO_AUTH_TOKEN=your_account_token# the number you purchased with twilioexport TWILIO_NUMBER_FROM=+10000000000# your phone numberexport TWILIO_NUMBER_TO=10000000000</code></pre><p>12. <strong>Run the code </strong>with the following command. It will connect to space-track, download the latest TLE data, and immediately start reporting satellites over the latitude, longitude, and radius provided in the environment.sh file.</p><pre class="line-numbers language-python" language="python" ><code>make run</code></pre><figure class="van-image-figure " data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1174px;"><p class="vanilla-image-block" style="padding-top:66.61%;"><img id="" name="image3.png" alt="How to Track Satellite Fly-Bys with Raspberry Pi" src="https://cdn.mos.cms.futurecdn.net/XZN3cgbZ87tC5Sk8KuYpa9.png" mos="" align="middle" fullscreen="1" width="1174" height="782" attribution="" endorsement="" class="expandable"><a href='https://cdn.mos.cms.futurecdn.net/XZN3cgbZ87tC5Sk8KuYpa9.png' target='_blank' class='expand-button icon-expand-image icon' ></a></p></div></div><figcaption itemprop="caption description" class=""><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Hardware)</span></figcaption></figure><p>13. <strong>Play around with the code</strong>. Right now it only announces satellites that are not considered debris, but this can be adjusted easily. You can also filter down by constellation, or only announce satellites with names that are interesting to you, like the international space station (ZARYA). </p>
                                                            </article>
                            ]]>
                        </content:encoded>
                                                </item>
                                <item>
                                                            <title><![CDATA[ How to Use Raspberry Pi to Farm Chia Coin ]]></title>
                                                                                                                                                                                                <link>https://www.tomshardware.com/how-to/raspberry-pi-chia-coin</link>
                                                                            <description>
                            <![CDATA[ The Raspberry Pi 4 is the ideal low power device for farming Chia Coin. After you’ve made your plots on a powerful PC, you can keep them online at a fraction of the power usage. ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">wBYwjMK25ydzyUU4bESyQi</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/MbozZP3QRYndZABt5MhiL-1280-80.jpg" type="image/jpeg" length="0"></enclosure>
                                                                        <pubDate>Sat, 15 May 2021 12:00:48 +0000</pubDate>                                                                                                                                <updated>Thu, 30 Jan 2025 13:41:39 +0000</updated>
                                                                                                                                            <category><![CDATA[Cryptocurrency]]></category>
                                                    <category><![CDATA[Tech Industry]]></category>
                                                                                                                    <dc:creator><![CDATA[ Les Pounder ]]></dc:creator>                                                                                    <dc:source><![CDATA[ https://cdn.mos.cms.futurecdn.net/mZ2MebAz6hhKR6vLUDUbsc.jpg ]]></dc:source>
                                                                <dc:description><![CDATA[ &lt;p&gt;Les Pounder is a creative technologist and for seven years has created projects to educate and inspire minds both young and old. He has worked with the Raspberry Pi Foundation to write and deliver their teacher training programme &quot;Picademy&quot;.&lt;/p&gt; ]]></dc:description>
                                                                                                                                <cf:isSponsored>false</cf:isSponsored>
                <cf:hasAffiliateLinks>false</cf:hasAffiliateLinks>
                <cf:isPaid>false</cf:isPaid>
                                                                                                                                <media:content type="image/jpeg" url="https://cdn.mos.cms.futurecdn.net/MbozZP3QRYndZABt5MhiL-1280-80.jpg">
                                                            <media:credit><![CDATA[Tom&#039;s Hardware]]></media:credit>
                                                                                                                                                                                                                                    <media:description><![CDATA[Raspberry Pi Chia Coin]]></media:description>                                                            <media:text><![CDATA[Raspberry Pi Chia Coin]]></media:text>
                                <media:title type="plain"><![CDATA[Raspberry Pi Chia Coin]]></media:title>
                                                    </media:content>
                                                    <media:thumbnail url="https://cdn.mos.cms.futurecdn.net/MbozZP3QRYndZABt5MhiL-1280-80.jpg" />
                                                                                                                                                                    <content:encoded >
                            <![CDATA[
                            <article>
                                <p>After you’ve gone through the process of building Chia Coin plots on a PC (see <a href="https://www.tomshardware.com/how-to/how-to-farm-chia-coin-the-new-storage-based-cryptocurrency"><u>how to farm Chia Coin</u></a>), there’s no need to waste the electricity and tie up expensive computer hardware keeping those plots connected to the Internet. Instead, it’s best to take an external drive or drive(s) with the plots on them and hook them up to a <a href="https://www.tomshardware.com/news/raspberry-pi"><u>Raspberry Pi</u></a> where they can stay online, without gulping down too much juice.</p><p>In this tutorial, we will create a custom Raspberry Pi Chia farming device powered by the latest Ubuntu 64-bit release for the Raspberry Pi. The unit is designed to be hidden away, farming Chia Coin silently while we go about our lives. As such we chose to house the Raspberry Pi 4 inside of a <a href="https://www.tomshardware.com/best-picks/best-raspberry-pi-cases"><u>passively cooled case</u></a>. Our choice this time was the <a href="https://www.tomshardware.com/reviews/akasa-gem-pro-raspberry-pi-case"><u>Akasa Gem Pro</u></a> which has great cooling for the SoC, PMIC and PCIe chip and a rather tasteful, if unusual design. </p><h2 id="for-this-project-you-will-need-xa0">For This Project You Will Need </h2><ul><li><strong>Raspberry Pi 4 4GB</strong></li><li><strong>Raspberry pi case</strong>, perhaps one of the <a href="https://www.tomshardware.com/best-picks/best-raspberry-pi-cases"><u>best Raspberry Pi cases</u></a>, with cooling</li><li>An <a href="https://www.tomshardware.com/reviews/best-external-hard-drive-ssd,5987.html"><u>external USB storage drive</u></a> or SSD / HDD with USB 3.0 caddy.</li><li>16GB Micro SD card or larger</li><li><a href="https://www.raspberrypi.org/software/"><u>Raspberry Pi Imager tool</u></a></li><li>Accessories to use your Raspberry Pi 4</li></ul><h2 id="installing-chia-on-raspberry-pi-4-xa0">Installing Chia On Raspberry Pi 4 </h2><figure class="van-image-figure " data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1057px;"><p class="vanilla-image-block" style="padding-top:76.16%;"><img id="" name="image4.png" alt="Raspberry Pi Chia Coin" src="https://cdn.mos.cms.futurecdn.net/67fzQKYNRm668nXhUe6kQ.png" mos="" align="middle" fullscreen="1" width="1057" height="805" attribution="" endorsement="" class="expandable"><a href='https://cdn.mos.cms.futurecdn.net/67fzQKYNRm668nXhUe6kQ.png' target='_blank' class='expand-button icon-expand-image icon' ></a></p></div></div><figcaption itemprop="caption description" class=""><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Hardware)</span></figcaption></figure><p>1. <strong>Install Ubuntu 21.04 </strong>to a 16GB micro SD card using the official <a href="https://www.raspberrypi.org/software/"><u>Raspberry Pi Imager tool.</u></a> You can also try a headless installation.</p><p>2. <strong>Connect your keyboard, mouse, screen and Ethernet cable</strong>. If you did a headless install, you can skip the keyboard / mouse / screen. Boot your Raspberry Pi 4 and complete the Ubuntu 21.04 installation process. Reboot the Raspberry Pi for all the changes to take effect.</p><p>3. Open a terminal and <strong>update the software repositories</strong>, then upgrade the system software.</p><pre class="line-numbers language-python" language="python" ><code>$ sudo apt update$ sudo apt upgrade -y</code></pre><p>4. <strong>Install the openssh server</strong> to enable remote monitoring via an SSH session. After installation this will automatically start the SSH server as a background service. </p><pre class="line-numbers language-python" language="python" ><code>$ sudo apt install openssh-server</code></pre><p>5. <strong>Install and start Byobu</strong>, a terminal multiplexer that will enable us to log out of the Pi and leave our Chia farm running.</p><pre class="line-numbers language-python" language="python" ><code>$ sudo apt install byobu$ byobu</code></pre><p>6. <strong>Make a note of your Raspberry Pi’s IP address</strong> and <strong>hostname</strong>.</p><pre class="line-numbers language-python" language="python" ><code>$ hostname -I</code></pre><p>7. <strong>Install the Git version control software</strong> and a number of essential dependencies to build the Chia application.</p><pre class="line-numbers language-python" language="python" ><code>$ sudo apt install git$ sudo apt-get install -y build-essential python3-dev</code></pre><p>8. <strong>Clone the Chia git repository</strong> containing the latest version.</p><pre class="line-numbers language-python" language="python" ><code>$ git clone https://github.com/Chia-Network/chia-blockchain.git -b latest</code></pre><p>9. <strong>Change directory to chia-blockchain</strong> and run the installer.</p><pre class="line-numbers language-python" language="python" ><code>cd chia-blockchainsh install.sh</code></pre><p>10.  <strong>Activate the Chia virtual environment </strong>and <strong>create a new Chia config</strong>. </p><pre class="line-numbers language-python" language="python" ><code>$ . ./activate$ chia init</code></pre><p>11. <strong>Connect your USB 3.0 hard drive containing your Chia plot</strong> to the blue USB 3.0 ports on the Raspberry Pi 4. The drive will mount to a directory inside of /media/.</p><p>12. In the terminal <strong>change directory to your USB drive</strong>. Our test drive is at /media/les/Chia/</p><p><br></p><pre class="line-numbers language-python" language="python" ><code>$ cd /media/YOUR USERNAME/DRIVE NAME</code></pre><p>13. <strong>Add the plot from your USB drive to the Chia config</strong> using the 24 word key, created when the plot was created. Enter the command and then type the 24 words with a space between each word. </p><p><br></p><pre class="line-numbers language-python" language="python" ><code>$ chia keys add</code></pre><p>14. <strong>Start farming the plot</strong>; this will also start services for your wallet. This command will only show that the process has started.</p><p><br></p><pre class="line-numbers language-python" language="python" ><code>$ chia start farmer</code></pre><p>15. <strong>Use this command to see the process</strong> of syncing our machine to the network and to confirm that farming has begun. The command will update every two seconds. This command can be stopped by pressing CTRL + C.</p><p><br></p><pre class="line-numbers language-python" language="python" ><code>$ watch 'chia show -s -c'</code></pre><p>16. <strong>Press F6 to detach from the current Byobu session</strong>. This releases us from the running session but it keeps the previous command to view our farming progress running in the background. Should you wish to go back to that Byobu session type this command.</p><pre class="line-numbers language-python" language="python" ><code>$ byobu</code></pre><p>It will take some time for the Pi to sync with the Chia network but it will still continue to farm as it syncs. Right now if you wish, you can unplug the monitor, keyboard, mouse. Leaving just the power, network and USB 3.0 drive connected. Your Pi will happily farm Chia quietly in the corner of the room. But to access the Pi we now need to use SSH, a secure shell terminal and for that we need to instal a client on our computer. </p><p>Should you ever need to manually start the Chia farmer, for example after a reboot, start <em>byobu</em> and repeat steps 14 to 16.  </p><h2 id="how-to-remotely-access-your-raspberry-pi-chia-coin-farm-xa0">How To Remotely Access Your Raspberry Pi Chia Coin Farm </h2><p>1. <strong>Install </strong><a href="https://www.chiark.greenend.org.uk/~sgtatham/putty/latest.html"><u><strong>PuTTY</strong></u></a> on your PC. PuTTY is used to make remote serial connections, SSH, with our Raspberry Pi 4.</p><p>2. <strong>Open PuTTY </strong>and in the Host Name or IP Address field <strong>enter the hostname or IP address </strong>of your Raspberry Pi 4. Click Open. </p><figure class="van-image-figure " data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:488px;"><p class="vanilla-image-block" style="padding-top:100.82%;"><img id="" name="image1.png" alt="Raspberry Pi Chia Coin" src="https://cdn.mos.cms.futurecdn.net/ULhL4EufXisB3yVhrapHB.png" mos="" align="middle" fullscreen="1" width="488" height="492" attribution="" endorsement="" class="expandable"><a href='https://cdn.mos.cms.futurecdn.net/ULhL4EufXisB3yVhrapHB.png' target='_blank' class='expand-button icon-expand-image icon' ></a></p></div></div><figcaption itemprop="caption description" class=""><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Hardware)</span></figcaption></figure><p>3. <strong>Enter your username and password</strong> to remotely login to the Raspberry Pi 4. </p><figure class="van-image-figure " data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:394px;"><p class="vanilla-image-block" style="padding-top:49.75%;"><img id="" name="image5.png" alt="Raspberry Pi Chia Coin" src="https://cdn.mos.cms.futurecdn.net/iTaj7LPV8GtmMLTsWpujV.png" mos="" align="middle" fullscreen="1" width="394" height="196" attribution="" endorsement="" class="expandable"><a href='https://cdn.mos.cms.futurecdn.net/iTaj7LPV8GtmMLTsWpujV.png' target='_blank' class='expand-button icon-expand-image icon' ></a></p></div></div><figcaption itemprop="caption description" class=""><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Hardware)</span></figcaption></figure><p>4. <strong>Open the Byobu session</strong> to see the current progress. </p><pre class="line-numbers language-python" language="python" ><code>$ byobu</code></pre><h2 id="auto-mount-usb-drive-on-boot-xa0">Auto Mount USB Drive on Boot </h2><p>Should we need to power off our P, or there is power loss, we need the drive to automatically be ready to farm Chia with little interaction. It is best to connect your keyboard, mouse and screen for this part of the project but it can also be done remotely using an SSH connection.</p><p>1. With the USB drive connected, open a terminal and <strong>list all the attached devices</strong>. Our device is sda1 which is connected to the mountpoint /media/les/Chia. <strong>Make a note of your mountpoint</strong>, we will need this later. </p><pre class="line-numbers language-python" language="python" ><code>$ lsblk</code></pre><figure class="van-image-figure " data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:564px;"><p class="vanilla-image-block" style="padding-top:51.95%;"><img id="" name="image2.png" alt="Raspberry Pi Chia Coin" src="https://cdn.mos.cms.futurecdn.net/iQgDsGH4UV6xjKjQ9RMwF.png" mos="" align="middle" fullscreen="1" width="564" height="293" attribution="" endorsement="" class="expandable"><a href='https://cdn.mos.cms.futurecdn.net/iQgDsGH4UV6xjKjQ9RMwF.png' target='_blank' class='expand-button icon-expand-image icon' ></a></p></div></div><figcaption itemprop="caption description" class=""><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Hardware)</span></figcaption></figure><p>2. <strong>Run this command </strong>to identify the UUID of your drive. <strong>Copy the text which starts UUID=</strong>. For example our UUID was UUID="b0984018-3d5e-4e53-89d9-6c1f371dbdee</p><pre class="line-numbers language-python" language="python" ><code>blkid /dev/YOUR DRIVE</code></pre><figure class="van-image-figure " data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1034px;"><p class="vanilla-image-block" style="padding-top:14.22%;"><img id="" name="image6.png" alt="Raspberry Pi Chia Coin" src="https://cdn.mos.cms.futurecdn.net/ud2XjpVYCGiGkKtPqEE3Z.png" mos="" align="middle" fullscreen="1" width="1034" height="147" attribution="" endorsement="" class="expandable"><a href='https://cdn.mos.cms.futurecdn.net/ud2XjpVYCGiGkKtPqEE3Z.png' target='_blank' class='expand-button icon-expand-image icon' ></a></p></div></div><figcaption itemprop="caption description" class=""><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Hardware)</span></figcaption></figure><p>3. <strong>Open the filesystem configuration file</strong>, fstab with sudo.</p><pre class="line-numbers language-python" language="python" ><code>$ sudo nano /etc/fstab</code></pre><p>4. <strong>Add this line to the end of the file</strong>. Add your UUID after the =, and leave a space before entering the mountpoint. Here is how our drive is configured.</p><pre class="line-numbers language-python" language="python" ><code>UUID=b0984018-3d5e-4e53-89d9-6c1f371dbdee /media/les/Chia/ auto nosuid,nodev,nofail,x-gvfs-show 0 0</code></pre><p>5. <strong>Press CTRL+ X then Y</strong> and Enter to save.</p><p>6. <strong>Reboot </strong>the Raspberry Pi.</p><pre class="line-numbers language-python" language="python" ><code>$ sudo reboot</code></pre>
                                                            </article>
                            ]]>
                        </content:encoded>
                                                </item>
                                <item>
                                                            <title><![CDATA[ Flip it Off: How to Build a Website Blocker Switch with Raspberry Pi ]]></title>
                                                                                                                                                                                                <link>https://www.tomshardware.com/how-to/website-switches-raspberry-pi</link>
                                                                            <description>
                            <![CDATA[ Stop yourself from visiting social media when you should be getting work done by installing a Raspberry Pi-powered DNS server that turns sites on and off with a switch. ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">9HQW92bNyXsQayMo2sxxrQ</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/Jq4Qmj2bNJJtVneyengurW-1280-80.jpg" type="image/jpeg" length="0"></enclosure>
                                                                        <pubDate>Sat, 24 Apr 2021 13:00:45 +0000</pubDate>                                                                                                                                <updated>Wed, 05 Feb 2025 14:48:35 +0000</updated>
                                                                                                                                            <category><![CDATA[Raspberry Pi]]></category>
                                                                                                <author><![CDATA[ ryder+toms@ryderdamen.com (Ryder Damen) ]]></author>                    <dc:creator><![CDATA[ Ryder Damen ]]></dc:creator>                                                                                    <dc:source><![CDATA[ https://cdn.mos.cms.futurecdn.net/yHmRhXRwnn6Tza4pvE2MAY.jpg ]]></dc:source>
                                                                <dc:description><![CDATA[ &lt;p&gt;Ryder is a creative technologist and Raspberry Pi aficionado. While he spends most of his time on the software side of things, one of his favorite pastimes is taking old technology and giving it a new (often pointless) purpose. In his free time, he likes to create videos, longboard, and explore the vast Canadian wilderness.&lt;/p&gt; ]]></dc:description>
                                                                                                                                <cf:isSponsored>false</cf:isSponsored>
                <cf:hasAffiliateLinks>false</cf:hasAffiliateLinks>
                <cf:isPaid>false</cf:isPaid>
                                                                                                                                <media:content type="image/jpeg" url="https://cdn.mos.cms.futurecdn.net/Jq4Qmj2bNJJtVneyengurW-1280-80.jpg">
                                                            <media:credit><![CDATA[Tom&#039;s Hardware]]></media:credit>
                                                                                                                                                                                                                                    <media:description><![CDATA[Building Website Off Switches with a Raspberry Pi]]></media:description>                                                            <media:text><![CDATA[Building Website Off Switches with a Raspberry Pi]]></media:text>
                                <media:title type="plain"><![CDATA[Building Website Off Switches with a Raspberry Pi]]></media:title>
                                                    </media:content>
                                                    <media:thumbnail url="https://cdn.mos.cms.futurecdn.net/Jq4Qmj2bNJJtVneyengurW-1280-80.jpg" />
                                                                                                                                                                    <content:encoded >
                            <![CDATA[
                            <article>
                                <p>If you’re like me, you spend a little too much time on a few websites, particularly social media sites. Try as you might to avoid them, you find yourself unconsciously typing in Facebook, Reddit, or something else into your search bar. There are a ton of browser extensions, desktop apps, and router rules you can configure to help, but I wanted something more physical.</p><p>This project uses light switches and an at-home DNS server running on a Raspberry Pi Zero to turn on or off access to specific websites. If I want access to a site I have blocked, I need to physically get up and turn off the switch -- something that’s slightly more difficult than turning off a browser extension.</p><p><br></p><p><br></p><p><br></p><h2 id="what-you-x2019-ll-need-to-make-a-website-off-switch">What You’ll Need To Make A Website Off Switch</h2><ul><li>Raspberry Pi Zero W, SD Card, and Power Supply</li><li>Two single-pole light switches</li><li>A PVC double-gang switch box</li><li>A plastic 2-toggle switch plate</li><li>Four male-female jumper wires</li><li>Phillips and flathead screwdrivers</li></ul><h2 id="how-to-build-a-website-off-switch-with-a-raspberry-pi">How to Build a Website Off Switch With a Raspberry Pi</h2><p>1. <strong>Set up your Raspberry Pi</strong> <strong>Zero W </strong>and connect to it remotely. If you don’t know how, see our tutorial on how to <a href="https://www.tomshardware.com/reviews/raspberry-pi-headless-setup-how-to,6028.html"><u>set up a headless Raspberry Pi</u></a>.</p><p>2. <strong>Update and Install git</strong> if not already installed.</p><pre class="line-numbers language-python" language="python" ><code>sudo apt-get update && sudo apt-get install -y git</code></pre><p>3. <strong>Clone the code</strong> from this repository. It will handle the management of the dnsmasq tool, which will be our new DNS server.</p><p><br></p><pre class="line-numbers language-python" language="python" ><code>git clone https://github.com/rydercalmdown/internet_kill_switch</code></pre><p>4. <strong>Run the installation command </strong>from within the newly cloned directory. This will take care of installing all base dependencies, installing the dnsmasq tool, and ensuring it’s running.</p><p><br></p><pre class="line-numbers language-python" language="python" ><code>cd internet_kill_switchmake install</code></pre><p>5. <strong>Ensure dnsmasq is running</strong> by entering the following command. To exit, use Ctrl + C. You should see status “Running” in green.</p><p><br></p><pre class="line-numbers language-python" language="python" ><code>sudo systemctl status dnsmasq# Use Ctrl + C to exit</code></pre><p>6. <strong>Try running the software</strong> to ensure everything works accordingly. You should see a few log messages with no errors. Exit the software with Ctrl + C.</p><p><br></p><pre class="line-numbers language-python" language="python" ><code>make run# Use Ctrl + C to exit</code></pre><p>7. <strong>Wire the male end of each jumper cable to the switches</strong>. You should be able to tuck the pin under the screw and tighten it until it’s snug. These switches are designed for high AC voltage, but will work just the same for our project.</p><p><img height="339" src="https://lh4.googleusercontent.com/dnMPpZuVdn3GhSxvuT1aNytA-3wIHu5vyIE9uObUALIYwckH6FvBl7mum08-RhmFHkzTV1QYFIAR1ZhA1rlIwE2HDGInvd_l__ZDgQurTxy2O1z2GrvDRV5J772ovbBnZWdUfcll" width="602"></p><p><br></p><figure class="van-image-figure " data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1920px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="" name="image5.jpg" alt="Building Website Off Switches with a Raspberry Pi" src="https://cdn.mos.cms.futurecdn.net/5dJJ7BVZy6x43fWPq24q7X.jpg" mos="" align="middle" fullscreen="1" width="1920" height="1080" attribution="" endorsement="" class="expandable"><a href='https://cdn.mos.cms.futurecdn.net/5dJJ7BVZy6x43fWPq24q7X.jpg' target='_blank' class='expand-button icon-expand-image icon' ></a></p></div></div><figcaption itemprop="caption description" class=""><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Hardware)</span></figcaption></figure><p>8. <strong>Attach the female end of the jumper cables to the Raspberry Pi</strong>. Pin order doesn’t matter, as long as one end of the switch goes to a GPIO pin, and the other goes to a ground pin. The default code expects GPIO (BCM) pins 18 and 24, though this is configurable.</p><p><img height="339" src="https://lh4.googleusercontent.com/oN5PuSfwu8EgZZ1LEqylOB4GtJ8dyXIhj5GSjh46_Q_MmQy0r9FFiJ_uLhbuZYWRK4DOIzsDoxcljdwp9CE7nXpxA0A8N_H84p5secZun-0dHcnakWd8knGesI5BATsmtjOWws7a" width="602"></p><p><img height="339" src="https://lh4.googleusercontent.com/hAtsKayJ8K7aCyWIFfi0wvMn4yRMLUyOO8yJLEApm1WVdqhONFyt0VaLeBE2rVbzxx1lLKI8GM-kLSl_6DI2G-eSXpHtCxI5IVDM-slh5Et-9Tn67_3IX493iYWf6UC81F-mDWjI" width="602"></p><p><br></p><figure class="van-image-figure " data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1920px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="" name="image10.jpg" alt="Building Website Off Switches with a Raspberry Pi" src="https://cdn.mos.cms.futurecdn.net/Lh7YxY6imeDLyWQqsZNVXX.jpg" mos="" align="middle" fullscreen="1" width="1920" height="1080" attribution="" endorsement="" class="expandable"><a href='https://cdn.mos.cms.futurecdn.net/Lh7YxY6imeDLyWQqsZNVXX.jpg' target='_blank' class='expand-button icon-expand-image icon' ></a></p></div></div><figcaption itemprop="caption description" class=""><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Hardware)</span></figcaption></figure><p>9. <strong>Tuck the raspberry pi into the PVC double-gang switch box</strong>, and affix it to the back with hot glue.</p><figure class="van-image-figure " data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1920px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="" name="image4.jpg" alt="Building Website Off Switches with a Raspberry Pi" src="https://cdn.mos.cms.futurecdn.net/ubykoVDnpnvGTMrodeqtwW.jpg" mos="" align="middle" fullscreen="1" width="1920" height="1080" attribution="" endorsement="" class="expandable"><a href='https://cdn.mos.cms.futurecdn.net/ubykoVDnpnvGTMrodeqtwW.jpg' target='_blank' class='expand-button icon-expand-image icon' ></a></p></div></div><figcaption itemprop="caption description" class=""><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Hardware)</span></figcaption></figure><p>10. <strong>Run the power cable through the switch box inlet</strong>, and connect it to the Raspberry Pi.</p><p><img src="https://lh6.googleusercontent.com/IIEGVxTNx6doKIGJp_Zl26w7I5CTRH07JeRC8QAhTI2kqqxzpD735S0Ify6jd39zHDIf7BKnYza3PMJqOAGirFoww7-_h6os-k1odx5aIVbHgf33VLzRci68QbgSkfkAaU8y4tPz"></p><p><br></p><figure class="van-image-figure " data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1920px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="" name="image1.jpg" alt="Building Website Off Switches with a Raspberry Pi" src="https://cdn.mos.cms.futurecdn.net/BujcncQBVUHJAHWPNJ3nfW.jpg" mos="" align="middle" fullscreen="1" width="1920" height="1080" attribution="" endorsement="" class="expandable"><a href='https://cdn.mos.cms.futurecdn.net/BujcncQBVUHJAHWPNJ3nfW.jpg' target='_blank' class='expand-button icon-expand-image icon' ></a></p></div></div><figcaption itemprop="caption description" class=""><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Hardware)</span></figcaption></figure><p>11. <strong>Attach both switches to the switch box</strong> using the screws they came with.</p><p><img height="339" src="https://lh3.googleusercontent.com/0BGwIlyrOUsK4oIcapox3ix6gX6YkEJhL0urwNrldCRHLkglr4rKJ9LNmMkx2kPQr6oc12hFBbQHMTjMVXsc-N9_6-fs_ob2pjV0j9-HmHRI91IsCvHPk2aP8fpRvbDoNOEwamar" width="602"></p><p><br></p><figure class="van-image-figure " data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1920px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="" name="image9.jpg" alt="Building Website Off Switches with a Raspberry Pi" src="https://cdn.mos.cms.futurecdn.net/B7Pqqwj7bPvzfNsuNLzVTX.jpg" mos="" align="middle" fullscreen="1" width="1920" height="1080" attribution="" endorsement="" class="expandable"><a href='https://cdn.mos.cms.futurecdn.net/B7Pqqwj7bPvzfNsuNLzVTX.jpg' target='_blank' class='expand-button icon-expand-image icon' ></a></p></div></div><figcaption itemprop="caption description" class=""><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Hardware)</span></figcaption></figure><p>12. <strong>Place the switch plate on top of the switches</strong>, and attach it with the screws it came with.</p><p><img height="339" src="https://lh3.googleusercontent.com/gCRZkehvKqBSJ-Czs1WnvBCm1-0QgRvxIgczAOI7G6yvv0sSp3JPy9Qv-5iAjfgy1KH3MV24j-9g_Z2bHCeo2kXxkbNDrRjYZrh2dQJC1wbco69LcH7yrNUlDqux1rUnbRh5XcDA" width="602"></p><p><br></p><figure class="van-image-figure " data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1920px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="" name="image2.jpg" alt="Building Website Off Switches with a Raspberry Pi" src="https://cdn.mos.cms.futurecdn.net/ygUDWPqkPgzU8B5JpriJnW.jpg" mos="" align="middle" fullscreen="1" width="1920" height="1080" attribution="" endorsement="" class="expandable"><a href='https://cdn.mos.cms.futurecdn.net/ygUDWPqkPgzU8B5JpriJnW.jpg' target='_blank' class='expand-button icon-expand-image icon' ></a></p></div></div><figcaption itemprop="caption description" class=""><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Hardware)</span></figcaption></figure><p>13. <strong>Label which switch belongs to which site</strong>. Keep track of which switch is attached to which pin.</p><p><img height="339" src="https://lh3.googleusercontent.com/dvaz7R0EXsQijKDhO9jmjROgN0Jbr_2--lfDDFxhOw0l8vBlr_NOpHI9xBt79lAUh64OL6MjSrM2Aa8p5sPa5Evk4jqLIhadCsfiFdFaOD8IWdV9NymKHzYaZXrePfGOXbEy6nmd" width="602"></p><p><br></p><figure class="van-image-figure " data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1920px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="" name="image8.jpg" alt="Building Website Off Switches with a Raspberry Pi" src="https://cdn.mos.cms.futurecdn.net/TWcrsFXmJn8SUuji5sEDNX.jpg" mos="" align="middle" fullscreen="1" width="1920" height="1080" attribution="" endorsement="" class="expandable"><a href='https://cdn.mos.cms.futurecdn.net/TWcrsFXmJn8SUuji5sEDNX.jpg' target='_blank' class='expand-button icon-expand-image icon' ></a></p></div></div><figcaption itemprop="caption description" class=""><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Hardware)</span></figcaption></figure><p>14. <strong>Open the src/toggle_switches.py file </strong>for editing.</p><pre class="line-numbers language-python" language="python" ><code>cd src/nano toggle_switches.py</code></pre><p>15. <strong>Modify toggle_switches.py</strong> to list the websites you want to block for each switch. You can add or remove switches by modifying the SWITCHES list, and adding new objects of the class SwitchConfig. The accepted parameters are the BCM pin number, followed by a list of sites to block.</p><p><br></p><pre class="line-numbers language-python" language="python" ><code># Example: The switch connected to BCM pin 18 blocks social media, and the switch connected to BCM pin 24 blocks video websitesSWITCHES = [   SwitchConfig(18, ['facebook.com', 'instagram.com']),   SwitchConfig(24, ['netflix.com', 'youtube.com', 'vimeo.com']),]</code></pre><p>16. <strong>Run the application to test it</strong>, and make note of the IP address it prints out when starting - that’s the IP address of your Pi.</p><p><br></p><pre class="line-numbers language-python" language="python" ><code>cd ~/internet_kill_switchmake run# IP Address is 10.0.0.25</code></pre><p>17. <strong>Configure your DNS servers on your computer </strong>with that IP address. I&apos;m configuring mine in System Preferences > Network of my MacBook, but you can also configure it at the router level.</p><p>18. <strong>Test the switches</strong> on the machine that now uses your Pi as a DNS server - in my case, my MacBook. With the switches in the off position, you should be able to access websites freely. Once you flip the switches to the on position, after a short delay, you should receive a network error when trying to visit that website.</p><p><br></p><figure class="van-image-figure " data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1920px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="" name="image3.jpg" alt="Building Website Off Switches with a Raspberry Pi" src="https://cdn.mos.cms.futurecdn.net/Jq4Qmj2bNJJtVneyengurW.jpg" mos="" align="middle" fullscreen="1" width="1920" height="1080" attribution="" endorsement="" class="expandable"><a href='https://cdn.mos.cms.futurecdn.net/Jq4Qmj2bNJJtVneyengurW.jpg' target='_blank' class='expand-button icon-expand-image icon' ></a></p></div></div><figcaption itemprop="caption description" class=""><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Hardware)</span></figcaption></figure><p>19. <strong>To confirm, use the following command </strong>on your computer, substituting google.com with the site you’ve chosen to block:</p><pre class="line-numbers language-python" language="python" ><code># When the switch is offdig +short google.com172.217.164.238# When the switch is ondig +short google.com127.0.0.1</code></pre><p><br></p><p>20. <strong>Edit your /etc/rc.local file </strong>to include the following line, so this software runs when your Pi reboots.</p><p><br></p><pre class="line-numbers language-python" language="python" ><code>sudo nano /etc/rc.local# Add this line before the very last linecd /home/pi/internet_kill_switch/src && sudo ../env/bin/python app.py &</code></pre><p>21. Mount your switches. If you would like to put this switchbox on the wall, you’ll have to find a place to mount it that’s close to an outlet so you can power the Pi. Alternatively, you can just leave the switchbox on a table or shelf somewhere.</p><figure class="van-image-figure " data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1920px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="" name="image6.jpg" alt="Building Website Off Switches with a Raspberry Pi" src="https://cdn.mos.cms.futurecdn.net/N4gZfKHi4sfCo5JA7zLBDX.jpg" mos="" align="middle" fullscreen="" width="1920" height="1080" attribution="" endorsement="" class=""></p></div></div><figcaption itemprop="caption description" class=""><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Hardware)</span></figcaption></figure><p>Enjoy, and if ever you’re not able to load websites, try removing the Pi’s IP address from your DNS servers - there’s likely a problem.</p>
                                                            </article>
                            ]]>
                        </content:encoded>
                                                </item>
                                <item>
                                                            <title><![CDATA[ How to Delete Duplicate Files in Linux with Fdupes ]]></title>
                                                                                                                                                                                                <link>https://www.tomshardware.com/how-to/delete-duplicate-files-in-linux-fdupes</link>
                                                                            <description>
                            <![CDATA[ Getting rid of duplicate files can be a time-consuming task, but with Fdupes, you can locate and eliminate unnecessary files in Linux with just a simple command. ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">PnmAm5kZZNBy5uxHDW9F2f</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/QnbqdCVT7tNWJhCBvoM3m7-1280-80.gif" type="image/gif" length="0"></enclosure>
                                                                        <pubDate>Sat, 27 Mar 2021 12:00:49 +0000</pubDate>                                                                                                                                <updated>Thu, 30 Jan 2025 13:42:20 +0000</updated>
                                                                                                                                            <category><![CDATA[Linux]]></category>
                                                    <category><![CDATA[Software]]></category>
                                                    <category><![CDATA[Operating Systems]]></category>
                                                                                                                    <dc:creator><![CDATA[ Shashank Sharma ]]></dc:creator>                                                                                    <dc:source><![CDATA[ https://cdn.mos.cms.futurecdn.net/PVGiqXbSwkzW7tg3LcnoCP.jpeg ]]></dc:source>
                                                                <dc:description><![CDATA[ &lt;p&gt;Shashank Sharma is a trial lawyer by profession, but a through-and-through geek by choice. He&#039;s spent nearly two decades writing about Linux and Open Source software for several online and print publications around the English-speaking world, including Linux.com, Linux Journal, Newsforge, Linux Format, and Linux User &amp;amp; Developer. A CLI-junkie, Shashank has co-authored Apress&#039; Beginning Fedora, and when not drafting legal briefs, can be found detailing his CLI escapades on Tom&#039;s Hardware. A bibliophile at heart, he juggles his downtime reading fiction and working to master the art of storytelling.&lt;/p&gt; ]]></dc:description>
                                                                                                                                <cf:isSponsored>false</cf:isSponsored>
                <cf:hasAffiliateLinks>false</cf:hasAffiliateLinks>
                <cf:isPaid>false</cf:isPaid>
                                                                                                                                <media:content type="image/gif" url="https://cdn.mos.cms.futurecdn.net/QnbqdCVT7tNWJhCBvoM3m7-1280-80.gif">
                                                            <media:credit><![CDATA[Tom&#039;s Hardware]]></media:credit>
                                                                                                                                                                                                                                    <media:description><![CDATA[fdupes]]></media:description>                                                            <media:text><![CDATA[fdupes]]></media:text>
                                <media:title type="plain"><![CDATA[fdupes]]></media:title>
                                                    </media:content>
                                                    <media:thumbnail url="https://cdn.mos.cms.futurecdn.net/QnbqdCVT7tNWJhCBvoM3m7-1280-80.gif" />
                                                                                                                                                                    <content:encoded >
                            <![CDATA[
                            <article>
                                <p>As important as it is to keep your disks clear of duplicate files, finding copies of files is a tiresome job and most people don’t want to do it. This isn’t a problem if all you have are tiny text files that take up a few kilobytes each. But media files, especially raw images and HD videos can eat a lot of disk space, leaving you with less room for new data and apps. </p><p>Thankfully, the Fdupes command-line utility provides a faster and more efficient way of identifying duplicate files than just manually combing through your folders. Released under the MIT License, this nifty tool can be used to find duplicate files in the specified directories. The tool works by comparing the MD5 signature of the files, followed by a byte-to-byte comparison to ensure that all copies are identified.</p><p>In addition to tracking down duplicates, you can also use Fdupes to delete duplicate files, replace deleted files with links to the original, etc.</p><h2 id="how-to-install-fdupes-for-linux-xa0">How to Install Fdupes for Linux </h2><p>You’ll find Fdupes in the software repositories of most desktop distributions such as Ubuntu, Fedora, Arch, etc. The following instructions work on Ubuntu, Debian and other Linux flavors that are based on them (ex: Mint and Raspberry Pi OS).</p><p>1. <strong>Update the list of repositories </strong>by entering this command in a terminal window.</p><p><br></p><pre class="line-numbers language-python" language="python" ><code>$ sudo apt update</code></pre><p>2. <strong>Install the dependencies</strong> and <strong>npm package manager</strong>.</p><p><br></p><pre class="line-numbers language-python" language="python" ><code>sudo apt install fdupes</code></pre><p>You can similarly install Fdupes on Fedora, or other rpm based distributions with the ///BEGIN CODE///sudo dnf install fdupes///END CODE/// command.</p><h2 id="how-to-find-duplicate-files-in-linux-with-fdupes-xa0">How to Find Duplicate Files in Linux with Fdupes </h2><p>Despite performing a seemingly straightforward task, Fdupes boasts of a vast number of useful features. As the utility can also be used to delete duplicate files, we would advise you to spend some time with the man page to familiarise yourself with the different command options. At a minimum, Fdupes expect the path to a directory to perform a search for duplicates.</p><pre class="line-numbers language-python" language="python" ><code>$ fdupes </path/to/directory></code></pre><ul><li><strong>To identify duplicate files in a given directory:</strong></li></ul><p>Refer the directory to fdupes</p><pre class="line-numbers language-python" language="python" ><code>$ fdupes ~/Documents</code></pre><figure class="van-image-figure " data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:470px;"><p class="vanilla-image-block" style="padding-top:26.81%;"><img id="" name="image3.png" alt="fdupes" src="https://cdn.mos.cms.futurecdn.net/yMgHNpAwPtdW5KMgr723N8.png" mos="" align="middle" fullscreen="1" width="470" height="126" attribution="" endorsement="" class="expandable"><a href='https://cdn.mos.cms.futurecdn.net/yMgHNpAwPtdW5KMgr723N8.png' target='_blank' class='expand-button icon-expand-image icon' ></a></p></div></div><figcaption itemprop="caption description" class=""><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Hardware)</span></figcaption></figure><ul><li><strong>To recursively search</strong> through all sub-directories in the specified directory and identify all the duplicate files.</li></ul><pre class="line-numbers language-python" language="python" ><code>$ fdupes -r ~/Documents</code></pre><figure class="van-image-figure " data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1093px;"><p class="vanilla-image-block" style="padding-top:44.37%;"><img id="" name="image1.gif" alt="fdupes" src="https://cdn.mos.cms.futurecdn.net/QnbqdCVT7tNWJhCBvoM3m7.gif" mos="" align="middle" fullscreen="1" width="1093" height="485" attribution="" endorsement="" class="expandable"><a href='https://cdn.mos.cms.futurecdn.net/QnbqdCVT7tNWJhCBvoM3m7.gif' target='_blank' class='expand-button icon-expand-image icon' ></a></p></div></div><figcaption itemprop="caption description" class=""><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Hardware)</span></figcaption></figure><p>Both the above commands only list the duplicate files onto the screen, without deleting them. You must <strong>use the -d command option</strong> if you want Fdupes to also delete the duplicate files it identifies. But even then, Fdupes will ask to confirm which of the identified files you wish to retain. You can choose to keep a single file, or provide a comma separated list of the ones you wish to retain, or alternatively to keep all.</p><figure class="van-image-figure " data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:628px;"><p class="vanilla-image-block" style="padding-top:38.06%;"><img id="" name="image2.png" alt="fdupes" src="https://cdn.mos.cms.futurecdn.net/fU2JXQUdMoT6HB4SaTsJ58.png" mos="" align="middle" fullscreen="1" width="628" height="239" attribution="" endorsement="" class="expandable"><a href='https://cdn.mos.cms.futurecdn.net/fU2JXQUdMoT6HB4SaTsJ58.png' target='_blank' class='expand-button icon-expand-image icon' ></a></p></div></div><figcaption itemprop="caption description" class=""><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Hardware)</span></figcaption></figure><p>Here we&apos;ve opted to retain two files. Also, if your specified directory has multiple copies of different files, each group of copies of a single file is referred to as a set.</p><p>This is only a basic introduction to Fdupes. There’s still more that you can do such as ignore hidden files or follow symbolic links, etc.</p><p><strong>More Linux Tutorials:</strong></p><ul><li><a href="https://www.tomshardware.com/how-to/kill-linux-processes-with-fkill"><em>Kill Linux Processes the Easy Way with Fkill</em></a></li><li><a href="https://www.tomshardware.com/how-to/manipulate-pdf-files-with-pdftk"><em>How To Manipulate PDF Files in Linux With PDFtk</em></a></li><li><a href="https://www.tomshardware.com/how-to/send-files-to-trash-linux"><em>How to Send Files to Trash from the Linux Command Line</em></a></li><li><a href="https://www.tomshardware.com/how-to/persistent-ssh-connections-linux-eternal-terminal"><em>How to Get Persistent SSH Connections in Linux Using Eternal Terminal</em></a></li></ul>
                                                            </article>
                            ]]>
                        </content:encoded>
                                                </item>
                                <item>
                                                            <title><![CDATA[ Kill Linux Processes the Easy Way with Fkill ]]></title>
                                                                                                                                                                                                <link>https://www.tomshardware.com/how-to/kill-linux-processes-with-fkill</link>
                                                                            <description>
                            <![CDATA[ Stopping an unresponsive process in Linux can take several steps, but using fkill allows you to do it with one simple command. ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">jMK2gmsnVFPpGJ3TRF6KsC</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/HfUfiJufP2Ba9mSUCPktSL-1280-80.png" type="image/png" length="0"></enclosure>
                                                                        <pubDate>Sun, 21 Mar 2021 12:00:56 +0000</pubDate>                                                                                                                                <updated>Thu, 30 Jan 2025 13:42:20 +0000</updated>
                                                                                                                                            <category><![CDATA[Linux]]></category>
                                                    <category><![CDATA[Software]]></category>
                                                    <category><![CDATA[Operating Systems]]></category>
                                                                                                                    <dc:creator><![CDATA[ Shashank Sharma ]]></dc:creator>                                                                                    <dc:source><![CDATA[ https://cdn.mos.cms.futurecdn.net/PVGiqXbSwkzW7tg3LcnoCP.jpeg ]]></dc:source>
                                                                <dc:description><![CDATA[ &lt;p&gt;Shashank Sharma is a trial lawyer by profession, but a through-and-through geek by choice. He&#039;s spent nearly two decades writing about Linux and Open Source software for several online and print publications around the English-speaking world, including Linux.com, Linux Journal, Newsforge, Linux Format, and Linux User &amp;amp; Developer. A CLI-junkie, Shashank has co-authored Apress&#039; Beginning Fedora, and when not drafting legal briefs, can be found detailing his CLI escapades on Tom&#039;s Hardware. A bibliophile at heart, he juggles his downtime reading fiction and working to master the art of storytelling.&lt;/p&gt; ]]></dc:description>
                                                                                                                                <cf:isSponsored>false</cf:isSponsored>
                <cf:hasAffiliateLinks>false</cf:hasAffiliateLinks>
                <cf:isPaid>false</cf:isPaid>
                                                                                                                                <media:content type="image/png" url="https://cdn.mos.cms.futurecdn.net/HfUfiJufP2Ba9mSUCPktSL-1280-80.png">
                                                            <media:credit><![CDATA[Tom&#039;s Hardware]]></media:credit>
                                                                                                                                                                                                                                    <media:description><![CDATA[fkill turorial]]></media:description>                                                            <media:text><![CDATA[fkill turorial]]></media:text>
                                <media:title type="plain"><![CDATA[fkill turorial]]></media:title>
                                                    </media:content>
                                                    <media:thumbnail url="https://cdn.mos.cms.futurecdn.net/HfUfiJufP2Ba9mSUCPktSL-1280-80.png" />
                                                                                                                                                                    <content:encoded >
                            <![CDATA[
                            <article>
                                <p>While Linux distributions don’t suffer the ignominy of a blue screen of death, running processes (aka programs)  do become unresponsive sometimes. If you run a web browser, media player, ebook reader, etc. on your Linux distribution, each of these is a different process, with a unique process ID and, traditionally, you need to issue a couple of different commands to find this ID and stop it. </p><p>Released under the MIT License, fkill is a cross-platform utility that can be used to interactively kill processes with ease. With fkill, we can scroll through a list of running processes and kill any of them by pressing the Enter key. We can also search through the processes by typing the name of commands / processes  into the terminal and the output will be filtered to show any matching entries. This is a world away from how commands such as top are used to list processes via grep and a separate command is then used to kill the process using its PID.</p><p>Fkill is not available in Linux distributions out of the box. It’s also not available in the software repositories of most Linux distributions. However, its only dependency is the Node.js runtime environment, which you can easily install from the software repository on your distribution. You’ll also need the npm package manager, which too can be installed using the package management tool on your distribution.</p><h2 id="how-to-install-fkill-in-linux">How to Install Fkill in Linux</h2><p>The following instructions work in Ubuntu or Debian and probably several other flavors as well.</p><p>1. <strong>Open a terminal window </strong>and <strong>update the list of repositories</strong>. </p><pre class="line-numbers language-python" language="python" ><code>$ sudo apt update</code></pre><p>2. <strong>Install Node.js and Npm Package Manager</strong>. </p><pre class="line-numbers language-python" language="python" ><code>sudo apt install nodejs npm</code></pre><p>3. Install fkill.</p><pre class="line-numbers language-python" language="python" ><code>npm install --global fkill-cli</code></pre><h2 id="how-to-use-fkill-to-kill-tasks-in-linux-xa0">How to Use Fkill to Kill Tasks in Linux </h2><p>Terminating a program with fkill is as easy as typing it at the command prompt, with no command line arguments required. Here are three main ways to use it.</p><p>1. <strong>Type fkill </strong>and <strong>navigate the menu</strong>. If you just launch fkill, you’ll be shown a scrolling list of all current processes. <strong>Select the process </strong>you want to kill and <strong>hit Enter</strong>. </p><figure class="van-image-figure " data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1400px;"><p class="vanilla-image-block" style="padding-top:41.43%;"><img id="" name="image1.png" alt="fkill turorial" src="https://cdn.mos.cms.futurecdn.net/XibTyQAcMNQmsMDwfnB6SK.png" mos="" align="middle" fullscreen="1" width="1400" height="580" attribution="" endorsement="" class="expandable"><a href='https://cdn.mos.cms.futurecdn.net/XibTyQAcMNQmsMDwfnB6SK.png' target='_blank' class='expand-button icon-expand-image icon' ></a></p></div></div><figcaption itemprop="caption description" class=""><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Hardware)</span></figcaption></figure><p>You can <strong>use the arrows to navigate </strong>through the list or <strong>start typing the name </strong>of the process you are looking for (ex: “fire” for firefox) and you’ll see a list of matching processes appear.  </p><figure class="van-image-figure " data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1396px;"><p class="vanilla-image-block" style="padding-top:21.70%;"><img id="" name="image2.png" alt="fkill turorial" src="https://cdn.mos.cms.futurecdn.net/Kqbbmvr3AjcB8HkYqgRkiK.png" mos="" align="middle" fullscreen="1" width="1396" height="303" attribution="" endorsement="" class="expandable"><a href='https://cdn.mos.cms.futurecdn.net/Kqbbmvr3AjcB8HkYqgRkiK.png' target='_blank' class='expand-button icon-expand-image icon' ></a></p></div></div><figcaption itemprop="caption description" class=""><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Hardware)</span></figcaption></figure><p>2. <strong>Enter fkill [process name]</strong>. For example, you’d type fkill firefox to kill firefox. </p><figure class="van-image-figure " data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1406px;"><p class="vanilla-image-block" style="padding-top:15.15%;"><img id="" name="image3.png" alt="fkill turorial" src="https://cdn.mos.cms.futurecdn.net/uxiPNd9RG9PGiEX9vhLq2L.png" mos="" align="middle" fullscreen="1" width="1406" height="213" attribution="" endorsement="" class="expandable"><a href='https://cdn.mos.cms.futurecdn.net/uxiPNd9RG9PGiEX9vhLq2L.png' target='_blank' class='expand-button icon-expand-image icon' ></a></p></div></div><figcaption itemprop="caption description" class=""><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Hardware)</span></figcaption></figure><p>3. <strong>Enter fkill [process ID]</strong>. If you know the process ID, you can kill it directly. </p><figure class="van-image-figure " data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1425px;"><p class="vanilla-image-block" style="padding-top:16.00%;"><img id="" name="image5.png" alt="fkill turorial" src="https://cdn.mos.cms.futurecdn.net/Q4Emt3C2r3YhHttV5qVAkL.png" mos="" align="middle" fullscreen="1" width="1425" height="228" attribution="" endorsement="" class="expandable"><a href='https://cdn.mos.cms.futurecdn.net/Q4Emt3C2r3YhHttV5qVAkL.png' target='_blank' class='expand-button icon-expand-image icon' ></a></p></div></div><figcaption itemprop="caption description" class=""><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Hardware)</span></figcaption></figure><p>Unlike alternative commands such as <em>kill</em>, which supports sending many different signals to the process, Fkill can only be used to kill the process so it works just like kill -9. </p>
                                                            </article>
                            ]]>
                        </content:encoded>
                                                </item>
                                <item>
                                                            <title><![CDATA[ Raspberry Pi 4: Could Ubuntu Be On The Way? (Update) ]]></title>
                                                                                                                                                                                                <link>https://www.tomshardware.com/news/raspberry-pi-4-could-ubuntu-be-on-the-way</link>
                                                                            <description>
                            <![CDATA[ Ubuntu 20.10 could be the first official Raspberry Pi desktop image. ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">6BNgg8CXj3QyypMJGwWFBV</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/wuzjZ5yUqHi282BMtznLWL-1280-80.png" type="image/png" length="0"></enclosure>
                                                                        <pubDate>Tue, 09 Jun 2020 16:15:10 +0000</pubDate>                                                                                                                                <updated>Thu, 30 Jan 2025 13:42:17 +0000</updated>
                                                                                                                                            <category><![CDATA[Raspberry Pi]]></category>
                                                                                                                    <dc:creator><![CDATA[ Les Pounder ]]></dc:creator>                                                                                    <dc:source><![CDATA[ https://cdn.mos.cms.futurecdn.net/mZ2MebAz6hhKR6vLUDUbsc.jpg ]]></dc:source>
                                                                <dc:description><![CDATA[ &lt;p&gt;Les Pounder is a creative technologist and for seven years has created projects to educate and inspire minds both young and old. He has worked with the Raspberry Pi Foundation to write and deliver their teacher training programme &quot;Picademy&quot;.&lt;/p&gt; ]]></dc:description>
                                                                                                                                <cf:isSponsored>false</cf:isSponsored>
                <cf:hasAffiliateLinks>false</cf:hasAffiliateLinks>
                <cf:isPaid>false</cf:isPaid>
                                                                                                                                <media:content type="image/png" url="https://cdn.mos.cms.futurecdn.net/wuzjZ5yUqHi282BMtznLWL-1280-80.png">
                                                            <media:credit><![CDATA[Future]]></media:credit>
                                                                                                                                                                                                                                    <media:description><![CDATA[Ubuntu 20.04 Installed on a Raspberry Pi 4]]></media:description>                                                            <media:text><![CDATA[Ubuntu 20.04 Installed on a Raspberry Pi 4]]></media:text>
                                <media:title type="plain"><![CDATA[Ubuntu 20.04 Installed on a Raspberry Pi 4]]></media:title>
                                                    </media:content>
                                                    <media:thumbnail url="https://cdn.mos.cms.futurecdn.net/wuzjZ5yUqHi282BMtznLWL-1280-80.png" />
                                                                                                                                                                    <content:encoded >
                            <![CDATA[
                            <article>
                                <p><em><strong>Update 6/9/2020 09:07 PT:</strong></em> We would like to quote that the source of this story was <a href="https://www.omgubuntu.co.uk/2020/06/ubuntu-desktop-support-for-raspberry-pi-4">OMG Ubuntu</a>.</p><p><em><strong>Original Article:</strong></em></p><p>On the surface the Raspberry Pi 4 8GB may not have been a revolutionary release, but it has finally brought the power of a low cost 64 bit desktop computer to homes around the world. From day one the Raspberry Pi has used a Linux based operating system, initially a rather limited release of Debian, called Raspbian which has evolved over the years to become Raspberry Pi OS. But there are times when a more refined desktop experience would benefit the user.</p><p>For over 15 years Ubuntu have provided a Linux distribution that offers a more friendly and forgiving means to delve into the Linux ecosystem.</p><p><a href="https://ubuntupodcast.org/2020/06/04/s13e11-inside-out-clothes/">On a recent Ubuntu Podcast</a>, Martin Wimpress, Director of Engineering at Canonical the company which publishes Ubuntu, hinted that <a href="https://www.youtube.com/watch?v=cYkCFaXB6Z8&feature=youtu.be&t=1751">“maybe we’re working on Ubuntu desktop for the Raspberry Pi”</a>. Martin Wimpress was brought in to work on the main Ubuntu release based<a href="https://ubuntu-mate.org/ports/raspberry-pi/"> on his work in the Ubuntu MATE community.</a></p><p>There is a high chance that this will be ready for Ubuntu 20.10 due for release in October 2020. </p><div class="youtube-video" data-nosnippet ><div class="video-aspect-box"><iframe data-lazy-priority="high" data-lazy-src="https://www.youtube-nocookie.com/embed/umtZuUJOU38" allowfullscreen></iframe></div></div><p>Ubuntu has been an official option since the Raspberry Pi 2 was released, but official support was limited to running servers or installing Ubuntu Core, an IoT platform based on Ubuntu Server. There are community and unofficial projects to enable installation of Ubuntu on to the Raspberry Pi 4. These projects typically use an Ubuntu Server image as a base from which to install a desktop environment using the APT package manager <a href="https://github.com/wimpysworld/desktopify">or via Desktopify</a>, which is a tool also developed by Martin Wimpress.</p><p>Could Ubuntu replace Raspberry Pi OS as the default operating system? Unlikely given that Raspberry Pi OS is an in-house project which has early access to the latest Raspberry Pi hardware. Instead what Ubuntu could bring is a more refined desktop experience for those that wish to use the Raspberry Pi as a desktop computer or for business use as a thin client.</p><p>Early Alpha and Beta testing images of Ubuntu 20.10 for the Raspberry Pi will be available in the coming months, but if you cannot wait then you can always try Desktopify.</p><p>We have reached out for confirmation of this news and will update this post accordingly.</p>
                                                            </article>
                            ]]>
                        </content:encoded>
                                                </item>
                                <item>
                                                            <title><![CDATA[ Sudo Bug That Gave Users Root Access Fixed in Latest Debian Patch ]]></title>
                                                                                                                                                                                                <link>https://www.tomshardware.com/news/sudo-bug-that-gave-users-root-access-fixed-in-latest-debian-patch</link>
                                                                            <description>
                            <![CDATA[ The latest Debian patch fixed a bug in sudo that granted unauthorized users root access. ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">jrdr9kXjMK2UsduBB6hPdE</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/4gdLbCbZEwMBzo6gL3YwtX-1280-80.jpg" type="image/jpeg" length="0"></enclosure>
                                                                        <pubDate>Fri, 18 Oct 2019 12:32:05 +0000</pubDate>                                                                                                                                <updated>Thu, 30 Jan 2025 13:42:22 +0000</updated>
                                                                                                                                            <category><![CDATA[Software]]></category>
                                                                                                                    <dc:creator><![CDATA[ Ash Hill ]]></dc:creator>                                                                                    <dc:source><![CDATA[ https://cdn.mos.cms.futurecdn.net/p9HsnLCwBpTQYCBBhYXgrS.jpg ]]></dc:source>
                                                                <dc:description><![CDATA[ &lt;p&gt;Ash is a self-employed tech writer and illustrator with a serious affinity for the Raspberry Pi, 3D printing, retro gaming and finding the best tech deals and coupons. She has over a decade of IT experience and has been featured in the official Raspberry Pi magazine MagPi.&lt;/p&gt; ]]></dc:description>
                                                                                                                                <cf:isSponsored>false</cf:isSponsored>
                <cf:hasAffiliateLinks>false</cf:hasAffiliateLinks>
                <cf:isPaid>false</cf:isPaid>
                                                                                                                                <media:content type="image/jpeg" url="https://cdn.mos.cms.futurecdn.net/4gdLbCbZEwMBzo6gL3YwtX-1280-80.jpg">
                                                            <media:credit><![CDATA[Shutterstock]]></media:credit>
                                                                                                                                                                                                                                                                                                                                                    </media:content>
                                                    <media:thumbnail url="https://cdn.mos.cms.futurecdn.net/4gdLbCbZEwMBzo6gL3YwtX-1280-80.jpg" />
                                                                                                                                                                    <content:encoded >
                            <![CDATA[
                            <article>
                                <p> </p><p>The Debian Security Advisory posted a vulnerability in Debian that gives <a href="https://www.debian.org/security/2019/dsa-4543"><u>root access to unauthorized users</u></a>. The team first announced the bug on October 14th. A patch is already in place to fix the problem. The bug is present in Raspbian—Pi users will also need the update.</p><p>The issue lies within the sudo program. The security log explains, "when configured to allow a user to run commands as an arbitrary user via the ALL keyword in a Runas specification, allows to run commands as root by specifying the user ID -1 or 4294967295. This could allow a user with sufficient sudo privileges to run commands as root even if the Runas specification explicitly disallows root access.”</p><p>Pi users can check the current OS version using the following command in a terminal on the Pi.</p><pre class="line-numbers language-bash" language="bash" ><code>apt show sudo</code></pre><p>If you&apos;re running Buster, you need patch level <strong>1.8.27-1+deb10u1</strong>. If you&apos;re Pi is still running Stretch, the patch level you need is <strong>1.8.19p1-2.1+deb9u1</strong>.</p><p>To update your Pi to the latest patch, use this command:</p><pre class="line-numbers language-bash" language="bash" ><code>sudo apt-get update && sudo apt-get upgrade</code></pre><p>Despite the severity of unauthorized root access, security experts, like <a href="https://twitter.com/reyammer/status/1184068264680448001">Yanick Fratantonio</a> insist the bug is overhyped. Exploiting the vulnerability would require very specific circumstances that most users won&apos;t encounter.</p><div><blockquote><p>Unpopular (?) opinion: this sudo bug thingy is being extremely overhyped. I mean, it's a cool bug, but it seems relevant only in very very specific situations.</p><p>tweeted Yanick Fratantonio</p></blockquote></div><p>It&apos;s still good practice to keep your OS up to date. You may not have to hurry, but you should still update your Pi or any Linux machine you&apos;ve got running Debian. You can check the <a href="https://security-tracker.debian.org/tracker/sudo"><u>status of the sudo bug</u></a> on the security tracking page.</p>
                                                            </article>
                            ]]>
                        </content:encoded>
                                                </item>
                                <item>
                                                            <title><![CDATA[ Avast, Cisco Confirm: CCleaner Malware Targeted Large Technology Companies ]]></title>
                                                                                                                                                                                                <link>https://www.tomshardware.com/news/avast-cisco-ccleaner-apt-ip,35516.html</link>
                                                                            <description>
                            <![CDATA[ Avast and Cisco confirmed that the CCleaner attackers were in fact after large technology and telecommunications companies' intellectual property. Cisco has also revealed that the malware has similarities to code used by a Chinese cyber espionage group. ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">VRohCF8vRzrZ7mCfYcAfse</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/v9Zy6x4KvsTF6NmTicS2tP-1280-80.png" type="image/png" length="0"></enclosure>
                                                                        <pubDate>Thu, 21 Sep 2017 20:20:00 +0000</pubDate>                                                                                                                                <updated>Thu, 30 Jan 2025 13:42:22 +0000</updated>
                                                                                                                                            <category><![CDATA[Cybersecurity]]></category>
                                                    <category><![CDATA[Tech Industry]]></category>
                                                                                                                    <dc:creator><![CDATA[ Lucian Armasu ]]></dc:creator>                                                                                                        <dc:description><![CDATA[ &lt;p&gt;Lucian Armasu is an experienced digital marketing specialist with over 15 years of experience. He has been featured in publications such as Tom&#039;s Hardware, Tom&#039;s Guide, Yahoo Tech, and Yahoo.&lt;/p&gt; ]]></dc:description>
                                                                                                                                <cf:isSponsored>false</cf:isSponsored>
                <cf:hasAffiliateLinks>false</cf:hasAffiliateLinks>
                <cf:isPaid>false</cf:isPaid>
                                                                                                                                <media:content type="image/png" url="https://cdn.mos.cms.futurecdn.net/v9Zy6x4KvsTF6NmTicS2tP-1280-80.png">
                                                            <media:credit><![CDATA[null]]></media:credit>
                                                                                                                                                                                                                                                                                                                                                    </media:content>
                                                    <media:thumbnail url="https://cdn.mos.cms.futurecdn.net/v9Zy6x4KvsTF6NmTicS2tP-1280-80.png" />
                                                                                                                                                                    <content:encoded >
                            <![CDATA[
                            <article>
                                <figure class="van-image-figure pull-" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:547px;"><p class="vanilla-image-block" style="padding-top:60.88%;"><img id="" name="" alt="" src="https://cdn.mos.cms.futurecdn.net/v9Zy6x4KvsTF6NmTicS2tP.png" mos="https://cdn.mos.cms.futurecdn.net/v9Zy6x4KvsTF6NmTicS2tP.png" align="" fullscreen="1" width="547" height="333" attribution="" endorsement="" class="pull- expandable"><a href='https://cdn.mos.cms.futurecdn.net/v9Zy6x4KvsTF6NmTicS2tP.png' target='_blank' class='expand-button icon-expand-image icon' ></a></p></div></div></figure><p><span>Following the recent <a href="https://www.tomshardware.com/news/avast-unknowingly-bundled-malware-ccleaner,35477.html">CCleaner malware incident</a>, Avast (the new owner of CCleaner) and Cisco’s Talos Intelligence security research group have continued to analyze the attack. The two found that the malware was more sophisticated than originally thought and was targeting large companies to steal their intellectual property.</span></p><h2 id="advanced-persistent-threat">Advanced Persistent Threat </h2><p><span>Avast concluded that the malware was in fact a type of attack called an advanced persistent threat (APT), which is a sophisticated attack usually launched by nation states. The APT that infected CCleaner was supposed to deliver a second-stage payload only to select victims. </span></p><p><span><br/></span></p><p><span>Of the <a href="https://www.tomshardware.com/news/avast-ccleaner-malware-incident-details,35487.html">2.27 million users</a> who installed the infected CCleaner version, Avast believes that only a few hundred were also infected by the second-stage payload. Avast had previously said that it believes the second stage payload was never deployed, but the company has now walked back that statement.</span></p><h2 id="large-companies-targeted">Large Companies Targeted</h2><p><span>The antivirus maker stated that the APT targeted large technology and telecommunications companies from Japan, Taiwan, UK, Germany, and the U.S. via a watering hole attack, which is an attack that targets popular websites or tools used by millions, only to infect a few targets that may also use those same tools. The name is taken from the real world where some predators wait for an opportunity to pick their prey from the animals that come to drink water at a watering hole.</span></p><figure class="van-image-figure pull-" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:315px;"><p class="vanilla-image-block" style="padding-top:172.38%;"><img id="" name="" alt="" src="https://cdn.mos.cms.futurecdn.net/AKSKbW4YhpBSiHYDRnZSUK.png" mos="https://cdn.mos.cms.futurecdn.net/AKSKbW4YhpBSiHYDRnZSUK.png" align="" fullscreen="1" width="315" height="543" attribution="" endorsement="" class="pull- expandable"><a href='https://cdn.mos.cms.futurecdn.net/AKSKbW4YhpBSiHYDRnZSUK.png' target='_blank' class='expand-button icon-expand-image icon' ></a></p></div></div></figure><p><span>Avast didn’t want to say who were the targets of this attack, but Cisco <a href="http://blog.talosintelligence.com/2017/09/ccleaner-c2-concern.html">revealed a list of targets</a> the attackers were attempting to hack. Besides Cisco itself, the list includes Intel, HTC, Samsung, Sony, VMware, Microsoft, Vodafone, Epson, Linksys, MSI, Akamai, and a few others.</span></p><h2 id="complex-obfuscated-code">Complex Obfuscated Code</h2><p><span>According to Avast, the second-stage payload contains complex and obfuscated code and includes two DLL components. The first component comes with anti-debugging and anti-emulation mechanisms, and its purpose seems to be finding another command and control (C2) server. </span></p><p><span>The C2 server’s address could be modified in the future, which means that it may not be enough that law enforcement shut down the original C2 servers. The attackers may be able to regain control of the infected machines and continue to control them remotely through a new another server.</span></p><p><span>The second part of the second-stage payload is responsible for persistence on the operating system, and they seem to be piggybacking on other vendors’ applications to avoid detection and maintain persistence. The 32-bit version of the code embeds itself into a Winzip package, whereas the 64-bit one uses a Symantec dll. Most of the malicious code is delivered from the registry. Avast noted that all of these techniques demonstrate a high level of sophistication from the attacker. </span></p><h2 id="attribution">Attribution</h2><p><span>Attribution is difficult for cyber attacks, as sophisticated attackers can often make it look as if someone else did it by re-using other attackers’ code or hacking styles. They may effectively hide behind reused IP addresses by launching their attacks from computers they hack in a given country. This is also why Avast is reluctant to say for sure who the attackers were right now, but it promised to continue to work with law enforcement to find out who was responsible.</span></p><p><span>However, Cisco and Kaspersky were both able to confirm that the malware uses code that overlaps with malware code used by <a href="https://krebsonsecurity.com/tag/group-72/">“Group 72,”</a> also called “Deep Panda,” “Axiom,” and “Shell Crew.” Group 72 is believed to be a cyber espionage group funded by the Chinese government, and it’s also believed to be responsible for stealing 80 million U.S. social security numbers from health insurance company Anthem.</span></p><p><span>Avast initially suggested that it should be enough to update to the clean version of CCleaner, but Cisco recommended that it would be safer to restore from backups and reimage the systems. Avast also recommends updating to CCleaner 5.35, as the company has now also revoked the Symantec certificate it was using to sign the infected 5.33 version as well as the cleaned-up 5.34 version.</span></p>
                                                            </article>
                            ]]>
                        </content:encoded>
                                                </item>
                                <item>
                                                            <title><![CDATA[ StrongPity 'Advanced Persistent Threat' Goes After WinRAR, TrueCrypt Users, Says Kaspersky ]]></title>
                                                                                                                                                                                                <link>https://www.tomshardware.com/news/strongpity-apt-winrar-truecrypt-attack,32836.html</link>
                                                                            <description>
                            <![CDATA[ Kaspersky warned that there has been an escalation in attacks against users trying to download WinRAR and TrueCrypt installers from the internet. The attackers infect the popular installers on various fake or existing websites that distribute the files. ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">DGVgkSiRXHiHPkppxQDZy5</guid>
                                                                                                                            <pubDate>Mon, 10 Oct 2016 20:25:00 +0000</pubDate>                                                                                                                                <updated>Thu, 30 Jan 2025 16:32:03 +0000</updated>
                                                                                                                                            <category><![CDATA[Cyber Security]]></category>
                                                    <category><![CDATA[Tech Industry]]></category>
                                                                                                                    <dc:creator><![CDATA[ Lucian Armasu ]]></dc:creator>                                                                                                        <dc:description><![CDATA[ null ]]></dc:description>
                                                                                                                                <cf:isSponsored>false</cf:isSponsored>
                <cf:hasAffiliateLinks>false</cf:hasAffiliateLinks>
                <cf:isPaid>false</cf:isPaid>
                                                                                                                                                        <content:encoded >
                            <![CDATA[
                            <article>
                                <figure class="van-image-figure pull-" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:600px;"><p class="vanilla-image-block" style="padding-top:75.00%;"><img id="" name="" alt="" src="https://cdn.mos.cms.futurecdn.net/6acQ8hA2RoStCKR6HkXhtb.jpg" mos="https://cdn.mos.cms.futurecdn.net/6acQ8hA2RoStCKR6HkXhtb.jpg" align="" fullscreen="1" width="600" height="450" attribution="" endorsement="" class="pull- expandable"><a href='https://cdn.mos.cms.futurecdn.net/6acQ8hA2RoStCKR6HkXhtb.jpg' target='_blank' class='expand-button icon-expand-image icon' ></a></p></div></div></figure><p><span>Kaspersky announced the discovery of a new "advanced persistent threat" (APT) attack called "StrongPity." The attack involved infecting installers of WinRAR and TrueCrypt on sites that distributed the two apps.</span></p><h2 id="encryption-tools-users-targeted">Encryption Tools Users Targeted</h2><p><span>Kaspersky’s research team has noticed that over the past few months, there has been an escalation in attacks against users who are looking mainly for two software programs: WinRAR and TrueCrypt. </span></p><p><span>TrueCrypt, which has been <a href="http://truecrypt.sourceforge.net/">abandoned</a> by its original authors but has been continued through other projects such as <a href="https://veracrypt.codeplex.com/">VeraCrypt</a>, is a well-known drive encryption software. WinRAR is a <a href="http://www.rarlab.com/">popular file archiver</a> utility for Windows, but it’s also often used to encrypt files.</span></p><h2 id="waterhole-attacks">Waterhole Attacks</h2><p><span>The users were infected through “waterhole attacks,” which are attacks that put malware on certain websites where targeted users are likely to visit. The StrongPity attackers would insert trojans into the installer files of <a href="https://www.tomshardware.com/news/winrar-vulnerability-remote-code-execution,30204.html">WinRAR</a> and TrueCrypt on various distributor sites, from where users would download them and infect their own systems. </span></p><p><span>The attackers are able to take complete control of their systems through the infected installers. They can also steal disk contents and download additional malware components that allow them to collect contacts and monitor communications.</span></p><h2 id="belgium-and-italy-most-targeted">Belgium And Italy Most Targeted</h2><p><span>Users were most targeted in Belgium and Italy. In Belgium, the attackers built fake websites from which they would make the infected installers available. In Italy, the StrongPity attackers infected the software installers on an existing software distributing website. Kaspersky noticed the fraudulent activity in both Belgium and Italy earlier this year, in May.</span></p><p><span>Kasperky Lab data revealed that over a single week, hundreds of systems throughout </span><span>Europe and Northern Africa/Middle East </span><span>were infected by StrongPity malware.</span></p><p>”The techniques employed by this threat actor are quite clever. They resemble the approach undertaken in early 2014 by the Crouching Yeti/Energetic Bear APT, which involved trojanizing legitimate IT software installers for industrial control systems and compromising genuine distribution sites,” said Kurt Baumgartner, principal security researcher, Kaspersky Lab. “These tactics are an unwelcome and dangerous trend that the security industry needs to address. The search for privacy and data integrity should not expose an individual to offensive waterhole damage. Waterhole attacks are inherently imprecise, and we hope to spur discussion around the need for easier and improved verification of encryption tool delivery," he added.</p><h2 id="code-signing-and-verification">Code Signing And Verification</h2><p><span>The ideal protection against this sort of attack, where you get an infected file that should otherwise be legitimate, is "code signing" and "signature verification." This is especially important for encryption software that’s more likely to be targeted by sophisticated attackers, such as nation- states. </span></p><p><span>However, checking a file’s signature isn’t an easy enough task for most people, so most people don’t bother or don’t even know how to do it. Easier ways to verify a file’s integrity by comparing it to the original source are needed. Until then, Kaspersky said that strong anti-malware and dynamic whitelisting solutions will be more necessary than ever.</span></p>
                                                            </article>
                            ]]>
                        </content:encoded>
                                                </item>
            </channel>
</rss>