An unofficial GUI wrapper around the Tailscale CLI client.

Trayscale

Go Report Card

Trayscale is an unofficial GUI wrapper around the Tailscale CLI client, particularly for use on Linux, as no official Linux GUI client exists. Despite the name, it does not provide a tray icon, as support for them has been removed in Gtk4. If support can ever be brought back, however, a tray icon would be nice.

Disclaimer: This project is in an alpha state. If it bricks your machine, it's not my fault. Use at your own risk.

image

Installation

AUR

If you are on an Arch Linux or a derivative, Trayscale is available from the AUR.

Manual

First, make sure that you have dependencies installed:

  • Go >= 1.18
  • GTK >= 4.0
  • Libadwaita >= 1.0

The main Trayscale binary can be installed with go install:

$ go install deedles.dev/trayscale@latest

If you would like, you can also copy the .desktop file, the icon, and other pieces of extra metadata into the places that they need to be put to function properly:

  • dev.deedles-trayscale.desktop -> $HOME/.local/share/applications/
  • com.tailscale-tailscale.png -> $HOME/.local/share/icons/hicolor/256x256/apps/

Note that without copying both of these files into the correct locations, notifications will likely not functions correctly in GNOME. Also keep in mind that the trayscale binary must be in your $PATH in a way that the desktop environment can locate, then the file will not be considered valid. If this is an issue, modify the file manually and change the Exec= line to point directly to the binary with an absolute path.

