A comprehensive TCP network print server with integrated GUI management and system tray support for Windows.
⚠️ Quick Fix: If server starts but clients can't connect, check if port 9100 is blocked by firewall. Consider using SimpleWall for easy firewall management.
Copyright (c) 2025 xtieume@gmail.com
GitHub: https://github.com/xtieume/PrinterOne
- 🖨️ TCP Network Print Server - Receives raw print data over TCP and sends to local printer
- 🖥️ Modern GUI Interface - Easy-to-use graphical interface with tabbed layout
- 🔧 System Tray Integration - Minimize to tray and control from system tray menu
- 🚀 Windows Auto-Start - Add to Windows startup for automatic server launch
- 🧪 Built-in Test Client - Test connections and send sample print jobs
- 📊 Real-time Logging - Comprehensive logging with emoji indicators for easy reading
- ⚙️ Configuration Management - Persistent settings stored in JSON format
- 🔥 Port Management - Automatic port conflict resolution
- 🌐 Network Discovery - Shows local IP addresses for easy client configuration
- Network Printing: Share local printers over TCP network
- Raw Data Printing: Print raw data from applications, scripts, or devices
- Legacy System Integration: Bridge old systems to modern printers
- Print Server: Centralized printing solution for small networks
- Windows 10/11
- Python 3.9+ (for development)
- Local printer installed
- Download the latest
PrinterOne.exefrom Releases - Run
PrinterOne.exe gui - Select your printer and configure settings
- Click "Start Server"
⚠️ Important: If clients can't connect, check firewall settings (see Troubleshooting)
# Clone the repository
git clone https://github.com/xtieume/PrinterOne.git
cd PrinterOne
# Install dependencies
pip install -r requirements.txt
# Build executable
python build.py
# Run the executable
dist/PrinterOne.exe guiFor network printing to work properly:
- Port 9100 must be accessible on your network
- Firewall should allow PrinterOne.exe
- Some minimal Windows builds may require manual firewall configuration
- Consider using SimpleWall for easy firewall management
PrinterOne.exe gui- Full graphical interface
- System tray integration
- Real-time logging
- Built-in test client
PrinterOne.exe- Command-line interface
- Suitable for servers or automated deployments
PrinterOne.exe test- Interactive connection testing
- Send test print jobs
The application uses config.json for persistent settings:
{
"printer_name": "Canon MF220 Series",
"port": 9100,
"auto_start": false,
"service_name": "PrinterOne",
"service_description": "PrinterOne - Network print server for raw print data",
"manual": true,
"minimize_to_tray": true
}| Option | Type | Description |
|---|---|---|
printer_name |
string | Target printer name (from Windows printer list) |
port |
integer | TCP port to listen on (default: 9100) |
auto_start |
boolean | Start server automatically |
minimize_to_tray |
boolean | Minimize to system tray when closing |
Once the server is running, other machines can send print jobs to:
YOUR_IP_ADDRESS:9100
Example using netcat:
echo "Hello World" | nc YOUR_IP_ADDRESS 9100Example using Python:
import socket
def send_to_printer(data, host='192.168.1.100', port=9100):
with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s:
s.connect((host, port))
s.send(data.encode())
send_to_printer("Test print job")PrinterOne requires port 9100 to be accessible for network printing. If clients can't connect after starting the server, follow these steps:
SimpleWall is a lightweight firewall manager that makes configuration easy:
- Download SimpleWall: Visit https://github.com/henrypp/simplewall
- Install and run SimpleWall
- Add PrinterOne.exe to the allowed applications list
- Enable network access for PrinterOne
- Allow port 9100 for incoming connections
# Run as Administrator
New-NetFirewallRule -DisplayName "PrinterOne Port 9100" -Direction Inbound -Protocol TCP -LocalPort 9100 -Action Allow- Open Windows Defender Firewall with Advanced Security
- Click Inbound Rules → New Rule
- Select Port → TCP → Specific Local Ports:
9100 - Allow the connection → Apply to all profiles
- Name the rule "PrinterOne Port 9100"
- Minimal Windows builds (Windows 10/11 LTSC, custom builds) may have restrictive default firewall settings
- Corporate networks may block port 9100 by policy
- Antivirus software may interfere with network connections
- Virtual machines may require additional network configuration
- Right-click tray icon for quick actions
- Start/stop server from tray menu
- Show/hide main window
- Minimize to tray on close
- Add to Windows startup registry
- Auto-start with configured printer
- Background operation support
- Real-time logging with emoji indicators
- Automatic log rotation (30-day retention)
- Separate test client logging
- File-based logging for debugging
PrinterOne/
├── server.py # Main application
├── build.py # Build script
├── requirements.txt # Python dependencies
├── config.json # Configuration file
├── PrinterOne.spec # PyInstaller spec
├── assets/ # Assets folder
│ └── screenshot.png # Application screenshot
├── dist/ # Built executables
└── logs/ # Application logs
# Install development dependencies
pip install -r requirements.txt
# Build executable
python build.py
# Clean build
python build.py --cleanpywin32- Windows API integrationpystray- System tray supportPillow- Image processingpsutil- Process managementpyinstaller- Executable packaging
Q: Server starts but clients can't connect to port 9100
A:
Solution: Install a firewall manager like SimpleWall to properly allow port 9100:
- Download and install SimpleWall
- Add PrinterOne.exe to allowed applications
- Ensure port 9100 is open for incoming connections
- Alternative: Use Windows Firewall to create an inbound rule for port 9100
Q: Tray icon not visible
A: Check Windows notification area settings to show PrinterOne icon.
Q: Port already in use
A: The server automatically kills conflicting processes. Check if another service is using port 9100.
Q: Printer not found
A: Ensure the printer is installed and accessible from Windows. Use exact printer name from Windows printer list.
For proper network printing, ensure:
- Inbound: Port 9100 TCP is open
- Application: PrinterOne.exe is allowed through firewall
- Network: Windows network discovery is enabled (optional)
Enable verbose logging by running:
PrinterOne.exe gui --debugThis project is licensed under the MIT License - see the LICENSE file for details.
Contributions are welcome! Please feel free to submit a Pull Request.
- Fork the project
- Create your feature branch (
git checkout -b feature/AmazingFeature) - Commit your changes (
git commit -m 'Add some AmazingFeature') - Push to the branch (
git push origin feature/AmazingFeature) - Open a Pull Request
- 🐛 Bug Reports: GitHub Issues
- 💡 Feature Requests: GitHub Issues
- 📧 Email: xtieume@gmail.com
If this project helped you, please consider giving it a ⭐ on GitHub!
