{"id":50426310,"url":"https://github.com/buzzqw/python_connection_manager","last_synced_at":"2026-05-31T11:00:47.432Z","repository":{"id":349489343,"uuid":"1202553071","full_name":"buzzqw/Python_Connection_Manager","owner":"buzzqw","description":"Connection manager for ssh / sftp / ftp / rdp / vnc ...","archived":false,"fork":false,"pushed_at":"2026-05-31T09:26:23.000Z","size":12905,"stargazers_count":2,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"master","last_synced_at":"2026-05-31T10:15:12.346Z","etag":null,"topics":["connection-manager","ftp-client","manager","mosh","python3","rdp","rdp-client","remmina","remote-control","remote-desktop","sftp-client","ssh","ssh-client","vnc-viewer","winscp"],"latest_commit_sha":null,"homepage":"","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"eupl-1.2","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/buzzqw.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2026-04-06T06:25:08.000Z","updated_at":"2026-05-31T09:26:09.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/buzzqw/Python_Connection_Manager","commit_stats":null,"previous_names":["buzzqw/python_connection_manager"],"tags_count":19,"template":false,"template_full_name":null,"purl":"pkg:github/buzzqw/Python_Connection_Manager","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/buzzqw%2FPython_Connection_Manager","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/buzzqw%2FPython_Connection_Manager/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/buzzqw%2FPython_Connection_Manager/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/buzzqw%2FPython_Connection_Manager/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/buzzqw","download_url":"https://codeload.github.com/buzzqw/Python_Connection_Manager/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/buzzqw%2FPython_Connection_Manager/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":33728391,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-05-31T02:00:06.040Z","response_time":95,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["connection-manager","ftp-client","manager","mosh","python3","rdp","rdp-client","remmina","remote-control","remote-desktop","sftp-client","ssh","ssh-client","vnc-viewer","winscp"],"created_at":"2026-05-31T11:00:27.693Z","updated_at":"2026-05-31T11:00:47.421Z","avatar_url":"https://github.com/buzzqw.png","language":"Python","funding_links":["https://www.paypal.com/cgi-bin/webscr?cmd=_donations\u0026business=azanzani@gmail.com\u0026item_name=Support+PCM+Project"],"categories":[],"sub_categories":[],"readme":"# PCM — Python Connection Manager\n\n[![License: EUPL-1.2](https://img.shields.io/badge/License-EUPL--1.2-blue.svg)](EUPL-1.2%20EN.txt)\n[![Python 3.10+](https://img.shields.io/badge/Python-3.10%2B-blue.svg)](https://www.python.org/)\n[![GTK3](https://img.shields.io/badge/UI-GTK3-green.svg)](https://docs.gtk.org/gtk3/)\n[![Wayland](https://img.shields.io/badge/Wayland-nativo-purple.svg)](#note-wayland)\n[![Platform](https://img.shields.io/badge/Platform-Linux%20%7C%20FreeBSD-lightgrey.svg)](#installazione)\n[![Build](https://github.com/buzzqw/Python_Connection_Manager/actions/workflows/build.yml/badge.svg)](https://github.com/buzzqw/Python_Connection_Manager/actions/workflows/build.yml)\n[![Donate](https://img.shields.io/badge/Donate-PayPal-00457C.svg)](https://www.paypal.com/cgi-bin/webscr?cmd=_donations\u0026business=azanzani@gmail.com\u0026item_name=Support+PCM+Project)\n\n# PCM — Python Connection Manager 🇬🇧\n\n\u003e **The Linux alternative to MobaXterm** — everything in one window: SSH, RDP, VNC, SFTP, FTP, Telnet, Mosh, Serial.  \n\u003e Written in Python with GTK3 and native VTE terminal. Works on **X11 and Wayland** without XWayland.\n\n---\n\n## Available versions\n\n| Version | Folder | Framework | Terminal | Wayland | Status |\n|---|---|---|---|---|---|\n| **GTK3** | [`gtk3/`](./gtk3/) | GTK3 (PyGObject) | Native VTE | ✅ Native | **Active development** |\n| PyQt6 | [`pyqt6/`](./pyqt6/) | PyQt6 | xterm | XWayland required | Critical bugfixes only |\n\n\u003e The [`pyqt6/`](./pyqt6/) folder contains the legacy version (critical bugfixes only); new installations should prefer GTK3.\n\n---\n\n## Why PCM?\n\n| | PCM | MobaXterm | Remmina | Asbru | mRemoteNG |\n|---|---|---|---|---|---|\n| SSH with integrated terminal | ✅ Native VTE | ✅ | ❌ RDP/VNC only | ✅ xterm | ✅ |\n| RDP + VNC + SSH + FTP in one tool | ✅ | ✅ | partial | ✅ | ✅ |\n| Integrated SFTP/FTP browser | ✅ dual-pane | ✅ dual-pane | ❌ | partial | ❌ |\n| Directory sync local↔remote | ✅ | ✅ | ❌ | ❌ | ❌ |\n| Graphical SSH tunnels | ✅ | ✅ | ❌ | ✅ | ❌ |\n| Broadcast to multiple terminals | ✅ | ✅ MultiExec | ❌ | ✅ cluster | ❌ |\n| Live system monitor panel | ✅ | ✅ | ❌ | ❌ | ❌ |\n| KeePassXC integration | ✅ | ❌ | ❌ | ❌ | ❌ |\n| Native Wayland (no XWayland) | ✅ | ❌ Windows only | partial | ❌ | ❌ Linux |\n| Password NEVER on command line | ✅ autotyped into terminal | ✅ | ❌ | ⚠️ expect | — |\n| Session restore on startup | ✅ | ✅ | ❌ | partial | ❌ |\n| Command line launch (URI) | ✅ | ❌ | ❌ | ❌ | ❌ |\n| Human-readable config | ✅ JSON | ❌ proprietary | complex XML | YAML | XML |\n| Platform | Linux / FreeBSD | Windows only | Linux | Linux | Windows |\n| License | EUPL-1.2 | Proprietary | GPL-2 | GPL-3 | GPL-2 |\n\n---\n\n## Supported protocols\n\n**SSH · SFTP · FTP/FTPS · RDP · VNC · Telnet · Mosh · Serial · Exec · SSH Tunnel**\n\n---\n\n## Key features\n\n### 🖥 Protocols — everything in one window\n\n| Protocol | How it opens | Strengths |\n|---|---|---|\n| **SSH** | Internal VTE tab or external terminal | Jump Host, X11, Agent Forward, VPN pre-cmd, macros |\n| **SFTP** | Integrated dual-pane browser | Drag \u0026 drop, transfer queue with progress/speed/ETA, rename, **directory sync local↔remote** |\n| **FTP / FTPS** | Integrated browser or file manager | Explicit TLS, PASV mode |\n| **RDP** | Internal panel or external window | xfreerdp3/xfreerdp/rdesktop, multi-monitor |\n| **VNC** | Native gtk-vnc or external client | Scale, grab input, screenshot |\n| **Telnet** | Internal VTE tab | — |\n| **Mosh** | Internal VTE tab | Resilient to disconnections |\n| **Serial** | Internal VTE tab | Baud, parity, stop bits configurable |\n| **Exec** | Internal VTE tab | Any shell command in a tab |\n| **SSH Tunnel** | Background, managed graphically | SOCKS -D, local -L, remote -R |\n\n### 🔐 Security — above average\n\n- **Password never on command line**: PCM types the password directly into the terminal when the server asks for it, just like a user would. No `sshpass`, nothing visible in `ps aux`.\n- **SSH_ASKPASS fallback** for OpenSSH ≥ 8.4: the helper script is created in `~/.cache/pcm/` (permissions `0700`, not in `/tmp`) and deleted after 5 seconds. The password is passed via environment variable only, never written to the file.\n- **Command injection protection**: all profile parameters (host, port, user, device, etc.) are sanitised with `shlex.quote()` before use in shell commands. Pre-commands run with `shell=False`.\n- **Protected credential files** (`connections.json`, `pcm_settings.json`, `audit_log.json`): written with permissions `0600` — readable only by the owner.\n- **SSH host key verification enabled**: `StrictHostKeyChecking=yes` on all connections. The SFTP browser uses paramiko `RejectPolicy` with automatic `known_hosts` loading.\n- **AES-256 encryption** (Fernet + PBKDF2-SHA256, 480k iterations): usernames and passwords in `connections.json` encrypted with a master password. The key never touches the disk. The verification token uses a random canary to prevent offline dictionary attacks.\n- **Audit log with hash chaining**: each entry includes the SHA-256 of the previous entry — tampering is detectable.\n- **KeePassXC integration** via Browser Protocol v2 (NaCl box): find and fill credentials directly from the open KeePassXC database — no browser needed.\n- **SSH key management**: generate, copy to server, display public key.\n- **Agent Forwarding** (`-A`): propagates ssh-agent keys for multiple hops without copying private keys.\n\n### 📊 SSH info panel (right sidebar)\n\nAvailable for every SSH session, configurable per-session in the **Panels tab** of the session dialog. Opens alongside the terminal without a new window.\n\n| Section | What it shows |\n|---|---|\n| **System Overview** | CPU % (progress bar) and RAM usage (used / total), updated every 2 seconds |\n| **Running Processes** | Sortable table (click any column header) with PID, CPU%, Mem%, Command — kill button per process |\n| **Disk Usage** | One card per partition: mount point, device, used/total, free space, progress bar |\n| **Network Usage** | Download/Upload speed per second with dual-line sparkline (60-sample history), interface selector |\n| **Logs** | Streaming `journalctl` or `tail -f` viewer with regex filter, level colouring and auto-scroll |\n\nThe panel reuses the monitor's existing SSH connection — zero extra TCP connections.  \nEach section can be individually enabled or disabled per session.\n\n### 💻 Advanced terminal\n\n- **Native VTE** — zero X11 dependencies, works on pure Wayland\n- **Vertical/horizontal split** — multiple sessions side by side in one window\n- **Themes**: Dracula, Nord, Gruvbox, Solarized Dark/Light, One Dark, Monokai, Cobalt, Tomorrow Night and more\n- **Per-session macros** — commands sent with one click from the sidebar\n- **Terminal broadcast** — send the same text to all selected terminals simultaneously (ideal for clusters)\n- **Multi-exec** — run a command across multiple sessions in sequence\n- File output logging per session (via `script(1)`)\n- Configurable or infinite scrollback per session\n- Local pre-command: activate VPN or mount volume before opening the connection\n\n### 📁 Session management\n\n- Organized by **group** with live search bar\n- **Active session indicator** — green dot ● next to session names with an open connection\n- **Recent sessions** section at the top of the sidebar: last 20 sessions with timestamps\n- **Quick Connect**: `user@host:port` from the toolbar — connects without saving a profile\n- Double-click to connect, right-click for rich context menu on both the **session list** and the **open tab** — including \"View logs…\" and \"System monitor…\" for SSH sessions\n- **TCP Ping** from the sidebar — checks reachability on the configured port (ms)\n- **Session restore** — optionally save open sessions on close and reopen them automatically at the next startup (Settings → General)\n- Duplicate, edit, delete, export `.sh` script to reopen from terminal\n- **Import** from: Remmina (`.remmina`), Remote Desktop Manager (`.rdm`/`.json`), PuTTY (`~/.putty/sessions/`), `~/.ssh/config`\n\n### 🛠 Integrated tools\n\n- **Graphical SSH tunnels** — start, stop, monitor background tunnels; **toolbar indicator** with quick popup to stop tunnels without opening the full manager\n- **SFTP directory sync** — compare a local folder with a remote one (by size + modification time), review the diff table with per-file direction control, execute using the existing transfer queue with progress/speed/ETA\n- **SFTP progress bar** — the lateral SFTP panel shows a real-time progress bar during upload and download (via paramiko callback)\n- **Local FTP server** (pyftpdlib) — expose a local folder via FTP/FTPS in one click\n- **Global variables** `{NAME}` — reusable in commands across all sessions\n- **Wake-on-LAN** — sends magic packet before connecting\n- **Audit log** — connection history with timestamp, duration, protocol, status; exportable to CSV\n- **Dependency checker** — automatically checks which tools are installed\n\n### 🌍 Internationalization\n\n5 complete languages: 🇮🇹 Italiano · 🇬🇧 English · 🇩🇪 Deutsch · 🇫🇷 Français · 🇪🇸 Español  \nInstant language change from settings without restart.\n\n---\n\n## Screenshots — GTK3 version (active development)\n\n\u003ctable\u003e\n\u003ctr\u003e\n\u003ctd colspan=\"2\"\u003e\u003cimg src=\"immagini/pcm66.png\" width=\"780\"/\u003e\u003cbr\u003e\u003cem\u003eMain window: group sidebar with Recent section, embedded SSH terminal tab open, connection status bar\u003c/em\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/table\u003e\n\n### New session dialog — SSH\n\n| | |\n|---|---|\n| ![SSH Connection GTK3](immagini/pcm82.png) | ![SSH Terminal GTK3](immagini/pcm83.png) |\n| *Connection tab — host, port, user, password, private key, SSH key management (generate ed25519/RSA, copy to server), KeePassXC integration* | *Terminal tab — theme, font, size, scrollback, close confirmation, paste warning, file logging, SSH open mode* |\n\n| | |\n|---|---|\n| ![SSH Advanced GTK3](immagini/pcm84.png) | ![SSH Tunnel tab GTK3](immagini/pcm63.png) |\n| *Advanced tab — X11 forwarding, compression, keepalive, strict host, auto-open SFTP browser, Agent Forwarding (-A), startup command, jump host, Wake-on-LAN, local pre-command* | *Tunnel tab — SOCKS proxy (-D) or port forwarding, local port, remote host and port* |\n\n| | |\n|---|---|\n| ![SSH Panels tab GTK3](immagini/pcm86.png) | ![SSH Macros GTK3](immagini/pcm64.png) |\n| *Panels tab — enable/disable per-session: SFTP side panel, Info panel sections (CPU/Memory, Processes with kill, Disk, Network sparkline, Log streaming)* | *Macros tab — per-session quick commands (name → command), sent to the terminal with one click from the sidebar* |\n\n| | |\n|---|---|\n| ![SSH Notes GTK3](immagini/pcm65.png) | |\n| *Notes tab — free-text field for annotations attached to the session* | |\n\n---\n\n### New session dialog — RDP\n\n| | |\n|---|---|\n| ![RDP Connection GTK3](immagini/pcm69.png) | ![RDP Advanced GTK3](immagini/pcm70.png) |\n| *Connection tab — host, port 3389, user, KeePassXC integration* | *Advanced tab — xfreerdp3 client, NTLM/Kerberos auth, domain, fullscreen, clipboard, local folders, monitor, open mode* |\n\n---\n\n### New session dialog — VNC and FTP/SFTP\n\n| | |\n|---|---|\n| ![VNC Connection GTK3](immagini/pcm71.png) | ![VNC Advanced GTK3](immagini/pcm72.png) |\n| *Connection tab — host, port 5900, user, KeePassXC integration* | *Advanced tab — open with embedded gtk-vnc or external client, color depth, quality* |\n\n| | |\n|---|---|\n| ![FTP/SFTP Connection GTK3](immagini/pcm68.png) | ![Telnet Connection GTK3](immagini/pcm67.png) |\n| *FTP/SFTP connection tab — host, port, user, password, private key, sub-protocol (SFTP/FTP/FTPS), SSH key management, KeePassXC* | *Telnet connection tab — host, port 23, user, password, KeePassXC integration* |\n\n---\n\n### New session dialog — Mosh, Serial, Exec\n\n| | |\n|---|---|\n| ![Mosh Connection GTK3](immagini/pcm73.png) | ![Serial GTK3](immagini/pcm74.png) |\n| *Mosh connection — host, SSH port, user, password, private key* | *Serial connection — device (/dev/ttyUSB0), baud rate, data bits, parity, stop bits* |\n\n| | |\n|---|---|\n| ![Exec Connection GTK3](immagini/pcm75.png) | |\n| *Exec protocol — run any shell command in a dedicated VTE tab* | |\n\n---\n\n### Integrated SFTP dual-pane browser\n\n\u003ctable\u003e\n\u003ctr\u003e\n\u003ctd colspan=\"2\"\u003e\u003cimg src=\"immagini/pcm76.png\" width=\"780\"/\u003e\u003cbr\u003e\u003cem\u003eIntegrated SFTP browser — local and remote panels side by side, upload/download, transfer queue, drag \u0026amp; drop\u003c/em\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/table\u003e\n\n---\n\n### Integrated tools\n\n| | |\n|---|---|\n| ![Session context menu GTK3](immagini/pcm85.png) | ![SSH Monitor panel GTK3](immagini/pcm87.png) |\n| *Session context menu — Connect, Edit, Duplicate, Delete, Open SFTP/FTP browser, View logs, System monitor, Ping* | *SSH Info panel — System Overview (CPU/RAM), Running Processes (sortable, kill button), Disk Usage, Network sparkline, Logs tab* |\n\n| | |\n|---|---|\n| ![SSH Tunnel Manager GTK3](immagini/pcm78.png) | ![App Menu GTK3](immagini/pcm77.png) |\n| *SSH Tunnel Manager — tunnel list with type, host, ports, status; Add/Edit/Delete/Start/Stop buttons; integrated output log* | *Application menu — Tunnel Manager, Broadcast, Global variables, Local FTP server, Import, Audit log, KeePassXC, Dependencies* |\n\n| | |\n|---|---|\n| ![Quick Connect GTK3](immagini/pcm81.png) | ![Unlock Credentials GTK3](immagini/pcm80.png) |\n| *Quick Connect — instant connection without saving a profile, choose protocol, host, port, user, password* | *Credential unlock — master password to decrypt saved credentials (AES-256)* |\n\n| | |\n|---|---|\n| ![Import Sessions GTK3](immagini/pcm79.png) | |\n| *Import sessions — from Remmina (.remmina), Remote Desktop Manager (.rdm/.json), PuTTY, ~/.ssh/config* | |\n\n---\n\n## Command line launch\n\nPCM accepts a URI on startup or while already running — in the latter case the connection opens as a new tab in the existing window, without prompting for the master password again.\n\n```bash\n# Open saved session \"jiraapp\" (looks up by name, then by hostname)\npython3 PCM.py ssh://jiraapp\n\n# Ad-hoc connection (no saved session needed)\npython3 PCM.py ssh://admin@192.168.1.10:2222\n```\n\nSupported schemes: `ssh://` `rdp://` `vnc://` `sftp://` `ftp://` `ftps://` `telnet://` `mosh://`  \nFor the full reference with all examples, see the built-in manual (**Help** menu).\n\n---\n\n## Download\n\nThe latest release is available on [**GitHub Releases**](https://github.com/buzzqw/Python_Connection_Manager/releases/latest) with:\n\n| Format | Notes |\n|---|---|\n| **AppImage** (`PCM-N-x86_64.AppImage`) | Self-contained, no installation needed. Requires `libgtk-3-0` + `libvte-2.91-0` on the system. |\n| `.deb` | Debian / Ubuntu / Linux Mint |\n| `.tar.gz` / `.zip` | Any distribution |\n\n---\n\n## Quick install (GTK3 — recommended)\n\n### AppImage (easiest)\n\n```bash\nchmod +x PCM-*-x86_64.AppImage\n./PCM-*-x86_64.AppImage\n```\n\nConfiguration and sessions are stored in `~/.config/pcm/` (persistent across updates).\n\n### From source\n\n```bash\ngit clone https://github.com/buzzqw/Python_Connection_Manager.git\ncd Python_Connection_Manager\nbash setup.sh\ncd gtk3\npython3 PCM.py\n```\n\n\u003e The `setup.sh` script detects the distribution and installs system dependencies (GTK3, VTE, gtk-vnc) and Python packages (paramiko, cryptography, pyftpdlib). It also creates a `.desktop` launcher in the application menu.\n\n```bash\n# Check dependencies only, without installing:\nbash setup.sh --check\n```\n\n### Manual install by distribution\n\n\u003cdetails\u003e\n\u003csummary\u003e\u003cb\u003eDebian / Ubuntu / Linux Mint\u003c/b\u003e\u003c/summary\u003e\n\n```bash\nsudo apt install \\\n    python3 python3-gi python3-gi-cairo \\\n    gir1.2-gtk-3.0 gir1.2-vte-2.91 gir1.2-gtk-vnc-2.0 \\\n    openssh-client mosh freerdp3-x11 tigervnc-viewer \\\n    xdotool xdg-utils wakeonlan\n\npip install --user cryptography paramiko pyftpdlib\n```\n\u003c/details\u003e\n\n\u003cdetails\u003e\n\u003csummary\u003e\u003cb\u003eArch Linux\u003c/b\u003e\u003c/summary\u003e\n\n```bash\nsudo pacman -Sy --needed \\\n    python python-gobject gtk3 vte3 gtk-vnc \\\n    openssh mosh freerdp tigervnc xdotool xdg-utils wol \\\n    python-cryptography python-paramiko python-pyftpdlib\n```\n\u003c/details\u003e\n\n\u003cdetails\u003e\n\u003csummary\u003e\u003cb\u003eFedora\u003c/b\u003e\u003c/summary\u003e\n\n```bash\nsudo dnf install \\\n    python3-gobject gtk3 vte291 gtk-vnc2 \\\n    openssh-clients mosh freerdp tigervnc xdotool xdg-utils\n\npip install --user cryptography paramiko pyftpdlib\n```\n\u003c/details\u003e\n\n\u003cdetails\u003e\n\u003csummary\u003e\u003cb\u003eopenSUSE\u003c/b\u003e\u003c/summary\u003e\n\n```bash\nsudo zypper install \\\n    python3-gobject typelib-1_0-Gtk-3_0 \\\n    typelib-1_0-Vte-2.91 typelib-1_0-GtkVnc-2_0 \\\n    openssh mosh freerdp tigervnc xdotool xdg-utils\n\npip install --user cryptography paramiko pyftpdlib\n```\n\u003c/details\u003e\n\n\u003cdetails\u003e\n\u003csummary\u003e\u003cb\u003eFreeBSD\u003c/b\u003e\u003c/summary\u003e\n\n```bash\nsudo pkg install \\\n    python3 py311-gobject gtk3 vte3 gtk-vnc \\\n    mosh freerdp3 tigervnc-viewer xdotool wakeonlan \\\n    py311-cryptography py311-paramiko py311-pyftpdlib\n```\n\u003c/details\u003e\n\n### PyQt6 — legacy version\n\n\u003e Critical bugfixes only. See [`pyqt6/README.md`](pyqt6/README.md) for installation instructions.\n\n---\n\n## Optional dependencies\n\n| Package | Feature enabled |\n|---|---|\n| `gir1.2-gtk-vnc-2.0` / `gtk-vnc` | Native embedded VNC (recommended) |\n| `tigervnc-viewer` / `xtightvncviewer` | VNC via external client (fallback) |\n| `freerdp3-x11` / `xfreerdp` | RDP |\n| `mosh` | Mosh connections |\n| `picocom` / `minicom` | Serial ports |\n| `xdotool` | RDP in internal panel (requires XWayland) |\n| `wakeonlan` / `wol` | Wake-on-LAN |\n| `keepassxc` | KeePassXC integration |\n| `pynacl` | KeePassXC Browser Protocol v2 encryption |\n\n---\n\n## Wayland notes\n\nGTK3 + VTE work **natively on Wayland** without XWayland.\n\nThe only exception is the **RDP internal panel** mode (embedding xfreerdp via xdotool), which requires XWayland. For pure Wayland use, set RDP to **\"External window\"**.\n\nThe `gtk-vnc` VNC viewer works natively on Wayland.\n\n---\n\n## Configuration files\n\n| File | Contents |\n|---|---|\n| `gtk3/connections.json` | Session profiles — human-readable JSON, editable by hand. Permissions `0600`. |\n| `gtk3/pcm_settings.json` | Global settings, shortcuts, recent sessions. Permissions `0600`. |\n| `gtk3/audit_log.json` | Connection audit log with SHA-256 hash chaining. Permissions `0600`. |\n| `~/.local/share/pcm/logs/` | Terminal output logs (default), path configurable |\n| `~/.cache/pcm/` | SSH_ASKPASS temp files (dir `0700`, deleted after 5s) |\n\n\u003e **AppImage**: when running as AppImage, the three JSON files above are stored in `~/.config/pcm/` (the AppImage filesystem is read-only). Configuration persists across AppImage updates.\n\n---\n\n## Support the project\n\nIf you find PCM useful and want to thank the developer, you can buy him a coffee via PayPal. Any contribution is greatly appreciated and helps keep the project alive!\n\n[![Donate with PayPal](https://img.shields.io/badge/Donate-PayPal-blue.svg)](https://www.paypal.com/cgi-bin/webscr?cmd=_donations\u0026business=azanzani@gmail.com\u0026item_name=Support+PCM+Project)\n\n*Thank you so much!*\n\n---\n\n## Author\n\n**Andres Zanzani** — license [EUPL-1.2](EUPL-1.2%20EN.txt)\n\n[![GitHub](https://img.shields.io/badge/GitHub-buzzqw%2FPython__Connection__Manager-blue?logo=github)](https://github.com/buzzqw/Python_Connection_Manager)\n\n---\n---\n\n# PCM — Python Connection Manager 🇮🇹\n\n\u003e **L'alternativa Linux a MobaXterm** — tutto in una finestra: SSH, RDP, VNC, SFTP, FTP, Telnet, Mosh, Seriale.  \n\u003e Scritto in Python con GTK3 e terminale VTE nativo. Funziona su **X11 e Wayland** senza XWayland.\n\n\u003e 📦 **Download ultima versione** — disponibile su [**GitHub Releases**](https://github.com/buzzqw/Python_Connection_Manager/releases/latest): AppImage (pronto all'uso), pacchetto `.deb` per Debian/Ubuntu, archivio `.tar.gz` e `.zip`.\n---\n\n## Versioni disponibili\n\n| Versione | Cartella | Framework | Terminale | Wayland | Stato |\n|---|---|---|---|---|---|\n| **GTK3** | [`gtk3/`](./gtk3/) | GTK3 (PyGObject) | VTE nativo | ✅ Nativo | **Sviluppo attivo** |\n| PyQt6 | [`pyqt6/`](./pyqt6/) | PyQt6 | xterm | XWayland richiesto | Solo bugfix critici |\n\n\u003e La cartella [`pyqt6/`](./pyqt6/) contiene la versione legacy (solo bugfix critici); le nuove installazioni devono preferire GTK3.\n\n---\n\n## Perché PCM?\n\n| | PCM | MobaXterm | Remmina | Asbru | mRemoteNG |\n|---|---|---|---|---|---|\n| SSH con terminale integrato | ✅ VTE nativo | ✅ | ❌ solo RDP/VNC | ✅ xterm | ✅ |\n| RDP + VNC + SSH + FTP in un tool | ✅ | ✅ | parziale | ✅ | ✅ |\n| Browser SFTP/FTP integrato | ✅ dual-pane | ✅ dual-pane | ❌ | parziale | ❌ |\n| Sincronizzazione directory locale↔remota | ✅ | ✅ | ❌ | ❌ | ❌ |\n| Tunnel SSH grafici | ✅ | ✅ | ❌ | ✅ | ❌ |\n| Broadcast a più terminali | ✅ | ✅ MultiExec | ❌ | ✅ cluster | ❌ |\n| Pannello monitor sistema live | ✅ | ✅ | ❌ | ❌ | ❌ |\n| KeePassXC integrato | ✅ | ❌ | ❌ | ❌ | ❌ |\n| Wayland nativo (no XWayland) | ✅ | ❌ solo Windows | parziale | ❌ | ❌ Linux |\n| Password MAI sulla command line | ✅ automaticamente digitata nel terminale | ✅ | ❌ | ⚠️ expect | — |\n| Ripristino sessioni all'avvio | ✅ | ✅ | ❌ | parziale | ❌ |\n| Avvio da riga di comando (URI) | ✅ | ❌ | ❌ | ❌ | ❌ |\n| Configurazione leggibile | ✅ JSON | ❌ proprietario | XML complesso | YAML | XML |\n| Piattaforma | Linux / FreeBSD | solo Windows | Linux | Linux | Windows |\n| Licenza | EUPL-1.2 | Proprietario | GPL-2 | GPL-3 | GPL-2 |\n\n---\n\n## Protocolli supportati\n\n**SSH · SFTP · FTP/FTPS · RDP · VNC · Telnet · Mosh · Seriale · Exec · SSH Tunnel**\n\n---\n\n## Funzionalità principali\n\n### 🖥 Protocolli — tutto in una finestra\n\n| Protocollo | Come si apre | Punti di forza |\n|---|---|---|\n| **SSH** | Tab VTE interno o terminale esterno | Jump Host, X11, Agent Forward, pre-cmd VPN, macro |\n| **SFTP** | Browser dual-pane integrato | Drag \u0026 drop, coda trasferimenti con progresso/velocità/ETA, rinomina, **sincronizzazione directory locale↔remota** |\n| **FTP / FTPS** | Browser integrato o file manager | TLS esplicito, modalità PASV |\n| **RDP** | Pannello interno o finestra esterna | xfreerdp3/xfreerdp/rdesktop, multi-monitor |\n| **VNC** | gtk-vnc nativo o client esterno | Scala, grab input, screenshot |\n| **Telnet** | Tab VTE interno | — |\n| **Mosh** | Tab VTE interno | Resistente a disconnessioni |\n| **Seriale** | Tab VTE interno | Baud, parità, stop bit configurabili |\n| **Exec** | Tab VTE interno | Qualsiasi comando shell in una scheda |\n| **SSH Tunnel** | Background gestito graficamente | SOCKS -D, locale -L, remoto -R |\n\n### 🔐 Sicurezza — sopra la media\n\n- **Password mai sulla command line**: PCM digita la password direttamente nel terminale quando il server la richiede, esattamente come farebbe un utente. Nessun `sshpass`, nessun argomento visibile in `ps aux`.\n- **Fallback SSH_ASKPASS** per OpenSSH ≥ 8.4: lo script helper è creato in `~/.cache/pcm/` (permessi `0700`, non in `/tmp`) ed eliminato dopo 5 secondi. La password è passata solo via variabile d'ambiente, mai scritta nel file.\n- **Protezione command injection**: tutti i parametri dei profili (host, porta, utente, device, ecc.) sono sanificati con `shlex.quote()` prima di essere usati nei comandi shell. Il pre-comando è eseguito con `shell=False`.\n- **File credenziali protetti** (`connections.json`, `pcm_settings.json`, `audit_log.json`): scritti con permessi `0600` — leggibili solo dal proprietario.\n- **Verifica host key SSH attiva**: `StrictHostKeyChecking=yes` su tutte le connessioni. Il browser SFTP usa `RejectPolicy` di paramiko con caricamento automatico di `known_hosts`.\n- **Cifratura AES-256** (Fernet + PBKDF2-SHA256, 480k iterazioni): utenti e password in `connections.json` cifrati con password master. La chiave non tocca mai il disco. Il token di verifica usa un canary casuale per prevenire attacchi a dizionario offline.\n- **Audit log con hash chaining**: ogni voce include l'SHA-256 della voce precedente — le manomissioni sono rilevabili.\n- **KeePassXC integrato** via Browser Protocol v2 (NaCl box): cerca e compila credenziali direttamente dal database KeePassXC aperto — nessun browser necessario.\n- **Gestione chiavi SSH**: genera, copia sul server, visualizza la chiave pubblica.\n- **Agent Forwarding** (`-A`): propaga le chiavi ssh-agent per hop multipli senza copiare le chiavi private.\n\n### 📊 Pannello informazioni sessione SSH (sidebar destra)\n\nDisponibile per ogni sessione SSH, configurabile per-sessione nel **tab Pannelli** del dialogo sessione. Si apre a fianco del terminale senza aprire nuove finestre.\n\n| Sezione | Cosa mostra |\n|---|---|\n| **System Overview** | CPU % (barra) e utilizzo RAM (usato / totale), aggiornati ogni 2 secondi |\n| **Running Processes** | Tabella ordinabile per colonna (PID, CPU%, Mem%, Command) — pulsante kill per processo |\n| **Disk Usage** | Una card per partizione: mount point, device, usato/totale, spazio libero, barra progresso |\n| **Network Usage** | Velocità download/upload in byte/s con sparkline doppia (60 campioni), selettore interfaccia |\n| **Logs** | Streaming `journalctl` o `tail -f` con filtro regex, colorazione per livello, auto-scroll |\n\nIl pannello riusa la connessione SSH del monitor — nessuna connessione TCP aggiuntiva.  \nOgni sezione è abilitabile o disabilitabile individualmente per sessione.\n\n### 💻 Terminale avanzato\n\n- **VTE nativo** — zero dipendenze X11, funziona su Wayland puro\n- **Split verticale/orizzontale** — più sessioni affiancate nella stessa finestra\n- **Temi**: Dracula, Nord, Gruvbox, Solarized Dark/Light, One Dark, Monokai, Cobalt, Tomorrow Night e altri\n- **Macro per sessione** — comandi inviati con un clic dalla sidebar\n- **Broadcast terminali** — invia lo stesso testo a tutti i terminali selezionati contemporaneamente (ideale per cluster)\n- **Multi-exec** — esegui un comando su più sessioni in sequenza\n- Log output su file per ogni sessione (con `script(1)`)\n- Scrollback configurabile o infinito per sessione\n- Pre-comando locale: attiva VPN o monta volume prima di aprire la connessione\n\n### 📁 Gestione sessioni\n\n- Organizzate per **gruppo** con barra di ricerca live\n- **Indicatore sessioni attive** — pallino verde ● accanto al nome delle sessioni con connessione aperta\n- **Sezione Recenti** in cima alla sidebar: ultime 20 sessioni con timestamp\n- **Quick Connect**: `utente@host:porta` dalla toolbar — si connette senza salvare un profilo\n- Doppio clic per connettere, tasto destro per menu contestuale ricco sia **sull'elenco sessioni** che sui **tab aperti** — include \"Visualizza log…\" e \"Monitor sistema…\" per sessioni SSH\n- **Ping TCP** dalla sidebar — verifica raggiungibilità sulla porta configurata (ms)\n- **Ripristino sessioni** — salva opzionalmente le sessioni aperte alla chiusura e le riapre automaticamente al prossimo avvio (Impostazioni → Generale)\n- Duplica, modifica, elimina, esporta script `.sh` per riaprire da terminale\n- **Import** da: Remmina (`.remmina`), Remote Desktop Manager (`.rdm`/`.json`), PuTTY (`~/.putty/sessions/`), `~/.ssh/config`\n\n### 🛠 Strumenti integrati\n\n- **Tunnel SSH** grafici — avvia, ferma, monitora tunnel in background; **indicatore nella toolbar** con popup rapido per fermare i tunnel senza aprire il gestore\n- **Sincronizzazione directory SFTP** — confronta cartella locale con cartella remota (per dimensione + data modifica), rivedi la tabella diff con controllo della direzione per file, esegui usando la coda trasferimenti esistente con progresso/velocità/ETA\n- **Barra progresso SFTP** — il pannello SFTP laterale mostra una barra di progresso in tempo reale durante upload e download (tramite callback paramiko)\n- **Server FTP locale** (pyftpdlib) — espone una cartella locale via FTP/FTPS in un clic\n- **Variabili globali** `{NOME}` — riutilizzabili nei comandi di tutte le sessioni\n- **Wake-on-LAN** — invia magic packet prima di connettersi\n- **Audit log** — storico connessioni con timestamp, durata, protocollo, stato; esportabile CSV\n- **Verifica dipendenze** — controlla automaticamente quali tool sono installati\n\n### 🌍 Internazionalizzazione\n\n5 lingue complete: 🇮🇹 Italiano · 🇬🇧 English · 🇩🇪 Deutsch · 🇫🇷 Français · 🇪🇸 Español  \nCambio lingua immediato dalle impostazioni senza riavvio.\n\n---\n\n## Screenshot — Versione GTK3 (sviluppo attivo)\n\n\u003ctable\u003e\n\u003ctr\u003e\n\u003ctd colspan=\"2\"\u003e\u003cimg src=\"immagini/pcm66.png\" width=\"780\"/\u003e\u003cbr\u003e\u003cem\u003eFinestra principale: sidebar con gruppi e sezione Recenti, terminale SSH integrato aperto, status bar connessione\u003c/em\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/table\u003e\n\n### Dialogo nuova sessione — SSH\n\n| | |\n|---|---|\n| ![SSH Connection GTK3](immagini/pcm82.png) | ![SSH Terminal GTK3](immagini/pcm83.png) |\n| *Tab Connessione — host, porta, utente, password, chiave privata, gestione chiavi SSH (genera ed25519/RSA, copia sul server), integrazione KeePassXC* | *Tab Terminale — tema, font, dimensione, scrollback, conferma chiusura, avviso incolla, log su file, modalità apertura SSH* |\n\n| | |\n|---|---|\n| ![SSH Advanced GTK3](immagini/pcm84.png) | ![SSH Tunnel tab GTK3](immagini/pcm63.png) |\n| *Tab Avanzate — X11 forwarding, compressione, keepalive, strict host, SFTP browser automatico, Agent Forwarding (-A), startup command, jump host, Wake-on-LAN, pre-comando locale* | *Tab Tunnel — tipo SOCKS proxy (-D) o port forwarding, porta locale, host e porta remoti* |\n\n| | |\n|---|---|\n| ![SSH Panels tab GTK3](immagini/pcm86.png) | ![SSH Macros GTK3](immagini/pcm64.png) |\n| *Tab Pannelli — abilita/disabilita per sessione: pannello SFTP laterale, sezioni Info panel (CPU/Memoria, Processi con kill, Disco, Sparkline rete, Log streaming)* | *Tab Macro — comandi rapidi per sessione (nome → comando), inviati al terminale con un clic dalla sidebar* |\n\n| | |\n|---|---|\n| ![SSH Notes GTK3](immagini/pcm65.png) | |\n| *Tab Note — campo testo libero per annotazioni associate alla sessione* | |\n\n---\n\n### Dialogo nuova sessione — RDP\n\n| | |\n|---|---|\n| ![RDP Connection GTK3](immagini/pcm69.png) | ![RDP Advanced GTK3](immagini/pcm70.png) |\n| *Tab Connessione RDP — host, porta 3389, utente, integrazione KeePassXC* | *Tab Avanzate RDP — client xfreerdp3, autenticazione NTLM/Kerberos, dominio, fullscreen, clipboard, cartelle locali, monitor, modalità apertura* |\n\n---\n\n### Dialogo nuova sessione — VNC e FTP/SFTP\n\n| | |\n|---|---|\n| ![VNC Connection GTK3](immagini/pcm71.png) | ![VNC Advanced GTK3](immagini/pcm72.png) |\n| *Tab Connessione VNC — host, porta 5900, utente, integrazione KeePassXC* | *Tab Avanzate VNC — apertura con gtk-vnc integrato o client esterno, profondità colore, qualità* |\n\n| | |\n|---|---|\n| ![FTP/SFTP Connection GTK3](immagini/pcm68.png) | ![Telnet Connection GTK3](immagini/pcm67.png) |\n| *Tab Connessione FTP/SFTP — host, porta, utente, password, chiave privata, sottoprotocollo (SFTP/FTP/FTPS), gestione chiavi SSH, KeePassXC* | *Tab Connessione Telnet — host, porta 23, utente, password, integrazione KeePassXC* |\n\n---\n\n### Dialogo nuova sessione — Mosh, Seriale, Exec\n\n| | |\n|---|---|\n| ![Mosh Connection GTK3](immagini/pcm73.png) | ![Serial GTK3](immagini/pcm74.png) |\n| *Connessione Mosh — host, porta SSH, utente, password, chiave privata* | *Connessione Seriale — device (/dev/ttyUSB0), baud rate, data bit, parity, stop bit* |\n\n| | |\n|---|---|\n| ![Exec Connection GTK3](immagini/pcm75.png) | |\n| *Protocollo Exec — esegui qualsiasi comando shell in un tab VTE dedicato* | |\n\n---\n\n### Browser SFTP dual-pane\n\n\u003ctable\u003e\n\u003ctr\u003e\n\u003ctd colspan=\"2\"\u003e\u003cimg src=\"immagini/pcm76.png\" width=\"780\"/\u003e\u003cbr\u003e\u003cem\u003eBrowser SFTP integrato — pannello locale e remoto affiancati, upload/download, coda trasferimenti, drag \u0026amp; drop\u003c/em\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/table\u003e\n\n---\n\n### Strumenti integrati\n\n| | |\n|---|---|\n| ![Session context menu GTK3](immagini/pcm85.png) | ![SSH Monitor panel GTK3](immagini/pcm87.png) |\n| *Menu contestuale sessione — Connetti, Modifica, Duplica, Elimina, Apri browser SFTP/FTP, Visualizza log, Monitor sistema, Ping* | *Pannello Info SSH — System Overview (CPU/RAM), Processi in esecuzione (ordinabile, kill), Utilizzo disco, Sparkline rete, tab Log* |\n\n| | |\n|---|---|\n| ![SSH Tunnel Manager GTK3](immagini/pcm78.png) | ![App Menu GTK3](immagini/pcm77.png) |\n| *SSH Tunnel Manager — elenco tunnel con tipo, host, porte, stato; pulsanti Add/Edit/Delete/Start/Stop; log output integrato* | *Menu applicazione — Tunnel Manager, Broadcast, Variabili globali, Server FTP locale, Import, Audit log, KeePassXC, Dipendenze* |\n\n| | |\n|---|---|\n| ![Quick Connect GTK3](immagini/pcm81.png) | ![Unlock Credentials GTK3](immagini/pcm80.png) |\n| *Quick Connect — connessione rapida senza salvare il profilo, scelta protocollo, host, porta, utente, password* | *Sblocco credenziali — master password per decifrare le credenziali salvate (AES-256)* |\n\n| | |\n|---|---|\n| ![Import Sessions GTK3](immagini/pcm79.png) | |\n| *Import sessioni — da Remmina (.remmina), Remote Desktop Manager (.rdm/.json), PuTTY, ~/.ssh/config* | |\n\n---\n\n## Avvio dalla riga di comando\n\nPCM accetta un URI alla prima apertura o con PCM già in esecuzione: in quel caso la connessione viene aggiunta come nuova tab nella finestra esistente, senza richiedere di nuovo la password master.\n\n```bash\n# Apre la sessione salvata \"jiraapp\" (cerca per nome, poi per hostname)\npython3 PCM.py ssh://jiraapp\n\n# Connessione ad-hoc (non deve essere salvata in PCM)\npython3 PCM.py ssh://admin@192.168.1.10:2222\n```\n\nProtocolli supportati: `ssh://` `rdp://` `vnc://` `sftp://` `ftp://` `ftps://` `telnet://` `mosh://`  \nPer la documentazione completa con tutti gli esempi consulta il manuale integrato (menu **Aiuto**).\n\n---\n\n## Installazione\n\n### GTK3 — versione raccomandata\n\n#### AppImage (il modo più semplice)\n\n```bash\nchmod +x PCM-*-x86_64.AppImage\n./PCM-*-x86_64.AppImage\n```\n\nNessuna installazione richiesta. Sessioni e impostazioni vengono salvate in `~/.config/pcm/` (persistono tra un aggiornamento e l'altro).  \nRichiede sul sistema: `libgtk-3-0` e `libvte-2.91-0` (presenti di default su qualsiasi desktop GTK3).\n\n#### Da sorgente (automatica)\n\n```bash\ngit clone https://github.com/buzzqw/Python_Connection_Manager.git\ncd Python_Connection_Manager\nbash setup.sh\n```\n\nLo script rileva la distribuzione (Debian/Ubuntu, Arch, Fedora, openSUSE, FreeBSD) e installa tutte le dipendenze di sistema e Python. Crea anche un launcher `.desktop` nel menu applicazioni.\n\n```bash\n# Solo verifica dipendenze, senza installare:\nbash setup.sh --check\n```\n\n#### Avvio (da sorgente)\n\n```bash\ncd Python_Connection_Manager/gtk3\npython3 PCM.py\n```\n\nAl primo avvio PCM crea `connections.json` con sessioni di esempio e propone di abilitare la cifratura AES-256 delle credenziali.\n\n#### Manuale per distribuzione\n\n\u003cdetails\u003e\n\u003csummary\u003e\u003cb\u003eDebian / Ubuntu / Linux Mint\u003c/b\u003e\u003c/summary\u003e\n\n```bash\nsudo apt install \\\n    python3 python3-gi python3-gi-cairo \\\n    gir1.2-gtk-3.0 gir1.2-vte-2.91 gir1.2-gtk-vnc-2.0 \\\n    openssh-client mosh freerdp3-x11 tigervnc-viewer \\\n    xdotool xdg-utils wakeonlan\n\npip install --user cryptography paramiko pyftpdlib\n```\n\u003c/details\u003e\n\n\u003cdetails\u003e\n\u003csummary\u003e\u003cb\u003eArch Linux\u003c/b\u003e\u003c/summary\u003e\n\n```bash\nsudo pacman -Sy --needed \\\n    python python-gobject gtk3 vte3 gtk-vnc \\\n    openssh mosh freerdp tigervnc xdotool xdg-utils wol \\\n    python-cryptography python-paramiko python-pyftpdlib\n```\n\u003c/details\u003e\n\n\u003cdetails\u003e\n\u003csummary\u003e\u003cb\u003eFedora\u003c/b\u003e\u003c/summary\u003e\n\n```bash\nsudo dnf install \\\n    python3-gobject gtk3 vte291 gtk-vnc2 \\\n    openssh-clients mosh freerdp tigervnc xdotool xdg-utils\n\npip install --user cryptography paramiko pyftpdlib\n```\n\u003c/details\u003e\n\n\u003cdetails\u003e\n\u003csummary\u003e\u003cb\u003eopenSUSE\u003c/b\u003e\u003c/summary\u003e\n\n```bash\nsudo zypper install \\\n    python3-gobject typelib-1_0-Gtk-3_0 \\\n    typelib-1_0-Vte-2.91 typelib-1_0-GtkVnc-2_0 \\\n    openssh mosh freerdp tigervnc xdotool xdg-utils\n\npip install --user cryptography paramiko pyftpdlib\n```\n\u003c/details\u003e\n\n\u003cdetails\u003e\n\u003csummary\u003e\u003cb\u003eFreeBSD\u003c/b\u003e\u003c/summary\u003e\n\n```bash\nsudo pkg install \\\n    python3 py311-gobject gtk3 vte3 gtk-vnc \\\n    mosh freerdp3 tigervnc-viewer xdotool wakeonlan \\\n    py311-cryptography py311-paramiko py311-pyftpdlib\n```\n\u003c/details\u003e\n\n### PyQt6 — versione legacy\n\n\u003e Riceve solo bugfix critici. Istruzioni di installazione in [`pyqt6/README.md`](pyqt6/README.md).\n\n---\n\n## Dipendenze opzionali\n\n| Pacchetto | Funzionalità abilitata |\n|---|---|\n| `gir1.2-gtk-vnc-2.0` / `gtk-vnc` | VNC integrato nativo (raccomandato) |\n| `tigervnc-viewer` / `xtightvncviewer` | VNC via client esterno (fallback) |\n| `freerdp3-x11` / `xfreerdp` | RDP |\n| `mosh` | Connessioni Mosh |\n| `picocom` / `minicom` | Porte seriali |\n| `xdotool` | RDP in pannello interno (richiede XWayland) |\n| `wakeonlan` / `wol` | Wake-on-LAN |\n| `keepassxc` | Integrazione KeePassXC |\n| `pynacl` | Cifratura protocollo KeePassXC Browser v2 |\n\n---\n\n## Note Wayland\n\nGTK3 + VTE funzionano **nativamente su Wayland** senza XWayland.\n\nL'unica eccezione è la modalità **RDP pannello interno** (embedding xfreerdp tramite xdotool) che richiede XWayland. Per uso Wayland puro, impostare RDP su **\"Finestra esterna\"**.\n\nIl viewer VNC `gtk-vnc` funziona nativamente su Wayland.\n\n---\n\n## File di configurazione\n\n| File | Contenuto |\n|---|---|\n| `gtk3/connections.json` | Profili sessione — JSON leggibile, modificabile a mano. Permessi `0600`. |\n| `gtk3/pcm_settings.json` | Impostazioni globali, scorciatoie, sessioni recenti. Permessi `0600`. |\n| `gtk3/audit_log.json` | Log audit connessioni con hash chaining SHA-256. Permessi `0600`. |\n| `~/.local/share/pcm/logs/` | Log output terminali (default), percorso configurabile |\n| `~/.cache/pcm/` | File temporanei SSH_ASKPASS (dir `0700`, file eliminati dopo 5s) |\n\n\u003e **AppImage**: quando si usa l'AppImage i tre file JSON sopra vengono scritti in `~/.config/pcm/` (il filesystem dell'AppImage è in sola lettura). La configurazione persiste tra un aggiornamento e l'altro.\n\n---\n\n## Supporta il progetto\n\nSe PCM ti è utile e vuoi ringraziare lo sviluppatore, puoi offrire un caffè tramite PayPal. Ogni contributo è molto apprezzato e aiuta a mantenere il progetto attivo!\n\n[![Dona con PayPal](https://img.shields.io/badge/Donate-PayPal-blue.svg)](https://www.paypal.com/cgi-bin/webscr?cmd=_donations\u0026business=azanzani@gmail.com\u0026item_name=Support+PCM+Project)\n\n*Grazie mille!*\n\n---\n\n## Autore\n\n**Andres Zanzani** — licenza [EUPL-1.2](EUPL-1.2%20EN.txt)\n\n[![GitHub](https://img.shields.io/badge/GitHub-buzzqw%2FPython__Connection__Manager-blue?logo=github)](https://github.com/buzzqw/Python_Connection_Manager)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbuzzqw%2Fpython_connection_manager","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fbuzzqw%2Fpython_connection_manager","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbuzzqw%2Fpython_connection_manager/lists"}