04 August 2026

The Alexandrian Moment

For giggles, I put a short story up as an Amazon Kindle offering: The Alexandrian Moment

30 July 2026

Workaround gamescope invisible cursor bug in Ubuntu 26.04

The bug

On Ubuntu 26.04 (resolute, which ships gamescope 3.16.20), launching a game through gamescope with --force-grab-cursor can make the mouse pointer vanish. Upstream: https://github.com/ValveSoftware/gamescope/issues/2180

Dropping --force-grab-cursor avoids the bug, but that flag is what confines the pointer to the game window on a multi-monitor setup, so removing it is not an acceptable fix here.

A Workaround

Only one thing worked for me: build the older questing gamescope 3.16.15 and run it instead of resolute's 3.16.20.

Everything else raised on #2180 and related threads failed or did not apply:

  • --hide-cursor-delay 99999 — no effect.
  • WLR_NO_HARDWARE_CURSORS=1 — no effect.
  • Borderless-windowed / backend switching — unreliable.
  • winecfg / protontricks "capture mouse in fullscreen" — Proton/Wine only, so no help for a native-Linux game.
  • Downgrade further, to 3.14.x — unnecessary; 3.16.15 sufficed.

Both 3.16.15 and 3.16.20 are 3.16.x, so the regression landed in a commit between those two tags.

Procedure for Agents

Build gamescope 3.16.15-2 from Ubuntu questing sources and install, self-contained, under ~/Stow/gamescope-questing. No root, no system changes. resolute dropped wlroots 0.18 (ships 0.19), which 3.16.15 needs — Debian patch 0006 wires gamescope to the system libwlroots-0.18-dev, and the Debian tarball strips the vendored subprojects/wlroots — so build wlroots 0.18 from its matching Ubuntu source into the same prefix.

Sources

All from the Ubuntu archive. Confirm each download's checksum against the Checksums-Sha256 field of its .dsc.

Prerequisites

Install both packages' Build-Depends (see each .dsc). gamescope's libwlroots-0.18-dev is supplied by the wlroots build below; wlroots' libcairo2-dev is needed only for examples, which are disabled.

Build

Prefix for both: PREFIX="$HOME/Stow/gamescope-questing". Apply each package's Debian quilt patches before configuring:

while read p; do patch -p1 -i debian/patches/$p; done < debian/patches/series

1. wlroots 0.18.2 -> $PREFIX

meson setup build --prefix="$PREFIX" --libdir=lib --buildtype=release \
  -Dexamples=false -Dwerror=false
ninja -C build install

Installs libwlroots-0.18.so, headers under include/wlroots-0.18, and lib/pkgconfig/wlroots-0.18.pc.

2. gamescope 3.16.15 -> $PREFIX

Two source edits after patching:

  • src/meson.build: patch 0006 hardcodes /usr/include/wlroots-0.18 in reshade_include. Replace with join_paths(get_option('prefix'), 'include', 'wlroots-0.18').
  • src/meson.build: vcs_tag() has no git tree, so the --version banner is blank. After gamescope_version_conf = configuration_data() add gamescope_version_conf.set('VCS_TAG', '3.16.15').
export PKG_CONFIG_PATH="$PREFIX/lib/pkgconfig:\
/usr/lib/x86_64-linux-gnu/pkgconfig:\
/usr/lib/pkgconfig:\
/usr/share/pkgconfig"
meson setup build --prefix="$PREFIX" --libdir=lib --bindir=bin --buildtype=release \
  -Dpipewire=enabled -Denable_openvr_support=false \
  -Dcpp_link_args='-Wl,-rpath,$ORIGIN/../lib' \
  -Dc_link_args='-Wl,-rpath,$ORIGIN/../lib'
ninja -C build install

Choices, matching the Debian rules except where noted:

  • -Dpipewire=enabled -Denable_openvr_support=false from Debian rules.
  • bindir=bin, libdir=lib (Debian uses /usr/games) so the tree suits a stow package.
  • PKG_CONFIG_PATH puts $PREFIX first so the staged wlroots-0.18 wins.
  • rpath $ORIGIN/../lib lets gamescope find its bundled libwlroots-0.18.so both in the raw prefix and after stowing.

