Unofficial - This is a community project and is not affiliated with or endorsed by Twingate Inc.
A lightweight KDE Plasma system tray application for managing Twingate VPN connections using Service Keys (headless authentication).
Note: This application uses Twingate Service Keys for headless/unattended connections. Service Keys are JSON files provided by your Twingate admin for server/device authentication without user interaction.
- Quick profile switching from the system tray
- Connection status monitoring with duration timer
- Desktop notifications for connect/disconnect events
- Add new profiles directly from the tray menu
- Auto-start on login
- Passwordless operation (via sudoers configuration)
- Linux with KDE Plasma desktop
- Python 3.8+
- PyQt6
- Twingate client installed
- Arch Linux (and derivatives: CachyOS, EndeavourOS, Manjaro)
- Debian / Ubuntu / Linux Mint
- Fedora / RHEL / CentOS
- openSUSE
git clone https://github.com/sfnemis/twingate-linux-desktop-client.git
cd twingate-linux-desktop-client
sudo ./setup.shThe setup script will:
- Install Python dependencies
- Create the
/etc/twingate/keysdirectory - Install the application to
/opt/twingate-manager - Configure passwordless sudo for the backend script
- Create desktop and autostart entries
-
Install dependencies:
# Arch sudo pacman -S python python-pyqt6 # Debian/Ubuntu sudo apt install python3 python3-pyqt6 # Fedora sudo dnf install python3 python3-qt6
-
Copy files:
sudo mkdir -p /opt/twingate-manager/icons sudo cp twingate-tray.py /opt/twingate-manager/ sudo cp icons/*.png /opt/twingate-manager/icons/ sudo cp tg-switch /usr/local/bin/ sudo chmod +x /usr/local/bin/tg-switch -
Configure sudoers:
sudo cp tg-switch.sudoers /etc/sudoers.d/twingate-manager sudo chmod 440 /etc/sudoers.d/twingate-manager
-
Create keys directory:
sudo mkdir -p /etc/twingate/keys sudo chmod 755 /etc/twingate/keys
python3 /opt/twingate-manager/twingate-tray.pyOr search for "Twingate Manager" in your application menu.
- Obtain your Twingate service key JSON file
- Right-click the tray icon → "Add Profile..."
- Select your JSON file
- The profile will appear in the menu
Right-click the tray icon and select the profile you want to connect to.
The backend script can also be used directly:
# Switch to a profile
sudo tg-switch profilename
# Stop Twingate
sudo tg-switch stop
# List profiles
sudo tg-switch list
# Add a new profile
sudo tg-switch add profilename /path/to/key.json| Path | Description |
|---|---|
/opt/twingate-manager/ |
Application files |
/usr/local/bin/tg-switch |
Backend script |
/etc/twingate/keys/ |
Profile JSON files |
/etc/sudoers.d/twingate-manager |
Sudoers configuration |
sudo rm -rf /opt/twingate-manager
sudo rm /usr/local/bin/tg-switch
sudo rm /etc/sudoers.d/twingate-manager
sudo rm /usr/share/applications/twingate-manager.desktop
sudo rm /etc/xdg/autostart/twingate-manager.desktopMIT License - see LICENSE for details.
Contributions are welcome! Please open an issue or submit a pull request.
