<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://wiki.geekworm.com/index.php?action=history&amp;feed=atom&amp;title=CommentStreams%3A5711125217364fdf6de9d9a7bf1553fd</id>
	<title>CommentStreams:5711125217364fdf6de9d9a7bf1553fd - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.geekworm.com/index.php?action=history&amp;feed=atom&amp;title=CommentStreams%3A5711125217364fdf6de9d9a7bf1553fd"/>
	<link rel="alternate" type="text/html" href="https://wiki.geekworm.com/index.php?title=CommentStreams:5711125217364fdf6de9d9a7bf1553fd&amp;action=history"/>
	<updated>2026-07-25T12:49:19Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.43.8</generator>
	<entry>
		<id>https://wiki.geekworm.com/index.php?title=CommentStreams:5711125217364fdf6de9d9a7bf1553fd&amp;diff=35504&amp;oldid=prev</id>
		<title>31.94.22.136: Migrated comment #6197</title>
		<link rel="alternate" type="text/html" href="https://wiki.geekworm.com/index.php?title=CommentStreams:5711125217364fdf6de9d9a7bf1553fd&amp;diff=35504&amp;oldid=prev"/>
		<updated>2025-12-30T09:07:09Z</updated>

		<summary type="html">&lt;p&gt;Migrated comment #6197&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;This script stopped working with Trixie, so I spent the day rewriting the shutdown portion so that it&amp;#039;s usable going forward. Enjoy!&lt;br /&gt;
