trustmux 7.0a6__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- trustmux-7.0a6/PKG-INFO +150 -0
- trustmux-7.0a6/README.md +131 -0
- trustmux-7.0a6/pyproject.toml +49 -0
- trustmux-7.0a6/setup.cfg +4 -0
- trustmux-7.0a6/tests/test_ctl.py +486 -0
- trustmux-7.0a6/tests/test_daemon.py +445 -0
- trustmux-7.0a6/tests/test_daemon_extended.py +863 -0
- trustmux-7.0a6/trustmux/__init__.py +3 -0
- trustmux-7.0a6/trustmux/__main__.py +4 -0
- trustmux-7.0a6/trustmux/_ctl.py +326 -0
- trustmux-7.0a6/trustmux/_daemon.py +916 -0
- trustmux-7.0a6/trustmux/_disable.py +41 -0
- trustmux-7.0a6/trustmux/_enable.py +59 -0
- trustmux-7.0a6/trustmux/_pair.py +122 -0
- trustmux-7.0a6/trustmux/_unpair.py +104 -0
- trustmux-7.0a6/trustmux/static/app.js +598 -0
- trustmux-7.0a6/trustmux/static/icons/icon-192.png +0 -0
- trustmux-7.0a6/trustmux/static/icons/icon-512.png +0 -0
- trustmux-7.0a6/trustmux/static/index.html +359 -0
- trustmux-7.0a6/trustmux/static/sw.js +38 -0
- trustmux-7.0a6/trustmux/static/trustmux-logo.svg +45 -0
- trustmux-7.0a6/trustmux/static/trustmux.svg +38 -0
- trustmux-7.0a6/trustmux.egg-info/PKG-INFO +150 -0
- trustmux-7.0a6/trustmux.egg-info/SOURCES.txt +26 -0
- trustmux-7.0a6/trustmux.egg-info/dependency_links.txt +1 -0
- trustmux-7.0a6/trustmux.egg-info/entry_points.txt +7 -0
- trustmux-7.0a6/trustmux.egg-info/requires.txt +1 -0
- trustmux-7.0a6/trustmux.egg-info/top_level.txt +1 -0
trustmux-7.0a6/PKG-INFO
ADDED
|
@@ -0,0 +1,150 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: trustmux
|
|
3
|
+
Version: 7.0a6
|
|
4
|
+
Summary: Monitor and interact with tmux/Byobu sessions from your phone
|
|
5
|
+
Author-email: Dustin Kirkland <dustin.kirkland@gmail.com>
|
|
6
|
+
License: GPL-3.0-or-later
|
|
7
|
+
Project-URL: Homepage, https://trustmux.app
|
|
8
|
+
Project-URL: Repository, https://github.com/dustinkirkland/byobu
|
|
9
|
+
Project-URL: Issues, https://github.com/dustinkirkland/byobu/issues
|
|
10
|
+
Keywords: tmux,byobu,terminal,mobile,pwa
|
|
11
|
+
Classifier: Development Status :: 4 - Beta
|
|
12
|
+
Classifier: Environment :: Console
|
|
13
|
+
Classifier: License :: OSI Approved :: GNU General Public License v3 or later (GPLv3+)
|
|
14
|
+
Classifier: Programming Language :: Python :: 3
|
|
15
|
+
Classifier: Topic :: Terminals :: Terminal Emulators/X Terminals
|
|
16
|
+
Requires-Python: >=3.9
|
|
17
|
+
Description-Content-Type: text/markdown
|
|
18
|
+
Requires-Dist: tornado>=6.0
|
|
19
|
+
|
|
20
|
+
# Trustmux
|
|
21
|
+
|
|
22
|
+
A mobile companion for [tmux](https://github.com/tmux/tmux) / [Byobu](https://byobu.org) sessions. Run a lightweight daemon on your workstation; monitor and interact with your terminal sessions from your phone over your Tailscale network. No relay server — terminal data stays between your devices.
|
|
23
|
+
|
|
24
|
+
Works with **plain tmux** and with **byobu**. Byobu users get the live status bar chips; plain tmux users get everything else.
|
|
25
|
+
|
|
26
|
+
Two tiers:
|
|
27
|
+
- **Free** — PWA. Install one icon per machine directly from the browser.
|
|
28
|
+
- **Paid** — Native Flutter app with full ANSI colors, multi-machine management, and biometric auth.
|
|
29
|
+
|
|
30
|
+
---
|
|
31
|
+
|
|
32
|
+
## Requirements
|
|
33
|
+
|
|
34
|
+
- tmux (byobu optional but recommended)
|
|
35
|
+
- Python 3.10+
|
|
36
|
+
- [Tailscale](https://tailscale.com) installed, running, and connected
|
|
37
|
+
|
|
38
|
+
---
|
|
39
|
+
|
|
40
|
+
## Install
|
|
41
|
+
|
|
42
|
+
### Homebrew (macOS / Linux)
|
|
43
|
+
|
|
44
|
+
```bash
|
|
45
|
+
brew tap dustinkirkland/trustmux
|
|
46
|
+
brew install trustmux
|
|
47
|
+
trustmux-enable # configure tailscale serve + start daemon
|
|
48
|
+
trustmux-pair # generate pairing code; enter on phone
|
|
49
|
+
```
|
|
50
|
+
|
|
51
|
+
### pip (PyPI)
|
|
52
|
+
|
|
53
|
+
```bash
|
|
54
|
+
pip install trustmux
|
|
55
|
+
trustmux-enable
|
|
56
|
+
trustmux-pair
|
|
57
|
+
```
|
|
58
|
+
|
|
59
|
+
### Debian / Ubuntu (.deb)
|
|
60
|
+
|
|
61
|
+
```bash
|
|
62
|
+
sudo dpkg -i trustmux_7.0_all.deb
|
|
63
|
+
trustmux-enable
|
|
64
|
+
trustmux-pair
|
|
65
|
+
```
|
|
66
|
+
|
|
67
|
+
Add the PPA for automatic updates:
|
|
68
|
+
|
|
69
|
+
```bash
|
|
70
|
+
sudo add-apt-repository ppa:dustinkirkland/trustmux
|
|
71
|
+
sudo apt install trustmux
|
|
72
|
+
```
|
|
73
|
+
|
|
74
|
+
---
|
|
75
|
+
|
|
76
|
+
## Daily use
|
|
77
|
+
|
|
78
|
+
```bash
|
|
79
|
+
trustmux-ctl start # start daemon
|
|
80
|
+
trustmux-ctl stop # stop daemon
|
|
81
|
+
trustmux-ctl restart # restart daemon
|
|
82
|
+
trustmux-ctl status # show URL and running status
|
|
83
|
+
trustmux-ctl log # tail the daemon log
|
|
84
|
+
|
|
85
|
+
trustmux-pair # generate a pairing code for a new device
|
|
86
|
+
trustmux-unpair # list paired devices and remove them
|
|
87
|
+
```
|
|
88
|
+
|
|
89
|
+
---
|
|
90
|
+
|
|
91
|
+
## Setup from source
|
|
92
|
+
|
|
93
|
+
```bash
|
|
94
|
+
cd mobile/
|
|
95
|
+
python3 -m venv .venv
|
|
96
|
+
.venv/bin/pip install -r requirements.txt
|
|
97
|
+
./trustmux-enable
|
|
98
|
+
./trustmux-pair
|
|
99
|
+
```
|
|
100
|
+
|
|
101
|
+
---
|
|
102
|
+
|
|
103
|
+
## Configuration
|
|
104
|
+
|
|
105
|
+
| Path | Purpose |
|
|
106
|
+
|---|---|
|
|
107
|
+
| `~/.config/trustmux/tokens.json` | Paired device session tokens (mode 0600) |
|
|
108
|
+
| `~/.config/trustmux/trustmux.sock` | Admin Unix socket (mode 0600) |
|
|
109
|
+
| `~/.config/trustmux/trustmux.log` | Daemon log (mode 0600) |
|
|
110
|
+
| `~/.config/trustmux/machines.json` | Optional: sibling machines for the machine selector |
|
|
111
|
+
|
|
112
|
+
### Multiple machines
|
|
113
|
+
|
|
114
|
+
```json
|
|
115
|
+
[
|
|
116
|
+
{ "name": "work", "url": "https://work-machine.tail1234.ts.net" },
|
|
117
|
+
{ "name": "personal", "url": "https://personal.tail1234.ts.net" }
|
|
118
|
+
]
|
|
119
|
+
```
|
|
120
|
+
|
|
121
|
+
---
|
|
122
|
+
|
|
123
|
+
## Security
|
|
124
|
+
|
|
125
|
+
- Daemon binds to `127.0.0.1:7432` only — not reachable from the network
|
|
126
|
+
- All traffic encrypted by Tailscale WireGuard; HTTPS via `tailscale serve`
|
|
127
|
+
- No relay server — terminal data never leaves your Tailscale mesh
|
|
128
|
+
- Pairing codes: 6-digit, 5-minute TTL, single-use, max 10 attempts
|
|
129
|
+
- Session tokens: 256-bit random, stored at mode 0600
|
|
130
|
+
|
|
131
|
+
---
|
|
132
|
+
|
|
133
|
+
## Tests
|
|
134
|
+
|
|
135
|
+
```bash
|
|
136
|
+
cd mobile/
|
|
137
|
+
python3 -m unittest tests.test_daemon -v
|
|
138
|
+
```
|
|
139
|
+
|
|
140
|
+
---
|
|
141
|
+
|
|
142
|
+
## Troubleshooting
|
|
143
|
+
|
|
144
|
+
**502 Bad Gateway** — tailscale serve is running but daemon isn't: `trustmux-ctl start`
|
|
145
|
+
|
|
146
|
+
**"Serve not enabled"** — visit the URL printed by `tailscale serve --bg 7432`
|
|
147
|
+
|
|
148
|
+
**Phone can't reach URL** — ensure Tailscale is active on the phone
|
|
149
|
+
|
|
150
|
+
**Need to re-pair** — run `trustmux-pair` and enter the new code on the device
|
trustmux-7.0a6/README.md
ADDED
|
@@ -0,0 +1,131 @@
|
|
|
1
|
+
# Trustmux
|
|
2
|
+
|
|
3
|
+
A mobile companion for [tmux](https://github.com/tmux/tmux) / [Byobu](https://byobu.org) sessions. Run a lightweight daemon on your workstation; monitor and interact with your terminal sessions from your phone over your Tailscale network. No relay server — terminal data stays between your devices.
|
|
4
|
+
|
|
5
|
+
Works with **plain tmux** and with **byobu**. Byobu users get the live status bar chips; plain tmux users get everything else.
|
|
6
|
+
|
|
7
|
+
Two tiers:
|
|
8
|
+
- **Free** — PWA. Install one icon per machine directly from the browser.
|
|
9
|
+
- **Paid** — Native Flutter app with full ANSI colors, multi-machine management, and biometric auth.
|
|
10
|
+
|
|
11
|
+
---
|
|
12
|
+
|
|
13
|
+
## Requirements
|
|
14
|
+
|
|
15
|
+
- tmux (byobu optional but recommended)
|
|
16
|
+
- Python 3.10+
|
|
17
|
+
- [Tailscale](https://tailscale.com) installed, running, and connected
|
|
18
|
+
|
|
19
|
+
---
|
|
20
|
+
|
|
21
|
+
## Install
|
|
22
|
+
|
|
23
|
+
### Homebrew (macOS / Linux)
|
|
24
|
+
|
|
25
|
+
```bash
|
|
26
|
+
brew tap dustinkirkland/trustmux
|
|
27
|
+
brew install trustmux
|
|
28
|
+
trustmux-enable # configure tailscale serve + start daemon
|
|
29
|
+
trustmux-pair # generate pairing code; enter on phone
|
|
30
|
+
```
|
|
31
|
+
|
|
32
|
+
### pip (PyPI)
|
|
33
|
+
|
|
34
|
+
```bash
|
|
35
|
+
pip install trustmux
|
|
36
|
+
trustmux-enable
|
|
37
|
+
trustmux-pair
|
|
38
|
+
```
|
|
39
|
+
|
|
40
|
+
### Debian / Ubuntu (.deb)
|
|
41
|
+
|
|
42
|
+
```bash
|
|
43
|
+
sudo dpkg -i trustmux_7.0_all.deb
|
|
44
|
+
trustmux-enable
|
|
45
|
+
trustmux-pair
|
|
46
|
+
```
|
|
47
|
+
|
|
48
|
+
Add the PPA for automatic updates:
|
|
49
|
+
|
|
50
|
+
```bash
|
|
51
|
+
sudo add-apt-repository ppa:dustinkirkland/trustmux
|
|
52
|
+
sudo apt install trustmux
|
|
53
|
+
```
|
|
54
|
+
|
|
55
|
+
---
|
|
56
|
+
|
|
57
|
+
## Daily use
|
|
58
|
+
|
|
59
|
+
```bash
|
|
60
|
+
trustmux-ctl start # start daemon
|
|
61
|
+
trustmux-ctl stop # stop daemon
|
|
62
|
+
trustmux-ctl restart # restart daemon
|
|
63
|
+
trustmux-ctl status # show URL and running status
|
|
64
|
+
trustmux-ctl log # tail the daemon log
|
|
65
|
+
|
|
66
|
+
trustmux-pair # generate a pairing code for a new device
|
|
67
|
+
trustmux-unpair # list paired devices and remove them
|
|
68
|
+
```
|
|
69
|
+
|
|
70
|
+
---
|
|
71
|
+
|
|
72
|
+
## Setup from source
|
|
73
|
+
|
|
74
|
+
```bash
|
|
75
|
+
cd mobile/
|
|
76
|
+
python3 -m venv .venv
|
|
77
|
+
.venv/bin/pip install -r requirements.txt
|
|
78
|
+
./trustmux-enable
|
|
79
|
+
./trustmux-pair
|
|
80
|
+
```
|
|
81
|
+
|
|
82
|
+
---
|
|
83
|
+
|
|
84
|
+
## Configuration
|
|
85
|
+
|
|
86
|
+
| Path | Purpose |
|
|
87
|
+
|---|---|
|
|
88
|
+
| `~/.config/trustmux/tokens.json` | Paired device session tokens (mode 0600) |
|
|
89
|
+
| `~/.config/trustmux/trustmux.sock` | Admin Unix socket (mode 0600) |
|
|
90
|
+
| `~/.config/trustmux/trustmux.log` | Daemon log (mode 0600) |
|
|
91
|
+
| `~/.config/trustmux/machines.json` | Optional: sibling machines for the machine selector |
|
|
92
|
+
|
|
93
|
+
### Multiple machines
|
|
94
|
+
|
|
95
|
+
```json
|
|
96
|
+
[
|
|
97
|
+
{ "name": "work", "url": "https://work-machine.tail1234.ts.net" },
|
|
98
|
+
{ "name": "personal", "url": "https://personal.tail1234.ts.net" }
|
|
99
|
+
]
|
|
100
|
+
```
|
|
101
|
+
|
|
102
|
+
---
|
|
103
|
+
|
|
104
|
+
## Security
|
|
105
|
+
|
|
106
|
+
- Daemon binds to `127.0.0.1:7432` only — not reachable from the network
|
|
107
|
+
- All traffic encrypted by Tailscale WireGuard; HTTPS via `tailscale serve`
|
|
108
|
+
- No relay server — terminal data never leaves your Tailscale mesh
|
|
109
|
+
- Pairing codes: 6-digit, 5-minute TTL, single-use, max 10 attempts
|
|
110
|
+
- Session tokens: 256-bit random, stored at mode 0600
|
|
111
|
+
|
|
112
|
+
---
|
|
113
|
+
|
|
114
|
+
## Tests
|
|
115
|
+
|
|
116
|
+
```bash
|
|
117
|
+
cd mobile/
|
|
118
|
+
python3 -m unittest tests.test_daemon -v
|
|
119
|
+
```
|
|
120
|
+
|
|
121
|
+
---
|
|
122
|
+
|
|
123
|
+
## Troubleshooting
|
|
124
|
+
|
|
125
|
+
**502 Bad Gateway** — tailscale serve is running but daemon isn't: `trustmux-ctl start`
|
|
126
|
+
|
|
127
|
+
**"Serve not enabled"** — visit the URL printed by `tailscale serve --bg 7432`
|
|
128
|
+
|
|
129
|
+
**Phone can't reach URL** — ensure Tailscale is active on the phone
|
|
130
|
+
|
|
131
|
+
**Need to re-pair** — run `trustmux-pair` and enter the new code on the device
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
[build-system]
|
|
2
|
+
requires = ["setuptools>=68", "wheel"]
|
|
3
|
+
build-backend = "setuptools.build_meta"
|
|
4
|
+
|
|
5
|
+
[project]
|
|
6
|
+
name = "trustmux"
|
|
7
|
+
version = "7.0a6"
|
|
8
|
+
description = "Monitor and interact with tmux/Byobu sessions from your phone"
|
|
9
|
+
readme = "README.md"
|
|
10
|
+
license = {text = "GPL-3.0-or-later"}
|
|
11
|
+
authors = [{name = "Dustin Kirkland", email = "dustin.kirkland@gmail.com"}]
|
|
12
|
+
requires-python = ">=3.9"
|
|
13
|
+
dependencies = ["tornado>=6.0"]
|
|
14
|
+
keywords = ["tmux", "byobu", "terminal", "mobile", "pwa"]
|
|
15
|
+
classifiers = [
|
|
16
|
+
"Development Status :: 4 - Beta",
|
|
17
|
+
"Environment :: Console",
|
|
18
|
+
"License :: OSI Approved :: GNU General Public License v3 or later (GPLv3+)",
|
|
19
|
+
"Programming Language :: Python :: 3",
|
|
20
|
+
"Topic :: Terminals :: Terminal Emulators/X Terminals",
|
|
21
|
+
]
|
|
22
|
+
|
|
23
|
+
[project.urls]
|
|
24
|
+
Homepage = "https://trustmux.app"
|
|
25
|
+
Repository = "https://github.com/dustinkirkland/byobu"
|
|
26
|
+
Issues = "https://github.com/dustinkirkland/byobu/issues"
|
|
27
|
+
|
|
28
|
+
[project.scripts]
|
|
29
|
+
trustmux = "trustmux._daemon:main"
|
|
30
|
+
trustmux-ctl = "trustmux._ctl:main"
|
|
31
|
+
trustmux-pair = "trustmux._pair:main"
|
|
32
|
+
trustmux-unpair = "trustmux._unpair:main"
|
|
33
|
+
trustmux-enable = "trustmux._enable:main"
|
|
34
|
+
trustmux-disable = "trustmux._disable:main"
|
|
35
|
+
|
|
36
|
+
[tool.setuptools.packages.find]
|
|
37
|
+
where = ["."]
|
|
38
|
+
include = ["trustmux*"]
|
|
39
|
+
|
|
40
|
+
[tool.setuptools.package-data]
|
|
41
|
+
trustmux = [
|
|
42
|
+
"static/index.html",
|
|
43
|
+
"static/app.js",
|
|
44
|
+
"static/sw.js",
|
|
45
|
+
"static/trustmux.svg",
|
|
46
|
+
"static/trustmux-logo.svg",
|
|
47
|
+
"static/icons/icon-192.png",
|
|
48
|
+
"static/icons/icon-512.png",
|
|
49
|
+
]
|
trustmux-7.0a6/setup.cfg
ADDED