<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>Forem: Igor Giamoniano</title>
    <description>The latest articles on Forem by Igor Giamoniano (@igorgbr).</description>
    <link>https://forem.com/igorgbr</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F641821%2F4cc36f3d-9e91-42fc-87fe-a5af8a741178.jpeg</url>
      <title>Forem: Igor Giamoniano</title>
      <link>https://forem.com/igorgbr</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/igorgbr"/>
    <language>en</language>
    <item>
      <title>How to Remove Orphan Linux Boot Entries from Windows 11 UEFI</title>
      <dc:creator>Igor Giamoniano</dc:creator>
      <pubDate>Tue, 14 Apr 2026 14:06:05 +0000</pubDate>
      <link>https://forem.com/igorgbr/how-to-remove-orphan-linux-boot-entries-from-windows-11-uefi-6d</link>
      <guid>https://forem.com/igorgbr/how-to-remove-orphan-linux-boot-entries-from-windows-11-uefi-6d</guid>
      <description>&lt;p&gt;&lt;strong&gt;Level:&lt;/strong&gt; Intermediate&lt;br&gt;&lt;br&gt;
&lt;strong&gt;Estimated Time:&lt;/strong&gt; 15–20 minutes&lt;br&gt;&lt;br&gt;
&lt;strong&gt;Operating System:&lt;/strong&gt; Windows 11 (UEFI systems)&lt;/p&gt;


&lt;h2&gt;
  
  
  Summary
&lt;/h2&gt;

&lt;p&gt;After replacing a Linux installation (such as Pop!_OS, Ubuntu, or Arch Linux) with Windows 11, old boot entries may remain visible in UEFI firmware.&lt;/p&gt;

&lt;p&gt;This happens because UEFI boot configuration is stored in:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;EFI System Partition (ESP)
&lt;/li&gt;
&lt;li&gt;UEFI NVRAM boot entries
&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Both must be cleaned.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;⚠️ &lt;strong&gt;Before you start&lt;/strong&gt;: Backup your data. Modifying the EFI partition or NVRAM entries can make your system unbootable if done incorrectly.&lt;/p&gt;
&lt;/blockquote&gt;


&lt;h2&gt;
  
  
  Technical Background
&lt;/h2&gt;
&lt;h3&gt;
  
  
  EFI System Partition (ESP)
&lt;/h3&gt;

&lt;p&gt;The EFI System Partition (ESP) is a FAT32-formatted partition that stores the bootloaders for all installed operating systems. On Windows systems, it typically ranges from 100–500 MB in size and is labeled as "System".&lt;/p&gt;

&lt;p&gt;Typical structure:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;EFI/
├── Microsoft/
├── Boot/
├── pop_os/
├── systemd/
├── ubuntu/
└── linux/
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;blockquote&gt;
&lt;p&gt;⚠️ Do NOT remove:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Microsoft/&lt;/li&gt;
&lt;li&gt;Boot/&lt;/li&gt;
&lt;/ul&gt;
&lt;/blockquote&gt;




&lt;h3&gt;
  
  
  NVRAM Boot Entries
&lt;/h3&gt;

&lt;p&gt;UEFI firmware stores boot entries in non-volatile memory.&lt;/p&gt;

&lt;p&gt;Each entry contains:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;GUID identifier&lt;/li&gt;
&lt;li&gt;Description&lt;/li&gt;
&lt;li&gt;Path to EFI loader&lt;/li&gt;
&lt;li&gt;Device reference&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Removing EFI files does not remove NVRAM entries.&lt;/p&gt;




&lt;h2&gt;
  
  
  Step 1 — Mount EFI Partition
&lt;/h2&gt;

&lt;p&gt;Open Command Prompt as Administrator.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;diskpart
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;list disk
select disk 0
list partition
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;blockquote&gt;
&lt;p&gt;⚠️ Replace &lt;code&gt;0&lt;/code&gt; with your system disk number.&lt;br&gt;
&lt;/p&gt;
&lt;/blockquote&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;select partition 1
assign letter=Z
exit
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;blockquote&gt;
&lt;p&gt;⚠️ Replace &lt;code&gt;1&lt;/code&gt; with the EFI partition (~100–500 MB, Type: System)&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  Step 2 — Remove Linux Bootloader Files
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Z:
cd \EFI
dir
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Remove Linux folders:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;rmdir /s /q systemd
rmdir /s /q pop_os
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Parameters:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;/s&lt;/code&gt; → removes directories recursively&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;/q&lt;/code&gt; → quiet mode (no confirmation)&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Permission Errors
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;takeown /f systemd /r /d y
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Parameters:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;/f&lt;/code&gt; → target folder&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;/r&lt;/code&gt; → recursive&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;/d y&lt;/code&gt; → auto confirm&lt;/li&gt;
&lt;/ul&gt;

&lt;blockquote&gt;
&lt;p&gt;💡 On Portuguese Windows, use &lt;code&gt;/d s&lt;/code&gt; instead of &lt;code&gt;/d y&lt;/code&gt;.&lt;br&gt;
&lt;/p&gt;
&lt;/blockquote&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;icacls systemd /grant Administrators:F /t
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;rmdir /s /q systemd
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  Step 3 — Remove NVRAM Boot Entries
&lt;/h2&gt;

&lt;h3&gt;
  
  
  3.1 List firmware entries
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;bcdedit /enum firmware
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Example output:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Firmware Application (101fffff)
-------------------------------
identifier              {29c75bf6-3303-11f1-b7f4-e7fe7d8485ec}
device                  partition=\Device\HarddiskVolume1
path                    \EFI\systemd\systemd-bootx64.efi
description             Pop!_OS

Firmware Application (101fffff)
-------------------------------
identifier              {bootmgr}
device                  partition=\Device\HarddiskVolume2
path                    \EFI\Microsoft\Boot\bootmgfw.efi
description             Windows Boot Manager
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  3.2 Identify entries to remove
&lt;/h3&gt;

&lt;p&gt;Remove entries that reference:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;systemd&lt;/li&gt;
&lt;li&gt;pop_os&lt;/li&gt;
&lt;li&gt;ubuntu&lt;/li&gt;
&lt;li&gt;linux&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  3.3 Delete orphan entry
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;bcdedit /delete {29c75bf6-3303-11f1-b7f4-e7fe7d8485ec} /f
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Parameter:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;/f&lt;/code&gt; → force deletion without confirmation&lt;/li&gt;
&lt;/ul&gt;

&lt;blockquote&gt;
&lt;p&gt;⚠️ NEVER delete:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;code&gt;{bootmgr}&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;{current}&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  Step 4 — Remove drive letter
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;diskpart
select disk 0
select partition 1
remove letter=Z
exit
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  Troubleshooting
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Problem 1 — Access denied
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;takeown /f systemd /r /d y
icacls systemd /grant Administrators:F /t
rmdir /s /q systemd
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h3&gt;
  
  
  Problem 2 — delete fails
&lt;/h3&gt;

&lt;p&gt;Possible causes:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;entry already removed&lt;/li&gt;
&lt;li&gt;firmware protected entry&lt;/li&gt;
&lt;li&gt;invalid reference&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Solution:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;reboot&lt;/li&gt;
&lt;li&gt;remove EFI files first&lt;/li&gt;
&lt;li&gt;run again&lt;/li&gt;
&lt;/ul&gt;




&lt;h3&gt;
  
  
  Problem 3 — entry still appears
&lt;/h3&gt;

&lt;p&gt;Possible causes:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;firmware cache&lt;/li&gt;
&lt;li&gt;fallback recreated&lt;/li&gt;
&lt;li&gt;BIOS bug&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Solutions:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;reboot twice&lt;/li&gt;
&lt;li&gt;load BIOS defaults&lt;/li&gt;
&lt;li&gt;update BIOS&lt;/li&gt;
&lt;/ul&gt;




&lt;h3&gt;
  
  
  Problem 4 — Windows does not boot
&lt;/h3&gt;

&lt;p&gt;Method 1 — Startup Repair&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Boot Windows installer USB
&lt;/li&gt;
&lt;li&gt;Repair your computer
&lt;/li&gt;
&lt;li&gt;Startup Repair
&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Method 2 — Recovery Command Prompt&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;bcdboot C:\Windows /s Z: /f UEFI
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  Commands Used
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Command&lt;/th&gt;
&lt;th&gt;Purpose&lt;/th&gt;
&lt;th&gt;Documentation&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;diskpart&lt;/td&gt;
&lt;td&gt;Disk and partition management&lt;/td&gt;
&lt;td&gt;&lt;a href="https://learn.microsoft.com/windows-server/administration/windows-commands/diskpart" rel="noopener noreferrer"&gt;https://learn.microsoft.com/windows-server/administration/windows-commands/diskpart&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;bcdedit&lt;/td&gt;
&lt;td&gt;Manage firmware boot entries&lt;/td&gt;
&lt;td&gt;&lt;a href="https://learn.microsoft.com/windows-hardware/drivers/devtest/bcdedit" rel="noopener noreferrer"&gt;https://learn.microsoft.com/windows-hardware/drivers/devtest/bcdedit&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;takeown&lt;/td&gt;
&lt;td&gt;Take ownership of files&lt;/td&gt;
&lt;td&gt;&lt;a href="https://learn.microsoft.com/windows-server/administration/windows-commands/takeown" rel="noopener noreferrer"&gt;https://learn.microsoft.com/windows-server/administration/windows-commands/takeown&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;icacls&lt;/td&gt;
&lt;td&gt;Modify permissions&lt;/td&gt;
&lt;td&gt;&lt;a href="https://learn.microsoft.com/windows-server/administration/windows-commands/icacls" rel="noopener noreferrer"&gt;https://learn.microsoft.com/windows-server/administration/windows-commands/icacls&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;rmdir&lt;/td&gt;
&lt;td&gt;Remove directories&lt;/td&gt;
&lt;td&gt;&lt;a href="https://learn.microsoft.com/windows-server/administration/windows-commands/rmdir" rel="noopener noreferrer"&gt;https://learn.microsoft.com/windows-server/administration/windows-commands/rmdir&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;bcdboot&lt;/td&gt;
&lt;td&gt;Rebuild Windows bootloader&lt;/td&gt;
&lt;td&gt;&lt;a href="https://learn.microsoft.com/windows-hardware/manufacture/desktop/bcdboot-command-line-options" rel="noopener noreferrer"&gt;https://learn.microsoft.com/windows-hardware/manufacture/desktop/bcdboot-command-line-options&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;




&lt;h2&gt;
  
  
  Version Notes
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Version&lt;/th&gt;
&lt;th&gt;Date&lt;/th&gt;
&lt;th&gt;Changes&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;1.0&lt;/td&gt;
&lt;td&gt;April 2026&lt;/td&gt;
&lt;td&gt;Initial procedure&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;1.1&lt;/td&gt;
&lt;td&gt;April 2026&lt;/td&gt;
&lt;td&gt;Added EFI explanation&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;1.2&lt;/td&gt;
&lt;td&gt;April 2026&lt;/td&gt;
&lt;td&gt;Added NVRAM cleanup&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;1.3&lt;/td&gt;
&lt;td&gt;April 2026&lt;/td&gt;
&lt;td&gt;Added troubleshooting&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;1.4&lt;/td&gt;
&lt;td&gt;April 2026&lt;/td&gt;
&lt;td&gt;Added command table&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;1.5&lt;/td&gt;
&lt;td&gt;April 2026&lt;/td&gt;
&lt;td&gt;Added recovery section&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;1.6&lt;/td&gt;
&lt;td&gt;April 2026&lt;/td&gt;
&lt;td&gt;Safety and locale improvements&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;




&lt;p&gt;✅ Quick Checklist (click to expand)&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;[ ] Backup completed&lt;/li&gt;
&lt;li&gt;[ ] Disk/Partition numbers verified&lt;/li&gt;
&lt;li&gt;[ ] Microsoft/ and Boot/ preserved&lt;/li&gt;
&lt;li&gt;[ ] {bootmgr} and {current} not deleted&lt;/li&gt;
&lt;li&gt;[ ] Drive letter removed&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Tested Environment
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Windows 11 24H2&lt;/li&gt;
&lt;li&gt;UEFI firmware&lt;/li&gt;
&lt;li&gt;GPT disk&lt;/li&gt;
&lt;li&gt;Pop!_OS systemd-boot&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Disclaimer
&lt;/h2&gt;

&lt;p&gt;Backup before modifying EFI partition.&lt;br&gt;
Verify disk and partition numbers carefully.&lt;/p&gt;

</description>
      <category>linux</category>
      <category>opensource</category>
      <category>tutorial</category>
      <category>beginners</category>
    </item>
    <item>
      <title>Diagnosing Multiple GPUs on Linux: How to Detect and Monitor Integrated and Dedicated GPUs</title>
      <dc:creator>Igor Giamoniano</dc:creator>
      <pubDate>Sun, 15 Mar 2026 00:13:40 +0000</pubDate>
      <link>https://forem.com/igorgbr/diagnosing-multiple-gpus-on-linux-how-to-detect-and-monitor-integrated-and-dedicated-gpus-47c3</link>
      <guid>https://forem.com/igorgbr/diagnosing-multiple-gpus-on-linux-how-to-detect-and-monitor-integrated-and-dedicated-gpus-47c3</guid>
      <description>&lt;p&gt;If you run Linux on a system with both an &lt;strong&gt;integrated GPU&lt;/strong&gt; and a &lt;strong&gt;dedicated GPU&lt;/strong&gt;, you may have noticed something strange: some monitoring tools only show one GPU.&lt;/p&gt;

&lt;p&gt;This situation is common on:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;laptops with hybrid graphics&lt;/li&gt;
&lt;li&gt;desktops with iGPU + dedicated GPU&lt;/li&gt;
&lt;li&gt;systems using different driver stacks&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;For example, a monitoring tool like &lt;strong&gt;btop&lt;/strong&gt; might show your AMD integrated GPU but completely ignore your NVIDIA card.&lt;/p&gt;

