layer-shika/examples/session-lock-standalone/README.md

1.8 KiB

Session Lock Standalone Example

This example demonstrates creating a standalone session lock application without any layer shell surfaces. This is useful for dedicated lock screen applications that don't need persistent UI elements.

Key Differences from Regular Session Lock

Regular Session Lock (session-lock)

  • Creates a layer shell surface (status bar, panel, etc.)
  • Requires wlr-layer-shell protocol
  • Lock is activated via button click or external trigger
  • Application has persistent UI even when unlocked

Standalone Session Lock (this example)

  • No layer shell surfaces - minimal mode
  • Does NOT require wlr-layer-shell protocol
  • Lock activates immediately on startup
  • Application exits when lock is deactivated
  • Lighter weight and simpler architecture

Usage

cargo run --package session-lock-standalone

The lock screen will appear immediately on all outputs. Enter any password and click "Unlock" to deactivate and exit.

Code Highlights

// Build shell WITHOUT calling .surface() - this creates minimal mode
let mut shell = Shell::from_file(ui_path).build()?;

// Create and activate the session lock immediately
let lock = Rc::new(shell.create_session_lock("LockScreen")?);
lock.activate()?;

// Shell runs until lock is deactivated
shell.run()?;

When to Use This Pattern

Use standalone session locks for:

  • Dedicated lock screen applications
  • Screen locker daemons that only show UI when locking
  • Simpler lock-only tools without status bars
  • Testing and development of lock screens in isolation

Use regular session locks with layer surfaces when:

  • You need persistent UI (status bar, panel, dock)
  • Lock is one feature among others in your application
  • You want to trigger lock activation from UI elements