<rss version="2.0">
  <channel>
    <title>uconsole on Honeypot.net</title>
    <link>https://honeypot.net/categories/uconsole/</link>
    <description></description>
    
    <language>en</language>
    
    <lastBuildDate>Tue, 07 Jul 2026 20:01:42 -0700</lastBuildDate>
    
    <item>
      <title>Booting uConsole CM4 from encrypted NVMe</title>
      <link>https://honeypot.net/2026/07/07/booting-uconsole-cm-from-encrypted.html</link>
      <pubDate>Tue, 07 Jul 2026 20:01:42 -0700</pubDate>
      
      <guid>http://kirk.micro.blog/2026/07/07/booting-uconsole-cm-from-encrypted.html</guid>
      <description>&lt;p&gt;I have a uConsole computer and a new NVMe adapter for it. I’m not going to walk around with a terabyte of unencrypted data. That wasn’t an option. I found several good HOWTOs for booting a uConsole off an encrypted NVMe drive, yet none of them worked well on their own. Each left out one essential detail or another.&lt;/p&gt;
&lt;p&gt;This is my mashup of those instructions. For testing, I wiped my NVMe drive and started over, following these steps exactly, and at the end booted into a working system.&lt;/p&gt;
&lt;p&gt;I claim zero credit for any of these. Much of this is copied-and-pasted from the resources I list at the bottom. Those are the people who did the hard work of figuring this out. My goal was to put combine the working bits of each resource into a single document that includes the best of each.&lt;/p&gt;
&lt;h1 id=&#34;the-gist-of-it&#34;&gt;The gist of it&lt;/h1&gt;
&lt;p&gt;We’re starting with a uConsole booted from its SD card. From inside that running system, we’ll partition the NVMe drive, encrypt most of it, copy the working system onto the new drive, and make the tweaks that the new setup requires to boot successfully.&lt;/p&gt;
&lt;h2 id=&#34;install-the-dependencies-part-1&#34;&gt;Install the dependencies, part 1&lt;/h2&gt;
&lt;p&gt;We’ll use cryptsetup in the “parent” SD card-based OS.&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-shell&#34; data-lang=&#34;shell&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;$ sudo apt install cryptsetup
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;partition-the-drive&#34;&gt;Partition the drive&lt;/h2&gt;
&lt;p&gt;This is easiest with the desktop’s GParted command. If you’re using the terminal anyway, you can do this from the CLI.&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-shell&#34; data-lang=&#34;shell&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;$ sudo parted /dev/nvme0n1
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;mklabel gpt
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;yes
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;mkpart primary fat32 1M 513M
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;mkpart primary ext4 513M 100%
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;quit
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;encrypt-the-root-volume-and-make-the-filesystems&#34;&gt;Encrypt the root volume and make the filesystems&lt;/h2&gt;
&lt;p&gt;Now we prepare the drive for holding data. We format partition 1 with the FAT32 filesystem that the bootloader wants. Then we use &lt;code&gt;cryptsetup&lt;/code&gt; encrypt partition 2.&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-shell&#34; data-lang=&#34;shell&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;$ sudo cryptsetup luksFormat -c xchacha20,aes-adiantum-plain64 /dev/nvme0n1p2
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;$ sudo cryptsetup open /dev/nvme0n1p2 ssd &lt;span style=&#34;color:#75715e&#34;&gt;# Creates /dev/mapper/ssd&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;$ sudo mkfs.vfat /dev/nvme0n1p1
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;$ sudo mkfs.ext4 /dev/mapper/ssd
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;$ sudo lsblk -o NAME,UUID,PARTUUID
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;In the &lt;code&gt;lsblk&lt;/code&gt; command’s output, note:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;PARTUUID&lt;/code&gt; for the NVMe &lt;code&gt;/boot/firmware&lt;/code&gt; filesystem&lt;/li&gt;
&lt;li&gt;&lt;code&gt;UUID&lt;/code&gt; for the new &lt;code&gt;/&lt;/code&gt; filesystem&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;mount-and-populate-the-new-volumes-under-mnt&#34;&gt;Mount and populate the new volumes under /mnt&lt;/h2&gt;
&lt;p&gt;When these steps are done, we’ll have a clone of our parent system in &lt;code&gt;/mnt&lt;/code&gt;. See the &lt;code&gt;-x&lt;/code&gt; flag to &lt;code&gt;rsync&lt;/code&gt;? That says “stay in this one filesystem and don’t recurse into others”, so that we’re not cloning &lt;code&gt;/proc&lt;/code&gt; and &lt;code&gt;/sys&lt;/code&gt;, and so on.&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-shell&#34; data-lang=&#34;shell&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;$ sudo mount /dev/mapper/ssd /mnt
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;$ sudo rsync -aAXHvx / /mnt/
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;$ sudo mount /dev/nvme0n1p1 /mnt/boot/firmware
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;$ sudo rsync -aAXHvx /boot/firmware/ /mnt/boot/firmware/
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;chroot-into-mnt&#34;&gt;Chroot into /mnt&lt;/h2&gt;
&lt;p&gt;From now on, the rest of these commands will run on the new, encrypted root volume.&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-shell&#34; data-lang=&#34;shell&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;$ &lt;span style=&#34;color:#66d9ef&#34;&gt;for&lt;/span&gt; dir in sys dev proc ; &lt;span style=&#34;color:#66d9ef&#34;&gt;do&lt;/span&gt; sudo mount --rbind /$dir /mnt/$dir &lt;span style=&#34;color:#f92672&#34;&gt;&amp;amp;&amp;amp;&lt;/span&gt; sudo mount --make-rslave /mnt/$dir ; &lt;span style=&#34;color:#66d9ef&#34;&gt;done&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;$ sudo chroot /mnt
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id=&#34;quick-note-about-editors&#34;&gt;Quick note about editors&lt;/h3&gt;
&lt;p&gt;Also, I like using &lt;code&gt;vi&lt;/code&gt; for quick-and-dirty system file edits. If that’s outside your comfort zone, replace &lt;code&gt;vi&lt;/code&gt; with &lt;code&gt;nano&lt;/code&gt; from now on. But really, if you’re going to be using Linux much, at least get the &lt;code&gt;vi&lt;/code&gt; basics down. You’ll thank me later.&lt;/p&gt;
&lt;p&gt;Of course, vi’s main purpose is to bootstrap Emacs, and then you can uninstall vi.&lt;/p&gt;
&lt;h2 id=&#34;configure-fstab--crypttab&#34;&gt;Configure fstab &amp;amp; crypttab&lt;/h2&gt;
&lt;p&gt;The parent OS has it’s idea of where &lt;code&gt;/&lt;/code&gt; and &lt;code&gt;/boot/firmware&lt;/code&gt; live. Now we configure the child OS with its new locations.&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-shell&#34; data-lang=&#34;shell&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&amp;gt; vi /etc/fstab
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;============&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# Find the line that mounts /boot/firmware and replace it with:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;PARTUUID&lt;span style=&#34;color:#f92672&#34;&gt;={{&lt;/span&gt;PARTUUID of the new /boot/firmware&lt;span style=&#34;color:#f92672&#34;&gt;}}&lt;/span&gt; /boot/firmware vfat defaults &lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;2&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# Find the line that mounts / and replace it with:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;/dev/mapper/ssd / ext4 defaults,noatime &lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt; 1
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;============&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&amp;gt; vi /etc/crypttab
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;============&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# Append this line:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;ssd UUID&lt;span style=&#34;color:#f92672&#34;&gt;={{&lt;/span&gt;UUID of the new &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;raw&amp;#34;&lt;/span&gt; /&lt;span style=&#34;color:#f92672&#34;&gt;}}&lt;/span&gt; none luks,discard
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;============&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;install-the-dependencies-part-2&#34;&gt;Install the dependencies, part 2&lt;/h2&gt;
&lt;p&gt;We’ll use these tools to make a new initramfs inside the child OS.&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-shell&#34; data-lang=&#34;shell&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&amp;gt; apt install busybox cryptsetup cryptsetup-initramfs initramfs-tools
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;edit-initramfsconf-and-change-modulesdep-to-modulesmost&#34;&gt;Edit initramfs.conf and change &lt;code&gt;modules=dep&lt;/code&gt; to &lt;code&gt;modules=most&lt;/code&gt;&lt;/h2&gt;
&lt;p&gt;This may not be needed. This was the default on the OS image I used.&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-shell&#34; data-lang=&#34;shell&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&amp;gt; vi /etc/initramfs-tools/initramfs.conf
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;add-kernel-modules-to-initramfs&#34;&gt;Add Kernel modules to initramfs&lt;/h2&gt;
&lt;p&gt;Add these modules to the initramfs so it display the boot-time encrypted volume password prompt, and can unlock the encrypted root volume.&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-shell&#34; data-lang=&#34;shell&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&amp;gt; vi /etc/initramfs-tools/modules
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;============&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# --- Crypto modules (AES-XTS + SHA256, ARM hardware-accelerated) ---&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;aes_arm64
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;aes_ce_blk
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;aes_ce_cipher
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;sha256_arm64
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;sha256_ce
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;dm-crypt
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;xts
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# --- Display modules (needed so the password prompt shows on the uConsole screen) ---&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;drm
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;drm_kms_helper
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;drm_shmem_helper
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;drm_dma_helper
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;drm_ttm_helper
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;drm_display_helper
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;drm_panel_orientation_quirks
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;ttm
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;cec
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;backlight
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;ocp8178_bl
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;panel-cwu50
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;vc4
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;v3d
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;drm-rp1-dsi
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;============&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;create-display-init-script&#34;&gt;Create Display Init Script&lt;/h2&gt;
&lt;p&gt;This is the bit that turns on the screen in text mode so we know when to enter the drive encryption password.&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-shell&#34; data-lang=&#34;shell&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&amp;gt; vi /etc/initramfs-tools/scripts/init-top/display
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;============&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;#!/bin/sh&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;PREREQ&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;prereqs&lt;span style=&#34;color:#f92672&#34;&gt;()&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;{&lt;/span&gt; echo &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&lt;/span&gt;$PREREQ&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&lt;/span&gt;; &lt;span style=&#34;color:#f92672&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;case&lt;/span&gt; $1 in prereqs&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt; prereqs; exit 0;; &lt;span style=&#34;color:#66d9ef&#34;&gt;esac&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# Load display stack. Order matters.&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;modprobe drm
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;modprobe drm_kms_helper
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;modprobe backlight
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;modprobe ocp8178_bl         &lt;span style=&#34;color:#75715e&#34;&gt;# uConsole backlight controller&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;modprobe panel-cwu50        &lt;span style=&#34;color:#75715e&#34;&gt;# uConsole LCD panel driver&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;modprobe vc4                &lt;span style=&#34;color:#75715e&#34;&gt;# Broadcom VideoCore GPU&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;modprobe v3d                &lt;span style=&#34;color:#75715e&#34;&gt;# Broadcom V3D 3D engine&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;sleep &lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;                     &lt;span style=&#34;color:#75715e&#34;&gt;# Give the panel time to initialize&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;modprobe drm-rp1-dsi        &lt;span style=&#34;color:#75715e&#34;&gt;# RP1 DSI bridge (connects SoC to panel)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;modprobe fbcon              &lt;span style=&#34;color:#75715e&#34;&gt;# Framebuffer console (renders text on screen)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;============&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&amp;gt; chmod a+x /etc/initramfs-tools/scripts/init-top/display
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;create-kernel-postinst-hook&#34;&gt;Create Kernel Postinst Hook&lt;/h2&gt;
&lt;p&gt;This is suppose to rebuild the initramfs when we upgrade to a new kernel. I haven’t tested it yet.&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-shell&#34; data-lang=&#34;shell&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&amp;gt; vi /etc/kernel/postinst.d/initramfs-rebuild
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;============&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;#!/bin/sh -e&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;version&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&lt;/span&gt;$1&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# Only rebuild for the currently running kernel&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;[&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&lt;/span&gt;$version&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;$(&lt;/span&gt;uname -r&lt;span style=&#34;color:#66d9ef&#34;&gt;)&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;]&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;||&lt;/span&gt; exit &lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# Back up existing initramfs before overwriting&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;[&lt;/span&gt; -e /boot/firmware/initramfs_2712 &lt;span style=&#34;color:#f92672&#34;&gt;]&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    cp /boot/firmware/initramfs_luks_nvme.img /boot/firmware/initramfs_luks_nvme.img.bak
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;update-initramfs -c -k &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&lt;/span&gt;$version&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;mkinitramfs -o /boot/firmware/initramfs_luks_nvme.img &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&lt;/span&gt;$version&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;============&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&amp;gt; chmod a+x /etc/kernel/postinst.d/initramfs-rebuild
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;build-initramfs&#34;&gt;Build Initramfs&lt;/h2&gt;
&lt;p&gt;Now we manually do a stripped-down version of the above to create our first initramfs.&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-shell&#34; data-lang=&#34;shell&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&amp;gt; update-initramfs -c -k &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;$(&lt;/span&gt;uname -r&lt;span style=&#34;color:#66d9ef&#34;&gt;)&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&amp;gt; mkinitramfs -o /boot/firmware/initramfs_luks_nvme.img &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;$(&lt;/span&gt;uname -r&lt;span style=&#34;color:#66d9ef&#34;&gt;)&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;configure-boot&#34;&gt;Configure Boot&lt;/h2&gt;
&lt;p&gt;This tells the system how to enable the NVMe drive, and how to boot into it.&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-shell&#34; data-lang=&#34;shell&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&amp;gt; vi /boot/firmware/config.txt
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;============&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;[&lt;/span&gt;pi4&lt;span style=&#34;color:#f92672&#34;&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;...
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;enable_uart&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;dtparam&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;pciex1&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;on
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;[&lt;/span&gt;all&lt;span style=&#34;color:#f92672&#34;&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;...
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;auto_initramfs&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;initramfs initramfs_luks_nvme.img followkernel
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;============&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&amp;gt; vi /boot/firmware/cmdline.txt
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;============&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;console&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;serial0,115200 console&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;tty1 root&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;/dev/mapper/ssd cryptdevice&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;UUID&lt;span style=&#34;color:#f92672&#34;&gt;={{&lt;/span&gt;Same UUID of / as in /etc/fstab&lt;span style=&#34;color:#f92672&#34;&gt;}}&lt;/span&gt;:ssd rootfstype&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;ext4 fsck.repair&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;yes rootwait fbcon&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;rotate:1 psi&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt; quiet loglevel&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;3&lt;/span&gt; cfg80211.ieee80211_regdom&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;US
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;============&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;In confess, I didn’t do &lt;em&gt;exactly&lt;/em&gt; this. I kept some of the original &lt;code&gt;cmdline.txt&lt;/code&gt;. Instead of &lt;code&gt;rootwait fbcon=rotate:&lt;/code&gt;, I have &lt;code&gt;rootwait splash plymouth.ignore-serial-consoles fbcon=rotate:1&lt;/code&gt;. Now I have a splash screen but &lt;em&gt;don’t&lt;/em&gt; see the prompt to enter the drive encryption password. I just have to know when to enter it, and then the little computer does the rest. Yes, that’s a little risky: what if something breaks and I can’t see the error message? On the other hand, good luck to a casual thief even knowing where to begin with the thing.&lt;/p&gt;
&lt;h2 id=&#34;exit-and-power-off&#34;&gt;Exit and power off&lt;/h2&gt;
&lt;p&gt;Leave the chroot and shut down the uConsole.&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-shell&#34; data-lang=&#34;shell&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&amp;gt; exit
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;$ sudo shutdown -h now
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;cross-your-fingers&#34;&gt;Cross your fingers&lt;/h2&gt;
&lt;p&gt;Now eject the SD card from uConsole and turn it back on. With any luck, it’ll prompt you for the passphrase to unlock your encrypted NVMe root partition and then boot into a working system!&lt;/p&gt;
&lt;h1 id=&#34;now-what&#34;&gt;Now what?&lt;/h1&gt;
&lt;h2 id=&#34;bump-up-the-swap&#34;&gt;Bump up the swap&lt;/h2&gt;
&lt;p&gt;I configured my uConsole to have 4x as much swap as RAM. That works out to 32GB, or about 3% of my NVMe. In exchange, I’m unlikely to ever run out of memory again. NVMe swap is decently quick, unlike sticking it on a spinning rust hard drive.&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-shell&#34; data-lang=&#34;shell&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;$ cd /etc/rpi
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;$ sudo mkdir swap.conf.d
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;$ sudo -e swap.conf.d/
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;============&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;[&lt;/span&gt;Main&lt;span style=&#34;color:#f92672&#34;&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;Mechanism&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;swapfile
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;[&lt;/span&gt;File&lt;span style=&#34;color:#f92672&#34;&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;RamMultiplier&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;4&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;MaxSizeMiB&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;65536
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;============&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h1 id=&#34;resources&#34;&gt;Resources&lt;/h1&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://forum.clockworkpi.com/t/guide-encrypted-root-partition-on-uconsole/11724&#34;&gt;Guide : encrypted root partition on uConsole&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://forum.clockworkpi.com/t/full-disk-encryption-with-the-trixie-image/20850&#34;&gt;Full Disk Encryption with the Trixie image&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://forum.clockworkpi.com/t/updated-guide-encrypted-root-partition-on-uconsole-trixie/21791&#34;&gt;Updated Guide: Encrypted Root Partition on uConsole Trixie&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
</description>
    </item>
    
    <item>
      <title>uConsole built-in SD card vs HackerGadgets NVMe speed</title>
      <link>https://honeypot.net/2026/07/06/uconsole-builtin-sd-card-vs.html</link>
      <pubDate>Mon, 06 Jul 2026 20:11:04 -0700</pubDate>
      
      <guid>http://kirk.micro.blog/2026/07/06/uconsole-builtin-sd-card-vs.html</guid>
      <description>&lt;p&gt;I have a &lt;a href=&#34;https://www.clockworkpi.com/uconsole&#34;&gt;ClockworkPi uConsole&lt;/a&gt; and although I&amp;rsquo;m having great fun with it, it comes with just 32GB of SD card storage. Even if it were bigger, SD cards are dog slow compared to almost anything else. I bought a &lt;a href=&#34;https://hackergadgets.com/products/nvme&#34;&gt;HackerGadgets NVMe adapter&lt;/a&gt; and &lt;a href=&#34;https://amzn.to/4vRNo0I&#34;&gt;Crucial P310 1TB NVMe SSD&lt;/a&gt; to speed things up.&lt;/p&gt;
&lt;h1 id=&#34;sequential-operations&#34;&gt;Sequential operations&lt;/h1&gt;
&lt;p&gt;In these tests, &lt;code&gt;/dev/mmcblk0&lt;/code&gt; is the SD card, and &lt;code&gt;/dev/nvme0n1&lt;/code&gt; is the NVMe adapter.&lt;/p&gt;
&lt;h2 id=&#34;reads&#34;&gt;Reads&lt;/h2&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;root@uconsole /h/me# time dd if=/dev/mmcblk0 of=/dev/null bs=1M count=8192
8192+0 records in
8192+0 records out
8589934592 bytes (8.6 GB, 8.0 GiB) copied, 198.193 s, 43.3 MB/s

________________________________________________________
Executed in  198.20 secs    fish           external
   usr time    0.06 secs    0.03 millis    0.06 secs
   sys time   23.06 secs    2.00 millis   23.06 secs

root@uconsole /h/me# time dd if=/dev/nvme0n1 of=/dev/null bs=1M count=8192
8192+0 records in
8192+0 records out
8589934592 bytes (8.6 GB, 8.0 GiB) copied, 21.366 s, 402 MB/s

________________________________________________________
Executed in   21.37 secs    fish           external
   usr time    0.03 secs    1.59 millis    0.03 secs
   sys time   10.38 secs    0.86 millis   10.38 secs
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Summary: The NVMe drive was 9.3x faster than the SD card and took 55% less CPU.&lt;/p&gt;
&lt;h2 id=&#34;writes&#34;&gt;Writes&lt;/h2&gt;
&lt;p&gt;I couldn&amp;rsquo;t write to the raw SD card because all of it is allocated in the partition map and it&amp;rsquo;s what I boot off of as of this writing. Instead, I formatted the NVMe drive with the same options as the root filesystem and mounted it at &lt;code&gt;/tmp/nvme&lt;/code&gt; so that at least it&amp;rsquo;s an apples-to-apples comparison&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;root@uconsole /h/me# time dd if=/dev/zero of=/sdfile bs=1M count=8192
8192+0 records in
8192+0 records out
8589934592 bytes (8.6 GB, 8.0 GiB) copied, 331.464 s, 25.9 MB/s

________________________________________________________
Executed in  331.47 secs    fish           external
   usr time    0.05 secs    0.25 millis    0.05 secs
   sys time   25.98 secs    2.16 millis   25.98 secs

root@uconsole /h/me# time dd if=/dev/zero of=/tmp/nvme/sdfile bs=1M count=8192
8192+0 records in
8192+0 records out
8589934592 bytes (8.6 GB, 8.0 GiB) copied, 21.0683 s, 408 MB/s

________________________________________________________
Executed in   21.10 secs    fish           external
   usr time    0.03 secs    2.16 millis    0.03 secs
   sys time   18.92 secs    1.13 millis   18.92 secs
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Summary: The NVMe drive was 15.7x faster than the SD card, and took 27% less CPU.&lt;/p&gt;
&lt;h1 id=&#34;random-operations&#34;&gt;Random operations&lt;/h1&gt;
&lt;p&gt;These use the &lt;code&gt;fio&lt;/code&gt; benchmark. First, the SD card:&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;root@uconsole /v/tmp# fio --profile=tiobench
seqwrite: (groupid=0, jobs=1): err= 0: pid=3128: Mon Jul  6 19:40:57 2026
  write: IOPS=1045, BW=4181KiB/s (4281kB/s)(30.5MiB/7482msec); 0 zone resets
randwrite: (groupid=1, jobs=1): err= 0: pid=3161: Mon Jul  6 19:40:57 2026
  write: IOPS=692, BW=2771KiB/s (2838kB/s)(30.5MiB/11287msec); 0 zone resets
seqread: (groupid=2, jobs=1): err= 0: pid=3206: Mon Jul  6 19:40:57 2026
  read: IOPS=2917, BW=11.4MiB/s (12.0MB/s)(30.5MiB/2680msec)
randread: (groupid=3, jobs=1): err= 0: pid=3255: Mon Jul  6 19:40:57 2026
  read: IOPS=3075, BW=12.0MiB/s (12.6MB/s)(30.5MiB/2543msec)

Run status group 0 (all jobs):
  WRITE: bw=4181KiB/s (4281kB/s), 4181KiB/s-4181KiB/s (4281kB/s-4281kB/s), io=30.5MiB (32.0MB), run=7482-7482msec

Run status group 1 (all jobs):
  WRITE: bw=2771KiB/s (2838kB/s), 2771KiB/s-2771KiB/s (2838kB/s-2838kB/s), io=30.5MiB (32.0MB), run=11287-11287msec

Run status group 2 (all jobs):
   READ: bw=11.4MiB/s (12.0MB/s), 11.4MiB/s-11.4MiB/s (12.0MB/s-12.0MB/s), io=30.5MiB (32.0MB), run=2680-2680msec

Run status group 3 (all jobs):
   READ: bw=12.0MiB/s (12.6MB/s), 12.0MiB/s-12.0MiB/s (12.6MB/s-12.6MB/s), io=30.5MiB (32.0MB), run=2543-2543msec

Disk stats (read/write):
  mmcblk0: ios=15548/15656, sectors=124384/125480, merge=0/27, ticks=4870/18365, in_queue=23235, util=93.05%
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;And then the NVMe drive:&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;root@wizzle /t/nvme# fio --profile=tiobench
seqwrite: (groupid=0, jobs=1): err= 0: pid=4865: Mon Jul  6 19:47:10 2026
  write: IOPS=21.6k, BW=84.4MiB/s (88.5MB/s)(30.5MiB/362msec); 0 zone resets
randwrite: (groupid=1, jobs=1): err= 0: pid=4870: Mon Jul  6 19:47:10 2026
  write: IOPS=21.2k, BW=82.8MiB/s (86.8MB/s)(30.5MiB/369msec); 0 zone resets
seqread: (groupid=2, jobs=1): err= 0: pid=4871: Mon Jul  6 19:47:10 2026
  read: IOPS=13.3k, BW=51.9MiB/s (54.4MB/s)(30.5MiB/589msec)
randread: (groupid=3, jobs=1): err= 0: pid=4876: Mon Jul  6 19:47:10 2026
  read: IOPS=13.1k, BW=51.3MiB/s (53.7MB/s)(30.5MiB/596msec)

Run status group 0 (all jobs):
  WRITE: bw=84.4MiB/s (88.5MB/s), 84.4MiB/s-84.4MiB/s (88.5MB/s-88.5MB/s), io=30.5MiB (32.0MB), run=362-362msec

Run status group 1 (all jobs):
  WRITE: bw=82.8MiB/s (86.8MB/s), 82.8MiB/s-82.8MiB/s (86.8MB/s-86.8MB/s), io=30.5MiB (32.0MB), run=369-369msec

Run status group 2 (all jobs):
   READ: bw=51.9MiB/s (54.4MB/s), 51.9MiB/s-51.9MiB/s (54.4MB/s-54.4MB/s), io=30.5MiB (32.0MB), run=589-589msec

Run status group 3 (all jobs):
   READ: bw=51.3MiB/s (53.7MB/s), 51.3MiB/s-51.3MiB/s (53.7MB/s-53.7MB/s), io=30.5MiB (32.0MB), run=596-596msec

Disk stats (read/write):
  nvme0n1: ios=13873/15650, sectors=110984/125184, merge=0/4, ticks=866/486, in_queue=1354, util=49.13%
&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;summary&#34;&gt;Summary&lt;/h2&gt;
&lt;p&gt;BW measurements are in MB/s.&lt;/p&gt;
&lt;table&gt;
  &lt;thead&gt;
      &lt;tr&gt;
          &lt;th style=&#34;text-align: left&#34;&gt;Operation&lt;/th&gt;
          &lt;th style=&#34;text-align: right&#34;&gt;SD&lt;/th&gt;
          &lt;th style=&#34;text-align: right&#34;&gt;NVMe&lt;/th&gt;
          &lt;th style=&#34;text-align: right&#34;&gt;Ratio&lt;/th&gt;
      &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
      &lt;tr&gt;
          &lt;td style=&#34;text-align: left&#34;&gt;seqwrite IOPS&lt;/td&gt;
          &lt;td style=&#34;text-align: right&#34;&gt;1045&lt;/td&gt;
          &lt;td style=&#34;text-align: right&#34;&gt;21600&lt;/td&gt;
          &lt;td style=&#34;text-align: right&#34;&gt;20.7x&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td style=&#34;text-align: left&#34;&gt;seqwrite BW&lt;/td&gt;
          &lt;td style=&#34;text-align: right&#34;&gt;4.2&lt;/td&gt;
          &lt;td style=&#34;text-align: right&#34;&gt;84.4&lt;/td&gt;
          &lt;td style=&#34;text-align: right&#34;&gt;20.1x&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td style=&#34;text-align: left&#34;&gt;randwrite IOPS&lt;/td&gt;
          &lt;td style=&#34;text-align: right&#34;&gt;692&lt;/td&gt;
          &lt;td style=&#34;text-align: right&#34;&gt;21200&lt;/td&gt;
          &lt;td style=&#34;text-align: right&#34;&gt;30.6x&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td style=&#34;text-align: left&#34;&gt;randwrite BW&lt;/td&gt;
          &lt;td style=&#34;text-align: right&#34;&gt;2.8&lt;/td&gt;
          &lt;td style=&#34;text-align: right&#34;&gt;82.8&lt;/td&gt;
          &lt;td style=&#34;text-align: right&#34;&gt;29.6x&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td style=&#34;text-align: left&#34;&gt;seqread IOPS&lt;/td&gt;
          &lt;td style=&#34;text-align: right&#34;&gt;2917&lt;/td&gt;
          &lt;td style=&#34;text-align: right&#34;&gt;13300&lt;/td&gt;
          &lt;td style=&#34;text-align: right&#34;&gt;4.6x&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td style=&#34;text-align: left&#34;&gt;seqread BW&lt;/td&gt;
          &lt;td style=&#34;text-align: right&#34;&gt;12.0&lt;/td&gt;
          &lt;td style=&#34;text-align: right&#34;&gt;51.9&lt;/td&gt;
          &lt;td style=&#34;text-align: right&#34;&gt;4.3x&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td style=&#34;text-align: left&#34;&gt;randread IOPS&lt;/td&gt;
          &lt;td style=&#34;text-align: right&#34;&gt;3075&lt;/td&gt;
          &lt;td style=&#34;text-align: right&#34;&gt;13100&lt;/td&gt;
          &lt;td style=&#34;text-align: right&#34;&gt;4.3x&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td style=&#34;text-align: left&#34;&gt;randread BW&lt;/td&gt;
          &lt;td style=&#34;text-align: right&#34;&gt;12.6&lt;/td&gt;
          &lt;td style=&#34;text-align: right&#34;&gt;51.3&lt;/td&gt;
          &lt;td style=&#34;text-align: right&#34;&gt;4.1x&lt;/td&gt;
      &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;
&lt;h1 id=&#34;conclusion&#34;&gt;Conclusion&lt;/h1&gt;
&lt;p&gt;In the words of the great Ferris Bueller, “It is so choice. If you have the means, I highly recommend picking one up.”&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>Replacing the login and lock screens on a Raspberry Pi</title>
      <link>https://honeypot.net/2026/06/22/replacing-the-login-and-lock.html</link>
      <pubDate>Mon, 22 Jun 2026 19:21:58 -0700</pubDate>
      
      <guid>http://kirk.micro.blog/2026/06/22/replacing-the-login-and-lock.html</guid>
      <description>&lt;p&gt;My &lt;a href=&#34;https://www.clockworkpi.com/uconsole&#34;&gt;uConsole&lt;/a&gt; computer finally arrived after a 10-month delay. I started kicking the tires by installing fun software on it, and quickly realized it’d run better if it looked cool. Here’s how I did it.&lt;/p&gt;
&lt;h2 id=&#34;change-the-boot-image&#34;&gt;Change the boot image&lt;/h2&gt;
&lt;p&gt;Raspberry Pi OS uses &lt;a href=&#34;https://wiki.debian.org/plymouth&#34;&gt;Plymouth&lt;/a&gt; to make show a boot splashscreen. By default, it displays the image file at &lt;code&gt;/usr/share/plymouth/themes/pix/splash.png&lt;/code&gt;. I’m sure there’s a “better” way to do this, but I simply replaced that file with my own 1280x720 image (to match the screen’s native resolution):&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-shell&#34; data-lang=&#34;shell&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;$ cd /usr/share/plymouth/themes/pix
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;$ sudo cp splash.png splash.png-dist  &lt;span style=&#34;color:#75715e&#34;&gt;# Keep a backup&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;$ sudo cp myimage.png splash.png
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;$ sudo plymouth-set-default-theme --rebuild-initrd pix
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;That last line rebuilds the &lt;a href=&#34;https://www.debian.org/doc/manuals/debian-reference/ch03.en.html#_stage_2_the_boot_loader&#34;&gt;initrd image&lt;/a&gt; so that the kernel will use the new image.&lt;/p&gt;
&lt;img src=&#34;https://cdn.uploads.micro.blog/763/2026/img-3356.jpg&#34; alt=&#34;Photo of a uConsole with a Hackers movie-style boot screen with blue plasma flames and a yellow flame logo inside a red trapezoid.&#34; title=&#34;IMG_3356.jpeg&#34; border=&#34;0&#34; width=&#34;1200&#34; height=&#34;900&#34; /&gt;
&lt;h2 id=&#34;change-the-lock-image&#34;&gt;Change the lock image&lt;/h2&gt;
&lt;p&gt;I use Wayland instead of X11, and that setup uses &lt;a href=&#34;https://github.com/raspberrypi-ui/pi-greeter&#34;&gt;pi-greeter&lt;/a&gt; to show a lock screen. That requires editing &lt;code&gt;/etc/lightdm/pi-greeter.conf&lt;/code&gt;. I copied my new user image to &lt;code&gt;/usr/share/plymouth/themes/pix/smiley.png&lt;/code&gt;, which isn’t the &lt;em&gt;right&lt;/em&gt; place to put it exactly, but has it living next to the &lt;code&gt;splash.png&lt;/code&gt; I installed in the previous step. Then I backed up &lt;code&gt;pi-greeter.conf&lt;/code&gt; and edited its &lt;code&gt;default-user-image&lt;/code&gt; and &lt;code&gt;wallpaper&lt;/code&gt; values like so:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-diff&#34; data-lang=&#34;diff&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;--- pi-greeter.conf-dist        2026-06-22 18:52:53.702242786 -0700
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;+++ pi-greeter.conf     2026-06-22 18:55:06.519726407 -0700
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;[@@](https://micro.blog/@) -1,7 +1,7 [@@](https://micro.blog/@)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; [greeter]
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;-default-user-image=/usr/share/raspberrypi-artwork/clockworkpi.png
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;+default-user-image=/usr/share/plymouth/themes/pix/smiley.png
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; desktop_bg=#000000
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;-wallpaper=/usr/share/rpd-wallpaper/RPiSystem_dark.png
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;+wallpaper=/usr/share/plymouth/themes/pix/splash.png
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; wallpaper_mode=center
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; gtk-icon-theme-name=PiXflat
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; gtk-font-name=Nunito Sans 12
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Note that &lt;code&gt;usr/share/raspberrypi-artwork/clockworkpi.png&lt;/code&gt; doesn’t even exist by default, so the lock screen falls back to a boring silhouette of a person.&lt;/p&gt;
&lt;img src=&#34;https://cdn.uploads.micro.blog/763/2026/img-3354.jpg&#34; alt=&#34;The same image, but showing a username/password prompt. The icon is a yellow smiley with a black patch over one eye.&#34; title=&#34;IMG_3354.jpeg&#34; border=&#34;0&#34; width=&#34;1200&#34; height=&#34;900&#34; /&gt;
&lt;h2 id=&#34;make-the-screen-automatically-lock&#34;&gt;Make the screen automatically lock&lt;/h2&gt;
&lt;p&gt;I’m &lt;a href=&#34;https://honeypot.net/2026/04/17/one-day-i-was-walking.html&#34;&gt;teaching my coworkers&lt;/a&gt; not to trust leaving their laptops unlocked, and I have to practice what I preach. I want my screen to automatically lock if I ever forget to manually do it. That’s easy! Edit the &lt;code&gt;~/.config/labwc/autostart&lt;/code&gt; file like this:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-diff&#34; data-lang=&#34;diff&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;--- autostart-dist      2026-06-22 19:12:18.204495749 -0700
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;+++ autostart   2026-06-22 19:12:12.708859097 -0700
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;[@@](https://micro.blog/@) -1 +1 [@@](https://micro.blog/@)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;-swayidle -w timeout 600 &amp;#39;wlopm --off \*&amp;#39; resume &amp;#39;wlopm --on \*&amp;#39; &amp;amp;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;+swayidle -w timeout 300 &amp;#39;swaylock -f -p&amp;#39; timeout 600 &amp;#39;wlopm --off \*&amp;#39; resume &amp;#39;wlopm --on \*&amp;#39; &amp;amp;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;The extra &lt;code&gt;timeout 300 &#39;swaylock -f -p&#39;&lt;/code&gt; locks the screen after a 5 minute idle timeout.&lt;/p&gt;
&lt;img src=&#34;https://cdn.uploads.micro.blog/763/2026/img-3353.jpg&#34; alt=&#34;The same screen, but with a black password box in the middle of the display.&#34; title=&#34;IMG_3353.jpeg&#34; border=&#34;0&#34; width=&#34;1200&#34; height=&#34;900&#34; /&gt;
&lt;h2 id=&#34;ta-da&#34;&gt;Ta-da!&lt;/h2&gt;
&lt;p&gt;And that’s it! Reboot and enjoy your cool graphics and slightly more secure setup.&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title></title>
      <link>https://honeypot.net/2026/06/19/why-yes-you-can-run.html</link>
      <pubDate>Fri, 19 Jun 2026 16:07:12 -0700</pubDate>
      
      <guid>http://kirk.micro.blog/2026/06/19/why-yes-you-can-run.html</guid>
      <description>&lt;p&gt;Why yes, you &lt;em&gt;can&lt;/em&gt; run Factory&amp;rsquo;s Droid on a Raspberry Pi. Not officially, sure. This isn&amp;rsquo;t part of our CI/CD pipeline and we&amp;rsquo;re not publishing packages for it the way we do for our supported platforms. Still, it works!&lt;/p&gt;
&lt;img src=&#34;https://cdn.uploads.micro.blog/763/2026/5f8770b2-f017-4d00-8bed-e5523aa60182-1-102-o.jpg&#34; width=&#34;450&#34; height=&#34;600&#34; alt=&#34;Photo of a uConsole handheld computer displaying the Droid text logo in a terminal window.&#34;&gt;
</description>
    </item>
    
  </channel>
</rss>