Access your built LFS system through a web browser!
EasyLFS provides two web-based interfaces to interact with the built LFS system:
- Web Terminal (ttyd) - Text-based shell in your browser
- Web Screen (noVNC) - Full graphical console in your browser
Both interfaces run the LFS system in QEMU and stream the output to your browser.
After building your LFS system (make build), start the web interfaces:
# Start both interfaces
make web
# Or start individually
make web-terminal # Terminal only
make web-screen # Screen onlyThen access in your browser:
- Terminal: http://localhost:7681
- Screen: http://localhost:6080/vnc.html
- Lightweight and fast
- Direct serial console access
- Perfect for command-line operations
- Low resource usage
make web-terminalOpen: http://localhost:7681
- The LFS system will boot automatically
- Login:
root(no password) - Exit QEMU: Press
Ctrl+AthenX - Reload page to restart the system
# Use custom port
WEB_TERMINAL_PORT=8080 make web-terminal
# Or set in environment
export WEB_TERMINAL_PORT=8080
make web-terminal- Full graphical console
- VNC-based display
- See complete boot process
- Supports graphics (if installed)
make web-screenOpen: http://localhost:6080/vnc.html
- Click "Connect" in the noVNC interface
- The LFS system will boot automatically
- Login:
root(no password) - Full keyboard and mouse support
# Use custom port
WEB_SCREEN_PORT=8888 make web-screen
# Or set in environment
export WEB_SCREEN_PORT=8888
make web-screen# Start both with default ports
make web
# Start both with custom ports
WEB_TERMINAL_PORT=7777 WEB_SCREEN_PORT=8888 make webAccess:
- Terminal: http://localhost:7777
- Screen: http://localhost:8888/vnc.html
make web-stopThis stops and removes both web interface containers.
If you start the web interfaces before building the LFS system:
Shows a helpful message:
╔════════════════════════════════════════════════════════════════╗
║ ║
║ LFS System Image Not Found ║
║ ║
║ The LFS system image has not been built yet. ║
║ ║
║ To build the LFS system, run: ║
║ make build ║
║ ║
║ Then access this web terminal at: ║
║ http://localhost:7681 ║
║ ║
╚════════════════════════════════════════════════════════════════╝
Waits for the image to appear and shows status messages.
Web Terminal (ttyd):
Browser → ttyd (port 7681) → QEMU -nographic → LFS System
Web Screen (noVNC):
Browser → noVNC (port 6080) → websockify → VNC Server → QEMU -vnc → LFS System
Both services are defined in docker-compose.yml:
lfs-web-terminal:
- Runs ttyd web server
- Executes QEMU with serial console
- Streams to browser via WebSocket
lfs-web-screen:
- Runs VNC server (Xvnc)
- Runs noVNC/websockify
- Executes QEMU with VNC output
- Streams graphical console to browser# Check what's using the port
lsof -i :7681
# Use a different port
WEB_TERMINAL_PORT=7777 make web-terminal-
Check if container is running:
docker compose ps
-
Check logs:
docker compose logs lfs-web-terminal docker compose logs lfs-web-screen
-
Ensure image exists:
docker run --rm -v easylfs_lfs-dist:/dist alpine ls -lh /dist
Web Screen (noVNC) uses more resources than Web Terminal.
For better performance:
- Use Web Terminal for command-line work
- Use Web Screen only when you need visual output
- Allocate more memory to QEMU if needed (edit startup scripts)
The web interfaces are independent of the build pipeline. They:
- Read the built image from
lfs-distvolume (read-only) - Do not modify any build artifacts
- Can run while builds are in progress (different containers)
The LFS system boots with DHCP enabled on eth0 via /etc/sysconfig/ifconfig.eth0.
Inside QEMU's virtual network:
- QEMU provides DHCP
- LFS system gets an IP automatically
- No external network access (isolated)
You can run multiple instances with different ports:
# Terminal instance 1
WEB_TERMINAL_PORT=7681 docker compose up -d lfs-web-terminal
# Terminal instance 2 (need to edit service name in compose)
# Not supported by default - requires manual compose modificationThe web interfaces bind to 0.0.0.0 inside the container.
To access from another machine on your network:
# Find your machine's IP
ip addr show
# Access from another machine
http://<your-machine-ip>:7681 # Terminal
http://<your-machine-ip>:6080 # ScreenSecurity Note: No authentication is configured. Use only in trusted networks.
Edit the startup scripts:
services/lfs-web-terminal/scripts/start-web-terminal.shservices/lfs-web-screen/scripts/start-web-screen.sh
Then rebuild the images:
docker compose build lfs-web-terminal lfs-web-screenThe web interfaces are perfect for:
- Live Demos: Show LFS boot process to an audience
- Remote Teaching: Share browser access with students
- Testing: Quick access without local QEMU installation
- Debugging: Easy log capture via browser tools
| Feature | Web Terminal | Web Screen |
|---|---|---|
| Technology | ttyd + serial | noVNC + VNC |
| Resource Usage | Low | Medium |
| Boot Visibility | Text only | Full graphics |
| Performance | Faster | Slower |
| Best For | Command-line | Visual/GUI work |
| Browser Support | Modern browsers | Modern browsers |
- README.md - Main project documentation
- QUICKSTART.md - Quick start guide
- run-lfs.sh - Local QEMU script (no web interface)
For issues or questions:
- Check logs:
docker compose logs lfs-web-terminal lfs-web-screen - Review troubleshooting section above
- Open an issue on GitHub
Happy exploring your LFS system! 🎉