Add Tailscale to GNOME quick settings. Fork of joaophi/tailscale-gnome-qs with continued maintenance and improvements. Features: • Quick Toggle — Enable/disable Tailscale directly from the Quick Settings panel • Copy Node IP - Long-click a node to copy that node's ip address to the clipboard • Exit Nodes — Select and disconnect exit nodes, including Mullvad support with country flag display • Multi-Account — Switch between multiple Tailscale accounts (profiles) •Status Indicator — Visual indication of your Tailscale connection status NOTE: This extension accesses the clipboard to copy the node ip address. NOTE: Make sure you set your user as tailscale operator: `sudo tailscale set --operator=$USER`
Note: Binary files aren't shown on the web site. To see all files, please download the extension zipfile.
EGO-A-005 manual_review
extensions should not access the clipboard directly
Direct clipboard access via `St.Clipboard.get_default()` requires reviewer scrutiny.
extension.js:346
St.Clipboard.get_default()
extension.js:347
St.Clipboard.get_default()
EGO-L-003 warning
signals connected by extension should be disconnected in disable()
Signals assigned in `enable()` are missing matching disconnect calls in `disable()` or its helper methods.
extension.js:79
this._RunningNotifier = tailscale.connect('notify::running', () => setVisible())
extension.js:78
this._exitNodeNotifier = tailscale.connect('notify::exit-node', () => setVisible())
extension.js:127
action.connect('notify::pressed', () => {
if (action.pressed)
this.add_style_pseudo_class('active');
else
this.remove_style_pseudo_class('active');
})
EGO-L-008 warning
Soup.Session instances should be aborted during cleanup
Soup.Session instances should be aborted during cleanup.
tailscale.js:11
this.session = new Soup.Session({
'remote-connectable': address,
'timeout': 0,
'idle-timeout': 0,
})
| Version | Status |
|---|---|
| v7 (14) | Active |
| v7 (13) | Rejected |
| v7 (12) | Rejected |
| v7 (11) | Rejected |
| v7 (10) | Rejected |
| v6 (9) | Active |
| v6 (8) | Rejected |
| v6 (7) | Rejected |
| v6 (6) | Rejected |
| 5 | Active |
| 4 | Inactive |
| 3 | Inactive |
| 2 | Rejected |
| 1 | Rejected |
1. Connect needs disconnect not source remove (line 84, 86 `extension.js`). Why not using `connectObject()` and `disconnectObject()` anyway? 2. Each class should be responsible for what it does. Line 139 `tailscale.js` should be in `TailscaleApiClient` class not there.