Skip to content

Manages display server sessions with smooth, GPU-driven transitions — a GUI-first replacement for TTYs.

Notifications You must be signed in to change notification settings

everything-os/shift

Repository files navigation

Shift

A GUI-first replacement for TTYs.

Shift is a session manager that replaces the traditional TTY-based session model with a fully graphical mode session manager that manages multiple compositor sessions, input routing, and transitions between them.

Clients:

  • hyprde-wm: Hyprside's wayland compositor, forked from Hyprland | Session Client
  • tibs (Planned): Hyprside's login screen and boot splash | Admin Client

🧠 Key Features

  • GPU-accelerated animations: Switching between 2 users is just switching the OpenGL texture it is rendering to the screen, allowing for more interesting transitions
  • GUI-first design — Shift takes over your screen as soon as your init system starts so you never see a TTY or an fbconsole
  • Input routing - Shift mediates the input events between the compositor and libinput, removing the need for libseat
  • Token protected IPC - Compositors must have a token provided by the Admin Client (usually the display manager) to connect to Shift. Tokens are single-use and are consumed once the compositor connects preventing random processes from connecting and causing chaos.
  • Safer session switching - You can't CTRL + ALT + F<N> your way to another user's session, only the display manager is able to switch your session.

Admin Client vs Session Client

The admin client is the client that starts up and manages other compositors processes, it is usually the display manager/login screen. The admin client has special permissions such as creating new tokens/sessions and switching the current session. Shift requires a path to the admin client binary to be passed in SHIFT_ADMIN_CLIENT_BIN environment variable. It then, right after binding to the unix socket at /tmp/shift.sock, executes the admin client binary passing a admin token in the SHIFT_SESSION_TOKEN environment variable.

When the admin creates new tokens, it usually creates sessions with a Session/Normal role, which means they're unpriviliged.

🚧 Status

  • Define the protocol
  • Receive connections from clients
  • Authentication
  • Receive frame commits and render them on the screen (with vsync)
  • Session switching
  • Allow disabling vsync
  • Inputs
  • Audio isolation

About

Manages display server sessions with smooth, GPU-driven transitions — a GUI-first replacement for TTYs.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published