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.

16 July 2026

Money and Recognition: The Two Axes of Compensation

(The following observation, including its linkage to Aristotle, is fun but not novel as noted at the end of the essay. The text/references came from Kagi's Research Assistant)

Compensation has two parts that work like directions on a plane. One direction is money. The other is recognition. Every job pays out along both, but the mix is different for each one. The mix is a two-vector and getting it right matters.

Examples abound. A doctor earns good money and high respect. Both directions are strong. A ballet dancer earns little money but receives great prestige. The recognition direction does almost all the work. A soldier may earn modest pay but gains deep honor, especially in moments of sacrifice. Respect, prestige, and honor are three words for the recognition axis — the one that money cannot buy.

Money and recognition are different goods for different kinds of merit. Paying someone in the wrong way causes problems. A wealthy person does not need more money. A person who cannot buy groceries does not care about awards. The right reward is the two-vector that addresses what the person actually lacks on both axes.

This is an old idea, with concepts going back to at least Aristotle. He saw that honor (not "recognition") and money were separate goods. He tied each to a different kind of contribution. He warned that mixing them up causes political trouble. The passages below trace his argument.

Concept Aristotle's Words Source
Honor and profit are two distinct currencies of reward. In unequal friendships, each party should receive more — but not more of the same thing: the superior receives the larger share of honor; the needy party receives the larger share of material gain. "both parties should receive a larger share from the friendship, but not a larger share of the same thing: the superior should receive the larger share of honor, the needy one the larger share of profit; for honor is the due reward of virtue and beneficence, while need obtains the aid it requires in pecuniary gain." Nicomachean Ethics VIII.14
Honor and property are independent axes of competition. People compete for them separately, and inequality along each axis produces discontent in opposite directions: the masses resent unequal property; the upper classes resent equally distributed honors. "civil strife is caused not only by inequality of property but also by inequality of honors, though the two motives operate in opposite ways—the masses are discontented if possessions are unequally distributed, the upper classes if honors are equally distributed." Politics II.7 (1266b)
"Merit" is not a single dimension. Different political traditions measure it differently — by free birth, by wealth, or by virtue — so what counts as a fair reward depends on which axis of merit is being applied. "all men agree that what is just in distribution must be according to merit in some sense, though they do not all specify the same sort of merit, but democrats identify it with the status of freeman, supporters of oligarchy with wealth (or with noble birth), and supporters of aristocracy with excellence." Nicomachean Ethics V.3
Paying along only one axis gives poor outcomes. Each group is partly right but wrong when it claims the whole. "All those who dispute about the forms of constitution assert a part of the just principle." Politics III.9 (1281a)

This article's two-axes presentation is not original. For example, Nancy Fraser, in her contribution to Redistribution or Recognition? (co-authored with Axel Honneth), proposes a two-dimensional theory of justice in which economic redistribution and cultural recognition are distinct, irreducible axes. Her redistribution and recognition map directly onto the money and recognition axes described here.