&lt;p&gt;In this article we will walk through how to:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;detect all GPUs installed in your system&lt;/li&gt;
&lt;li&gt;verify that the correct drivers are loaded&lt;/li&gt;
&lt;li&gt;identify which GPU is rendering your desktop&lt;/li&gt;
&lt;li&gt;monitor usage for each GPU&lt;/li&gt;
&lt;li&gt;automate the entire diagnostic process with a small script&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Why This Happens
&lt;/h2&gt;

&lt;p&gt;Linux systems with multiple GPUs may behave differently depending on:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;installed drivers (open source vs proprietary)&lt;/li&gt;
&lt;li&gt;kernel configuration&lt;/li&gt;
&lt;li&gt;which GPU is configured as the primary renderer&lt;/li&gt;
&lt;li&gt;monitoring tool capabilities&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Example setup used in this article:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;AMD Vega (integrated)&lt;/strong&gt; — Ryzen 5 5600G
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;NVIDIA GTX 1050 Ti (dedicated)&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;In this configuration, &lt;code&gt;btop&lt;/code&gt; showed only the AMD GPU while the NVIDIA card remained invisible in the default monitoring view.&lt;/p&gt;




&lt;h2&gt;
  
  
  Step 1 — Check if Both GPUs Are Detected
&lt;/h2&gt;

&lt;h3&gt;
  
  
  1.1 List GPUs via PCI
&lt;/h3&gt;

&lt;p&gt;Run:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;lspci | &lt;span class="nb"&gt;grep&lt;/span&gt; &lt;span class="nt"&gt;-i&lt;/span&gt; vga
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Example output:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;01:00.0 VGA compatible controller: NVIDIA Corporation GP107 [GeForce GTX 1050 Ti]
09:00.0 VGA compatible controller: Advanced Micro Devices, Inc. [AMD/ATI] Cezanne [Radeon Vega Series]
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;If two entries appear, your &lt;strong&gt;hardware is being detected correctly&lt;/strong&gt;.&lt;/p&gt;




&lt;h3&gt;
  
  
  1.2 Check Loaded Drivers
&lt;/h3&gt;

&lt;p&gt;Run:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;lsmod | &lt;span class="nb"&gt;grep&lt;/span&gt; &lt;span class="nt"&gt;-E&lt;/span&gt; &lt;span class="s1"&gt;'nvidia|amdgpu|radeon'&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Typical modules:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;GPU&lt;/th&gt;
&lt;th&gt;Kernel Module&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;NVIDIA&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;nvidia&lt;/code&gt;, &lt;code&gt;nvidia_drm&lt;/code&gt;, &lt;code&gt;nvidia_modeset&lt;/code&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;AMD (modern)&lt;/td&gt;
&lt;td&gt;&lt;code&gt;amdgpu&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;AMD (legacy)&lt;/td&gt;
&lt;td&gt;&lt;code&gt;radeon&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;If the modules appear, the &lt;strong&gt;drivers are loaded by the kernel&lt;/strong&gt;.&lt;/p&gt;




&lt;h3&gt;
  
  
  1.3 Check Which GPU Is Rendering Your Desktop
&lt;/h3&gt;

&lt;p&gt;Use:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;glxinfo | &lt;span class="nb"&gt;grep&lt;/span&gt; &lt;span class="s2"&gt;"OpenGL renderer"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Example output:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;OpenGL renderer string: NVIDIA GeForce GTX 1050 Ti
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;If &lt;code&gt;glxinfo&lt;/code&gt; is missing, install it.&lt;/p&gt;

&lt;p&gt;Ubuntu / Debian:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;apt &lt;span class="nb"&gt;install &lt;/span&gt;mesa-utils
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Arch Linux:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;pacman &lt;span class="nt"&gt;-S&lt;/span&gt; mesa-utils
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This command reveals &lt;strong&gt;which GPU is rendering the graphical session&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;In hybrid setups, the integrated GPU often renders the desktop while the dedicated GPU activates only for demanding workloads.&lt;/p&gt;




&lt;h2&gt;
  
  
  Step 2 — Monitoring Each GPU
&lt;/h2&gt;

&lt;h3&gt;
  
  
  2.1 Integrated GPU (AMD / Intel) — Using btop
&lt;/h3&gt;

&lt;p&gt;Launch:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;btop
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Inside &lt;code&gt;btop&lt;/code&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;press &lt;strong&gt;g&lt;/strong&gt; to toggle GPU views&lt;/li&gt;
&lt;li&gt;press &lt;strong&gt;5 / 6 / 7&lt;/strong&gt; for specific GPU panels&lt;/li&gt;
&lt;li&gt;configure via &lt;strong&gt;F2 → Options → CPU box → Show GPU info&lt;/strong&gt;
&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  2.2 NVIDIA Dedicated GPU — Using nvidia-smi
&lt;/h2&gt;

&lt;p&gt;For NVIDIA GPUs the official tool is the most reliable:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;watch &lt;span class="nt"&gt;-n&lt;/span&gt; 1 nvidia-smi
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This updates every second and displays:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;GPU utilization&lt;/li&gt;
&lt;li&gt;memory usage&lt;/li&gt;
&lt;li&gt;running processes&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Structured output:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;nvidia-smi &lt;span class="nt"&gt;--query-gpu&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;name,memory.used,memory.total,utilization.gpu &lt;span class="nt"&gt;--format&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;csv &lt;span class="nt"&gt;-l&lt;/span&gt; 1
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  Step 3 — Automating GPU Diagnostics
&lt;/h2&gt;

&lt;p&gt;Create a script called:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;check_gpus.sh
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Script:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;#!/bin/bash&lt;/span&gt;

&lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="s2"&gt;"=== GPUs Detected ==="&lt;/span&gt;
lspci | &lt;span class="nb"&gt;grep&lt;/span&gt; &lt;span class="nt"&gt;-E&lt;/span&gt; &lt;span class="s2"&gt;"VGA|3D"&lt;/span&gt;

&lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="nt"&gt;-e&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="se"&gt;\n&lt;/span&gt;&lt;span class="s2"&gt;=== Loaded Drivers ==="&lt;/span&gt;
lsmod | &lt;span class="nb"&gt;grep&lt;/span&gt; &lt;span class="nt"&gt;-E&lt;/span&gt; &lt;span class="s2"&gt;"nvidia|amdgpu|radeon"&lt;/span&gt;

&lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="nt"&gt;-e&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="se"&gt;\n&lt;/span&gt;&lt;span class="s2"&gt;=== NVIDIA GPU ==="&lt;/span&gt;
nvidia-smi &lt;span class="nt"&gt;--query-gpu&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;name,memory.total &lt;span class="nt"&gt;--format&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;csv 2&amp;gt;/dev/null &lt;span class="o"&gt;||&lt;/span&gt; &lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="s2"&gt;"NVIDIA not detected"&lt;/span&gt;

&lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="nt"&gt;-e&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="se"&gt;\n&lt;/span&gt;&lt;span class="s2"&gt;=== Rendering GPU ==="&lt;/span&gt;
glxinfo | &lt;span class="nb"&gt;grep&lt;/span&gt; &lt;span class="s2"&gt;"OpenGL renderer"&lt;/span&gt; 2&amp;gt;/dev/null &lt;span class="o"&gt;||&lt;/span&gt; &lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="s2"&gt;"glxinfo not available"&lt;/span&gt;

&lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="nt"&gt;-e&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="se"&gt;\n&lt;/span&gt;&lt;span class="s2"&gt;=== DRM Devices ==="&lt;/span&gt;
&lt;span class="nb"&gt;ls&lt;/span&gt; /sys/class/drm | &lt;span class="nb"&gt;grep &lt;/span&gt;card
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Make executable:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;chmod&lt;/span&gt; +x check_gpus.sh
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Run:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;./check_gpus.sh
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This quickly shows:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;detected GPUs&lt;/li&gt;
&lt;li&gt;active drivers&lt;/li&gt;
&lt;li&gt;rendering GPU&lt;/li&gt;
&lt;li&gt;NVIDIA status&lt;/li&gt;
&lt;li&gt;DRM device nodes&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Recommended Tools Summary
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
  &lt;thead&gt;
    &lt;tr&gt;
      &lt;th&gt;GPU Type&lt;/th&gt;
      &lt;th&gt;Recommended Tool&lt;/th&gt;
      &lt;th&gt;Command&lt;/th&gt;
    &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
    &lt;tr&gt;
      &lt;td&gt;AMD / Intel (integrated)&lt;/td&gt;
      &lt;td&gt;&lt;code&gt;btop&lt;/code&gt;&lt;/td&gt;
      &lt;td&gt;&lt;code&gt;btop&lt;/code&gt;&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;NVIDIA (dedicated)&lt;/td&gt;
      &lt;td&gt;&lt;code&gt;nvidia-smi&lt;/code&gt;&lt;/td&gt;
      &lt;td&gt;&lt;code&gt;watch -n 1 nvidia-smi&lt;/code&gt;&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;Hardware detection&lt;/td&gt;
      &lt;td&gt;&lt;code&gt;lspci&lt;/code&gt;&lt;/td&gt;
      &lt;td&gt;&lt;code&gt;lspci | grep -i vga&lt;/code&gt;&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;Rendering check&lt;/td&gt;
      &lt;td&gt;&lt;code&gt;glxinfo&lt;/code&gt;&lt;/td&gt;
      &lt;td&gt;&lt;code&gt;glxinfo | grep "OpenGL renderer"&lt;/code&gt;&lt;/td&gt;
    &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;




&lt;h1&gt;
  
  
  Conclusion
&lt;/h1&gt;

&lt;p&gt;Working with multiple GPUs on Linux doesn't have to be confusing.&lt;/p&gt;

&lt;p&gt;Using the commands shown above you can:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;verify hardware detection&lt;/li&gt;
&lt;li&gt;confirm driver loading&lt;/li&gt;
&lt;li&gt;identify which GPU renders your desktop&lt;/li&gt;
&lt;li&gt;monitor GPU usage in real time&lt;/li&gt;
&lt;li&gt;automate diagnostics with a small script&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Different GPU stacks require different tools, but combining a few commands provides &lt;strong&gt;full visibility into your graphics subsystem&lt;/strong&gt;.&lt;/p&gt;




&lt;h1&gt;
  
  
  Additional Resources
&lt;/h1&gt;

&lt;p&gt;btop documentation&lt;br&gt;&lt;br&gt;
&lt;a href="https://github.com/aristocratos/btop" rel="noopener noreferrer"&gt;https://github.com/aristocratos/btop&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;NVIDIA System Management Interface&lt;br&gt;&lt;br&gt;
&lt;a href="https://developer.nvidia.com/nvidia-system-management-interface" rel="noopener noreferrer"&gt;https://developer.nvidia.com/nvidia-system-management-interface&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Arch Linux Wiki — NVIDIA&lt;br&gt;&lt;br&gt;
&lt;a href="https://wiki.archlinux.org/title/NVIDIA" rel="noopener noreferrer"&gt;https://wiki.archlinux.org/title/NVIDIA&lt;/a&gt;&lt;/p&gt;

</description>
      <category>linux</category>
      <category>tutorial</category>
      <category>opensource</category>
      <category>showdev</category>
    </item>
    <item>
      <title>Rescuing Legacy Hardware: Installing Linux on Early UEFI Systems (Debian 13 Case Study)</title>
      <dc:creator>Igor Giamoniano</dc:creator>
      <pubDate>Sat, 31 Jan 2026 02:36:03 +0000</pubDate>
      <link>https://forem.com/igorgbr/rescuing-legacy-hardware-installing-linux-on-early-uefi-systems-debian-13-case-study-e3e</link>
      <guid>https://forem.com/igorgbr/rescuing-legacy-hardware-installing-linux-on-early-uefi-systems-debian-13-case-study-e3e</guid>
      <description>&lt;h2&gt;
  
  
  TL;DR
&lt;/h2&gt;

&lt;blockquote&gt;
&lt;p&gt;Modern Linux installers increasingly assume fully compliant UEFI firmware. On early-generation UEFI systems (circa 2011–2013), this assumption often breaks. This article documents a real-world case where Debian 13, installed in Legacy (MBR + GRUB i386-pc) mode, proved to be the most reliable solution.&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  Context: When a Simple Reinstall Fails
&lt;/h2&gt;

&lt;p&gt;A Lenovo QiTian M435E (2012), equipped with a Kingston SV300S3 SSD and early-generation UEFI firmware, suffered an OS corruption after an electrical incident. The expected fix — reinstalling Linux — turned into a multi-distro debugging session.&lt;/p&gt;

&lt;p&gt;Several modern distributions completed installation successfully but failed to boot afterward, even when configuration steps appeared correct.&lt;/p&gt;




&lt;h2&gt;
  
  
  Early UEFI Is Not Modern UEFI
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcoderlegion.com%2F%3Fqa%3Dblob%26qa_blobid%3D9119999155364460438" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcoderlegion.com%2F%3Fqa%3Dblob%26qa_blobid%3D9119999155364460438" alt="QiTian M435E" width="900" height="879"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The QiTian M435E provides firmware options labeled "UEFI Only" and "Legacy Only". However, this system uses an early UEFI implementation common in pre-2014 corporate hardware.&lt;/p&gt;

&lt;p&gt;Characteristics of this class of firmware include:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Partial or unstable EFI variable (NVRAM) support&lt;/li&gt;
&lt;li&gt;Inconsistent handling of GPT + EFI System Partitions&lt;/li&gt;
&lt;li&gt;Unreliable interaction with modern GRUB EFI targets&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;As a result, systems may technically support UEFI while failing to boot reliably with contemporary Linux installers.&lt;/p&gt;




&lt;h2&gt;
  
  
  Why Several Modern Distros Failed
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Ubuntu 24.04 / Linux Mint 22 / Zorin OS 17
&lt;/h3&gt;

