prim-ctrl 0.7.12__tar.gz → 0.8.0__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.
- {prim_ctrl-0.7.12 → prim_ctrl-0.8.0}/PKG-INFO +48 -51
- {prim_ctrl-0.7.12 → prim_ctrl-0.8.0}/README.md +37 -36
- {prim_ctrl-0.7.12 → prim_ctrl-0.8.0}/prim_ctrl/__main__.py +425 -223
- {prim_ctrl-0.7.12 → prim_ctrl-0.8.0}/pyproject.toml +18 -14
- {prim_ctrl-0.7.12 → prim_ctrl-0.8.0}/LICENSE +0 -0
- {prim_ctrl-0.7.12 → prim_ctrl-0.8.0}/prim_ctrl/__init__.py +0 -0
|
@@ -1,26 +1,22 @@
|
|
|
1
|
-
Metadata-Version: 2.
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
2
|
Name: prim-ctrl
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 0.8.0
|
|
4
4
|
Summary: Primitive Ctrl - Remote control of your phone's Primitive FTPd Android SFTP server and optionally Tailscale VPN.
|
|
5
|
-
License: Apache-2.0
|
|
5
|
+
License-Expression: Apache-2.0
|
|
6
|
+
License-File: LICENSE
|
|
6
7
|
Author: Laszlo Magyar
|
|
7
8
|
Author-email: lmagyar1973@gmail.com
|
|
8
|
-
Requires-Python: >=3.12
|
|
9
|
+
Requires-Python: >=3.12, <4.0
|
|
9
10
|
Classifier: Development Status :: 4 - Beta
|
|
10
11
|
Classifier: Environment :: Console
|
|
11
|
-
Classifier: License :: OSI Approved :: Apache Software License
|
|
12
12
|
Classifier: Operating System :: OS Independent
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
Requires-Dist:
|
|
17
|
-
Requires-Dist:
|
|
18
|
-
Requires-Dist:
|
|
19
|
-
Requires-Dist: platformdirs (>=4.3.6,<5.0.0)
|
|
20
|
-
Requires-Dist: tailscale (>=0.6.1,<0.7.0)
|
|
21
|
-
Requires-Dist: zeroconf (>=0.136.2,<0.137.0)
|
|
13
|
+
Requires-Dist: aiohttp (>=3.13.2)
|
|
14
|
+
Requires-Dist: asyncssh (>=2.21.1)
|
|
15
|
+
Requires-Dist: dnspython (>=2.8.0)
|
|
16
|
+
Requires-Dist: platformdirs (>=4.5.0)
|
|
17
|
+
Requires-Dist: tailscale (>=0.8.0,<0.9.0)
|
|
18
|
+
Requires-Dist: zeroconf (>=0.148.0)
|
|
22
19
|
Project-URL: Change Log, https://github.com/lmagyar/prim-ctrl/blob/main/CHANGELOG.md
|
|
23
|
-
Project-URL: Repository, https://github.com/lmagyar/prim-ctrl
|
|
24
20
|
Description-Content-Type: text/markdown
|
|
25
21
|
|
|
26
22
|
|
|
@@ -32,7 +28,7 @@ Though Primitive FTPd consumes minimal power when it is not used, remote start/s
|
|
|
32
28
|
|
|
33
29
|
But in case of Tailscale, it is a real battery and mobile network data drain when not used, local and remote start/stop is de facto very useful.
|
|
34
30
|
|
|
35
|
-
With the help of this script you can sync your phone with eg. your home NAS server whereever your phone is on a WiFi network - or even on cellular. Your phone doesn't have to be on the same
|
|
31
|
+
With the help of this script you can sync your phone with eg. your home NAS server whereever your phone is on a WiFi network - or even on cellular. Your phone doesn't have to be on the same WiFi to make zeroconf working when you have alternative access through VPN. But VPN can help even if the phone is on the same WiFi as eg. your laptop, but due to networking restrictions they can't access each other directly (eg. hotel or airport WiFi).
|
|
36
32
|
|
|
37
33
|
See my other project, https://github.com/lmagyar/prim-sync, for bidirectional and unidirectional sync over SFTP (multiplatform Python script optimized for the Primitive FTPd SFTP server).
|
|
38
34
|
|
|
@@ -142,28 +138,29 @@ But if the script runs scheduled, we can't be sure whether the phone is on WiFi,
|
|
|
142
138
|
Notes:
|
|
143
139
|
- Even when -b option is **not** used, the script will output 'connected=(local|remote)', what you can use to determine whether to use -a option for the prim-sync script
|
|
144
140
|
- If local Tailscale VPN was disconnected for a longer period (several hours), the public DNS records for Funnel are removed by Tailscale, and after connecting local Tailscale VPN to the tailnet it can take up to 10 minutes for Funnel's public DNS records to show up for your tailnet domain. If the script connects local Tailscale VPN to the tailnet, then it regularly checks and waits up to 10 minutes for the public DNS records to get updated.
|
|
141
|
+
- If you want to interrupt the synchronization, press Ctrl-C once, and wait few seconds until the script properly removes temporary files, saves it's internal state and restores Primitive FTPd and VPN states.
|
|
145
142
|
|
|
146
143
|
### Some example
|
|
147
144
|
|
|
148
145
|
<details><summary>Ubuntu</summary>
|
|
149
146
|
|
|
150
147
|
```
|
|
151
|
-
prim-ctrl Automate youraccount@gmail.com "SOME MANUFACTURER XXX" automate your-phone-pftpd id_ed25519_sftp --tailscale tailxxxx.ts.net your-phone 2222 --funnel your-laptop 12345 /prim-ctrl 8443
|
|
152
|
-
prim-ctrl Automate youraccount@gmail.com "SOME MANUFACTURER XXX" automate your-phone-pftpd id_ed25519_sftp --tailscale tailxxxx.ts.net your-phone 2222 --funnel your-laptop 12345 /prim-ctrl 8443
|
|
148
|
+
prim-ctrl Automate youraccount@gmail.com "SOME MANUFACTURER XXX" automate your-phone-pftpd id_ed25519_sftp --tailscale tailxxxx.ts.net tailscale-secretfile your-phone 2222 --funnel your-laptop 12345 /prim-ctrl 8443 -t -i start -b
|
|
149
|
+
prim-ctrl Automate youraccount@gmail.com "SOME MANUFACTURER XXX" automate your-phone-pftpd id_ed25519_sftp --tailscale tailxxxx.ts.net tailscale-secretfile your-phone 2222 --funnel your-laptop 12345 /prim-ctrl 8443 -t -i stop -r ${PREV_STATE}
|
|
153
150
|
```
|
|
154
151
|
</details>
|
|
155
152
|
<details><summary>Windows</summary>
|
|
156
153
|
|
|
157
154
|
```
|
|
158
|
-
prim-ctrl Automate youraccount@gmail.com "SOME MANUFACTURER XXXX" automate your-phone-pftpd id_ed25519_sftp --tailscale tailxxxx.ts.net your-phone 2222 --funnel your-laptop 12345 /prim-ctrl 8443
|
|
159
|
-
prim-ctrl Automate youraccount@gmail.com "SOME MANUFACTURER XXXX" automate your-phone-pftpd id_ed25519_sftp --tailscale tailxxxx.ts.net your-phone 2222 --funnel your-laptop 12345 /prim-ctrl 8443
|
|
155
|
+
prim-ctrl Automate youraccount@gmail.com "SOME MANUFACTURER XXXX" automate your-phone-pftpd id_ed25519_sftp --tailscale tailxxxx.ts.net tailscale-secretfile your-phone 2222 --funnel your-laptop 12345 /prim-ctrl 8443 -t -i start -b
|
|
156
|
+
prim-ctrl Automate youraccount@gmail.com "SOME MANUFACTURER XXXX" automate your-phone-pftpd id_ed25519_sftp --tailscale tailxxxx.ts.net tailscale-secretfile your-phone 2222 --funnel your-laptop 12345 /prim-ctrl 8443 -t -i stop -r !PREV_STATE!
|
|
160
157
|
```
|
|
161
158
|
</details>
|
|
162
159
|
|
|
163
160
|
### Options
|
|
164
161
|
|
|
165
162
|
```
|
|
166
|
-
usage: prim-ctrl Automate [-h] [-i {test,start,stop}] [-t] [-s] [--debug] [--tailscale tailnet remote-machine-name sftp-port] [--funnel local-machine-name local-port local-path external-port
|
|
163
|
+
usage: prim-ctrl Automate [-h] [-i {test,start,stop}] [-t] [-s] [--debug] [--tailscale tailnet secretfile remote-machine-name sftp-port] [--funnel local-machine-name local-port local-path external-port] [-rv DAYS] [-ac] [-b] [-r STATE]
|
|
167
164
|
automate-account automate-device automate-tokenfile server-name keyfile
|
|
168
165
|
|
|
169
166
|
Remote control of your phone's Primitive FTPd and optionally Tailscale app statuses via the Automate app, for more details see https://github.com/lmagyar/prim-ctrl
|
|
@@ -175,47 +172,47 @@ Note: optionally if your laptop is accessible through Tailscale Funnel then VPN
|
|
|
175
172
|
Output: even when -b option is not used, the script will output 'connected=(local|remote)', what you can use to determine whether to use -a option for the prim-sync script
|
|
176
173
|
|
|
177
174
|
positional arguments:
|
|
178
|
-
automate-account
|
|
179
|
-
automate-device
|
|
180
|
-
automate-tokenfile
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
server-name
|
|
185
|
-
keyfile
|
|
175
|
+
automate-account your Google account email you set up in the Automate flow's 2nd block's (Set variable google_account to...) Value field
|
|
176
|
+
automate-device the device name you can see at the Automate flow's Cloud receive block's This device field
|
|
177
|
+
automate-tokenfile filename containing Automates's Secret that located under your .secrets folder
|
|
178
|
+
(generated on https://llamalab.com/automate/cloud, use the same Google account you set the automate_account option to)
|
|
179
|
+
Note: if the account you use to send messages is different from the automate_account option,
|
|
180
|
+
set it up in the Automate flow's 3rd block's (Set variable other_managing_accounts to...) Value field
|
|
181
|
+
server-name the Servername configuration option from Primitive FTPd app
|
|
182
|
+
keyfile private SSH key filename located under your .ssh folder, see the documentation of prim-sync for more details
|
|
186
183
|
|
|
187
184
|
options:
|
|
188
|
-
-h, --help
|
|
189
|
-
-i {test,start,stop},
|
|
190
|
-
what to do with the apps, default: test
|
|
185
|
+
-h, --help show this help message and exit
|
|
186
|
+
-i, --intent {test,start,stop} what to do with the apps, default: test
|
|
191
187
|
|
|
192
188
|
logging:
|
|
193
|
-
-t, --timestamp
|
|
194
|
-
-s, --silent
|
|
195
|
-
--debug
|
|
189
|
+
-t, --timestamp prefix each message with an UTC timestamp
|
|
190
|
+
-s, --silent only errors printed
|
|
191
|
+
--debug use debug level logging and add stack trace for exceptions, disables the --silent and enables the --timestamp options
|
|
196
192
|
|
|
197
193
|
VPN:
|
|
198
194
|
To use --tailscale option you must install Tailscale and configure Tailscale VPN on your phone and your laptop
|
|
199
195
|
To use --funnel option you must configure Tailscale Funnel on your laptop for prim-ctrl's local webhook to accept responses from the Automate app
|
|
200
196
|
(eg.: tailscale funnel --bg --https=8443 --set-path=/prim-ctrl "http://127.0.0.1:12345")
|
|
201
|
-
Note: --funnel, --backup-state and --restore-state options can be used only when --tailscale is used
|
|
197
|
+
Note: --funnel, --restart-vpn, --backup-state and --restore-state options can be used only when --tailscale is used
|
|
202
198
|
Note: --backup-state is accurate only, when --funnel is used
|
|
203
199
|
Note: --accept-cellular option can be used only when --funnel is used
|
|
204
200
|
|
|
205
|
-
--tailscale tailnet remote-machine-name sftp-port
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
-
|
|
218
|
-
-
|
|
219
|
-
-
|
|
201
|
+
--tailscale tailnet secretfile remote-machine-name sftp-port
|
|
202
|
+
tailnet: your Tailscale tailnet name (eg. tailxxxx.ts.net)
|
|
203
|
+
secretfile: filename containing Tailscale's Client secret (not API access token, not Auth key) that located under your .secrets folder
|
|
204
|
+
(generated on https://login.tailscale.com/admin/settings/trust-credentials, with 'devices:core:read' scope,
|
|
205
|
+
save only the Client secret in the file, the Client ID is part of it)
|
|
206
|
+
remote-machine-name: your phone's name within your tailnet (just the name, without the tailnet)
|
|
207
|
+
sftp-port: Primitive FTPd's sftp port
|
|
208
|
+
--funnel local-machine-name local-port local-path external-port
|
|
209
|
+
local-machine-name: your laptop's name within your tailnet (just the name, without the tailnet)
|
|
210
|
+
local-port: 12345 - if you used the example tailscale funnel command above (the local webhook will be started on this port)
|
|
211
|
+
local-path: /prim-ctrl - if you used the example tailscale funnel command above
|
|
212
|
+
external-port: 8443 - if you used the example tailscale funnel command above
|
|
213
|
+
-rv, --restart-vpn DAYS in case of start, even if connected locally, but VPN is not used in the past DAYS, start VPN up
|
|
214
|
+
-ac, --accept-cellular in case of start, if WiFi is not connected, don't return error, but start VPN up
|
|
215
|
+
-b, --backup-state in case of start, backup current state to stdout as single string (in case of an error, it will try to restore the original state but will not write it to stdout)
|
|
216
|
+
-r, --restore-state STATE in case of stop, restore previous state from STATE (use -b to get a valid STATE string)
|
|
220
217
|
```
|
|
221
218
|
|
|
@@ -7,7 +7,7 @@ Though Primitive FTPd consumes minimal power when it is not used, remote start/s
|
|
|
7
7
|
|
|
8
8
|
But in case of Tailscale, it is a real battery and mobile network data drain when not used, local and remote start/stop is de facto very useful.
|
|
9
9
|
|
|
10
|
-
With the help of this script you can sync your phone with eg. your home NAS server whereever your phone is on a WiFi network - or even on cellular. Your phone doesn't have to be on the same
|
|
10
|
+
With the help of this script you can sync your phone with eg. your home NAS server whereever your phone is on a WiFi network - or even on cellular. Your phone doesn't have to be on the same WiFi to make zeroconf working when you have alternative access through VPN. But VPN can help even if the phone is on the same WiFi as eg. your laptop, but due to networking restrictions they can't access each other directly (eg. hotel or airport WiFi).
|
|
11
11
|
|
|
12
12
|
See my other project, https://github.com/lmagyar/prim-sync, for bidirectional and unidirectional sync over SFTP (multiplatform Python script optimized for the Primitive FTPd SFTP server).
|
|
13
13
|
|
|
@@ -117,28 +117,29 @@ But if the script runs scheduled, we can't be sure whether the phone is on WiFi,
|
|
|
117
117
|
Notes:
|
|
118
118
|
- Even when -b option is **not** used, the script will output 'connected=(local|remote)', what you can use to determine whether to use -a option for the prim-sync script
|
|
119
119
|
- If local Tailscale VPN was disconnected for a longer period (several hours), the public DNS records for Funnel are removed by Tailscale, and after connecting local Tailscale VPN to the tailnet it can take up to 10 minutes for Funnel's public DNS records to show up for your tailnet domain. If the script connects local Tailscale VPN to the tailnet, then it regularly checks and waits up to 10 minutes for the public DNS records to get updated.
|
|
120
|
+
- If you want to interrupt the synchronization, press Ctrl-C once, and wait few seconds until the script properly removes temporary files, saves it's internal state and restores Primitive FTPd and VPN states.
|
|
120
121
|
|
|
121
122
|
### Some example
|
|
122
123
|
|
|
123
124
|
<details><summary>Ubuntu</summary>
|
|
124
125
|
|
|
125
126
|
```
|
|
126
|
-
prim-ctrl Automate youraccount@gmail.com "SOME MANUFACTURER XXX" automate your-phone-pftpd id_ed25519_sftp --tailscale tailxxxx.ts.net your-phone 2222 --funnel your-laptop 12345 /prim-ctrl 8443
|
|
127
|
-
prim-ctrl Automate youraccount@gmail.com "SOME MANUFACTURER XXX" automate your-phone-pftpd id_ed25519_sftp --tailscale tailxxxx.ts.net your-phone 2222 --funnel your-laptop 12345 /prim-ctrl 8443
|
|
127
|
+
prim-ctrl Automate youraccount@gmail.com "SOME MANUFACTURER XXX" automate your-phone-pftpd id_ed25519_sftp --tailscale tailxxxx.ts.net tailscale-secretfile your-phone 2222 --funnel your-laptop 12345 /prim-ctrl 8443 -t -i start -b
|
|
128
|
+
prim-ctrl Automate youraccount@gmail.com "SOME MANUFACTURER XXX" automate your-phone-pftpd id_ed25519_sftp --tailscale tailxxxx.ts.net tailscale-secretfile your-phone 2222 --funnel your-laptop 12345 /prim-ctrl 8443 -t -i stop -r ${PREV_STATE}
|
|
128
129
|
```
|
|
129
130
|
</details>
|
|
130
131
|
<details><summary>Windows</summary>
|
|
131
132
|
|
|
132
133
|
```
|
|
133
|
-
prim-ctrl Automate youraccount@gmail.com "SOME MANUFACTURER XXXX" automate your-phone-pftpd id_ed25519_sftp --tailscale tailxxxx.ts.net your-phone 2222 --funnel your-laptop 12345 /prim-ctrl 8443
|
|
134
|
-
prim-ctrl Automate youraccount@gmail.com "SOME MANUFACTURER XXXX" automate your-phone-pftpd id_ed25519_sftp --tailscale tailxxxx.ts.net your-phone 2222 --funnel your-laptop 12345 /prim-ctrl 8443
|
|
134
|
+
prim-ctrl Automate youraccount@gmail.com "SOME MANUFACTURER XXXX" automate your-phone-pftpd id_ed25519_sftp --tailscale tailxxxx.ts.net tailscale-secretfile your-phone 2222 --funnel your-laptop 12345 /prim-ctrl 8443 -t -i start -b
|
|
135
|
+
prim-ctrl Automate youraccount@gmail.com "SOME MANUFACTURER XXXX" automate your-phone-pftpd id_ed25519_sftp --tailscale tailxxxx.ts.net tailscale-secretfile your-phone 2222 --funnel your-laptop 12345 /prim-ctrl 8443 -t -i stop -r !PREV_STATE!
|
|
135
136
|
```
|
|
136
137
|
</details>
|
|
137
138
|
|
|
138
139
|
### Options
|
|
139
140
|
|
|
140
141
|
```
|
|
141
|
-
usage: prim-ctrl Automate [-h] [-i {test,start,stop}] [-t] [-s] [--debug] [--tailscale tailnet remote-machine-name sftp-port] [--funnel local-machine-name local-port local-path external-port
|
|
142
|
+
usage: prim-ctrl Automate [-h] [-i {test,start,stop}] [-t] [-s] [--debug] [--tailscale tailnet secretfile remote-machine-name sftp-port] [--funnel local-machine-name local-port local-path external-port] [-rv DAYS] [-ac] [-b] [-r STATE]
|
|
142
143
|
automate-account automate-device automate-tokenfile server-name keyfile
|
|
143
144
|
|
|
144
145
|
Remote control of your phone's Primitive FTPd and optionally Tailscale app statuses via the Automate app, for more details see https://github.com/lmagyar/prim-ctrl
|
|
@@ -150,46 +151,46 @@ Note: optionally if your laptop is accessible through Tailscale Funnel then VPN
|
|
|
150
151
|
Output: even when -b option is not used, the script will output 'connected=(local|remote)', what you can use to determine whether to use -a option for the prim-sync script
|
|
151
152
|
|
|
152
153
|
positional arguments:
|
|
153
|
-
automate-account
|
|
154
|
-
automate-device
|
|
155
|
-
automate-tokenfile
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
server-name
|
|
160
|
-
keyfile
|
|
154
|
+
automate-account your Google account email you set up in the Automate flow's 2nd block's (Set variable google_account to...) Value field
|
|
155
|
+
automate-device the device name you can see at the Automate flow's Cloud receive block's This device field
|
|
156
|
+
automate-tokenfile filename containing Automates's Secret that located under your .secrets folder
|
|
157
|
+
(generated on https://llamalab.com/automate/cloud, use the same Google account you set the automate_account option to)
|
|
158
|
+
Note: if the account you use to send messages is different from the automate_account option,
|
|
159
|
+
set it up in the Automate flow's 3rd block's (Set variable other_managing_accounts to...) Value field
|
|
160
|
+
server-name the Servername configuration option from Primitive FTPd app
|
|
161
|
+
keyfile private SSH key filename located under your .ssh folder, see the documentation of prim-sync for more details
|
|
161
162
|
|
|
162
163
|
options:
|
|
163
|
-
-h, --help
|
|
164
|
-
-i {test,start,stop},
|
|
165
|
-
what to do with the apps, default: test
|
|
164
|
+
-h, --help show this help message and exit
|
|
165
|
+
-i, --intent {test,start,stop} what to do with the apps, default: test
|
|
166
166
|
|
|
167
167
|
logging:
|
|
168
|
-
-t, --timestamp
|
|
169
|
-
-s, --silent
|
|
170
|
-
--debug
|
|
168
|
+
-t, --timestamp prefix each message with an UTC timestamp
|
|
169
|
+
-s, --silent only errors printed
|
|
170
|
+
--debug use debug level logging and add stack trace for exceptions, disables the --silent and enables the --timestamp options
|
|
171
171
|
|
|
172
172
|
VPN:
|
|
173
173
|
To use --tailscale option you must install Tailscale and configure Tailscale VPN on your phone and your laptop
|
|
174
174
|
To use --funnel option you must configure Tailscale Funnel on your laptop for prim-ctrl's local webhook to accept responses from the Automate app
|
|
175
175
|
(eg.: tailscale funnel --bg --https=8443 --set-path=/prim-ctrl "http://127.0.0.1:12345")
|
|
176
|
-
Note: --funnel, --backup-state and --restore-state options can be used only when --tailscale is used
|
|
176
|
+
Note: --funnel, --restart-vpn, --backup-state and --restore-state options can be used only when --tailscale is used
|
|
177
177
|
Note: --backup-state is accurate only, when --funnel is used
|
|
178
178
|
Note: --accept-cellular option can be used only when --funnel is used
|
|
179
179
|
|
|
180
|
-
--tailscale tailnet remote-machine-name sftp-port
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
-
|
|
193
|
-
-
|
|
194
|
-
-
|
|
180
|
+
--tailscale tailnet secretfile remote-machine-name sftp-port
|
|
181
|
+
tailnet: your Tailscale tailnet name (eg. tailxxxx.ts.net)
|
|
182
|
+
secretfile: filename containing Tailscale's Client secret (not API access token, not Auth key) that located under your .secrets folder
|
|
183
|
+
(generated on https://login.tailscale.com/admin/settings/trust-credentials, with 'devices:core:read' scope,
|
|
184
|
+
save only the Client secret in the file, the Client ID is part of it)
|
|
185
|
+
remote-machine-name: your phone's name within your tailnet (just the name, without the tailnet)
|
|
186
|
+
sftp-port: Primitive FTPd's sftp port
|
|
187
|
+
--funnel local-machine-name local-port local-path external-port
|
|
188
|
+
local-machine-name: your laptop's name within your tailnet (just the name, without the tailnet)
|
|
189
|
+
local-port: 12345 - if you used the example tailscale funnel command above (the local webhook will be started on this port)
|
|
190
|
+
local-path: /prim-ctrl - if you used the example tailscale funnel command above
|
|
191
|
+
external-port: 8443 - if you used the example tailscale funnel command above
|
|
192
|
+
-rv, --restart-vpn DAYS in case of start, even if connected locally, but VPN is not used in the past DAYS, start VPN up
|
|
193
|
+
-ac, --accept-cellular in case of start, if WiFi is not connected, don't return error, but start VPN up
|
|
194
|
+
-b, --backup-state in case of start, backup current state to stdout as single string (in case of an error, it will try to restore the original state but will not write it to stdout)
|
|
195
|
+
-r, --restore-state STATE in case of stop, restore previous state from STATE (use -b to get a valid STATE string)
|
|
195
196
|
```
|