An unofficial GUI wrapper around the Tailscale CLI client.

Overview

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/[email protected]

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.

Comments
  • posible errors?

    posible errors?

    [email protected]:~$ go install deedles.dev/trayscale/cmd/[email protected] # 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

    opened by konn-neko 8
  • 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.

    opened by DeedleFake 1
  • 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.

    opened by DeedleFake 0
  • 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.

    opened by DeedleFake 0
  • 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.

    opened by DeedleFake 0
  • 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.

    opened by DeedleFake 0
  • 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.

    opened by DeedleFake 0
  • 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.

    opened by DeedleFake 0
  • 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.

    enhancement 
    opened by DeedleFake 0
  • 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.

    opened by DeedleFake 0
  • 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.
    opened by DeedleFake 0
  • 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?
    enhancement good first issue 
    opened by DeedleFake 0
  • 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.
    enhancement 
    opened by DeedleFake 0
Releases(v0.7.4)
  • v0.7.4(Oct 27, 2022)

    What's Changed

    • cmd/trayscale: make sure that the application is registered before starting the poller by @DeedleFake in https://github.com/DeedleFake/trayscale/pull/29

    Full Changelog: https://github.com/DeedleFake/trayscale/compare/v0.7.3...v0.7.4

    Source code(tar.gz)
    Source code(zip)
  • v0.7.3(Oct 27, 2022)

    What's Changed

    • cmd/trayscale: route advertisement by @DeedleFake in https://github.com/DeedleFake/trayscale/pull/28

    Full Changelog: https://github.com/DeedleFake/trayscale/compare/v0.7.2...v0.7.3

    Source code(tar.gz)
    Source code(zip)
  • v0.7.2(Oct 21, 2022)

    What's Changed

    • cmd/trayscale: implement folded navigation by @DeedleFake in https://github.com/DeedleFake/trayscale/pull/27

    Full Changelog: https://github.com/DeedleFake/trayscale/compare/v0.7.1...v0.7.2

    Source code(tar.gz)
    Source code(zip)
  • v0.7.1(Oct 3, 2022)

    What's Changed

    • cmd/trayscale: remove frames from inline buttons and set activatable widgets for applicable action rows by @DeedleFake in https://github.com/DeedleFake/trayscale/pull/26

    Full Changelog: https://github.com/DeedleFake/trayscale/compare/v0.7.0...v0.7.1

    Source code(tar.gz)
    Source code(zip)
  • v0.7.0(Sep 19, 2022)

    What's Changed

    • cmd/trayscale: add netcheck functionality by @DeedleFake in https://github.com/DeedleFake/trayscale/pull/23

    Full Changelog: https://github.com/DeedleFake/trayscale/compare/v0.6.1...v0.7.0

    Source code(tar.gz)
    Source code(zip)
  • v0.6.1(Sep 16, 2022)

    What's Changed

    • cmd/trayscale: add DNS name to peer info pages by @DeedleFake in https://github.com/DeedleFake/trayscale/pull/22

    Full Changelog: https://github.com/DeedleFake/trayscale/compare/v0.6.0...v0.6.1

    Source code(tar.gz)
    Source code(zip)
  • v0.6.0(Sep 16, 2022)

    What's Changed

    • cmd/gtkbuildergen: add menu support by @DeedleFake in https://github.com/DeedleFake/trayscale/pull/21

    Full Changelog: https://github.com/DeedleFake/trayscale/compare/v0.5.2...v0.6.0

    Source code(tar.gz)
    Source code(zip)
  • v0.5.2(Sep 16, 2022)

    What's Changed

    • cmd/trayscale: update preferences when they change externally, too by @DeedleFake in https://github.com/DeedleFake/trayscale/pull/20

    Full Changelog: https://github.com/DeedleFake/trayscale/compare/v0.5.1...v0.5.2

    Source code(tar.gz)
    Source code(zip)
  • v0.5.1(Sep 15, 2022)

  • v0.5.0(Sep 15, 2022)

    What's Changed

    • cmd/trayscale: add ability to toggle exit node advertisement by @DeedleFake in https://github.com/DeedleFake/trayscale/pull/17
    • cmd/trayscale: add ability to allow LAN access by @DeedleFake in https://github.com/DeedleFake/trayscale/pull/18

    Full Changelog: https://github.com/DeedleFake/trayscale/compare/v0.4.3...v0.5.0

    Source code(tar.gz)
    Source code(zip)
  • v0.4.3(Sep 13, 2022)

  • v0.4.2(Sep 13, 2022)

    What's Changed

    • all: use a new go generate-based system for handing .ui files by @DeedleFake in https://github.com/DeedleFake/trayscale/pull/14

    Full Changelog: https://github.com/DeedleFake/trayscale/compare/v0.4.1...v0.4.2

    Source code(tar.gz)
    Source code(zip)
  • v0.4.1(Sep 9, 2022)

    What's Changed

    • cmd/trayscale: show better information about the local node by @DeedleFake in https://github.com/DeedleFake/trayscale/pull/13

    Full Changelog: https://github.com/DeedleFake/trayscale/compare/v0.4.0...v0.4.1

    Source code(tar.gz)
    Source code(zip)
  • v0.4.0(Sep 2, 2022)

    What's Changed

    • cmd/trayscale: exit node selection functionality by @DeedleFake in https://github.com/DeedleFake/trayscale/pull/10

    Full Changelog: https://github.com/DeedleFake/trayscale/compare/v0.3.3...v0.4.0

    Source code(tar.gz)
    Source code(zip)
  • v0.3.3(Apr 24, 2022)

  • v0.3.2(Apr 18, 2022)

  • v0.3.1(Apr 15, 2022)

    What's Changed

    • cmd/trayscale: add version info by @DeedleFake in https://github.com/DeedleFake/trayscale/pull/7

    Full Changelog: https://github.com/DeedleFake/trayscale/compare/v0.3.0...v0.3.1

    Source code(tar.gz)
    Source code(zip)
  • v0.3.0(Apr 15, 2022)

    What's Changed

    • cmd/trayscale: close and then open new windows instead of hiding it by @DeedleFake in https://github.com/DeedleFake/trayscale/pull/6

    Full Changelog: https://github.com/DeedleFake/trayscale/compare/v0.2.5...v0.3.0

    Source code(tar.gz)
    Source code(zip)
  • v0.2.5(Apr 14, 2022)

  • v0.2.4(Apr 14, 2022)

  • v0.2.3(Apr 14, 2022)

  • v0.2.2(Apr 14, 2022)

    What's Changed

    • cmd/trayscale: rewrite using GtkBuilder by @DeedleFake in https://github.com/DeedleFake/trayscale/pull/3

    Full Changelog: https://github.com/DeedleFake/trayscale/compare/v0.2.1...v0.2.2

    Source code(tar.gz)
    Source code(zip)
  • v0.2.1(Apr 13, 2022)

  • v0.2.0(Apr 13, 2022)

    What's Changed

    • all: completely overhaul with Gtk4/Libadwaita by @DeedleFake in https://github.com/DeedleFake/trayscale/pull/2

    Full Changelog: https://github.com/DeedleFake/trayscale/compare/v0.1.0...v0.2.0

    Source code(tar.gz)
    Source code(zip)
Owner
Computer scientist with interests in economics and linguistics as well. Looking to get into game development, but, really, I just enjoy programming.
null
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

Tom Lieber 32 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

Tailscale 14 Nov 14, 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

Andreas Krennmair 461 Nov 9, 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

Mike Rourke 0 Nov 4, 2021
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

John Doak 0 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

Mark Pashmfouroush 103 Nov 24, 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

Juan Font 9.3k Nov 27, 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

ThreeComma.io 12 Nov 3, 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: $

Danny Hermes 29 Nov 16, 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

function61.com 2 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

zach latta 2 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

Johan Siebens 9 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

Masayoshi Mizutani 3 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

Pei-Ming Wu 1 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

null 0 Dec 14, 2021
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

Mahnun Saratunti 16 Nov 8, 2022
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

null 1.7k Nov 29, 2022
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.

Ettore Di Giacinto 13 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

youlika 15 Nov 11, 2022