&lt;p&gt;These distributions:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Default to GPT partitioning&lt;/li&gt;
&lt;li&gt;Assume a functional EFI System Partition&lt;/li&gt;
&lt;li&gt;Install GRUB primarily in x86_64-efi mode&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;On early UEFI systems, this results in:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Missing or ignored boot entries&lt;/li&gt;
&lt;li&gt;Firmware failing to locate EFI binaries&lt;/li&gt;
&lt;li&gt;Systems reporting "No operating system found"&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This behavior is not a bug but a consequence of architectural assumptions.&lt;/p&gt;




&lt;h2&gt;
  
  
  Why Debian 13 Worked
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcoderlegion.com%2F%3Fqa%3Dblob%26qa_blobid%3D5813726813604479930" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcoderlegion.com%2F%3Fqa%3Dblob%26qa_blobid%3D5813726813604479930" alt="Debian 13 (Trixie)" width="900" height="506"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Debian 13 (Trixie) maintains robust support for legacy boot paths:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Honors MBR (msdos) partition tables when disks are clean&lt;/li&gt;
&lt;li&gt;Installs GRUB using the i386-pc target when booted in Legacy mode&lt;/li&gt;
&lt;li&gt;Does not require an EFI System Partition in BIOS/Legacy setups&lt;/li&gt;
&lt;li&gt;Explicitly asks where GRUB should be installed&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This results in a predictable, firmware-compatible boot chain.&lt;/p&gt;




&lt;h2&gt;
  
  
  Tested Installation Procedure (Legacy Mode)
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Prerequisites
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.debian.org/download" rel="noopener noreferrer"&gt;debian-13.x-amd64-netinst.iso&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Firmware set to Legacy Only&lt;/li&gt;
&lt;li&gt;Secure Boot and UEFI disabled&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Disk Preparation
&lt;/h3&gt;

&lt;p&gt;Ensure the disk uses MBR, not GPT:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;wipefs &lt;span class="nt"&gt;-a&lt;/span&gt; /dev/sda
&lt;span class="nb"&gt;sudo &lt;/span&gt;parted /dev/sda mklabel msdos
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Installation
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcoderlegion.com%2F%3Fqa%3Dblob%26qa_blobid%3D8590496137216518818" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcoderlegion.com%2F%3Fqa%3Dblob%26qa_blobid%3D8590496137216518818" alt="Guided – use entire disk" width="900" height="673"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Choose: Guided – use entire disk&lt;/li&gt;
&lt;li&gt;Filesystem: ext4&lt;/li&gt;
&lt;li&gt;Avoid separate /boot partitions&lt;/li&gt;
&lt;li&gt;Confirm GRUB installation to /dev/sda (not /dev/sda1)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Internally, Debian executes:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;grub-install &lt;span class="nt"&gt;--target&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;i386-pc &lt;span class="nt"&gt;--boot-directory&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;/boot /dev/sda
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  Key Technical Takeaway
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Component&lt;/th&gt;
&lt;th&gt;Debian 13&lt;/th&gt;
&lt;th&gt;Modern Ubuntu-based Distros&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Partition table&lt;/td&gt;
&lt;td&gt;Respects MBR&lt;/td&gt;
&lt;td&gt;Defaults to GPT&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;GRUB target&lt;/td&gt;
&lt;td&gt;i386-pc&lt;/td&gt;
&lt;td&gt;x86_64-efi&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;EFI requirement&lt;/td&gt;
&lt;td&gt;Not required&lt;/td&gt;
&lt;td&gt;Assumed&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Firmware tolerance&lt;/td&gt;
&lt;td&gt;High&lt;/td&gt;
&lt;td&gt;Low on early UEFI&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;




&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;Legacy and early-UEFI systems are not obsolete — they are underserved. Debian 13 remains one of the few mainstream distributions that still treats non-modern firmware as a first-class scenario rather than an edge case.&lt;/p&gt;

&lt;p&gt;For environments with pre-2014 hardware, predictability often matters more than novelty.&lt;/p&gt;




&lt;h2&gt;
  
  
  References
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.debian.org/devel/debian-installer/" rel="noopener noreferrer"&gt;Debian Installer Documentation&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.gnu.org/software/grub/manual/grub/grub.html" rel="noopener noreferrer"&gt;GNU GRUB Manual&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://wiki.archlinux.org/title/System_time" rel="noopener noreferrer"&gt;Arch Linux Wiki — System Time &amp;amp; Boot Modes&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>linux</category>
      <category>debian</category>
      <category>opensource</category>
      <category>learning</category>
    </item>
    <item>
      <title>🛡️ Securing Clawdbot (Moltbot): Essential Hardening for AI Agents with System Access</title>
      <dc:creator>Igor Giamoniano</dc:creator>
      <pubDate>Wed, 28 Jan 2026 19:08:52 +0000</pubDate>
      <link>https://forem.com/igorgbr/securing-clawdbot-moltbot-essential-hardening-for-ai-agents-with-system-access-3cha</link>
      <guid>https://forem.com/igorgbr/securing-clawdbot-moltbot-essential-hardening-for-ai-agents-with-system-access-3cha</guid>
      <description>&lt;h2&gt;
  
  
  ⚠️ Why Security Is Non-Negotiable with Agentic AI
&lt;/h2&gt;

&lt;p&gt;Unlike chatbots, Clawdbot (now Moltbot) runs &lt;strong&gt;locally with direct system access&lt;/strong&gt;.&lt;br&gt;&lt;br&gt;
That means it can:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Read and write files
&lt;/li&gt;
&lt;li&gt;Execute shell commands
&lt;/li&gt;
&lt;li&gt;Control browsers and sessions
&lt;/li&gt;
&lt;li&gt;Access credentials and tokens
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This turns it into an &lt;strong&gt;AI-powered automation layer over your entire machine&lt;/strong&gt; — which is powerful, but also extremely risky if misconfigured.&lt;/p&gt;

&lt;p&gt;Think of it less like “installing an app” and more like:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Adding a new sysadmin to your system that never sleeps.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;This article covers &lt;strong&gt;practical steps to reduce attack surface and prevent full system compromise.&lt;/strong&gt;&lt;/p&gt;


&lt;h2&gt;
  
  
  ✅ 1. Use a Separate Machine or Environment
&lt;/h2&gt;

&lt;p&gt;Never install Clawdbot on your main personal computer.&lt;/p&gt;

&lt;p&gt;Recommended options:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Cloud VPS (AWS, Hetzner, DigitalOcean)
&lt;/li&gt;
&lt;li&gt;Old laptop used only for automation
&lt;/li&gt;
&lt;li&gt;Mini PC / home lab server
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Why this matters:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;If the agent is compromised, your personal data, banking info and passwords stay isolated.&lt;/p&gt;

&lt;p&gt;Treat it like:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Work phone vs personal phone&lt;br&gt;&lt;br&gt;
Dev server vs production workstation&lt;/p&gt;
&lt;/blockquote&gt;


&lt;h2&gt;
  
  
  ✅ 2. Create Separate Accounts for the Bot
&lt;/h2&gt;

&lt;p&gt;Never reuse your personal accounts.&lt;/p&gt;

&lt;p&gt;Create new:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Email address
&lt;/li&gt;
&lt;li&gt;Telegram account
&lt;/li&gt;
&lt;li&gt;WhatsApp account (if used)
&lt;/li&gt;
&lt;li&gt;API keys and service accounts
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Goal:&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Even if the bot leaks credentials, it cannot pivot into your real digital identity.&lt;/p&gt;


&lt;h2&gt;
  
  
  ✅ 3. Restrict Who Can Message the Bot
&lt;/h2&gt;

&lt;p&gt;When setting up chat integrations, choose:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;✅ Pairing mode (manual approval)
&lt;/li&gt;
&lt;li&gt;or at least ✅ Allowlist
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;❌ Never use &lt;strong&gt;Open mode&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Why:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Prevents strangers from sending commands
&lt;/li&gt;
&lt;li&gt;Blocks prompt injection through chat platforms
&lt;/li&gt;
&lt;li&gt;Reduces social engineering attack vectors
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Chat is an input surface — treat it like an API endpoint.&lt;/p&gt;


&lt;h2&gt;
  
  
  ✅ 4. Lock Down the Gateway WebSocket (Local Auth)
&lt;/h2&gt;

&lt;p&gt;Clawdbot exposes a local control panel via WebSocket.&lt;/p&gt;

&lt;p&gt;Set authentication:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="na"&gt;gateway&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;auth&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;mode&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;token"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Then generate a token:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;clawdbot doctor &lt;span class="nt"&gt;--generate-gateway-token&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;This protects:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Control dashboard
&lt;/li&gt;
&lt;li&gt;Settings modification
&lt;/li&gt;
&lt;li&gt;Plugin configuration
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Without this, anyone on your network could potentially access the agent interface.&lt;/p&gt;




&lt;h2&gt;
  
  
  ✅ 5. Enable Logging and Redact Sensitive Data
&lt;/h2&gt;

&lt;p&gt;Turn on logging — but safely.&lt;/p&gt;

&lt;p&gt;Example:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="na"&gt;logging&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;redactSensitive&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;tools"&lt;/span&gt;
  &lt;span class="na"&gt;redactPatterns&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;API_KEY=.*"&lt;/span&gt;
    &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Authorization:.*"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This allows you to:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Monitor what the agent is doing
&lt;/li&gt;
&lt;li&gt;Investigate abnormal behavior
&lt;/li&gt;
&lt;li&gt;Avoid leaking secrets into log files
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Never log raw prompts and outputs without redaction in production-like setups.&lt;/p&gt;




&lt;h2&gt;
  
  
  ✅ 6. Include Security Rules in the System Prompt
&lt;/h2&gt;

&lt;p&gt;Add explicit behavioral constraints in the agent system prompt:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;## Security Rules
- Never share directory listings or file paths with strangers
- Never reveal API keys, credentials, or infrastructure details
- Verify requests that modify system configuration with the owner
- When in doubt, ask before acting
- Private info stays private, even from "friends"
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This helps reduce:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Prompt injection impact
&lt;/li&gt;
&lt;li&gt;Accidental dangerous actions
&lt;/li&gt;
&lt;li&gt;Overly autonomous decisions
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Security should be layered: &lt;strong&gt;config + prompt + infrastructure&lt;/strong&gt;.&lt;/p&gt;




&lt;h2&gt;
  
  
  ✅ 7. Run the Built-In Security Audit
&lt;/h2&gt;

&lt;p&gt;Clawdbot includes a security scanner.&lt;/p&gt;

&lt;p&gt;Run regularly:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;clawdbot security audit
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;To automatically apply fixes:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;clawdbot security audit &lt;span class="nt"&gt;--fix&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;It checks for:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Gateway exposure
&lt;/li&gt;
&lt;li&gt;Browser control exposure
&lt;/li&gt;
&lt;li&gt;Dangerous permissions
&lt;/li&gt;
&lt;li&gt;Weak allowlists
&lt;/li&gt;
&lt;li&gt;Filesystem access scope
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This should be part of your maintenance routine.&lt;/p&gt;




&lt;h2&gt;
  
  
  ✅ 8. Keep Models and Plugins Up to Date
&lt;/h2&gt;

&lt;p&gt;Use:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Latest supported models
&lt;/li&gt;
&lt;li&gt;Updated plugins only
&lt;/li&gt;
&lt;li&gt;Remove unused integrations
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Why newer models matter:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Better resistance to prompt injection
&lt;/li&gt;
&lt;li&gt;Improved tool-use boundaries
&lt;/li&gt;
&lt;li&gt;Fewer jailbreak patterns
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Outdated models are easier to exploit.&lt;/p&gt;




&lt;h2&gt;
  
  
  🚨 Warning Signs Your System May Be Compromised
&lt;/h2&gt;

&lt;p&gt;Watch for:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Bot performing actions you didn’t request
&lt;/li&gt;
&lt;li&gt;Files disappearing or changing
&lt;/li&gt;
&lt;li&gt;Messages sent you didn’t write
&lt;/li&gt;
&lt;li&gt;Strange shell history entries
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If this happens:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Stop the bot immediately
&lt;/li&gt;
&lt;li&gt;Rotate all credentials
&lt;/li&gt;
&lt;li&gt;Audit accessed files
&lt;/li&gt;
&lt;li&gt;Rebuild environment if needed
&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;With full system access, recovery must be treated seriously.&lt;/p&gt;




&lt;h2&gt;
  
  
  🔐 Final Thoughts
&lt;/h2&gt;

&lt;p&gt;Agentic AI is incredibly powerful — but we are effectively giving software:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Shell access
&lt;/li&gt;
&lt;li&gt;Memory
&lt;/li&gt;
&lt;li&gt;Autonomy
&lt;/li&gt;
&lt;li&gt;Network connectivity
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This is not casual tooling.&lt;/p&gt;

&lt;p&gt;If configured properly, Clawdbot can be a game‑changing automation platform.&lt;br&gt;&lt;br&gt;
If misconfigured, it can become a &lt;strong&gt;single‑point‑of‑failure for your entire digital life&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;In the next article, we’ll walk through:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Installing Clawdbot + Telegram integration + DeepSeek API step by step in a safer setup.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Stay safe and automate responsibly.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>beginners</category>
      <category>productivity</category>
      <category>security</category>
    </item>
    <item>
      <title>🚨 ClawdBot (Moltbot): Powerful AI Agents, Real Automation… and Real Risks</title>
      <dc:creator>Igor Giamoniano</dc:creator>
      <pubDate>Wed, 28 Jan 2026 17:42:16 +0000</pubDate>
      <link>https://forem.com/igorgbr/clawdbot-moltbot-powerful-ai-agents-real-automation-and-real-risks-1155</link>
      <guid>https://forem.com/igorgbr/clawdbot-moltbot-powerful-ai-agents-real-automation-and-real-risks-1155</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;Open-source AI agents that can actually &lt;em&gt;do things&lt;/em&gt; are finally here.&lt;br&gt;&lt;br&gt;