Verify

readelf -d "$PREFIX/bin/gamescope" | grep RUNPATH        # $ORIGIN/../lib
ldd "$PREFIX/bin/gamescope" | grep wlroots               # resolves inside $PREFIX
"$PREFIX/bin/gamescope" --version                        # gamescope version 3.16.15

24 July 2026

Time Machine Quick Reference

The Spertilo Live Music Time Machine is a great little device, with a delightful interface. It streams live shows from archive.org and phish.in, especially Grateful Dead for 1966–1995.

I use it frequently but I infrequently need to comb their site/FAQ/etc to find button combinations for some Micro edition features. Here's a quick reference:

Micro model reference only. No Bluetooth. No Experience Mode.

Setup

  • Audio: analog out via 1/8" headphone jack. Plug into powered speakers, an amp, or earphones.
  • Power: USB cable, lower right corner.
  • WiFi (first boot, or after a failed connection):
    • Turn Year to scroll network names; red name with ">" is the candidate. Press Select to choose.
    • Hidden network: choose HIDDEN_WIFI and enter the name manually.
    • Passkey entry: turn Year to move the cursor, Day to jump 10 characters, Select to enter a character, DEL to erase, Stop to finish.
    • Credentials persist until the network changes.

Play a Show

  1. Stage a date with the Month, Day, Year knobs. Venue appears if a tape exists; no venue, no show.
  2. Press Select. The best tape plays.
  3. Play/Pause, Stop, Rewind, FFwd behave as expected.
  • Hold Select: cycle through every tape on the staged date; release to play the one displayed. White id = soundboard, red id = audience.
  • Rew / FFwd: previous / next track.
  • Stop: halt playback, return play head to start of show.
  • Staged and selected dates are independent: browse while listening.
  • Set break: 10 minutes of silence between sets. FFwd skips it.

Knob Presses

KnobPress
MonthDim the screen
DayJump to next date with a tape
YearToday-in-history for staged year; press again to cycle years with tapes

Volume: dim the screen (press Month), then Rewind lowers and FFwd raises volume. Turn any knob to wake the screen.

Screen

  • Top: staged date, MM-DD-YY.
  • Below: venue/city/state, alternating with tape id (scrolls if long).
  • Middle: current and next track, red text.
  • Bottom: selected date, MM-DD-YYYY. Bottom right: playstate.
  • Screen sleeps after 30 minutes idle. Any knob or button wakes it.

Menu — Hold Power

Hold Power until the menu appears. The site says 3 seconds in one place, 5 in another; hold until you see it.
A short Power press stops playback and dims the screen.

  • Collections: add artists. Spell the collection name with the Day and Year knobs; once under 30 matches, pick from the list, choose Finished. Device restarts.
  • WiFi: force reconnection to a different network.
  • Update Code: wait ~1 minute for the "Press Select Button" prompt, then press Select. No prompt, no update.
  • Update Firmware: runs on its own. Update encouraged; pre-update units skip tracks since archive.org went https-only (March 2024).
  • Factory Reset: restore shipped software.

Current versions as of April 2024: software 2.1.3, firmware 1.23.0 20240408.

Troubleshooting

  • Dead on arrival: reseat both ends of the power cable, plug in, wait 10 seconds, unplug, plug back in.
  • Connected but silent: check the audio connection.
  • Phish silent: run Update Code.
  • Tape choice: default ranks soundboard first, then favored taper, downloads, track count, named tracks, rating. Hold Select to override.

21 July 2026

Disabling Ubuntu Tile Groups via gsettings

In Ubuntu 25.10, clicking window B (to focus it) can unexpectedly raise a sibling window A above an overlapping window C. This happens because A and B are in the same Tile Group — a spatial grouping the Ubuntu Tiling Assistant forms when windows are snapped/tiled edge-to-edge. The extension's "Raise together" rule raises the entire tile group whenever any member is raised, so raising B drags A upward too. The fix is to disable that group-raise behavior while keeping tiling itself intact:

gsettings set org.gnome.shell.extensions.tiling-assistant enable-raise-tile-group false

To verify it took, run gsettings get org.gnome.shell.extensions.tiling-assistant enable-raise-tile-group — it should print false.