Last week, I came across an inspiring post from Ugur about enhancing the enrollment experience for Linux in Intune. It sparked an idea – what if we could take this concept further and create something that truly transforms how Linux devices are enrolled in enterprise environments? Building upon it, I set out to develop a solution that bridges the gap between Windows and Linux device setup experiences.
The traditional Linux device enrollment process has always been a bit of a challenge in enterprise environments. While Windows users enjoy a polished Enrollment Status Page (ESP) that guides them through the setup process, Linux users often face a more rudimentary experience – typically watching terminal outputs scroll by with little indication of progress or what’s happening behind the scenes. This disparity not only affects user confidence but also increases the workload on IT support teams who need to guide users through the process.
This realization led me to develop a solution that brings the familiar, professional feel of Windows ESP to the Linux world. By combining the power of GTK’s visual interface capabilities with robust shell scripting, we can create an experience that feels natural and professional, regardless of the operating system. The result is a seamless enrollment process that maintains the robustness of Linux while providing the user-friendly interface that modern enterprise users expect.
The User Experience Challenge
Without a proper setup interface, major problem user sees:
- Confusing terminal output
- No clear progress indication
- Uncertainty about whether things are working
- No idea how long the setup will take
This creates anxiety and often leads to support calls, asking “Is it supposed to do this?” or “How long will this take?”
A Better Way Forward
The solution transforms this experience into something familiar and reassuring:
- A clean, professional window shows exactly what’s happening
- Clear steps indicate progress through the setup
- Friendly icons and progress bars provide visual feedback
- Status messages explain each action in plain language
Benefits for Different Stakeholders
For End Users
- Clear understanding of the setup process
- Confidence that everything is working correctly
- Known timeframes for completion
- Professional experience matching Windows counterparts
For IT Administrators
- Fewer support calls during device setup
- Consistent setup experience across all devices
- Easy customization of setup steps
- Built-in error handling and logging
For Organizations
- Reduced setup time and support costs
- Improved user satisfaction
- Professional brand image
- Smoother transition for Windows users moving to Linux
How It Works
The solution combines two parts working together seamlessly:
- The Visual Interface
- Shows setup progress clearly
- Updates in real-time
- Provides user-friendly status messages
- Handles errors gracefully
- The Behind-the-Scenes Work
- Installs necessary software
- Configures security settings
- Sets up company policies
- Validates the installation
Making It Your Own
Organizations can easily customize the solution:
- Add or remove setup steps
- Change messaging to match company terminology
- Adjust visual styling to match brand guidelines
- Modify security settings based on requirements
Implementation Guide: Setting Up a Linux Device Enrollment Experience
Prerequisites
Before beginning the implementation, ensure your environment has:
- Ubuntu 22.04 or later
- Python 3.8 or later
- GTK3 development libraries
- Administrative access for installation
Step 1: Setting Up the Development Environment
First, prepare your system by installing required packages:
sudo apt update
sudo apt install python3 python3-gi python3-gi-cairo gir1.2-gtk-3.0 curl gpg
These packages provide the foundation for our graphical interface and system interactions.
Step 2: Creating the Project Structure
Create a new directory for your project:
mkdir linux-esp
cd linux-esp
We’ll need two main files:
esp_dialog.py: The GUI componentintune-esp-setup.sh: The installation script
Step 3: Building the User Interface
Create esp_dialog.py with our GTK interface code. Let’s break down key sections:
# Import necessary libraries
import gi
gi.require_version('Gtk', '3.0')
from gi.repository import Gtk, GLib, Gdk, Pango
The interface consists of:
- A header section explaining the process
- Step indicators with status icons
- A progress bar for overall completion
- Status text for detailed updates
Step 4: Creating the Installation Script
The installation script (intune-esp-setup.sh) handles the actual setup process:
#!/bin/bash
# Configuration section defines key variables
LOG_FILE="/var/log/intune-esp.log"
TEMP_DIR="/var/tmp/esp-setup"
STATUS_FILE="$TEMP_DIR/esp-progress"
Step 5: Testing and Deployment
Before deploying to end users:
- Test the interface:
python3 esp_dialog.py
- Test the installation script:
sudo ./intune-esp-setup.sh
- Verify logs at
/var/log/intune-esp.log
Step 6: Customization
For modifying the installation steps:
- Add the step to the Python UI:
self.steps = [
("🔍", "Your New Step"),
# existing steps...
]
- Add corresponding logic in the bash script:
update_status 45 "Performing new step..."
# Your installation commands here
- Customizing the Look and Feel – Modify the CSS in
esp_dialog.pyto match your organization’s branding:
css = b"""
.header-text {
font-size: 18px;
font-weight: bold;
color: #YOUR_COLOR;
}
"""
Step 7: Production Deployment
- Package the solution:
tar -czf linux-esp.tar.gz esp_dialog.py intune-esp-setup.sh
- Create a deployment script:
#!/bin/bash
mkdir -p /opt/company/esp
tar -xzf linux-esp.tar.gz -C /opt/company/esp
chmod +x /opt/company/esp/*.sh
End User Experience


Troubleshooting Guide
Common issues and solutions:
- UI Not Appearing
- Check DISPLAY environment variable
- Verify GTK libraries are installed
- Installation Failures
- Check
/var/log/intune-esp.log - Verify internet connectivity
- Check repository access
- Check
- Permission Issues
- Ensure script is run with sudo
- Check temp directory permissions
Best Practices
- Error Handling
- Always provide user-friendly error messages
- Log detailed errors for troubleshooting
- Implement graceful failure recovery
- Security
- Validate all inputs
- Use proper file permissions
- Clean up temporary files
- Performance
- Optimize progress updates
- Minimize UI freezing
- Handle large installations gracefully
Conclusion
The journey to create a seamless device setup experience for Linux systems represents more than just a technical solution – it’s a step toward making enterprise computing more inclusive and user-friendly across all platforms. By bringing the polished enrollment experience of Windows to Linux environments, we’re breaking down barriers and creating a more unified workplace technology experience.
This approach solves several key challenges that organizations face today:
- It eliminates the anxiety and confusion often associated with Linux device setup
- It reduces the workload on IT support teams
- It provides a professional, enterprise-grade experience regardless of operating system
- It makes the transition between platforms smoother for users and administrators alike
The solution we’ve explored combines the robustness of Linux with the user-friendly approach of modern enterprise systems. The visual interface guides users confidently through the setup process, while the powerful scripting engine handles the technical complexities behind the scenes. This duality ensures that both users and administrators get what they need: a smooth experience for users and reliable deployment for IT teams.
Remember, the goal isn’t just to replicate Windows features in Linux – it’s to create a better overall experience that makes enterprise computing more accessible and efficient for everyone. As more organizations embrace multi-platform environments, solutions like this become increasingly valuable in creating a cohesive, professional technology experience across the enterprise.
By bridging the gap between Windows and Linux setup experiences, we’re not just solving a technical challenge – we’re creating a more inclusive and user-friendly future for enterprise computing. After all, in today’s diverse technology landscape, a great user experience shouldn’t depend on which operating system you’re using.
Scripts location:
https://github.com/pathaksomesh06/macOS/blob/main/Shell%20Scripts/esp_dialog.py
https://github.com/pathaksomesh06/macOS/blob/main/Shell%20Scripts/intune-esp-setup.sh