Skip to content

Commit 2c067df

Browse files
committed
layer: Add Raspberry Pi Connect
Two new layers added to enable installation of Raspberry Pi Connect (with or without screen-sharing), plus Auth key support. An accompanying companion document provides additional information. Whether or not the client starts at boot is controlled via a config variable which defaults to on (since embedded/industrial deployments will typically want Connect to start automatically at boot).
1 parent 573dbc0 commit 2c067df

File tree

10 files changed

+918
-0
lines changed

10 files changed

+918
-0
lines changed

docs/layer/index.html

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -905,6 +905,20 @@ <h3>Kernel</h3>
905905

906906
</div>
907907

908+
<h3>Service</h3>
909+
<div class="layer-list">
910+
911+
<div class="layer-item">
912+
<a href="rpi-connect.html">rpi-connect</a><span class="layer-desc">- Raspberry Pi Connect client with screen-sharing support and
913+
remote shell access</span>
914+
</div>
915+
916+
<div class="layer-item">
917+
<a href="rpi-connect-lite.html">rpi-connect-lite</a><span class="layer-desc">- Raspberry Pi Connect client with remote shell access</span>
918+
</div>
919+
920+
</div>
921+
908922
<h3>Suite</h3>
909923
<div class="layer-list">
910924

docs/layer/rpi-connect-lite.html

