ft-screens read a screen's pose back from SteamVR right after setting it
to place its controls. SteamVR could still return the old pose, so after
Arrange now (or a layout reset) the bar and buttons stayed where the screen
had been. ft-screens now keeps each screen's pose itself.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Re-running the installer replaced the ft_pointer driver's files under a
running SteamVR. SteamVR then kept giving the virtual controller its hand
role but ignored its laser claim, so the mouse moved its dot without
SteamVR's laser until SteamVR restarted. The driver is now staged and only
replaced when it changed.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Hidden controls were taken out of SteamVR, so only ft-screens' own
proximity test could bring them back, and that test didn't match every
controller's laser. They now stay in place fully transparent while
hidden, and SteamVR's hover event on one reveals them, for any laser.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The relay scanned /dev/input once a second and only probed paths it hadn't
seen. A Bluetooth mouse that disconnects and reconnects within that second
often gets the same event numbers back, so the relay never grabbed it
again and the mouse stopped working. Nodes are now tracked by inode, so
a re-created node is probed even in a known place.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The Frame controllers' laser comes from their render model's tip, 40
degrees below the controller pose's forward axis. ft-screens tested rays
along the pose, so a controller's laser near a screen's controls didn't
reveal them, and dragging the resize tab or the roll knob with a
controller followed the wrong point. Rays now start from the tip.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The command that starts the container ran on the headset through a quoted
script, where $root isn't defined, so the installer stopped at step 2. The
repo path is passed to that script now.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
install.sh: a comment with an apostrophe inside a single-quoted command
(from the distrobox pin) ended the quote and broke the script at step 1.
The VR launcher started the desktop with the Steam client's environment,
including LD_LIBRARY_PATH to Steam's runtime, whose libavcodec has no
H.264 decoder: VLC in the desktop couldn't play most videos. The session
script now drops the client's variables before starting anything, so apps
use the system's libraries and codecs.
The README and the installer now recommend setting Steam's Sleep after
(When Plugged In and Idle) to Never; Steam suspends the Frame after an
hour otherwise, even while charging.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The README drops the bold headlines on every item and reads as prose. The
reference is brought up to date and loses its bold labels. The design doc
is reorganized by topic instead of as a dated work log, keeping the
technical findings. The setup guide uses subheadings for troubleshooting.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The installer clones distrobox 1.8.2.5 instead of the latest code, so an
upstream change can't break new installs. scripts/report.sh collects
versions, service states, settings, and logs for an issue, with Bluetooth
addresses and the headset serial masked. The README lists the known
limitations and how to report problems.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
With the pointer released, the helper still listed overlays by running
vrcmd every second, a new SteamVR client each time, which kept SteamVR
from going to standby. The list now pauses while the pointer is off.
Starting the dev container from one of our services made that service own
it, so stopping the service stopped the container and the desktop's
compositor with it. scripts/container-up.sh starts the container in a
systemd scope of its own before every distrobox enter.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
An awake 3D mouse pointer (a connected SteamVR controller with the laser
mode forced on) kept the displays lit after the headset came off, until 30 s
without mouse input, and any bump of the mouse woke it again. Now the helper
releases the pointer as soon as SteamVR reports the headset idle and ignores
the mouse until it's worn again. The helper service also stops in 5 s
instead of waiting 90 s for its container session.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
A new setting, During VR games: with Always, the screens hide while a VR
game runs and show while the SteamVR dashboard is open (the default), or
stay visible over the game. The hotkey still shows them; a game starting or
stopping resets it. Socket command: ingames hide|visible.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Visible screens kept SteamVR's laser mouse on, which takes the controllers
away from a VR game. Now, by default, that's off while a scene app runs:
the screens stay over the game and the 3D mouse or the dashboard works
them. Frametop Display Settings has the choice (always, except during VR
games, only with the dashboard open); the socket command is controllers.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Commands run during the install (distrobox, ssh) read stdin, so answers
typed ahead or piped in were swallowed and the questions fell back to their
defaults. Only the questions read stdin now.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The service and menu-entry templates still pointed at the old frametop/
subfolder, so the pointer helper, input relay, and settings apps couldn't
start after a clean install. The pointer helper's install step also failed
when the service was still starting after 3 s; it now waits up to 20 s and
doesn't abort the installer.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Several KDE Plasma screens floating in SteamVR, each a real monitor of any
resolution and shape, shown by our own compositor (ft-screens), with a
layout, wrist pinning, and visibility modes; a Bluetooth mouse that drives
all of SteamVR as a room-anchored 3D pointer (input relay, ft-pointer
helper, ft_pointer SteamVR driver); two settings apps; and Bluetooth LE
fixes. Installs on the headset with ./install.sh.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>