Owner
Computer scientist with interests in economics and linguistics as well. Looking to get into game development, but, really, I just enjoy programming.
null
Comments
  • posible errors?

    posible errors?

    ubuntu@Ubuntu-laptop:~$ go install deedles.dev/trayscale/cmd/trayscale@latest # github.com/diamondburned/gotk4/pkg/glib/v2 go/pkg/mod/github.com/diamondburned/gotk4/[email protected]/glib/v2/gfileutils.go:745:12: could not determine kind of name for C.GFileSetContentsFlags go/pkg/mod/github.com/diamondburned/gotk4/[email protected]/glib/v2/gfileutils.go:758:2: could not determine kind of name for C.g_file_set_contents_full

    i get these when trying to install

  • all: use a new `go generate`-based system for handing `.ui` files

    all: use a new `go generate`-based system for handing `.ui` files

    This pull request implements and uses a new command, cmd/gtkbuildergen, which takes a .ui file and generates Go code to initialize templates as if they were their own widgets. The tool is not comprehensive and will probably fail if given a .ui file other than those of cmd/trayscale.

  • cmd/trayscale: implement folded navigation

    cmd/trayscale: implement folded navigation

    This is only a partial implementation. In particular, clicking on the current page will not navigate properly. This will require a complete replacement of the StackSidebar in order to fix. That's quite a bit more complicated, though, so it'll have to be done later.

  • cmd/gtkbuildergen: add menu support

    cmd/gtkbuildergen: add menu support

    This completely eliminates all GtkBuilder usage. In so doing, it also fixes a bug that caused the race detector to crash the app. It seems that some usages of GtkBuilder were being detected by the race detector, and only by the race detector for some reason, as being violations of the cgo pointer passing rules. I'm not sure if they actually were or not, but this seems to have completely fixed it, so... Problem solved, I guess.

  • cmd/trayscale: update preferences when they change externally, too

    cmd/trayscale: update preferences when they change externally, too

    Minor changes to the way that prefs are handled when updating. Definitely not as extensive as I'd originally intended, but after looking through the code again I don't see a particular reason to move the polling to the other side of the event, potentially freezing up the UI while a poll happens.

  • cmd/trayscale: add ability to toggle exit node advertisement

    cmd/trayscale: add ability to toggle exit node advertisement

    This started out as a quite different pull request, but as I did some experimentation it wound up also including a bit of a rewrite of tailscale. It should be quite a bit more efficient at some stuff now, as well as having a few new features.

    Closes #15. Part of #12 and #13.

  • tailscale, cmd/trayscale: add `netcheck` information

    tailscale, cmd/trayscale: add `netcheck` information

    The info is available via the tailscale.com/net/netcheck package. It should probably be run manually by the user, rather than via a poller like the peer status is.

  • cmd/trayscale: exit nodes don't always work

    cmd/trayscale: exit nodes don't always work

    The Tailscale CLI tool requires all non-default options to be re-specified whenever running tailscale up to change something. This means that if the user has previously run tailscale up --advertise-exit-node, running tailscale up --exit-node=1.2.3.4 will fail unless --advertise-exit-node is also specified again. Alternatively, the user can specify --reset to set all options that aren't specified back to their defaults.

    The best option is to find some way to find out what options are set and setting them alongside the others. If necessary, it might be possible to parse the required options out of the error message printed by the call to tailscale up.

  • cmd/trayscale: exit node selection functionality

    cmd/trayscale: exit node selection functionality

    Closes #9.

    This pull request has expanded a bit and now includes a complete UI rework. It also removes the polkit integration, since it apparently didn't actually work. Instructions on a proper configuration have been added to README.md instead.

  • all: completely overhaul with Gtk4/Libadwaita

    all: completely overhaul with Gtk4/Libadwaita

    The UI is a ton nicer, and works better in general. Unfortunately, every systray implementation that I could find used Gtk2 or Gtk3 GtkStatusIcons internally, which breaks any usage of Gtk4 even if all it does it link to it. As such, this removes the system tray icon completely and uses notifications instead. It's not ideal, but it works.

  • cmd/trayscale: clean up data flow

    cmd/trayscale: clean up data flow

    Thanks to the Prefs() rework from #18, data flow from Tailscale to the UI is a tad strange. It mostly comes from the status, but a few items are from prefs instead, and those are being pulled on demand during the update. This is rather odd, so here's the current plan to fix it:

    • [ ] Move status fetching into the GTK event and rework polling loop to just be a simple timer that fires the custom GTK update event.
    • [ ] Poll prefs at the beginning of the event.
    • [ ] Manually update switches directly via return values from methods.
  • meta: Flatpak support

    meta: Flatpak support

    I'm not sure how technically feasible this is, due to the low-level stuff that Tailscale needs access to, but if possible it would be great to get this packaged up with Flatpak. In particular, that might make it possible to run on the Steam Deck nice and easily, which would be nice, at least until the official support is added.

    Questions:

    • Is it feasible to interact with the Tailscale daemon and CLI from inside of a Flatpak environment?
    • Is it possible to package the Tailscale daemon and CLI inside of the Flatpak, thus eliminating non-Flatpak dependencies?
  • cmd/trayscale: more peer utilities and info

    cmd/trayscale: more peer utilities and info

    Peers currently only show their names and a list of their Wireguard IP addresses. More features would be good. Here are a few:

    • More information just pulled straight from ipnstate.PeerStatus, such as ID, OS, and Active.
    • A better indicator that the top peer is the current machine.
    • Ability to send and receive files from a peer, possibly? This one's potentially messy.
turn a directory into a GUI, slash example of VNC-based GUI

dirgui @rsnous on Jan 11, 2021: "idea: filesystem<->GUI adapter, where a directory turns into a form, executable files inside that directory turn into

May 3, 2022
Tscert - Minimal package for just the HTTPS cert fetching part of the Tailscale client API

tscert This is a stripped down version of the tailscale.com/client/tailscale Go

Nov 27, 2022
A simple wrapper around libpcap for the Go programming language

PCAP This is a simple wrapper around libpcap for Go. Originally written by Andreas Krennmair [email protected] and only minorly touched up by Mark Smith

Dec 5, 2022
Go wrapper around Device Console Windows tool.

go-devcon Go wrapper around the Windows Device Console (devcon.exe). go install github.com/mikerourke/go-devcon Introduction Here's a brief overview