And that changes everything — for better &lt;strong&gt;and&lt;/strong&gt; for worse.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;In the last few months, a project originally called &lt;strong&gt;ClawdBot&lt;/strong&gt; — now renamed to &lt;strong&gt;Moltbot&lt;/strong&gt; — has gone viral across tech communities.&lt;/p&gt;

&lt;p&gt;People are using it to:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Send emails automatically&lt;/li&gt;
&lt;li&gt;Interact with Telegram and WhatsApp&lt;/li&gt;
&lt;li&gt;Control browsers&lt;/li&gt;
&lt;li&gt;Run shell commands&lt;/li&gt;
&lt;li&gt;Manage files and workflows&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;In short: this is not just another chatbot.&lt;br&gt;&lt;br&gt;
This is an &lt;strong&gt;autonomous AI agent with full system access&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;And that is both incredible… and dangerous.&lt;/p&gt;

&lt;p&gt;Let’s break down why.&lt;/p&gt;




&lt;h2&gt;
  
  
  What is ClawdBot / Moltbot?
&lt;/h2&gt;

&lt;p&gt;ClawdBot (now Moltbot) is an &lt;strong&gt;open‑source AI agent framework&lt;/strong&gt; designed to:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Run locally on your machine or server&lt;/li&gt;
&lt;li&gt;Maintain long‑term context&lt;/li&gt;
&lt;li&gt;Execute real actions instead of just generating text&lt;/li&gt;
&lt;li&gt;Integrate with messaging apps like Telegram and WhatsApp&lt;/li&gt;
&lt;li&gt;Control browsers, files, and system commands&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The project’s tagline is literally:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;“The AI that actually does things.”&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;And it delivers on that promise.&lt;/p&gt;

&lt;p&gt;Unlike traditional chatbots, Moltbot can:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Read and write files&lt;/li&gt;
&lt;li&gt;Execute shell commands&lt;/li&gt;
&lt;li&gt;Open websites&lt;/li&gt;
&lt;li&gt;Send messages on your behalf&lt;/li&gt;
&lt;li&gt;Chain multiple actions together autonomously&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This makes it extremely powerful for automation, productivity, and experimentation with agentic AI.&lt;/p&gt;




&lt;h2&gt;
  
  
  Why Did It Go Viral?
&lt;/h2&gt;

&lt;p&gt;Most AI tools today are still limited by:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;API boundaries&lt;/li&gt;
&lt;li&gt;Sandbox environments&lt;/li&gt;
&lt;li&gt;Strict permission models&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Moltbot removes many of those barriers by design.&lt;/p&gt;

&lt;p&gt;It behaves more like:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;a digital assistant living inside your computer&lt;br&gt;&lt;br&gt;
than a chatbot living inside a browser tab.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;For developers and power users, that is incredibly appealing.&lt;/p&gt;

&lt;p&gt;You can build agents that:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Monitor systems&lt;/li&gt;
&lt;li&gt;Interact with services&lt;/li&gt;
&lt;li&gt;Perform multi‑step tasks&lt;/li&gt;
&lt;li&gt;React to real‑world events&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;It feels like the future of AI agents — and in many ways, it is.&lt;/p&gt;




&lt;h2&gt;
  
  
  But Here’s the Problem: Full System Access
&lt;/h2&gt;

&lt;p&gt;Moltbot doesn’t just &lt;em&gt;simulate&lt;/em&gt; actions.&lt;/p&gt;

&lt;p&gt;It can have access to:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Your filesystem&lt;/li&gt;
&lt;li&gt;Your terminal&lt;/li&gt;
&lt;li&gt;Your browser with saved sessions&lt;/li&gt;
&lt;li&gt;Your environment variables&lt;/li&gt;
&lt;li&gt;Your credentials&lt;/li&gt;
&lt;li&gt;Your personal messages&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Security researchers and engineers have been very clear about this:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Running an AI agent with shell access on your machine is… spicy.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;And that’s not fear‑mongering — it’s basic threat modeling.&lt;/p&gt;

&lt;p&gt;If something goes wrong, the blast radius is &lt;strong&gt;your entire system&lt;/strong&gt;.&lt;/p&gt;




&lt;h2&gt;
  
  
  What Could Go Wrong?
&lt;/h2&gt;

&lt;p&gt;Here are some realistic risk scenarios:&lt;/p&gt;

&lt;h3&gt;
  
  
  🔓 Prompt Injection
&lt;/h3&gt;

&lt;p&gt;If your agent receives malicious instructions through:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Messages&lt;/li&gt;
&lt;li&gt;Websites&lt;/li&gt;
&lt;li&gt;Files&lt;/li&gt;
&lt;li&gt;APIs&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;It may execute commands you never explicitly approved.&lt;/p&gt;

&lt;h3&gt;
  
  
  🗝️ Credential Exposure
&lt;/h3&gt;

&lt;p&gt;If the agent can read:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Config files&lt;/li&gt;
&lt;li&gt;Environment variables&lt;/li&gt;
&lt;li&gt;Browser sessions&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;An exploit could leak:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;API keys&lt;/li&gt;
&lt;li&gt;Tokens&lt;/li&gt;
&lt;li&gt;Passwords&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  📂 File System Damage
&lt;/h3&gt;

&lt;p&gt;Misconfigured agents could:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Delete files&lt;/li&gt;
&lt;li&gt;Modify configs&lt;/li&gt;
&lt;li&gt;Corrupt projects&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Not out of malice — but due to flawed instructions or bugs.&lt;/p&gt;

&lt;h3&gt;
  
  
  🌐 Network Abuse
&lt;/h3&gt;

&lt;p&gt;If connected to external services, compromised agents could:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Send spam&lt;/li&gt;
&lt;li&gt;Participate in attacks&lt;/li&gt;
&lt;li&gt;Expose your IP or infrastructure&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This turns your machine into part of someone else’s problem.&lt;/p&gt;




&lt;h2&gt;
  
  
  Experts Are Not Saying “Don’t Use It”
&lt;/h2&gt;

&lt;p&gt;Interestingly, most security professionals are &lt;strong&gt;not&lt;/strong&gt; saying:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;“Avoid this project.”&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;They are saying:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;“Use it responsibly, with strong isolation and safeguards.”&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;The technology itself is impressive.&lt;/p&gt;

&lt;p&gt;The danger comes from:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Running it on personal machines&lt;/li&gt;
&lt;li&gt;Giving it broad permissions&lt;/li&gt;
&lt;li&gt;Skipping security configuration&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Which, unfortunately, many people do when testing new tools.&lt;/p&gt;




&lt;h2&gt;
  
  
  Name Change: ClawdBot → Moltbot
&lt;/h2&gt;

&lt;p&gt;You may see the project referenced under two names.&lt;/p&gt;

&lt;p&gt;The creator recently renamed it to &lt;strong&gt;Moltbot&lt;/strong&gt; due to trademark concerns after contact from Anthropic.&lt;/p&gt;

&lt;p&gt;Same project.&lt;br&gt;&lt;br&gt;
Same mission.&lt;br&gt;&lt;br&gt;
Same capabilities.&lt;/p&gt;

&lt;p&gt;Just a new shell — like a lobster molting.&lt;/p&gt;




&lt;h2&gt;
  
  
  So… Should You Use It?
&lt;/h2&gt;

&lt;p&gt;If you are a developer, researcher, or power user:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Yes, it’s an exciting platform to explore agentic workflows.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;But you should treat it like:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;running experimental infrastructure software, not a casual desktop app.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;It deserves:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Dedicated environments&lt;/li&gt;
&lt;li&gt;Isolated machines or VMs&lt;/li&gt;
&lt;li&gt;Careful configuration&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Which brings us to the most important part.&lt;/p&gt;




&lt;h2&gt;
  
  
  Next Step: How to Use Moltbot Safely
&lt;/h2&gt;

&lt;p&gt;In this article we focused on &lt;strong&gt;what it is&lt;/strong&gt; and &lt;strong&gt;why it’s risky&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;In the next post, we’ll go into &lt;strong&gt;practical security configuration&lt;/strong&gt;, including:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Using separate machines or cloud instances&lt;/li&gt;
&lt;li&gt;Locking down gateway authentication&lt;/li&gt;
&lt;li&gt;Enabling logging with sensitive data redaction&lt;/li&gt;
&lt;li&gt;Running built‑in security audits&lt;/li&gt;
&lt;li&gt;Hardening system prompts and permissions&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If you plan to test this tool, those steps are &lt;strong&gt;not optional&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;They are the difference between:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;experimenting safely&lt;br&gt;&lt;br&gt;
and&lt;br&gt;&lt;br&gt;
exposing your entire digital life to unnecessary risk.&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h3&gt;
  
  
  Final Thoughts
&lt;/h3&gt;

&lt;p&gt;AI agents that can actually act on the world are not science fiction anymore.&lt;/p&gt;

&lt;p&gt;They are here.&lt;br&gt;&lt;br&gt;
They are powerful.&lt;br&gt;&lt;br&gt;
And they demand a much higher level of operational security than chatbots ever did.&lt;/p&gt;

&lt;p&gt;The future of AI is not just about smarter models —&lt;br&gt;&lt;br&gt;
it’s about &lt;strong&gt;responsible deployment&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;And that responsibility now sits with developers too.&lt;/p&gt;

</description>
      <category>beginners</category>
      <category>productivity</category>
      <category>security</category>
      <category>automation</category>
    </item>
    <item>
      <title>How to Build *The Rust Programming Language* Book Locally on Linux</title>
      <dc:creator>Igor Giamoniano</dc:creator>
      <pubDate>Sat, 17 Jan 2026 14:18:04 +0000</pubDate>
      <link>https://forem.com/igorgbr/how-to-build-the-rust-programming-language-book-locally-on-linux-3hn7</link>
      <guid>https://forem.com/igorgbr/how-to-build-the-rust-programming-language-book-locally-on-linux-3hn7</guid>
      <description>&lt;h2&gt;
  
  
  Introduction
&lt;/h2&gt;

&lt;p&gt;If you prefer learning from &lt;strong&gt;books and documentation instead of videos&lt;/strong&gt;, Rust offers one of the best learning resources available:&lt;br&gt;&lt;br&gt;
&lt;strong&gt;The Rust Programming Language&lt;/strong&gt;, also known as &lt;em&gt;The Rust Book&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;The book is open source, maintained by the community, and available in several languages — including &lt;strong&gt;Portuguese (pt-BR)&lt;/strong&gt; and other community translations.&lt;/p&gt;

&lt;p&gt;In this tutorial, you will learn how to:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Install Rust on your system
&lt;/li&gt;
&lt;li&gt;Install &lt;code&gt;mdbook&lt;/code&gt;, the tool used to build the book
&lt;/li&gt;
&lt;li&gt;Build the book locally on your machine
&lt;/li&gt;
&lt;li&gt;Open the full documentation in your browser, offline
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;As a bonus, you will already have part of your Rust development environment set up.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;This guide focuses on &lt;strong&gt;Linux&lt;/strong&gt;, but the process is very similar on other operating systems.&lt;/p&gt;
&lt;/blockquote&gt;


&lt;h2&gt;
  
  
  Why Build the Book Locally?
&lt;/h2&gt;

&lt;p&gt;Reading the book online is perfectly fine, but building it locally has some advantages:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Offline access
&lt;/li&gt;
&lt;li&gt;Faster navigation between chapters
&lt;/li&gt;
&lt;li&gt;Easy access to the source files
&lt;/li&gt;
&lt;li&gt;Possibility to contribute with fixes and improvements
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If you enjoy learning by exploring real project structures, this is a great way to start.&lt;/p&gt;

&lt;p&gt;Official online version of the book:&lt;br&gt;&lt;br&gt;
&lt;a href="https://doc.rust-lang.org/stable/book/" rel="noopener noreferrer"&gt;https://doc.rust-lang.org/stable/book/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fih7o4yknu668ooq31fxr.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fih7o4yknu668ooq31fxr.png" alt="Book running on online oficial doc" width="800" height="384"&gt;&lt;/a&gt;&lt;/p&gt;


&lt;h2&gt;
  
  
  Step 1: Installing Rust
&lt;/h2&gt;

&lt;p&gt;To build the book, we first need to install Rust and its package manager, &lt;strong&gt;Cargo&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;The official and recommended way to install Rust is using &lt;strong&gt;rustup&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Run the following command in your terminal:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;curl &lt;span class="nt"&gt;--proto&lt;/span&gt; &lt;span class="s1"&gt;'=https'&lt;/span&gt; &lt;span class="nt"&gt;--tlsv1&lt;/span&gt;.2 &lt;span class="nt"&gt;-sSf&lt;/span&gt; https://sh.rustup.rs | sh &lt;span class="nt"&gt;-s&lt;/span&gt; &lt;span class="nt"&gt;--&lt;/span&gt; &lt;span class="nt"&gt;-y&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;If everything goes well, you should see a message similar to:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Rust is installed now. Great!
To get started you may need to restart your current shell.
This would reload your PATH environment variable to include
Cargo's bin directory ($HOME/.cargo/bin).
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h3&gt;
  
  
  Reload Your Environment Variables
&lt;/h3&gt;

&lt;p&gt;To make sure Cargo is available in your current terminal session, run:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;.&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="nv"&gt;$HOME&lt;/span&gt;&lt;span class="s2"&gt;/.cargo/env"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Now verify the installation:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;rustc &lt;span class="nt"&gt;--version&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Expected output example:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;rustc 1.84.1 (e71f9a9a9 2025-01-27)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  Step 2: Installing mdBook
&lt;/h2&gt;

&lt;p&gt;&lt;code&gt;mdbook&lt;/code&gt; is the tool used to build and serve the Rust Book.&lt;/p&gt;

&lt;p&gt;Install it using Cargo:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;cargo &lt;span class="nb"&gt;install &lt;/span&gt;mdbook
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;You can confirm installation with:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;mdbook &lt;span class="nt"&gt;--version&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Official mdBook documentation:&lt;br&gt;&lt;br&gt;
&lt;a href="https://rust-lang.github.io/mdBook/" rel="noopener noreferrer"&gt;https://rust-lang.github.io/mdBook/&lt;/a&gt;&lt;/p&gt;


