A lightweight, fast serial port terminal for embedded development boards on Linux
ComScope is a modern ncurses-based serial terminal designed for embedded developers. It provides an intuitive interface for communicating with microcontrollers, Arduino boards, and other serial devices with ultra-low latency and zero artifacts.
Perfect for: Arduino developers • Embedded engineers • IoT enthusiasts • UART debugging
- ⚡ Ultra-Fast: 30-50ms response time with minimal latency
- 🎨 Clean Interface: Intuitive ncurses-based terminal UI with smart navigation
- 🔌 Smart Port Detection: Discovers ports on startup and automatically refreshes when devices are connected or disconnected
- 📝 Session Logging: Record all communications with precise timestamps
- 🌈 Terminal Compatible: Works seamlessly across different terminal emulators
- ⌨️ Keyboard Optimized: Comprehensive shortcuts for power users
- 🛡️ Robust: Helpful error messages and detailed diagnostics
sudo snap install comscope --devmode
comscopegit clone https://github.com/prkshdas/ComScope.git
cd ComScope
make && ./ComScopeComScope is available on Snap Store for all Linux distributions.
⚠️ Note: On classic Linux, the snap must be installed in--devmodeto access serial ports like/dev/ttyUSB0or/dev/ttyACM0
# Install
sudo snap install comscope --devmode
# Run
comscope
# Update
sudo snap refresh comscope --devmode
# Remove
sudo snap remove comscopeSupported Architectures: x86_64, ARM 64-bit (arm64), ARM 32-bit (armhf)
- Linux OS: Ubuntu, Debian, Fedora, Arch, CentOS, RHEL, etc.
- Build tools: GCC compiler
- Libraries: libncurses development files
Ubuntu / Debian:
sudo apt-get update
sudo apt-get install build-essential libncurses-devFedora / RHEL / CentOS:
sudo dnf install gcc ncurses-develArch Linux:
sudo pacman -S base-devel ncurses# Clone repository
git clone https://github.com/prkshdas/ComScope.git
cd ComScope
# Compile
make
# Install system-wide (optional)
sudo make install
# Run from build directory
./ComScope
# Or if installed system-wide
ComScopegit clone https://github.com/prkshdas/ComScope.git
cd ComScope
make && ./ComScopecomscope # From Snap or system-wide installation
./ComScope # From build directoryComScope guides you through three simple steps:
Use arrow keys to choose your device, then press Enter:
ComScope -- Select a port
▸ /dev/ttyUSB0
/dev/ttyUSB1
/dev/ttyACM0
up/down=select Enter=connect q=quit
Controls:
- ↑/↓ — Navigate port list
- Enter — Connect to selected port
- q — Exit application
Preset for standard embedded devices (customizable):
ComScope -- Connection Settings
Port: /dev/ttyUSB0
Baud rate : 115200
Data bits : 8
Parity : None
Stop bits : 1
Tab=next left/right=change Enter=connect q=back
Default Settings:
| Parameter | Value |
|---|---|
| Baud Rate | 115200 (adjustable) |
| Data Bits | 8 |
| Parity | None |
| Stop Bits | 1 |
Controls:
- Tab — Move to next field
- ←/→ — Adjust baud rate
- Enter — Establish connection
- q — Return to port selection
Once connected, receive real-time data:
Hello from Arduino
Ready for commands
Temperature: 25.5°C
Voltage: 4.95V
Simply type and press Enter to send commands to your device.
| Command | Function |
|---|---|
| Type text + Enter | Send data to device |
| Page Up | Scroll history up |
| Page Down | Scroll history down |
| Ctrl+A | Open command menu |
| q | Quit application |
Press Ctrl+A to open the menu:
CMD: l=toggle log q=quit Esc=cancel
Menu Options:
- l — Toggle session logging on/off
- q — Exit application
- Esc — Return to terminal
Record all communications with timestamps for debugging and documentation:
- Press Ctrl+A during active session
- Press l to enable logging
- Data saves to
session.txtwith timestamps - Press Ctrl+A + l again to stop logging
Log file includes:
- Session start time
- All transmitted/received data
- Session end time
Example log:
--- Session started 2026-03-19 14:23:45 ---
Hello
OK
Temperature: 25.5
--- Session ended 2026-03-19 14:25:12 ---
- Page Up — Scroll backward through received data
- Page Down — Scroll forward through received data
- Auto-follows new data when at bottom
| Key | Action |
|---|---|
| ↑ | Navigate up / Increase baud rate |
| ↓ | Navigate down / Decrease baud rate |
| ← | Previous field / Previous option |
| → | Next field / Next option |
| Tab | Move to next configuration field |
| Enter | Select / Confirm / Connect |
| q | Quit / Go back |
| Ctrl+A | Open command menu |
| Page Up | Scroll history up |
| Page Down | Scroll history down |
| Esc | Cancel menu / Return to terminal |
Problem: snapd has no serial-port interface slots
Cause: ComScope installed with strict confinement (no hardware access)
Solution: Reinstall in developer mode:
sudo snap remove comscope
sudo snap install comscope --devmodeProblem: Permission denied when opening port
Cause: User lacks permission to access /dev/ttyUSB0 or /dev/ttyACM0
Solution 1 (Temporary):
sudo ./ComScopeSolution 2 (Permanent):
sudo usermod -aG dialout $USER
# Log out and log back inProblem: "No ports found"
Causes & Solutions:
- Device not connected → Check USB cable and connection
- Device powered off → Turn on your device
- Wrong USB port → Try different USB port on computer
- Missing drivers → Install device-specific drivers
- Manual port check:
ls -la /dev/tty*
Problem: Text appears garbled or colors are wrong
Solution:
- Verify terminal supports color output
- Try different terminal emulator (GNOME Terminal, Konsole, xterm)
- Check terminal type:
echo $TERM
Problem: Application crashes unexpectedly
Solution:
- Ensure device remains connected
- Try disconnecting and reconnecting device
- Report with terminal output on GitHub Issues
ComScope creates and manages:
| File | Purpose |
|---|---|
session.txt |
Default log file for serial communications |
.comscope_history |
Command history (planned for future release) |
make clean
makesudo make install
# Binary installed to: /usr/local/bin/ComScopesudo make uninstallmake cleanmake dist
# Creates: dist/ComScope-v1.0.0.tar.gz- Fixed Serial Settings: Data bits (8), parity (none), stop bits (1) — compatible with 99% of devices
- Scrollback Buffer: Maximum 20,000 lines of history
- Text-Only Mode: No hex/binary view (text display only)
- Single Session: No multi-session tab support
- Configurable serial parameters (data bits, parity, stop bits)
- Multiple session tabs for side-by-side monitoring
- Hex/ASCII view modes for binary data
- Search and filter functionality
- Macro/script support for automation
- Auto-baud rate detection
- Advanced serial port monitoring
- Snap Store — Multi-platform installation
- GitHub Releases — Pre-compiled binaries
- Source Code — Build from scratch
Operating System: Linux (all major distributions)
- Ubuntu, Debian, Fedora, Arch, CentOS, RHEL, etc.
Architecture: x86_64, ARM 64-bit (arm64), ARM 32-bit (armhf)
Terminal: Any POSIX-compliant terminal with ncurses support
Have a bug report or feature idea? We'd love to hear from you!
- Open an Issue — Report bugs or request features
- Submit a Pull Request — Contribute code improvements
- Share Feedback — Help us improve the project
Licensed under the MIT License — See LICENSE file for complete terms.
Permission granted to: use, modify, and distribute freely.
Prakash Das
View GitHub Profile
- ncurses Library — Terminal UI framework
- Inspired by: minicom, screen, picocom
- Special thanks: Embedded development community
- Distributed via: Snap Store
- Serial Communication Basics — Protocol overview
- Linux Serial Programming — Detailed guide
- ncurses Programming — UI development
- Snap Store Docs — Package management
- Snapcraft Examples — Reference implementations
- Check this guide — See the Troubleshooting section
- Search GitHub Issues — View existing issues
- Device Configuration — Verify your device uses standard serial settings
- Snap Help — Consult Snap documentation
Made with ❤️ for embedded developers on Linux 🐧
Last Updated: March 2026