Nov 4, 2021
Wrapper around bufcli to make it do cross-repo compiles for private repos and use full paths.
Wrapper around bufcli to make it do cross-repo compiles for private repos and use full paths.

Bufme A tool for compiling protos with full directory paths and cross repo compiles. Introduction Protocol buffers rock, but protoc should die in a fi

Feb 5, 2022
A TCP proxy used to expose services onto a tailscale network without root. Ideal for container environments.

tailscale-sidecar This is barely tested software, I don't guarantee it works but please make an issue if you use it and find a bug. Pull requests are

Dec 30, 2022
Headscale - An open source, self-hosted implementation of the Tailscale control server

Headscale - An open source, self-hosted implementation of the Tailscale control server

Dec 29, 2022
Example of how to write reverse proxy in Go that runs on Cloud Run with Tailscale

Cloudrun Tailscale Reverse Proxy Setup Create a ephemeral key in Tailscale Set TAILSCALE_AUTHKEY in your Cloud Run environment variables Set TARGET_UR

Dec 18, 2022
A pair of local reverse proxies (one in Windows, one in Linux) for Tailscale on WSL2

tailscale-wsl2 TL;DR Running two reverse proxies (one in Windows, one in the WSL2 Linux VM), the Windows Tailscale daemon can be accessed via WSL2: $

Dec 9, 2022
A memory-safe SSH server, focused on listening only on VPN networks such as Tailscale

Features Is tested to work with SCP Integrates well with systemd Quickstart Download binary for your architecture. We only support Linux. If you don't

Jun 10, 2022
Cdn - CDN microservice to upload files to zachlatta.com that only accepts traffic from Tailscale IPs

cdn CDN microservice to upload files to zachlatta.com that only accepts traffic from Tailscale IPs. source code available at https://github.com/zachla

Jun 26, 2022
Provides agent and server plugins for SPIRE to allow Tailscale node attestation.

SPIRE Tailscale Plugin ⚠️ this node attestation plugin relies on a Tailscale OIDC id-token feature, which is marked as Work-in-Progress and may not be

May 22, 2022
Unofficial OPA Client in Go

OPA Go Client Unofficial OPA HTTP Client in Go. Usage client, err := opaclient.New("http://localhost:8181") if err != nil { panic(err) } req := o

Nov 8, 2022
Nyaa-go - An unofficial nyaa.si client library for Go

nyaa-go An unofficial nyaa.si client library for Go Installation go get github.com/mkfsn/nyaa-go Example package main import ( "fmt" "log" "githu

Jan 3, 2022
Simple GUI to convert Charles headers to golang's default http client (net/http)

Charles-to-Go Simple GUI to convert Charles headers to golang's default http client (net/http) Usage Compile code to a binary, go build -ldflags -H=wi

Dec 14, 2021
unofficial Manganato's manga downloader CUI written in Go
unofficial Manganato's manga downloader CUI written in Go

manganato-cli Unofficial Manganato's manga downloader CUI and CLI written in Go. note: currently works on Mac and Linux, for Windows, please run via D

Nov 8, 2022
A fork of the simple WireGuard VPN server GUI community maintained
A fork of the simple WireGuard VPN server GUI community maintained

Subspace - A simple WireGuard VPN server GUI Subspace - A simple WireGuard VPN server GUI Slack Screenshots Features Contributing Setup 1. Get a serve

Dec 25, 2022
Edgevpn-gui - Graphical front-end for EdgeVPN
Edgevpn-gui - Graphical front-end for EdgeVPN

EdgeVPN GUI Create Decentralized private networks A simple GUI for EdgeVPN built with fyne. ?? Features Manage EdgeVPN versions locally from the GUI.

Nov 9, 2022
A base gui tool for xray/v2ray/hysteria/trojan-go without system proxy

A base gui tool for xray/v2ray/hysteria/trojan-go without system proxy

Dec 8, 2022