&lt;br /&gt;
### X-C1 Safe Power-Off (xoff)&lt;br /&gt;
&lt;br /&gt;
# What this does (by design)&lt;br /&gt;
# • xoff → clean Linux shutdown&lt;br /&gt;
# • All filesystems unmounted&lt;br /&gt;
# • Then hardware power is cut via X-C1 GPIO pulse&lt;br /&gt;
# • Board stays off (manual power-on required)&lt;br /&gt;
# • Reboot remains safe (no power cut)&lt;br /&gt;
&lt;br /&gt;
# Prerequisites&lt;br /&gt;
# • Raspberry Pi with X-C1 board attached&lt;br /&gt;
# • Raspberry Pi OS (Bullseye / Bookworm / Trixie)&lt;br /&gt;
# • GPIO27 wired to X-C1 soft power-cut input (default)&lt;br /&gt;
# • Root filesystem on ext4 (standard)&lt;br /&gt;
&lt;br /&gt;
## Step 1 — Install required packages&lt;br /&gt;
&lt;br /&gt;
sudo apt update&lt;br /&gt;
sudo apt install -y gpiod&lt;br /&gt;
&lt;br /&gt;
# Verify GPIO access:&lt;br /&gt;
&lt;br /&gt;
gpioinfo -c gpiochip0 | grep GPIO27&lt;br /&gt;
&lt;br /&gt;
# You should see: &amp;quot;line 27: &amp;quot;GPIO27&amp;quot; input&amp;quot;&lt;br /&gt;
&lt;br /&gt;
## Step 2 — Create the hardware power-cut script&lt;br /&gt;
# This script only triggers the X-C1 power cut. It does not shut down Linux.&lt;br /&gt;
&lt;br /&gt;
sudo tee /usr/local/sbin/xc1-powercut.sh &amp;gt; /dev/null &amp;lt;&amp;lt;&amp;#039;EOF&amp;#039;&lt;br /&gt;
#!/usr/bin/env bash&lt;br /&gt;
set -euo pipefail&lt;br /&gt;
&lt;br /&gt;
# Pulse GPIO27 HIGH briefly to trigger X-C1 hard power cut&lt;br /&gt;
/usr/bin/gpioset -c gpiochip0 -p 100ms 27=1&lt;br /&gt;
EOF&lt;br /&gt;
&lt;br /&gt;
sudo chmod 0755 /usr/local/sbin/xc1-powercut.sh&lt;br /&gt;
&lt;br /&gt;
## Step 3 — Create the systemd shutdown unit&lt;br /&gt;
# This ensures the GPIO pulse fires after all filesystems are unmounted, but only on poweroff, not reboot.&lt;br /&gt;
&lt;br /&gt;
sudo tee /etc/systemd/system/xc1-cutpower.service &amp;gt; /dev/null &amp;lt;&amp;lt;&amp;#039;EOF&amp;#039;&lt;br /&gt;
[Unit]&lt;br /&gt;
Description=X-C1: cut power at end of poweroff (after unmount)&lt;br /&gt;
DefaultDependencies=no&lt;br /&gt;
After=umount.target&lt;br /&gt;
Before=systemd-poweroff.service&lt;br /&gt;
&lt;br /&gt;
[Service]&lt;br /&gt;
Type=oneshot&lt;br /&gt;
ExecStart=/bin/sh -c &amp;#039;sync; sleep 0.2; /usr/local/sbin/xc1-powercut.sh&amp;#039;&lt;br /&gt;
TimeoutStartSec=5&lt;br /&gt;
&lt;br /&gt;
[Install]&lt;br /&gt;
WantedBy=poweroff.target&lt;br /&gt;
EOF&lt;br /&gt;
&lt;br /&gt;
# Activate it:&lt;br /&gt;
&lt;br /&gt;
sudo systemctl daemon-reload&lt;br /&gt;
sudo systemctl enable xc1-cutpower.service&lt;br /&gt;
&lt;br /&gt;
# Confirm attachment:&lt;br /&gt;
&lt;br /&gt;
systemctl show -p After -p Before xc1-cutpower.service&lt;br /&gt;
systemctl list-dependencies --plain poweroff.target | grep xc1&lt;br /&gt;
systemctl list-dependencies --plain reboot.target  | grep xc1 || echo &amp;quot;not attached to reboot&amp;quot;&lt;br /&gt;
&lt;br /&gt;
# Expected: Attached to poweroff.target, Not attached to reboot.target&lt;br /&gt;
&lt;br /&gt;
## Step 4 — Install the xoff command&lt;br /&gt;
# We deliberately avoid shell aliases so this works consistently across SSH, scripts, and non-interactive shells&lt;br /&gt;
&lt;br /&gt;
sudo tee /usr/local/bin/xoff &amp;gt; /dev/null &amp;lt;&amp;lt;&amp;#039;EOF&amp;#039;&lt;br /&gt;
#!/usr/bin/env bash&lt;br /&gt;
exec sudo systemctl poweroff&lt;br /&gt;
EOF&lt;br /&gt;
&lt;br /&gt;
sudo chmod 0755 /usr/local/bin/xoff&lt;br /&gt;
&lt;br /&gt;
# If you previously used an alias, remove it:&lt;br /&gt;
&lt;br /&gt;
unalias xoff 2&amp;gt;/dev/null || true&lt;br /&gt;
sed -i &amp;#039;/^alias xoff=/d&amp;#039; ~/.bashrc&lt;br /&gt;
&lt;br /&gt;
# Verify:&lt;br /&gt;
&lt;br /&gt;
type -a xoff&lt;br /&gt;
&lt;br /&gt;
# Expected: xoff is /usr/local/bin/xoff&lt;br /&gt;
&lt;br /&gt;
## Step 5 — Test sequence&lt;br /&gt;
&lt;br /&gt;
# Test poweroff (expected to cut power)&lt;br /&gt;
&lt;br /&gt;
xoff&lt;br /&gt;
&lt;br /&gt;
# Expected behavior: System shuts down cleanly, Power is cut, Board stays off, Manual power-on required&lt;br /&gt;
&lt;br /&gt;
# Test reboot (must NOT cut power)&lt;br /&gt;
&lt;br /&gt;
sudo reboot&lt;br /&gt;
&lt;br /&gt;
# Expected behavior: Normal reboot, Power remains applied, No manual intervention required&lt;br /&gt;
&lt;br /&gt;
### Summary&lt;br /&gt;
&lt;br /&gt;
# You now have:&lt;br /&gt;
# • A clean, modern, maintainable X-C1 power-off implementation&lt;br /&gt;
# • No deprecated GPIO sysfs&lt;br /&gt;
# • No vendor scripts&lt;br /&gt;
# • No reboot hazards&lt;br /&gt;
# • No disk corruption risk&amp;lt;!-- migrated from Comments; original IP: 31.94.22.136 --&amp;gt;&lt;/div&gt;</summary>
		<author><name>31.94.22.136</name></author>
	</entry>
</feed>