Lines changed: 357 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,357 @@
1+
<!DOCTYPE html>
2+
<html lang="en">
3+
<head>
4+
<meta charset="UTF-8">
5+
<meta name="viewport" content="width=device-width, initial-scale=1.0">
6+
<title>rpi-connect-lite - Layer Documentation</title>
7+
<style>
8+
body { font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif; max-width: 1200px; margin: 0 auto; padding: 20px; line-height: 1.6; }
9+
.header { border-bottom: 2px solid #eee; padding-bottom: 20px; margin-bottom: 30px; }
10+
.section { margin-bottom: 30px; }
11+
.badge { display: inline-block; background: #007acc; color: white; padding: 2px 8px; border-radius: 3px; font-size: 12px; margin-right: 10px; }
12+
.policy-immediate { background: #28a745; color: white; text-decoration: none; }
13+
.policy-lazy { background: #ffc107; color: #212529; text-decoration: none; }
14+
.policy-force { background: #dc3545; color: white; text-decoration: none; }
15+
.policy-skip { background: #6c757d; color: white; text-decoration: none; }
16+
.policy-immediate:hover { background: #1e7e34; }
17+
.policy-lazy:hover { background: #e0a800; }
18+
.policy-force:hover { background: #c82333; }
19+
.policy-skip:hover { background: #545b62; }
20+
table { width: 100%; border-collapse: collapse; margin-top: 10px; table-layout: auto; }
21+
th, td { text-align: left; padding: 8px 12px; border-bottom: 1px solid #ddd; }
22+
th { background: #f8f9fa; font-weight: 600; }
23+
td:nth-child(3) {
24+
width: auto;
25+
}
26+
code { background: #f1f3f4; padding: 2px 4px; border-radius: 3px; font-family: 'Monaco', monospace; font-size: 14px; }
27+
code.long-default { word-break: break-all; white-space: pre-wrap; display: block; min-width: 30ch; }
28+
.back-link { margin-bottom: 20px; }
29+
.back-link a { text-decoration: none; color: #007acc; }
30+
.deps { display: flex; flex-wrap: wrap; gap: 5px; }
31+
.dep-badge { background: #28a745; color: white; padding: 2px 6px; border-radius: 3px; font-size: 11px; text-decoration: none; }
32+
.dep-badge:hover { background: #1e7e34; }
33+
/* Main content headers styling */
34+
h1, h2, h3, h4, h5, h6 { color: #333; margin-top: 20px; margin-bottom: 10px; }
35+
/* Companion documentation content styling */
36+
.companion-content h1, .companion-content h2, .companion-content h3, .companion-content h4, .companion-content h5, .companion-content h6 { color: #333; margin-top: 20px; margin-bottom: 10px; }
37+
.companion-content p { margin: 10px 0; }
38+
.companion-content ul, .companion-content ol { margin: 10px 0; padding-left: 30px; }
39+
.companion-content blockquote { border-left: 4px solid #007acc; padding-left: 15px; margin: 15px 0; color: #666; background: #f8f9fa; padding: 10px 15px; }
40+
.companion-content pre { background: #f8f9fa; padding: 15px; border-radius: 5px; overflow-x: auto; border-left: 4px solid #007acc; }
41+
.companion-content table { border: 1px solid #ddd; }
42+
.companion-content th, .companion-content td { border: 1px solid #ddd; }
43+
44+
/* AsciiDoc admonition blocks (NOTE, TIP, WARNING, etc.) */
45+
.admonitionblock {
46+
margin: 1.5em 0;
47+
padding: 0.4em 0.6em;
48+
border-left: 4px solid;
49+
background: #f8f9fa;
50+
border-radius: 0 4px 4px 0;
51+
}
52+
53+
.admonitionblock .title {
54+
font-weight: bold;
55+
text-transform: uppercase;
56+
font-size: 0.85em;
57+
margin-bottom: 0.25em;
58+
letter-spacing: 0.5px;
59+
}
60+
61+
.admonitionblock .content {
62+
margin: 0;
63+
}
64+
65+
/* Reduce spacing for paragraphs inside admonitions */
66+
.admonitionblock p {
67+
margin: 0.25em 0;
68+
}
69+
70+
.admonitionblock p:first-child {
71+
margin-top: 0;
72+
}
73+
74+
.admonitionblock p:last-child {
75+
margin-bottom: 0;
76+
}
77+
78+
/* Specific admonition types */
79+
.admonitionblock.note {
80+
border-color: #17a2b8;
81+
background: #d1ecf1;
82+
}
83+
84+
.admonitionblock.note .title {
85+
color: #0c5460;
86+
}
87+
88+
.admonitionblock.tip {
89+
border-color: #28a745;
90+
background: #d4edda;
91+
}
92+
93+
.admonitionblock.tip .title {
94+
color: #155724;
95+
}
96+
97+
.admonitionblock.important {
98+
border-color: #ffc107;
99+
background: #fff3cd;
100+
}
101+
102+
.admonitionblock.important .title {
103+
color: #856404;
104+
}
105+
106+
.admonitionblock.warning,
107+
.admonitionblock.caution {
108+
border-color: #dc3545;
109+
background: #f8d7da;
110+
}
111+
112+
.admonitionblock.warning .title,
113+
.admonitionblock.caution .title {
114+
color: #721c24;
115+
}
116+
</style>
117+
</head>
118+
<body>
119+
<div class="back-link">
120+
<a href="index.html">← Back to Layer Index</a>
121+
</div>
122+
123+
<div class="header">
124+
<h1>rpi-connect-lite</h1>
125+
<span class="badge">service</span>
126+
<span class="badge">v1.0.0</span>
127+
<p>Raspberry Pi Connect client with remote shell access</p>
128+
</div>
129+
130+
131+
<div class="section">
132+
<h2>Additional Documentation</h2>
133+
<div class="companion-content">
134+
<div class="sect1">
135+
<h2 id="_installation">Installation</h2>
136+
<div class="sectionbody">
137+
<div class="paragraph">
138+
<p>Configuration variable <code>IGconf_connect_on</code> provided by this layer dictates whether Raspberry Pi Connect is enabled at system start up. This is equivalent to running <code>rpi-connect on</code> from the device command line.</p>
139+
</div>
140+
</div>
141+
</div>
142+
<div class="sect1">
143+
<h2 id="_authentication_key">Authentication Key</h2>
144+
<div class="sectionbody">
145+
<div class="paragraph">
146+
<p>To link your device to your Raspberry Pi Connect account automatically, generate an Auth key in your account Settings and set <code>IGconf_connect_authkey</code> to either:</p>
147+
</div>
148+
<div class="ulist">
149+
<ul>
150+
<li>
151+
<p>An absolute path to a file containing the key, or</p>
152+
</li>
153+
<li>
154+
<p>The key value itself</p>
155+
</li>
156+
</ul>
157+
</div>
158+
<div class="paragraph">
159+
<p>Like other variables, <code>IGconf_connect_authkey</code> can be set on the command line or via the config system. For example:</p>
160+
</div>
161+
<div class="listingblock">
162+
<div class="content">
163+
<pre class="highlight"><code class="language-bash" data-lang="bash">$ rpi-image-gen build &lt;args&gt; -- IGconf_connect_authkey=$KEY</code></pre>
164+
</div>
165+
</div>
166+
<div class="listingblock">
167+
<div class="content">
168+
<pre class="highlight"><code class="language-yaml" data-lang="yaml">connect:
169+
authkey: /path/to/file</code></pre>
170+
</div>
171+
</div>
172+
<div class="listingblock">
173+
<div class="content">
174+
<pre class="highlight"><code class="language-yaml" data-lang="yaml">connect:
175+
authkey: $KEY</code></pre>
176+
</div>
177+
</div>
178+
</div>
179+
</div>
180+
<div class="sect1">
181+
<h2 id="_systemd">systemd</h2>
182+
<div class="sectionbody">
183+
<div class="paragraph">
184+
<p>This layer enables user lingering for <code>IGconf_device_user1</code> so that Connect runs even if the user is not logged in. See <a href="https://www.freedesktop.org/software/systemd/man/latest/loginctl.html" target="_blank" rel="noopener">systemd loginctl</a>.</p>
185+
</div>
186+
</div>
187+
</div>
188+
<div class="sect1">
189+
<h2 id="_suitability">Suitability</h2>
190+
<div class="sectionbody">
191+
<div class="paragraph">
192+
<p>Choose the layer that matches your deployment and needs:</p>
193+
</div>
194+
<div class="ulist">
195+
<ul>
196+
<li>
197+
<p><strong>rpi-connect-lite</strong> (no screen-sharing support: remote shell only)</p>
198+
<div class="ulist">
199+
<ul>
200+
<li>
201+
<p>Headless devices or systems without a Desktop</p>
202+
</li>
203+
<li>
204+
<p>Low-resource machines (limited CPU/RAM/disk)</p>
205+
</li>
206+
<li>
207+
<p>Servers or remote-only nodes</p>
208+
</li>
209+
<li>
210+
<p>When Desktop screen sharing is not required</p>
211+
</li>
212+
</ul>
213+
</div>
214+
</li>
215+
<li>
216+
<p><strong>rpi-connect</strong> (supports screen-sharing and remote shell)</p>
217+
<div class="ulist">
218+
<ul>
219+
<li>
220+
<p>Remote access to the Desktop is required</p>
221+
</li>
222+
<li>
223+
<p>Need the full feature set and widest compatibility</p>
224+
</li>
225+
</ul>
226+
</div>
227+
</li>
228+
</ul>
229+
</div>
230+
<div class="paragraph">
231+
<p>If unsure: use the full client on Desktop systems; use the lite client on headless devices.</p>
232+
</div>
233+
<div class="paragraph">
234+
<p>Please refer to the <a href="https://www.raspberrypi.com/documentation/services/connect.html" target="_blank" rel="noopener">Raspberry Pi Connect documentation</a> for further details.</p>
235+
</div>
236+
</div>
237+
</div>
238+
239+
</div>
240+
</div>
241+
242+
243+
244+
<div class="section">
245+
<h2>Relationships</h2>
246+
247+
<p><strong>Depends on:</strong></p>
248+
<div class="deps">
249+
<a href="systemd-min.html" class="dep-badge">systemd-min</a>
250+
<a href="rpi-user-credentials.html" class="dep-badge">rpi-user-credentials</a>
251+
</div>
252+
253+
254+
255+
<p><strong>Provides:</strong> rpi-connect-client</p>
256+
257+
258+
</div>
259+
260+
261+
262+
<div class="section">
263+
<h2>Configuration Variables</h2>
264+
265+
<p><strong>References:</strong>
266+
267+
<code>IGconf_device_user1</code>
268+
269+
</p>
270+
271+
272+
<p><strong>Declares</strong> (prefix: <code>connect</code>):</p>
273+
<table>
274+
<thead>
275+
<tr>
276+
<th>Variable</th>
277+
<th>Description</th>
278+
<th>Default</th>
279+
<th>Validation</th>
280+
<th>Policy</th>
281+
</tr>
282+
</thead>
283+
<tbody>
284+
285+
<tr>
286+
<td><code>IGconf_connect_authkey</code></td>
287+
<td>Auth key generated via Raspberry Pi Connect account
288+
Settings. This can hold a path to the key file or the key itself.</td>
289+
<td>
290+
291+
<code>&lt;disabled&gt;</code>
292+
293+
</td>
294+
<td>Non-empty string value</td>
295+
<td>
296+
<a href="variable-validation.html#set-policies" class="badge policy-skip" title="Click for policy and validation help">skip</a>
297+
</td>
298+
</tr>
299+
300+
<tr>
301+
<td><code>IGconf_connect_on</code></td>
302+
<td>Enable Raspberry Pi Connect on system startup</td>
303+
<td>
304+
305+
306+
<code>y</code>
307+
308+
309+
</td>
310+
<td>Boolean value - accepts: true/false, 1/0, yes/no, y/n (case insensitive)</td>
311+
<td>
312+
<a href="variable-validation.html#set-policies" class="badge policy-immediate" title="Click for policy and validation help">immediate</a>
313+
</td>
314+
</tr>
315+
316+
</tbody>
317+
</table>
318+
319+
</div>
320+
321+
322+
323+
<div class="section">
324+
<h2>mmdebstrap</h2>
325+
326+
327+
328+
329+
330+
331+
332+
333+
334+
<h3>Packages</h3>
335+
<p>Installs:</p>
336+
<ul>
337+
338+
<li><code>rpi-connect-lite</code></li>
339+
340+
</ul>
341+
342+
343+
344+
345+
346+
347+
348+
</div>
349+
350+
351+
<div class="section">
352+
<h2>Attributes</h2>
353+
<p><strong>File:</strong> <code>rpi/services/rpi-connect-lite.yaml</code></p>
354+
355+
</div>
356+
</body>
357+
</html>

0 commit comments

Comments
 (0)