&lt;h2&gt;
  
  
  Step 3: Cloning the Book Repository
&lt;/h2&gt;

&lt;p&gt;Now clone the book repository.&lt;/p&gt;

&lt;p&gt;For the Brazilian Portuguese translation:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git clone https://github.com/rust-br/rust-book-pt-br.git
&lt;span class="nb"&gt;cd &lt;/span&gt;rust-book-pt-br
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;For the original English version:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git clone https://github.com/rust-lang/book.git
&lt;span class="nb"&gt;cd &lt;/span&gt;book
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Choose the version that best fits your learning needs.&lt;/p&gt;




&lt;h2&gt;
  
  
  Step 4: Building the Book
&lt;/h2&gt;

&lt;p&gt;Inside the project directory, run:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;mdbook build
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;After the build finishes, the generated site will be inside the &lt;code&gt;book/&lt;/code&gt; directory.&lt;/p&gt;

&lt;p&gt;Open it in your browser:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;xdg-open book/index.html
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Or:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;firefox book/index.html
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;If your terminal cannot open the browser, you can also navigate manually using your file manager and open:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;book/index.html
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ffafeozgfhc6dqd3p7wf9.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ffafeozgfhc6dqd3p7wf9.png" alt="Book running in HTML" width="800" height="384"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  Step 5: (Optional) Running a Local Server
&lt;/h2&gt;

&lt;p&gt;Instead of opening static files, you can also run a local server:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;mdbook serve
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Then open:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;http://localhost:3000
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This is useful if you want live reload while editing files or exploring the structure.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F279j83m1hukuzj2fp9ie.png" alt="Book running in local server" width="800" height="414"&gt;
&lt;/h2&gt;

&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;Building the Rust Book locally may look unnecessary at first, but it helps you:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Install Rust properly
&lt;/li&gt;
&lt;li&gt;Learn how Cargo works
&lt;/li&gt;
&lt;li&gt;Understand how Rust documentation is structured
&lt;/li&gt;
&lt;li&gt;Get closer to the open-source ecosystem
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Learning a language becomes much easier when you actively explore its tools and community.&lt;/p&gt;

&lt;p&gt;If you're starting your Rust journey and prefer documentation over videos, this is an excellent first step.&lt;/p&gt;

&lt;p&gt;Happy coding 🦀&lt;/p&gt;

</description>
      <category>rust</category>
      <category>beginners</category>
      <category>documentation</category>
      <category>opensource</category>
    </item>
    <item>
      <title>Understanding Web3 and Solana: Foundations Before Your First Smart Contract</title>
      <dc:creator>Igor Giamoniano</dc:creator>
      <pubDate>Fri, 16 Jan 2026 04:35:55 +0000</pubDate>
      <link>https://forem.com/igorgbr/understanding-web3-and-solana-foundations-before-your-first-smart-contract-55fk</link>
      <guid>https://forem.com/igorgbr/understanding-web3-and-solana-foundations-before-your-first-smart-contract-55fk</guid>
      <description>&lt;h2&gt;
  
  
  Introduction
&lt;/h2&gt;

&lt;p&gt;In recent years, Web3 and blockchain have moved far beyond investment&lt;br&gt;
hype and have become part of real-world software development.\&lt;br&gt;
However, many tutorials jump straight into code without explaining the&lt;br&gt;
&lt;strong&gt;mental model required to build applications correctly on a&lt;br&gt;
blockchain&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Before writing any Rust code or using frameworks like Anchor, it is&lt;br&gt;
essential to understand:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  What Web3 really means for developers\&lt;/li&gt;
&lt;li&gt;  How blockchains work under the hood\&lt;/li&gt;
&lt;li&gt;  What smart contracts are and how Solana treats this concept\&lt;/li&gt;
&lt;li&gt;  Why Solana's architecture is fundamentally different&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This article is fully conceptual.\&lt;br&gt;
In the next part, we will move into practice with environment setup and&lt;br&gt;
your first Solana program.&lt;/p&gt;




&lt;h2&gt;
  
  
  What Web3 Really Means for Developers
&lt;/h2&gt;

&lt;p&gt;For developers, Web3 is not about speculation or tokens.\&lt;br&gt;
It is about &lt;strong&gt;who controls the state of the application&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;In traditional applications:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  The backend controls the database\&lt;/li&gt;
&lt;li&gt;  The company defines the rules\&lt;/li&gt;
&lt;li&gt;  Users must trust the server&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;In Web3:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  Critical application state lives on a public blockchain\&lt;/li&gt;
&lt;li&gt;  Rules are enforced by on-chain code\&lt;/li&gt;
&lt;li&gt;  Anyone can verify how the system behaves&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;User interfaces, APIs, and indexers still exist, but they become&lt;br&gt;
&lt;strong&gt;support layers&lt;/strong&gt;, not the source of truth.&lt;/p&gt;

&lt;p&gt;This architectural shift is what enables truly decentralized&lt;br&gt;
applications.&lt;/p&gt;




&lt;h2&gt;
  
  
  Blockchain as a Distributed State Machine
&lt;/h2&gt;

&lt;p&gt;A technical way to view a blockchain is as a &lt;strong&gt;global, distributed state&lt;br&gt;
machine&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Each transaction:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  Reads the current state\&lt;/li&gt;
&lt;li&gt;  Executes deterministic logic\&lt;/li&gt;
&lt;li&gt;  Produces a new state validated by the network&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;All validators execute the same logic and reach the same result,&lt;br&gt;
ensuring the ledger remains &lt;strong&gt;immutable and verifiable&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Unlike traditional databases, you cannot:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  Freely update records\&lt;/li&gt;
&lt;li&gt;  Delete historical data\&lt;/li&gt;
&lt;li&gt;  Manually fix inconsistencies&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Every change must happen through a valid, signed, and verified&lt;br&gt;
transaction.&lt;/p&gt;




&lt;h2&gt;
  
  
  Smart Contracts vs Programs on Solana
&lt;/h2&gt;

&lt;p&gt;On many blockchains, such as Ethereum, smart contracts:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  Contain code\&lt;/li&gt;
&lt;li&gt;  Store their own state&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Solana uses a different model.&lt;/p&gt;

&lt;p&gt;Smart contracts are called &lt;strong&gt;programs&lt;/strong&gt;, and they:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  Contain only logic\&lt;/li&gt;
&lt;li&gt;  Do not store state internally&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;All persistent data lives in separate structures called &lt;strong&gt;Accounts&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Programs receive these accounts as inputs, validate them, and modify&lt;br&gt;
their data when allowed.&lt;/p&gt;

&lt;p&gt;This separation between:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  Code (programs)\&lt;/li&gt;
&lt;li&gt;  Data (accounts)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;is one of Solana's most important architectural differences and strongly&lt;br&gt;
affects application design.&lt;/p&gt;




&lt;h2&gt;
  
  
  Why Solana Is Architecturally Different
&lt;/h2&gt;

&lt;p&gt;Solana was designed around &lt;strong&gt;parallel transaction execution&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;To make this possible, the network must know in advance:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  Which accounts a transaction will read\&lt;/li&gt;
&lt;li&gt;  Which accounts a transaction will write&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If two transactions do not touch the same accounts, they can run at the&lt;br&gt;
same time.&lt;/p&gt;

&lt;p&gt;This model:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  Greatly increases throughput\&lt;/li&gt;
&lt;li&gt;  Requires developers to explicitly declare all data dependencies&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That is why, when writing Solana programs, every account involved in an&lt;br&gt;
instruction must be listed explicitly.&lt;/p&gt;

&lt;p&gt;Nothing is accessed implicitly.&lt;/p&gt;




&lt;h2&gt;
  
  
  The Role of Accounts in Application Design
&lt;/h2&gt;

&lt;p&gt;Accounts are the real database of Solana.&lt;/p&gt;

&lt;p&gt;They can store:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  Custom data structures\&lt;/li&gt;
&lt;li&gt;  Token balances\&lt;/li&gt;
&lt;li&gt;  NFT metadata\&lt;/li&gt;
&lt;li&gt;  Protocol configuration&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Each account has:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  An address\&lt;/li&gt;
&lt;li&gt;  An owner (usually a program)\&lt;/li&gt;
&lt;li&gt;  Persistent binary data&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;A program can only modify accounts that it owns.&lt;/p&gt;

&lt;p&gt;This creates a very explicit and predictable security model.&lt;/p&gt;

&lt;p&gt;For developers, this means application design often starts with&lt;br&gt;
&lt;strong&gt;account design&lt;/strong&gt;, not with function logic.&lt;/p&gt;




&lt;h2&gt;
  
  
  What Anchor Is and Why It Matters
&lt;/h2&gt;

&lt;p&gt;Developing directly on Solana's runtime in Rust is possible, but&lt;br&gt;
extremely verbose.&lt;/p&gt;

&lt;p&gt;Anchor is a framework that:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  Automates data serialization\&lt;/li&gt;
&lt;li&gt;  Validates accounts automatically\&lt;/li&gt;
&lt;li&gt;  Reduces repetitive boilerplate\&lt;/li&gt;
&lt;li&gt;  Integrates TypeScript testing&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;With Anchor, developers describe:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  Which accounts an instruction expects\&lt;/li&gt;
&lt;li&gt;  Which constraints must be enforced&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;And the framework generates most of the validation logic.&lt;/p&gt;

&lt;p&gt;This allows developers to focus on &lt;strong&gt;protocol logic instead of low-level&lt;br&gt;
runtime details&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;For this reason, most professional Solana projects today use Anchor.&lt;/p&gt;




&lt;h2&gt;
  
  
  What You Should Understand Before Writing Code
&lt;/h2&gt;

&lt;p&gt;Before moving into hands-on development, it is important to understand&lt;br&gt;
that:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  Programs do not store state\&lt;/li&gt;
&lt;li&gt;  Accounts are the actual storage layer\&lt;/li&gt;
&lt;li&gt;  Transactions must declare all accounts they use\&lt;/li&gt;
&lt;li&gt;  Execution is deterministic and globally validated\&lt;/li&gt;
&lt;li&gt;  Compute costs always matter&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;These principles explain why Solana development feels different from&lt;br&gt;
both Web2 systems and EVM-based blockchains.&lt;/p&gt;

&lt;p&gt;With the correct mental model, the code will stop feeling strange and&lt;br&gt;
start making sense.&lt;/p&gt;




&lt;h2&gt;
  
  
  Next Step: Hands-On Development
&lt;/h2&gt;

&lt;p&gt;In the next article of this series, we will move into practice:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  Setting up the full development environment\&lt;/li&gt;
&lt;li&gt;  Creating a local development wallet\&lt;/li&gt;
&lt;li&gt;  Initializing an Anchor project\&lt;/li&gt;
&lt;li&gt;  Implementing a simple counter program using a PDA\&lt;/li&gt;
&lt;li&gt;  Testing everything locally with &lt;code&gt;solana-test-validator&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The goal is to move directly from theory into a real professional&lt;br&gt;
development workflow.&lt;/p&gt;




</description>
      <category>web3</category>
      <category>beginners</category>
      <category>basic</category>
      <category>webdev</category>
    </item>
    <item>
      <title>BTOP++: The Resource Monitor I Didn’t Know I Needed</title>
      <dc:creator>Igor Giamoniano</dc:creator>
      <pubDate>Sat, 03 Jan 2026 03:07:00 +0000</pubDate>
      <link>https://forem.com/igorgbr/btop-the-resource-monitor-i-didnt-know-i-needed-389d</link>
      <guid>https://forem.com/igorgbr/btop-the-resource-monitor-i-didnt-know-i-needed-389d</guid>
      <description>&lt;p&gt;Today is &lt;strong&gt;January 1st, 2026&lt;/strong&gt;. The holidays are over, keyboards are warming up again, and it’s time to get back to building things.&lt;/p&gt;

&lt;p&gt;There’s been a lot of talk about **2026 being “the year of Linux.” **Steam even kicked off the year with a banner suggesting exactly that. Will it actually be? I honestly don’t know.&lt;/p&gt;

&lt;p&gt;What I do know is that 2025 was the year of Linux for me. After four years working as a developer and using Linux only sporadically, things finally clicked at the end of last year — and since then, the penguin has completely taken over my workflow.&lt;/p&gt;

&lt;p&gt;My wife can confirm it.&lt;br&gt;
&lt;strong&gt;Even with the Brazilian summer heat, we don’t use Windows at home.&lt;/strong&gt;😄&lt;/p&gt;

&lt;p&gt;With that in mind, this post is both a small New Year wish — and a quick, practical introduction to a resource monitor I genuinely didn’t know I needed: BTOP++.&lt;/p&gt;


&lt;h2&gt;
  
  
  BTOP++ vs HTOP
&lt;/h2&gt;

&lt;p&gt;First of all, this is &lt;strong&gt;not&lt;/strong&gt; an attack on HTOP.&lt;/p&gt;

&lt;p&gt;On the contrary: &lt;strong&gt;HTOP is an amazing tool&lt;/strong&gt;, created by my fellow countryman &lt;strong&gt;Hisham Muhammad&lt;/strong&gt;, written in C, and known for being extremely efficient. It earned its place in the Linux community and even in &lt;a href="https://htop.dev/sightings.html" rel="noopener noreferrer"&gt;hacker pop culture&lt;/a&gt; for a reason.&lt;/p&gt;

&lt;p&gt;Many of the features I’ll mention for BTOP++ already exist in HTOP.&lt;/p&gt;

&lt;p&gt;So the real question is:&lt;/p&gt;
&lt;h3&gt;
  
  
  Why consider BTOP++?
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;BTOP++&lt;/strong&gt; is the natural evolution of the HTOP idea.&lt;/p&gt;

