<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><title>Notes on berezovskyi notes</title><link>https://blog.berezovskyi.dev/notes/</link><description>Recent content in Notes on berezovskyi notes</description><generator>Hugo</generator><language>en-us</language><lastBuildDate>Wed, 17 Jun 2026 00:00:00 +0000</lastBuildDate><atom:link href="https://blog.berezovskyi.dev/notes/index.xml" rel="self" type="application/rss+xml"/><item><title>Rebuilding a HyperHDR Host on a Dell Wyse 3040 with DietPi</title><link>https://blog.berezovskyi.dev/notes/hyperhdr-host-wyse3040-dietpi/</link><pubDate>Wed, 17 Jun 2026 00:00:00 +0000</pubDate><guid>https://blog.berezovskyi.dev/notes/hyperhdr-host-wyse3040-dietpi/</guid><description>&lt;h2 id="the-goal"&gt;The Goal&lt;/h2&gt;
&lt;p&gt;The Raspberry Pi 4 that ran my &lt;a href="https://blog.berezovskyi.dev/notes/hyperhdr-ambient-lighting/"&gt;HyperHDR ambient-lighting setup&lt;/a&gt;
died. With current mini-PC and Pi prices, a used Dell Wyse 3040 thin client (Intel Atom
x5-Z8350, 2 GB RAM, 8 GB eMMC) was the cheaper and frankly nicer replacement: fanless,
x86_64, and plenty for HyperHDR&amp;rsquo;s ~250 MB working set. This note documents rebuilding the
host on it with DietPi - including the part that the official installer would not do for
me, and getting the 10-bit &lt;code&gt;p010&lt;/code&gt; capture format working on x86 via DKMS.&lt;/p&gt;</description></item><item><title>HyperHDR Ambient Lighting: My TV Backlight Rig</title><link>https://blog.berezovskyi.dev/notes/hyperhdr-ambient-lighting/</link><pubDate>Sun, 07 Jun 2026 00:00:00 +0000</pubDate><guid>https://blog.berezovskyi.dev/notes/hyperhdr-ambient-lighting/</guid><description>&lt;h2 id="the-goal"&gt;The Goal&lt;/h2&gt;
&lt;p&gt;Ambient lighting (you may know it as bias lighting, or by Philips&amp;rsquo; &amp;ldquo;Ambilight&amp;rdquo; brand)
puts an LED strip around the back of the TV and lights it to match the edges of whatever
is on screen: a forest scene spills green onto the wall behind the panel, an explosion
throws orange. Beyond looking good, a lit wall behind the TV reduces eye strain in a dark
room and makes the picture feel larger than the panel.&lt;/p&gt;</description></item><item><title>DualSense Access Lost When Switching Linux Users</title><link>https://blog.berezovskyi.dev/notes/dualsense-hidraw-user-switch/</link><pubDate>Mon, 18 May 2026 00:00:00 +0000</pubDate><guid>https://blog.berezovskyi.dev/notes/dualsense-hidraw-user-switch/</guid><description>&lt;h2 id="the-problem"&gt;The Problem&lt;/h2&gt;
&lt;p&gt;The &lt;a href="https://blog.berezovskyi.dev/notes/linux-multi-seat-gaming-part-3"&gt;multi-seat gaming setup&lt;/a&gt; runs Steam in a
gamescope session as a systemd user service. The machine has two users: the gaming user
who owns the gamescope service, and a separate work user. Both users are on seat0.
Switching to the work user while the gamescope session is running caused the DualSense
controller to stop responding in Steam.&lt;/p&gt;
&lt;h2 id="why-the-controller-goes-through-hidraw"&gt;Why the Controller Goes Through hidraw&lt;/h2&gt;
&lt;p&gt;&lt;a href="https://blog.berezovskyi.dev/notes/linux-multi-seat-gaming-part-3"&gt;Part 3&lt;/a&gt; explains this in detail. The short
version: &lt;code&gt;TemporaryFileSystem=/dev/input&lt;/code&gt; in the gamescope service hides all evdev
devices from the service process tree. Steam Input bypasses this entirely - it reads the
DualSense through &lt;code&gt;/dev/hidraw*&lt;/code&gt; (the raw HID interface) for full-feature support:
adaptive triggers, haptics, gyro, touchpad. The evdev path is never used.&lt;/p&gt;</description></item><item><title>Linux Multi-Seat Gaming: Fixing Input Isolation with LIBSEAT_BACKEND=noop (Part 3)</title><link>https://blog.berezovskyi.dev/notes/linux-multi-seat-gaming-part-3/</link><pubDate>Sun, 17 May 2026 00:00:00 +0000</pubDate><guid>https://blog.berezovskyi.dev/notes/linux-multi-seat-gaming-part-3/</guid><description>&lt;h2 id="the-problem"&gt;The Problem&lt;/h2&gt;
&lt;p&gt;&lt;a href="https://blog.berezovskyi.dev/notes/linux-multi-seat-gaming-part-2"&gt;Part 2&lt;/a&gt; ended with a gamescope TV session that could be started and stopped independently - but with an immediate new problem: moving the desk mouse moved the cursor in Steam Big Picture on the TV. Keyboard keys navigated Steam menus.&lt;/p&gt;
&lt;p&gt;This shouldn&amp;rsquo;t happen. The desk mouse and keyboard are seat0 devices - they are not tagged for seat1 in udev, so seatd should not have given gamescope access to them. The gamescope log confirmed this - there were no &amp;ldquo;Adding device&amp;rdquo; messages from libinput. gamescope itself received no input devices through seatd.&lt;/p&gt;</description></item><item><title>Linux Multi-Seat Gaming: greetd, seatd, and Independent Session Control (Part 2)</title><link>https://blog.berezovskyi.dev/notes/linux-multi-seat-gaming-part-2/</link><pubDate>Sun, 17 May 2026 00:00:00 +0000</pubDate><guid>https://blog.berezovskyi.dev/notes/linux-multi-seat-gaming-part-2/</guid><description>&lt;h2 id="the-goal"&gt;The Goal&lt;/h2&gt;
&lt;p&gt;&lt;a href="https://blog.berezovskyi.dev/notes/linux-multi-seat-gaming-part-1"&gt;Part 1&lt;/a&gt; ended with a working setup and one major limitation: the TV gaming session on seat1 was always-on. To stop it - for GPU passthrough to a Windows VM, or to run Steam on the desk instead - required restarting all of LightDM, which also killed the Sway session on seat0 and lost all open windows.&lt;/p&gt;
&lt;p&gt;The goal: replace LightDM&amp;rsquo;s static seat1 management with something that can be stopped and started independently, without touching seat0.&lt;/p&gt;</description></item><item><title>Linux Multi-Seat Gaming: Dedicated TV Session with Gamescope (Part 1)</title><link>https://blog.berezovskyi.dev/notes/linux-multi-seat-gaming-part-1/</link><pubDate>Sat, 16 May 2026 00:00:00 +0000</pubDate><guid>https://blog.berezovskyi.dev/notes/linux-multi-seat-gaming-part-1/</guid><description>&lt;h2 id="the-goal"&gt;The Goal&lt;/h2&gt;
&lt;p&gt;I have a Linux desktop that doubles as my workstation and gaming machine. The CPU is a Ryzen 7900X - which has integrated graphics - paired with a discrete RX 9070 XT for gaming. Two monitors sit on my desk connected to the motherboard&amp;rsquo;s video output (iGPU), and a long HDMI cable runs from the RX 9070 XT to a TV in the living room.&lt;/p&gt;
&lt;p&gt;The idea is simple: play games on the TV without touching what&amp;rsquo;s running on the desk. On Windows this would mean &amp;ldquo;just connect the TV and extend the desktop.&amp;rdquo; On Linux, I want something better - a fully independent gaming session on the TV, with Steam Big Picture UI, HDR, VRR, and gamepad-only control, while my Wayland desktop on the desk keeps running untouched.&lt;/p&gt;</description></item><item><title>Migrating a Seagate HDD to Native 4K Sectors on a Synology NAS</title><link>https://blog.berezovskyi.dev/notes/seagate-hdd-4k-sector-synology/</link><pubDate>Sat, 16 May 2026 00:00:00 +0000</pubDate><guid>https://blog.berezovskyi.dev/notes/seagate-hdd-4k-sector-synology/</guid><description>&lt;h2 id="the-goal"&gt;The Goal&lt;/h2&gt;
&lt;p&gt;I was adding a new Seagate Exos X20 (ST20000NM007D, 20 TB) to my Synology DS1821+
running DSM 7.2.2. These drives ship from the factory in 512e mode - they physically
use 4096-byte sectors but advertise 512-byte sectors for legacy OS compatibility. Since
my NAS and DSM support native 4K sectors, I converted the drive to 4Kn (native 4K)
before adding it to the storage pool.&lt;/p&gt;
&lt;h2 id="why-native-4k"&gt;Why Native 4K?&lt;/h2&gt;
&lt;p&gt;512e is a compatibility shim. The drive&amp;rsquo;s physical sectors are 4096 bytes, but when the
OS writes a 512-byte block, the drive must read the entire 4096-byte physical sector that
contains it, modify the relevant 512 bytes, and write the full sector back - a
read-modify-write cycle on every write. Native 4K eliminates this: every OS write maps
directly onto a physical sector.&lt;/p&gt;</description></item></channel></rss>