Releases: DeeJanuz/frametop
Release list
Frametop 0.2.0
Frametop 0.2.0 lets app windows float on their own, adds profiles that bring back your screens and apps, and installs with one command. It also offers gaze mode at install, with its calibration in the headset, and can turn the displays off when the headset isn't used.
New
- Floating windows. Any desktop window can float in VR as a panel of its own: press Meta+Shift+F, click the float button in its title bar, or pick Launch as Standalone in an app's right-click menu. The window stays part of the desktop, so drag and drop, the clipboard, the taskbar, and Alt+Tab keep working. Meta+scroll scales it, and an app floats where it floated last.
- Profiles. A profile saves where the screens are, which ones show, and which apps are open where. Opening one moves the screens, puts open windows in place, and starts the apps that aren't open. Nothing closes. The desktop can start in a profile, each profile has a launcher entry, and a profile can go on a key or a button.
- Hide screens one at a time (Frametop Display Settings, Visibility & pins). New windows that would open on a hidden screen float instead.
- Pin a screen to your head, like a HUD.
- Displays off when the headset isn't used, even on a stand that covers its proximity sensor, and the headset stays awake on the charger (Frametop Display Settings, Power).
- Frametop Remote Access, an app that turns the VNC view on and off and shows or changes its password. The VNC view shows the primary screen.
- A keyboard for text fields. Frametop's on-screen keyboard opens when you select a text field and no keyboard is connected (Frametop Input Settings, Keyboard).
- Ignored panels. The pointer passes through panels you pick, such as a performance overlay that follows your view.
- One-line install and update:
curl -fsSL https://deejanuz.github.io/frametop/get.sh | bash. It asks for stable or experimental, and running it again updates. scripts/doctor.shchecks what Frametop needs from SteamOS after an update.
Gaze mode (experimental)
The installer now offers it, and it stays off until you turn it on on the Gaze page of Frametop Input Settings.
- Meta+J and Meta+K click where you look. Hold one and turn your head to correct the aim; held still, it drags.
- By default the mouse only corrects. Its buttons work like Meta+J and Meta+K. A double right click, or a double Meta+K, pans and tilts what you're dragging.
- Calibration runs in a panel fixed to the headset. A quick check runs when you put the headset on, Calibrate asks you to click on each dot, and Check headset fit shows how well the tracker sees your eyes.
- Each correction teaches the tracker, up to 55 degrees. A bigger correction starts a quick check.
- Our own eye tracker can replace SteamVR's (installed separately; see gaze/README.md).
- Gaze clicks on the Frame controllers were tried and dropped (why).
Fixes
- Keys the desktop holds that no keyboard holds are released within about a second. A stuck Meta key used to make typing open the overview.
- Frametop's SteamVR clients start only once SteamVR is up (#6, thanks @utrack).
- The input relay survives a malformed control message, a rows setting that the screens can't fill gets a working layout, and the volume keys try every key when one swap fails (from #8, thanks @0x1f6).
- Clicks land where the cursor is on scaled desktop screens.
- Resting controllers no longer take the laser from the mouse.
- Flatpak apps can save and upload files in the desktop.
- Frametop Input Settings warns when SteamVR hasn't loaded the pointer driver.
- Installer: the Bluetooth fixes' password prompt works during the install, services that need SteamVR wait for it, and the uninstall removes everything Frametop put in place.
Not in this release
Hand tracking (hands shown over the screens, pinch to click) is in the repo but deferred: it uses a lot of the headset's CPU and needs more work. The installer doesn't offer it.
Update
curl -fsSL https://deejanuz.github.io/frametop/get.sh | bash
Tested on one Steam Frame (SteamOS 0.3.0 build 20260922, SteamVR 2.17.10). See the known limitations. If something goes wrong, run scripts/report.sh and open an issue.
Frametop 0.1.1
Frametop 0.1.1 fixes typing and the volume keys, lines the desktop up with the screens around you, and adds mapping for the Frame controllers' buttons. It also brings two experimental pointer modes, head follow and gaze, which are off by default.
Changes
- Typing follows your last click. A keyboard used to type into the desktop and into the Steam app with focus at the same time, so a space typed on the desktop could pause music playing on the dashboard. Now keys go only to what you clicked last, the screens or a Steam panel.
- The volume keys can't end the VR session. A volume press with nothing focused could crash gamescope. Frametop now handles the volume keys of the headset and of keyboards itself, in 5% steps on the default output.
- Keys don't stick when the dashboard opens. A key held as the SteamVR dashboard opens is now released on the desktop too.
- The desktop is arranged like the screens. KWin's outputs follow where the screens sit around you, so the mouse pointer and dragged windows cross to the screen you see next to the one you're on.
- Frame controller buttons. Frametop Input Settings has a new Controllers page for mapping the Frame controllers' buttons to actions. It also has a Global input switch for the SteamVR setting that mapped buttons need.
- The 3D mouse reaches all of SteamVR's Settings page. It used to miss most of that page. On that page only, it now shows a laser beam and a larger hit dot.
- A screen's controls show when a laser lands on them, and they stay with the screen when the layout moves it.
- Controller rays aim along the laser instead of along the controller.
- A mouse or keyboard that reconnects between device scans is picked up.
- The Meta tap shortcut for the dashboard is off by default.
- Installer fixes: the desktop starts without the Steam client's environment, the build container setup works on the headset, and reinstalling leaves an unchanged SteamVR driver in place.
Experimental, off by default
- Head follow. The pointer comes along when you turn your head. Turn it on with
POINTER_FOLLOW=1, or map a mouse button to Head follow on/off. It's only lightly tested. - Gaze. The pointer goes where you look, and the mouse does the last bit. It uses the Frame's eye tracking. It isn't installed with the rest of Frametop; see gaze/README.md to set it up.
docs/hazards.md lists the ways the input changes could go wrong and what to check. Tools that watch every keyboard for a hotkey stop seeing a keyboard while it types into the desktop. SHARE_KEYS=1 passes its keys on to them. This is off by default, because any local program could read those keys.
Update
cd ~/frametop && git pull && ./install.sh
Tested on one Steam Frame (SteamOS 0.3.0 build 20260922, SteamVR 2.17.10). See the known limitations. If something goes wrong, run scripts/report.sh and open an issue.
Frametop 0.1.0
The first release of Frametop, a multi-monitor desktop and 3D mouse for the Valve Steam Frame.
Frametop puts a KDE Plasma desktop with several screens into SteamVR. Each screen is its own monitor with its own resolution, so an ultrawide can sit between two portrait screens at whatever size and distance you like. You can move, resize, curve, and roll the screens, pin one to your wrist, and put them all back with a shortcut. During a VR game they hide unless the SteamVR dashboard is open (or stay up, if you prefer), and your controllers stay in the game.
A Bluetooth mouse drives all of SteamVR as a small dot anchored in the room, and hands the laser back to your controllers when you pick one up. Two settings apps, Frametop Display Settings and Frametop Input Settings, cover the screens and the input devices, and the Bluetooth fixes let LE mice and keyboards like the Swiftpoint Z3 reconnect after they sleep.
To install, follow the README. This is an early release, tested on one Steam Frame (SteamOS 0.3.0 build 20260922, SteamVR 2.17.10); see the known limitations. If something goes wrong, run scripts/report.sh and open an issue.