&lt;p&gt;It is inspired by HTOP but written in &lt;strong&gt;C++&lt;/strong&gt;, which allows:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;More information displayed at once in the same terminal&lt;/li&gt;
&lt;li&gt;Integrated graphs for CPU, memory, disk, and network&lt;/li&gt;
&lt;li&gt;A more modern and polished look&lt;/li&gt;
&lt;li&gt;Extra visual context without a noticeable performance hit&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Those visuals make a real difference when you’re trying to understand resource usage patterns.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F6knt2c7h963afnpoiizi.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F6knt2c7h963afnpoiizi.png" alt="BTop Interface" width="800" height="503"&gt;&lt;/a&gt;&lt;/p&gt;


&lt;h2&gt;
  
  
  Should You Switch?
&lt;/h2&gt;

&lt;p&gt;As always in tech, there’s &lt;strong&gt;no silver bullet&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;HTOP is still:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Minimal&lt;/li&gt;
&lt;li&gt;Fast&lt;/li&gt;
&lt;li&gt;Extremely reliable&lt;/li&gt;
&lt;li&gt;Perfect for SSH sessions and servers&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;BTOP++, on the other hand, is:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;More complete&lt;/li&gt;
&lt;li&gt;Visually rich&lt;/li&gt;
&lt;li&gt;Modern&lt;/li&gt;
&lt;li&gt;Ideal for desktops and workstations&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;A simple summary:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;HTOP&lt;/strong&gt; → minimal, fast, reliable, great for servers
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;BTOP++&lt;/strong&gt; → complete, beautiful, modern, great for desktop/workstation
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Both tools can easily coexist.&lt;/p&gt;


&lt;h2&gt;
  
  
  Installation
&lt;/h2&gt;
&lt;h3&gt;
  
  
  Big Linux / Arch / Manjaro
&lt;/h3&gt;


&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;pacman &lt;span class="nt"&gt;-Syu&lt;/span&gt;   &lt;span class="c"&gt;# update the system&lt;/span&gt;
&lt;span class="nb"&gt;sudo &lt;/span&gt;pacman &lt;span class="nt"&gt;-S&lt;/span&gt; btop
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;After installation, just run:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;btop
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h3&gt;
  
  
  Ubuntu 22.10 or newer
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;apt update
&lt;span class="nb"&gt;sudo &lt;/span&gt;apt &lt;span class="nb"&gt;install &lt;/span&gt;btop
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h3&gt;
  
  
  Ubuntu 22.04 LTS or older
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;snap &lt;span class="nb"&gt;install &lt;/span&gt;btop
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  Useful Shortcuts
&lt;/h2&gt;

&lt;p&gt;Inside BTOP++:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;ESC&lt;/code&gt; or &lt;code&gt;M&lt;/code&gt; → open the menu
&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;↑&lt;/code&gt; / &lt;code&gt;↓&lt;/code&gt; → navigate processes
&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;F&lt;/code&gt; → filter processes by name
&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;K&lt;/code&gt; → kill the selected process
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;You can find all available shortcuts under &lt;strong&gt;Help&lt;/strong&gt; inside the menu.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fv5xp6h3iu3dpl2d006wd.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fv5xp6h3iu3dpl2d006wd.png" alt="BTop Keys" width="800" height="578"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fm9hxzd1sw8m9oubviit1.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fm9hxzd1sw8m9oubviit1.png" alt="BTop Menu" width="800" height="503"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;p&gt;That’s it.&lt;br&gt;&lt;br&gt;
Long live Linux — and happy hacking 🐧&lt;/p&gt;

</description>
      <category>linux</category>
      <category>archlinux</category>
      <category>resources</category>
      <category>productivity</category>
    </item>
    <item>
      <title>Why Does the System Clock Break on Windows + Linux Dual Boot?</title>
      <dc:creator>Igor Giamoniano</dc:creator>
      <pubDate>Mon, 29 Dec 2025 14:16:20 +0000</pubDate>
      <link>https://forem.com/igorgbr/why-does-the-system-clock-break-on-windows-linux-dual-boot-5c7n</link>
      <guid>https://forem.com/igorgbr/why-does-the-system-clock-break-on-windows-linux-dual-boot-5c7n</guid>
      <description>&lt;h2&gt;
  
  
  Introduction
&lt;/h2&gt;

&lt;p&gt;Anyone running &lt;strong&gt;dual boot with Windows and Linux&lt;/strong&gt; has likely encountered this behavior:&lt;br&gt;&lt;br&gt;
Linux shows the correct time. You reboot into Windows… and the system clock is suddenly &lt;strong&gt;several hours ahead&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;This happens across many distributions — &lt;strong&gt;Ubuntu, Fedora, Linux Mint, Big Linux&lt;/strong&gt;, and others — and it is &lt;strong&gt;not a bug&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;It is the result of &lt;strong&gt;fundamentally different architectural decisions&lt;/strong&gt; about how operating systems interpret time.&lt;/p&gt;

&lt;p&gt;In this article, you’ll learn:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;What the &lt;strong&gt;RTC (Real-Time Clock)&lt;/strong&gt; is&lt;/li&gt;
&lt;li&gt;How Linux and Windows interpret system time differently&lt;/li&gt;
&lt;li&gt;Why the issue happens&lt;/li&gt;
&lt;li&gt;The &lt;strong&gt;technically correct solution&lt;/strong&gt;
&lt;/li&gt;
&lt;/ul&gt;



&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fkggmu7oo6g7zgkvjf077.webp" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fkggmu7oo6g7zgkvjf077.webp" alt="CPU Battery" width="500" height="270"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;
  
  
  What Is the RTC (Real-Time Clock)?
&lt;/h2&gt;

&lt;p&gt;Every computer has a &lt;strong&gt;Real-Time Clock&lt;/strong&gt;, also known as the &lt;em&gt;hardware clock&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;It:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Is powered by the motherboard battery&lt;/li&gt;
&lt;li&gt;Keeps time while the system is turned off&lt;/li&gt;
&lt;li&gt;Lives in the firmware (&lt;strong&gt;BIOS/UEFI&lt;/strong&gt;)&lt;/li&gt;
&lt;li&gt;Provides the initial system time during boot&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;
  
  
  The key detail
&lt;/h3&gt;

&lt;p&gt;The RTC &lt;strong&gt;does not store timezone information&lt;/strong&gt;.&lt;br&gt;&lt;br&gt;
It only stores a raw date and time value.&lt;/p&gt;

&lt;p&gt;👉 &lt;strong&gt;The operating system decides how that value is interpreted.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;This is where the conflict begins.&lt;/p&gt;


&lt;h2&gt;
  
  
  How Linux Handles Time and Timezones
&lt;/h2&gt;

&lt;p&gt;Linux and other Unix-like systems follow a long-established convention:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;The RTC is treated as &lt;strong&gt;UTC&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Timezone conversion happens in software&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;At boot time:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Linux reads the RTC as UTC
&lt;/li&gt;
&lt;li&gt;Applies the configured timezone offset
&lt;/li&gt;
&lt;li&gt;Displays the correct local time
&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;When writing time back to the hardware clock, Linux keeps it in &lt;strong&gt;UTC&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;This approach is technically robust and ideal for:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Multi-boot systems&lt;/li&gt;
&lt;li&gt;NTP synchronization&lt;/li&gt;
&lt;li&gt;Timezone changes&lt;/li&gt;
&lt;li&gt;Predictable behavior&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fr2tfxc9iy8ar55di6toz.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fr2tfxc9iy8ar55di6toz.png" alt="linux terminal with timezone" width="734" height="204"&gt;&lt;/a&gt;&lt;/p&gt;


&lt;h2&gt;
  
  
  How Windows Handles System Time
&lt;/h2&gt;

&lt;p&gt;Windows follows a different model.&lt;/p&gt;

&lt;p&gt;By default, Windows assumes the RTC is set to &lt;strong&gt;local time&lt;/strong&gt;.&lt;br&gt;&lt;br&gt;
The value read from the hardware clock is displayed directly, without applying a timezone conversion.&lt;/p&gt;

&lt;p&gt;This design decision is historical and works well for single-OS systems, but it conflicts with Unix-like conventions.&lt;/p&gt;
&lt;h2&gt;
  
  
  &lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fpdzuywm57trjaqv3ose5.png" alt="Windows gui with Canada/US timezone" width="600" height="496"&gt;
&lt;/h2&gt;
&lt;h2&gt;
  
  
  Why the Clock Is Wrong in Dual Boot
&lt;/h2&gt;

&lt;p&gt;Example for a system configured to &lt;strong&gt;UTC−3&lt;/strong&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Local time: &lt;strong&gt;15:00&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;UTC time: &lt;strong&gt;18:00&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Linux writes &lt;strong&gt;18:00 (UTC)&lt;/strong&gt; to the RTC&lt;/li&gt;
&lt;li&gt;Windows reads &lt;strong&gt;18:00 as local time&lt;/strong&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Result:&lt;/p&gt;

&lt;p&gt;👉 &lt;strong&gt;The system clock appears 3 hours ahead in Windows.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;This is not a synchronization issue — it is a clash between two different time models.&lt;/p&gt;
&lt;h2&gt;
  
  
  &lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fvdxwyfcqo4odydoystch.png" alt="visual info about problem" width="800" height="533"&gt;
&lt;/h2&gt;
&lt;h2&gt;
  
  
  Recommended Fix: Configure Windows to Use UTC
&lt;/h2&gt;

&lt;p&gt;From a technical perspective, the cleanest solution is to align Windows with the Linux model by making it interpret the RTC as &lt;strong&gt;UTC&lt;/strong&gt;.&lt;/p&gt;
&lt;h3&gt;
  
  
  Steps
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;Open &lt;strong&gt;Registry Editor&lt;/strong&gt; (&lt;code&gt;regedit&lt;/code&gt;) as administrator
&lt;/li&gt;
&lt;li&gt;Navigate to:
&lt;/li&gt;
&lt;/ol&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\TimeZoneInformation
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;ol&gt;
&lt;li&gt;Create a &lt;strong&gt;DWORD (32-bit)&lt;/strong&gt; value named:
&lt;/li&gt;
&lt;/ol&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;RealTimeIsUniversal
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;ol&gt;
&lt;li&gt;Set its value to:
&lt;/li&gt;
&lt;/ol&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;1
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;ol&gt;
&lt;li&gt;Reboot the system&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;After this change, Windows will correctly apply the timezone offset and the issue will be resolved permanently.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F2v5wi7masi2f2ha04vds.webp" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F2v5wi7masi2f2ha04vds.webp" alt="regedit" width="800" height="390"&gt;&lt;/a&gt;&lt;/p&gt;


&lt;h2&gt;
  
  
  Alternative Fix: Force Linux to Use Local Time (Not Recommended)
&lt;/h2&gt;

&lt;p&gt;It is also possible to force Linux to treat the RTC as local time:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;timedatectl set-local-rtc 1 &lt;span class="nt"&gt;--adjust-system-clock&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;⚠️ &lt;strong&gt;This approach is not recommended.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;It:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Breaks Unix-like conventions&lt;/li&gt;
&lt;li&gt;Can cause NTP synchronization issues&lt;/li&gt;
&lt;li&gt;Creates problems when changing timezones&lt;/li&gt;
&lt;li&gt;Is explicitly discouraged by &lt;code&gt;systemd&lt;/code&gt; documentation&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This should only be used as a last-resort workaround.&lt;/p&gt;




&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;The dual boot clock issue is not a bug — it’s the result of &lt;strong&gt;two different architectural approaches&lt;/strong&gt;.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Linux treats the RTC as &lt;strong&gt;UTC&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Windows assumes the RTC is &lt;strong&gt;local time&lt;/strong&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Understanding this distinction allows you to fix the problem &lt;strong&gt;once and for all&lt;/strong&gt;.&lt;br&gt;&lt;br&gt;
Configuring Windows to use UTC is the most predictable and technically sound solution.&lt;/p&gt;




&lt;h2&gt;
  
  
  References
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Microsoft — Windows Time Service&lt;br&gt;&lt;br&gt;
&lt;a href="https://learn.microsoft.com/en-us/windows-server/networking/windows-time-service/windows-time-service-top" rel="noopener noreferrer"&gt;https://learn.microsoft.com/en-us/windows-server/networking/windows-time-service/windows-time-service-top&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;systemd — timedatectl&lt;br&gt;&lt;br&gt;
&lt;a href="https://www.freedesktop.org/software/systemd/man/latest/timedatectl.html" rel="noopener noreferrer"&gt;https://www.freedesktop.org/software/systemd/man/latest/timedatectl.html&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Arch Linux Wiki — System Time&lt;br&gt;&lt;br&gt;
&lt;a href="https://wiki.archlinux.org/title/System_time" rel="noopener noreferrer"&gt;https://wiki.archlinux.org/title/System_time&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Ubuntu Documentation — Time and Date&lt;br&gt;&lt;br&gt;
&lt;a href="https://help.ubuntu.com/stable/ubuntu-help/clock-set.html.en" rel="noopener noreferrer"&gt;https://help.ubuntu.com/stable/ubuntu-help/clock-set.html.en&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Stack Overflow discussions on RTC and dual boot&lt;br&gt;&lt;br&gt;
&lt;a href="https://stackoverflow.com/questions/73778596/windows-shows-wrong-time-after-dualboot" rel="noopener noreferrer"&gt;https://stackoverflow.com/questions/73778596/windows-shows-wrong-time-after-dualboot&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>linux</category>
      <category>microsoft</category>
      <category>beginners</category>
      <category>devops</category>
    </item>
    <item>
      <title>Merry Christmas… in Your Linux Terminal 🎄</title>
      <dc:creator>Igor Giamoniano</dc:creator>
      <pubDate>Thu, 25 Dec 2025 20:59:36 +0000</pubDate>
      <link>https://forem.com/igorgbr/merry-christmas-in-your-linux-terminal-5ei2</link>
      <guid>https://forem.com/igorgbr/merry-christmas-in-your-linux-terminal-5ei2</guid>
      <description>&lt;h3&gt;
  
  
  And a Gentle Introduction to the Python CLI Ecosystem
&lt;/h3&gt;

&lt;h2&gt;
  
  
  Introduction
