Post

Kermit Screen Lock v3.1.0 - Cross-Platform Update with CLI Arguments

Kermit Screen Lock v3.1.0 - Cross-Platform Update with CLI Arguments

Overview

I’ve just released Kermit Screen Lock v3.1.0, a major update that transforms a fun macOS-only screen lock application into a fully cross-platform tool with powerful command-line options. This post covers the changes made, new features, and the exciting roadmap ahead.

Kermit the Frog The iconic Kermit GIF that displays fullscreen during the lock

What is Kermit Screen Lock?

Kermit is a Python-based screen lock experience that displays a fullscreen animated GIF with looping audio. It’s secured with a secret key combination that you need to remember to exit - perfect for a fun prank or actual screen protection.

GitHub Repository: https://github.com/davidtkeane/kermit


Major Updates in v3.0.0 & v3.1.0

Cross-Platform Support (v3.0.0)

The original Kermit was macOS-only. Now it works on:

  • macOS - Native support
  • Linux (Kali/Debian/Ubuntu) - Full support
  • MacBook keyboard in VM - Same physical keys work on both platforms!

The script automatically detects your operating system and applies the correct key bindings:

PlatformExit KeysPause Keys
macOSControl + Option + Left ShiftControl + Option + P
LinuxCtrl + Alt + Left ShiftCtrl + Alt + P

Command-Line Arguments (v3.1.0)

Brand new CLI support lets you customize everything:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
# Use custom GIF
python kermit.py --gif custom.gif

# Use custom audio
python kermit.py --audio music.mp3

# Set initial volume (50%)
python kermit.py --volume 0.5

# Silent mode - no audio
python kermit.py --no-sound

# Combine options
python kermit.py --gif cat.gif --audio meow.mp3 --volume 0.3

# Show help with examples
python kermit.py --help

Graceful Error Handling

No more crashes! If files are missing, you get helpful messages:

1
2
3
4
5
6
7
8
9
10
ERROR: Missing required files

GIF file not found: custom.gif
  -> Check that the file path is correct

Audio file not found: custom.mp3
  -> Check that the file path is correct
  -> Or use --no-sound to run without audio

Current directory: /home/kali/Documents/Apps/kermit

Installation

1. Clone the Repository

1
2
git clone https://github.com/davidtkeane/kermit.git
cd kermit

2. Install System Dependencies

Linux (Kali/Debian/Ubuntu):

1
2
sudo apt update
sudo apt install python3-tk

macOS:

1
2
3
# tkinter is usually included
# If missing:
brew install python-tk@3.x

3. Install Python Packages

1
pip install -r requirements.txt

4. Run It!

1
python kermit.py

Features at a Glance

  • Fullscreen Animated GIF Display - Automatically scales to your screen
  • Looping MP3 Audio - Continuous playback
  • Secret Exit Combination - Platform-specific key combos
  • Pause/Resume - Control both audio and animation
  • Volume Control - Up/Down arrow keys
  • Custom Media Files - Use your own GIF and audio
  • Silent Mode - Animation without sound
  • Hidden Mouse Cursor - Clean fullscreen experience
  • Cross-Platform - macOS and Linux support

Technical Implementation

Platform Detection

1
2
3
4
5
6
7
8
import platform

CURRENT_OS = platform.system()

if CURRENT_OS == "Darwin":  # macOS
    SECRET_KEYSYMS = {"Control_L", "Alt_L", "Shift_L"}
else:  # Linux
    SECRET_KEYSYMS = {"Control_L", "Alt_L", "Shift_L"}

Argument Parsing

Using Python’s argparse for robust CLI handling:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
def parse_arguments():
    parser = argparse.ArgumentParser(
        description=f"Kermit Screen Lock Experience v{VERSION}"
    )

    parser.add_argument(
        "--gif", type=str, default=DEFAULT_IMAGE_FILE,
        help="Path to GIF file"
    )

    parser.add_argument(
        "--volume", type=float, default=1.0,
        help="Initial volume level 0.0-1.0"
    )

    parser.add_argument(
        "--no-sound", action="store_true",
        help="Run without audio"
    )

    return parser.parse_args()

File Validation

Pre-launch checks ensure a smooth experience:

1
2
3
4
5
6
7
8
9
10
11
12
13
def validate_files(gif_path, audio_path, no_sound):
    import os
    errors = []

    if not os.path.isfile(gif_path):
        errors.append(f"GIF file not found: {gif_path}")
        errors.append("  -> Check that the file path is correct")

    if errors:
        print("ERROR: Missing required files\n")
        for error in errors:
            print(error)
        sys.exit(1)

Future Roadmap (TODO)

v3.2.0 - Security & Lock Mode

  • Timeout Feature - --timeout <minutes> auto-exit
  • Lockdown Mode - --lockdown blocks ALL escape methods
  • Password/PIN Protection - Require authentication to exit
  • Block Alt-Tab, Alt-F4, Escape - True screen lock

v3.3.0 - Visual Feedback

  • On-screen volume indicator
  • Pause/mute overlay display
  • Exit hint after inactivity
  • Loading screen and splash

v4.0.0 - Platform Support & Polish

  • Windows platform testing
  • Type hints throughout codebase
  • Comprehensive logging system
  • Unit tests

Project Structure

1
2
3
4
5
6
7
8
9
10
kermit/
├── kermit.py           # Main script (400+ lines)
├── files/
│   ├── kermit.gif      # Animated GIF
│   └── kermit.mp3      # Audio file
├── README.md           # Full documentation
├── CHANGELOG.md        # Version history
├── TODO.md             # Roadmap & plans
├── requirements.txt    # Python dependencies
└── LICENSE             # MIT License

Quick Reference

ActionKeys (Linux)Keys (macOS)
ExitCtrl + Alt + Left ShiftControl + Option + Left Shift
PauseCtrl + Alt + PControl + Option + P
Volume UpUp ArrowUp Arrow
Volume DownDown ArrowDown Arrow

Contributing

The project is open source! Feel free to:

  1. Fork the repository
  2. Submit pull requests
  3. Report issues
  4. Suggest features

Check out the TODO.md for planned features and contribute to the roadmap.


Conclusion

This update transforms Kermit from a simple macOS prank tool into a legitimate cross-platform screen lock application. The addition of CLI arguments makes it highly customizable, and the error handling ensures a smooth user experience.

Next up: implementing the timeout and lockdown features for v3.2.0. Stay tuned!

Repository: https://github.com/davidtkeane/kermit

Give it a star if you find it useful!

This post is licensed under CC BY 4.0 by the author.