&lt;/h2&gt;

&lt;p&gt;Today is Christmas — and if you’re reading this, I hope you’re doing well.&lt;/p&gt;

&lt;p&gt;After a long year, our minds often try to create a false sense of urgency. Sometimes, the best thing we can do is &lt;strong&gt;pause&lt;/strong&gt;, &lt;strong&gt;breathe&lt;/strong&gt;, and say:&lt;br&gt;
&lt;strong&gt;“Not now.”&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;With that in mind, this article brings a &lt;strong&gt;simple, fun, and educational tutorial&lt;/strong&gt;, perfect for the holiday season.&lt;/p&gt;

&lt;p&gt;The goal is straightforward:&lt;br&gt;
👉 &lt;strong&gt;run a Christmas tree animation directly in your Linux terminal&lt;/strong&gt;.&lt;/p&gt;


  


&lt;p&gt;Yes — Linux developers would rather write 100+ lines of code than decorate a real tree.&lt;br&gt;
And we deeply respect that.&lt;/p&gt;


&lt;h2&gt;
  
  
  What Are We Building?
&lt;/h2&gt;

&lt;p&gt;We’ll run a Python-based CLI called &lt;strong&gt;&lt;code&gt;christmastree&lt;/code&gt;&lt;/strong&gt;, using a tool called &lt;strong&gt;&lt;code&gt;pipx&lt;/code&gt;&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Along the way, you’ll learn:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;What &lt;code&gt;pipx&lt;/code&gt; is and why it matters&lt;/li&gt;
&lt;li&gt;How to run Python CLI tools safely and in isolation&lt;/li&gt;
&lt;li&gt;How to run &lt;code&gt;christmastree&lt;/code&gt; on:

&lt;ul&gt;
&lt;li&gt;most Linux distributions&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Big Linux / Manjaro&lt;/strong&gt; (alternative setup)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;


&lt;h2&gt;
  
  
  What Is &lt;a href="https://pipx.pypa.io/stable/" rel="noopener noreferrer"&gt;&lt;code&gt;pipx&lt;/code&gt;&lt;/a&gt;?
&lt;/h2&gt;

&lt;p&gt;&lt;code&gt;pipx&lt;/code&gt; is a tool designed to &lt;strong&gt;install and run Python applications in isolated environments&lt;/strong&gt;, without affecting:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;the system Python&lt;/li&gt;
&lt;li&gt;other projects&lt;/li&gt;
&lt;li&gt;existing virtual environments&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Each application gets its &lt;strong&gt;own virtual environment&lt;/strong&gt;, but remains accessible globally through your &lt;code&gt;PATH&lt;/code&gt;.&lt;/p&gt;


&lt;h2&gt;
  
  
  Examples of CLI Tools Installed with &lt;code&gt;pipx&lt;/code&gt;
&lt;/h2&gt;

&lt;p&gt;Popular examples include:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;black&lt;/code&gt; — code formatter&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;poetry&lt;/code&gt; — dependency manager&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;httpie&lt;/code&gt; — terminal HTTP client&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;christmastree&lt;/code&gt; — your animated Christmas tree 🎄&lt;/li&gt;
&lt;/ul&gt;


&lt;h2&gt;
  
  
  Installation (Official Method — Works on Most Distros)
&lt;/h2&gt;
&lt;h3&gt;
  
  
  Step 1: Install &lt;code&gt;pipx&lt;/code&gt;
&lt;/h3&gt;


&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;pip &lt;span class="nb"&gt;install &lt;/span&gt;pipx
pipx ensurepath
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;You may need to open a new terminal afterward.&lt;/p&gt;


&lt;h3&gt;
  
  
  Step 2: Clone the official repository
&lt;/h3&gt;


&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git clone https://github.com/MEHighKing/christmastree.git
&lt;span class="nb"&gt;cd &lt;/span&gt;christmastree
pipx &lt;span class="nb"&gt;install&lt;/span&gt; &lt;span class="nb"&gt;.&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Step 3: Run it 🎄
&lt;/h3&gt;


&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;christmastree
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Alternative Setup — Big Linux (Manjaro)
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://www.biglinux.com.br/" rel="noopener noreferrer"&gt;&lt;strong&gt;Big Linux&lt;/strong&gt;&lt;/a&gt; is a Brazilian distribution based on &lt;strong&gt;Manjaro&lt;/strong&gt;, so the only difference is how &lt;code&gt;pipx&lt;/code&gt; is installed.&lt;/p&gt;
&lt;h3&gt;
  
  
  Install &lt;code&gt;pipx&lt;/code&gt; via pacman
&lt;/h3&gt;


&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;pacman &lt;span class="nt"&gt;-S&lt;/span&gt; python-pipx
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;Then follow the same steps:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git clone https://github.com/MEHighKing/christmastree.git
&lt;span class="nb"&gt;cd &lt;/span&gt;christmastree
pipx &lt;span class="nb"&gt;install&lt;/span&gt; &lt;span class="nb"&gt;.&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  Common Issue: Terminal Size
&lt;/h2&gt;

&lt;p&gt;If you see this error:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Please enlarge your terminal to at least 100x40 (current: 85x34).
[exit=1]
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Just resize your terminal window.&lt;/p&gt;

&lt;p&gt;Check current size with:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;tput cols&lt;span class="p"&gt;;&lt;/span&gt; tput lines
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Once it reaches &lt;strong&gt;100x40&lt;/strong&gt; or more, run:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;christmastree
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  Important Note ⚠️
&lt;/h2&gt;

&lt;p&gt;Some tutorials suggest running:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;curl &lt;span class="nt"&gt;-L&lt;/span&gt; https://raw.githubusercontent.com/MEHighKing/christmastree/master/christmastree.sh | bash
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This does &lt;strong&gt;not&lt;/strong&gt; work.&lt;br&gt;
There is &lt;strong&gt;no shell script&lt;/strong&gt; in the repository. The correct approach is using &lt;code&gt;pipx&lt;/code&gt;.&lt;/p&gt;




&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;I hope everything ran smoothly 🎄&lt;/p&gt;

&lt;p&gt;If you enjoyed it, consider visiting the official repository and leaving a ⭐ — those developers are powered by coffee and code ☕🐧&lt;/p&gt;

&lt;p&gt;🔗 Official repository:&lt;br&gt;
&lt;a href="https://github.com/MEHighKing/christmastree" rel="noopener noreferrer"&gt;https://github.com/MEHighKing/christmastree&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Merry Christmas — and &lt;strong&gt;long live Linux!&lt;/strong&gt; 🐧 🖖&lt;/p&gt;

</description>
      <category>linux</category>
      <category>python</category>
      <category>bash</category>
      <category>cli</category>
    </item>
    <item>
      <title>Web Privacy Is Not Incognito Mode</title>
      <dc:creator>Igor Giamoniano</dc:creator>
      <pubDate>Mon, 22 Dec 2025 05:48:40 +0000</pubDate>
      <link>https://forem.com/igorgbr/web-privacy-is-not-incognito-mode-41cd</link>
      <guid>https://forem.com/igorgbr/web-privacy-is-not-incognito-mode-41cd</guid>
      <description>&lt;h2&gt;
  
  
  Introduction
&lt;/h2&gt;

&lt;p&gt;For many users, &lt;strong&gt;web privacy&lt;/strong&gt; still means opening an incognito window or installing an ad blocker.&lt;br&gt;&lt;br&gt;
In reality, that only addresses a &lt;strong&gt;small part&lt;/strong&gt; of the problem.&lt;/p&gt;

&lt;p&gt;Real privacy starts with &lt;strong&gt;browser architecture&lt;/strong&gt;, &lt;strong&gt;design decisions&lt;/strong&gt;, and how much the browser &lt;strong&gt;communicates with third parties&lt;/strong&gt;, even when you’re not actively browsing.&lt;/p&gt;

&lt;p&gt;In this article, I analyze &lt;strong&gt;five browsers&lt;/strong&gt; that treat privacy as a &lt;strong&gt;technical requirement&lt;/strong&gt;, not an optional feature.&lt;/p&gt;




&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fencrypted-tbn0.gstatic.com%2Fimages%3Fq%3Dtbn%3AANd9GcQFzoPf-GNSg6AfoqvN6JtDdNSBdH2Bx4e59w%26s" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fencrypted-tbn0.gstatic.com%2Fimages%3Fq%3Dtbn%3AANd9GcQFzoPf-GNSg6AfoqvN6JtDdNSBdH2Bx4e59w%26s" alt="You've gone incognito" width="303" height="166"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Privacy ≠ Incognito Mode
&lt;/h2&gt;

&lt;p&gt;Incognito mode:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Does not prevent fingerprinting&lt;/li&gt;
&lt;li&gt;Does not block advanced trackers&lt;/li&gt;
&lt;li&gt;Does not isolate the browser completely&lt;/li&gt;
&lt;li&gt;Does not stop background communication&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;It only prevents &lt;strong&gt;local storage&lt;/strong&gt; of history and cookies.&lt;/p&gt;

&lt;p&gt;In other words, your activity can still be observed externally.&lt;/p&gt;




&lt;h2&gt;
  
  
  Browser Architecture and Threat Models
&lt;/h2&gt;

&lt;p&gt;Before choosing a privacy-focused browser, you need to understand your &lt;strong&gt;threat model&lt;/strong&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Do you want to reduce commercial tracking?&lt;/li&gt;
&lt;li&gt;Avoid fingerprinting?&lt;/li&gt;
&lt;li&gt;Minimize communication with big tech companies?&lt;/li&gt;
&lt;li&gt;Achieve strong anonymity?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Each browser below solves &lt;strong&gt;a different problem&lt;/strong&gt;.&lt;/p&gt;




&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fencrypted-tbn0.gstatic.com%2Fimages%3Fq%3Dtbn%3AANd9GcTovKXtHI6LBJR7HBe0zX8pJ-bctH-LLArKsg%26s" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fencrypted-tbn0.gstatic.com%2Fimages%3Fq%3Dtbn%3AANd9GcTovKXtHI6LBJR7HBe0zX8pJ-bctH-LLArKsg%26s" alt="Mulvad Browser" width="300" height="168"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Mullvad Browser — Privacy by Default
&lt;/h2&gt;

&lt;p&gt;Developed by Mullvad in partnership with the &lt;strong&gt;Tor Project&lt;/strong&gt;, Mullvad Browser is built on Firefox/Tor Browser.&lt;/p&gt;

&lt;h3&gt;
  
  
  Key characteristics
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Zero telemetry
&lt;/li&gt;
&lt;li&gt;Strong fingerprinting resistance
&lt;/li&gt;
&lt;li&gt;Aggressive privacy defaults
&lt;/li&gt;
&lt;li&gt;No accounts or sync
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Best use case:&lt;/strong&gt; users who want maximum privacy with zero configuration.&lt;/p&gt;




&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Farrc0td17nrg5obwx9sd.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Farrc0td17nrg5obwx9sd.jpg" alt="Librewolf Browser" width="600" height="338"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  LibreWolf — Full Control over Firefox
&lt;/h2&gt;

&lt;p&gt;LibreWolf is a community-driven Firefox fork focused on &lt;strong&gt;control and transparency&lt;/strong&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  Key characteristics
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Telemetry removed
&lt;/li&gt;
&lt;li&gt;Enhanced tracking protection
&lt;/li&gt;
&lt;li&gt;Full access to &lt;code&gt;about:config&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Gecko engine
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Best use case:&lt;/strong&gt; advanced users and developers who want privacy plus deep customization.&lt;/p&gt;




&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fencrypted-tbn0.gstatic.com%2Fimages%3Fq%3Dtbn%3AANd9GcRXlqcHSPMgm1UtbB1NYqQ-wTLbIkTLDK5tAg%26s" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fencrypted-tbn0.gstatic.com%2Fimages%3Fq%3Dtbn%3AANd9GcRXlqcHSPMgm1UtbB1NYqQ-wTLbIkTLDK5tAg%26s" alt="Ungoogled Chromium" width="310" height="163"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Ungoogled Chromium — Chromium Without Google
&lt;/h2&gt;

&lt;p&gt;Ungoogled Chromium removes Google integrations from the Chromium codebase.&lt;/p&gt;

&lt;h3&gt;
  
  
  Key characteristics
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;No automatic calls to Google servers
&lt;/li&gt;
&lt;li&gt;No account-based sync
&lt;/li&gt;
&lt;li&gt;Very close to upstream Chromium
&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Important limitations
&lt;/h3&gt;

&lt;p&gt;Privacy here comes from &lt;strong&gt;removing Google&lt;/strong&gt;, not from active protection.&lt;br&gt;&lt;br&gt;
Manual tuning and extensions are still recommended.&lt;/p&gt;




&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F88xlp548tt0ucwhfhh93.webp" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F88xlp548tt0ucwhfhh93.webp" alt="Tor Browser" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Tor Browser — A Different Browsing Model
&lt;/h2&gt;

&lt;p&gt;Tor Browser fundamentally changes the browsing paradigm.&lt;/p&gt;

&lt;h3&gt;
  
  
  Key characteristics
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Onion routing
&lt;/li&gt;
&lt;li&gt;Session isolation
&lt;/li&gt;
&lt;li&gt;Aggressive fingerprinting resistance
&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Trade-offs
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Reduced performance
&lt;/li&gt;
&lt;li&gt;Broken or limited websites
&lt;/li&gt;
&lt;li&gt;Less convenience
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Best use case:&lt;/strong&gt; journalists, activists, sensitive research, and strong anonymity needs.&lt;/p&gt;




&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fthumbs.web.sapo.io%2F%3FW%3D800%26H%3D0%26png%3D1%26delay_optim%3D1%26epic%3DOGJmTuPTMoTMhrRYHK3uhTx9imbDWqihkYYJtZAKRX3j0B5yP3bbsL24ic9lzEL%2FEe1QTRa2JSOBEBp2MZktnII7yE1NV6NTXGUuM4Tipdr7Vhg%3D" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fthumbs.web.sapo.io%2F%3FW%3D800%26H%3D0%26png%3D1%26delay_optim%3D1%26epic%3DOGJmTuPTMoTMhrRYHK3uhTx9imbDWqihkYYJtZAKRX3j0B5yP3bbsL24ic9lzEL%2FEe1QTRa2JSOBEBp2MZktnII7yE1NV6NTXGUuM4Tipdr7Vhg%3D" alt="Zen Browser" width="800" height="533"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Zen Browser — Privacy with Modern UX
&lt;/h2&gt;

&lt;p&gt;Zen Browser is a Firefox-based browser focused on:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Privacy
&lt;/li&gt;
&lt;li&gt;Usability
&lt;/li&gt;
&lt;li&gt;Clean, modern design
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;It avoids telemetry while keeping a smoother daily experience.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Best use case:&lt;/strong&gt; users who want a balance between privacy and convenience.&lt;/p&gt;




&lt;h2&gt;
  
  
  FAQ
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Is there a “best” browser for privacy?
&lt;/h3&gt;

&lt;p&gt;No. There is only the browser that best fits &lt;strong&gt;your threat model&lt;/strong&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  Should I still use extensions?
&lt;/h3&gt;

&lt;p&gt;In browsers like Tor or Mullvad, fewer extensions are usually better.&lt;br&gt;&lt;br&gt;
In others, extensions may still be helpful.&lt;/p&gt;

&lt;h3&gt;
  
  
  Does incognito mode help?
&lt;/h3&gt;

&lt;p&gt;Only locally. It does not protect against external tracking.&lt;/p&gt;




&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;Web privacy is not a toggle — it is the result of &lt;strong&gt;architectural choices&lt;/strong&gt;, &lt;strong&gt;design decisions&lt;/strong&gt;, and &lt;strong&gt;accepted trade-offs&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;There is no perfect browser.&lt;br&gt;&lt;br&gt;
There is only the one that best matches your &lt;strong&gt;anonymity needs, compatibility requirements, and usability expectations&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Understanding these differences is the first step toward more conscious browsing.&lt;/p&gt;




&lt;h2&gt;
  
  
  References
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Tor Project — &lt;a href="https://www.torproject.org/" rel="noopener noreferrer"&gt;https://www.torproject.org/&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Mullvad Browser — &lt;a href="https://mullvad.net/browser" rel="noopener noreferrer"&gt;https://mullvad.net/browser&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;LibreWolf — &lt;a href="https://librewolf.net/" rel="noopener noreferrer"&gt;https://librewolf.net/&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Ungoogled Chromium — &lt;a href="https://github.com/Eloston/ungoogled-chromium" rel="noopener noreferrer"&gt;https://github.com/Eloston/ungoogled-chromium&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Zen Browser — &lt;a href="https://zen-browser.app/" rel="noopener noreferrer"&gt;https://zen-browser.app/&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Acknowledgment
&lt;/h2&gt;

&lt;p&gt;This article was inspired by a discussion originally shared on Instagram by &lt;strong&gt;ZeroDay&lt;/strong&gt; and &lt;strong&gt;Hacker01Girl&lt;/strong&gt;.&lt;br&gt;&lt;br&gt;
While the original post introduced the topic in a short-form format, this article expands the idea into a deeper technical analysis focused on browser architecture, threat models, and real-world trade-offs.&lt;/p&gt;

&lt;p&gt;Original inspiration:&lt;br&gt;
&lt;a href="https://www.instagram.com/p/DSM_pd1jwFh/" rel="noopener noreferrer"&gt;https://www.instagram.com/p/DSM_pd1jwFh/&lt;/a&gt;&lt;/p&gt;

</description>
      <category>privacy</category>
      <category>cybersecurity</category>
      <category>beginners</category>
      <category>productivity</category>
    </item>
    <item>
      <title>Controle de Áudio Personalizado no Linux: Alternando entre Fone, Caixas e Áudio Duplo com um Único Comando</title>
      <dc:creator>Igor Giamoniano</dc:creator>
      <pubDate>Sun, 07 Dec 2025 22:02:15 +0000</pubDate>
      <link>https://forem.com/igorgbr/controle-de-audio-personalizado-no-linux-alternando-entre-fone-caixas-e-audio-duplo-com-um-unico-30j9</link>
      <guid>https://forem.com/igorgbr/controle-de-audio-personalizado-no-linux-alternando-entre-fone-caixas-e-audio-duplo-com-um-unico-30j9</guid>
      <description>&lt;p&gt;&lt;strong&gt;TL;DR:&lt;/strong&gt; Criei um script chamado &lt;code&gt;audioctl&lt;/code&gt; que, com um único comando,&lt;br&gt;
me permite alternar entre fone (via HDMI), caixas de som (analógicas) ou&lt;br&gt;
até reproduzir em &lt;strong&gt;ambos ao mesmo tempo&lt;/strong&gt;. Tudo isso com &lt;code&gt;pactl&lt;/code&gt;, um&lt;br&gt;
pouco de Bash e o poder do Linux.&lt;/p&gt;


&lt;h2&gt;
  
  
  O que é o &lt;code&gt;pactl&lt;/code&gt;?
&lt;/h2&gt;

&lt;p&gt;O &lt;code&gt;pactl&lt;/code&gt; (abreviação de &lt;em&gt;PulseAudio Control&lt;/em&gt;) é uma ferramenta de linha&lt;br&gt;
de comando usada para controlar servidores de áudio como &lt;strong&gt;PulseAudio&lt;/strong&gt;&lt;br&gt;
e, com compatibilidade total, o &lt;strong&gt;PipeWire&lt;/strong&gt; --- o sucessor moderno do&lt;br&gt;
PulseAudio, usado por padrão em distros como Fedora, Ubuntu 22.04+, Arch&lt;br&gt;
e NixOS.&lt;/p&gt;

&lt;p&gt;Com ele, você pode:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  Listar dispositivos de áudio (sinks e sources)&lt;/li&gt;
&lt;li&gt;  Mudar o volume&lt;/li&gt;
&lt;li&gt;  Alternar entre saídas&lt;/li&gt;
&lt;li&gt;  Mover streams de áudio entre dispositivos&lt;/li&gt;
&lt;li&gt;  Carregar ou descarregar módulos (como o &lt;code&gt;module-combine-sink&lt;/code&gt;)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Ele é o "canivete suíço" do áudio no terminal --- e a base de tudo o que&lt;br&gt;
vamos construir neste tutorial.&lt;/p&gt;


&lt;h2&gt;
  
  
  O problema
&lt;/h2&gt;

&lt;p&gt;Eu uso um setup simples, mas comum:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  Meu &lt;strong&gt;fone de ouvido está conectado ao monitor&lt;/strong&gt; (que por sua vez
está ligado ao PC via HDMI).&lt;/li&gt;
&lt;li&gt;  Minhas &lt;strong&gt;caixas de som estão ligadas diretamente na saída de áudio
analógica&lt;/strong&gt; do computador.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Meu sogro precisava conseguir alterar entre caixa de som e fone de&lt;br&gt;
ouvido, coisa que ele já conseguia na interface, porém ele também&lt;br&gt;
precisava conseguir colocar &lt;strong&gt;nas duas ao mesmo tempo&lt;/strong&gt; (por questões de&lt;br&gt;
acessibilidade).&lt;/p&gt;

&lt;p&gt;Então pensei:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;"Se o Linux me dá total controle do sistema, por que não criar meu&lt;br&gt;
próprio controlador de áudio?"&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;E foi exatamente isso que fiz. Neste post, vou te mostrar &lt;strong&gt;passo a&lt;br&gt;
passo&lt;/strong&gt; como construí essa ferramenta --- e como você pode adaptá-la&lt;br&gt;
para o seu setup.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fblogger.googleusercontent.com%2Fimg%2Fa%2FAVvXsEjLXwPGTOpYSBgKCFdlNfBAQfgylNnB7Qww7uUZ3NSz3D9v-SEeZOpAWcULfXI9u1ZwduK94UgdDOkcTL_MO6WpPBMV7yfD4196yUrMDDYpOzGaeSNNQQs17T9dwvNyJN7JiFPJk7XYsYYeJuGdES5MHH6STzwo8-mY96zzbRDQxff6GmyjcbR_Q2MeWcPl" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fblogger.googleusercontent.com%2Fimg%2Fa%2FAVvXsEjLXwPGTOpYSBgKCFdlNfBAQfgylNnB7Qww7uUZ3NSz3D9v-SEeZOpAWcULfXI9u1ZwduK94UgdDOkcTL_MO6WpPBMV7yfD4196yUrMDDYpOzGaeSNNQQs17T9dwvNyJN7JiFPJk7XYsYYeJuGdES5MHH6STzwo8-mY96zzbRDQxff6GmyjcbR_Q2MeWcPl" alt="imagem" width="619" height="192"&gt;&lt;/a&gt;&lt;/p&gt;


&lt;h2&gt;
  
  
  Pré-requisitos
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;  Um sistema Linux moderno (Ubuntu, Fedora, Arch, NixOS, etc.).&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;PulseAudio&lt;/strong&gt; ou &lt;strong&gt;PipeWire&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;  Terminal e um editor de texto.&lt;/li&gt;
&lt;li&gt;  Pelo menos &lt;strong&gt;duas saídas de áudio funcionais&lt;/strong&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;blockquote&gt;
&lt;p&gt;💡 Se você não sabe se tem PipeWire ou PulseAudio, rode:&lt;/p&gt;


&lt;pre class="highlight shell"&gt;&lt;code&gt;pactl info | &lt;span class="nb"&gt;grep&lt;/span&gt; &lt;span class="s2"&gt;"Server Name"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;


&lt;p&gt;Se aparecer "PipeWire" ou "PulseAudio", está tudo certo!&lt;/p&gt;
&lt;/blockquote&gt;


&lt;h2&gt;
  
  
  Passo 1: Entenda sua configuração de áudio
&lt;/h2&gt;

&lt;p&gt;Antes de automatizar, precisamos saber &lt;strong&gt;quais dispositivos existem&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Liste seus &lt;em&gt;sinks&lt;/em&gt; (saídas de áudio):&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;pactl list sinks short
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Saída de exemplo:&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;52  alsa_output.pci-0000_01_00.1.hdmi-stereo     ...  RUNNING
57  alsa_output.pci-0000_09_00.6.analog-stereo   ...  SUSPENDED
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;ul&gt;
&lt;li&gt;  &lt;code&gt;RUNNING&lt;/code&gt; = está em uso\&lt;/li&gt;
&lt;li&gt;  &lt;code&gt;SUSPENDED&lt;/code&gt; = inativo, mas disponível&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Agora veja os &lt;em&gt;cards&lt;/em&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;pactl list cards
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Procure pelo seu dispositivo analógico e confirme o &lt;strong&gt;perfil ativo&lt;/strong&gt;&lt;br&gt;
(como &lt;code&gt;output:analog-stereo&lt;/code&gt;).&lt;/p&gt;


&lt;h2&gt;
  
  
  Passo 2: Controle básico de volume
&lt;/h2&gt;

&lt;p&gt;O &lt;code&gt;pactl&lt;/code&gt; permite controlar o volume do sink padrão usando:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;@DEFAULT_SINK@&lt;/code&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Aumentar 5%&lt;/span&gt;
pactl set-sink-volume @DEFAULT_SINK@ +5%

&lt;span class="c"&gt;# Diminuir 5%&lt;/span&gt;
pactl set-sink-volume @DEFAULT_SINK@ &lt;span class="nt"&gt;-5&lt;/span&gt;%
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  Passo 3: Alternar entre saídas de áudio
&lt;/h2&gt;

&lt;p&gt;Para mudar o sink padrão:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;pactl set-default-sink NOME_DO_SINK
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Mover streams ativos:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;pactl list short sink-inputs
pactl move-sink-input ID_DO_STREAM NOVO_SINK
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  Passo 4: Áudio em dois dispositivos ao mesmo tempo (modo "dual")
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;pactl load-module module-combine-sink     &lt;span class="nv"&gt;sink_name&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;combined_output     &lt;span class="nv"&gt;slaves&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;alsa_output.hdmi,alsa_output.analog     &lt;span class="nv"&gt;sink_properties&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;device.description&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"Dual_HDMI+Analog"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  Passo 5: O script final --- &lt;code&gt;audioctl&lt;/code&gt;
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Código completo
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://gist.github.com/igorgbr/8031267dee77acf6d7d298ec72a37f94" rel="noopener noreferrer"&gt;https://gist.github.com/igorgbr/8031267dee77acf6d7d298ec72a37f94&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  Como instalar
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;chmod&lt;/span&gt; +x ~/projetos/audioctl
&lt;span class="nb"&gt;mkdir&lt;/span&gt; &lt;span class="nt"&gt;-p&lt;/span&gt; ~/bin
&lt;span class="nb"&gt;ln&lt;/span&gt; &lt;span class="nt"&gt;-sf&lt;/span&gt; ~/projetos/audioctl ~/bin/audioctl
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  Dicas extras
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;speaker-test &lt;span class="nt"&gt;-t&lt;/span&gt; wav &lt;span class="nt"&gt;-c&lt;/span&gt; 2
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  Conclusão
&lt;/h2&gt;

&lt;p&gt;Com &lt;strong&gt;menos de 60 linhas de Bash&lt;/strong&gt;, resolvi um problema real --- com&lt;br&gt;
flexibilidade que nenhum app gráfico oferece.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;✨ &lt;strong&gt;O controle está nas suas mãos --- e no terminal.&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  Código completo
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://gist.github.com/igorgbr/8031267dee77acf6d7d298ec72a37f94" rel="noopener noreferrer"&gt;https://gist.github.com/igorgbr/8031267dee77acf6d7d298ec72a37f94&lt;/a&gt;&lt;/p&gt;

</description>
      <category>linux</category>
      <category>tutorial</category>
      <category>bash</category>
      <category>programming</category>
    </item>
  </channel>
</rss>
