(cfg: Dict, distro: str)
| 1321 | return "dbus-launch --exit-with-session fluxbox" |
| 1322 | |
| 1323 | def create_launcher(cfg: Dict, distro: str) -> Optional[Path]: |
| 1324 | prefix = get_prefix() |
| 1325 | if not prefix: |
| 1326 | return None |
| 1327 | ensure_system_entry(cfg, distro) |
| 1328 | sys_cfg = cfg["systems"][distro] |
| 1329 | |
| 1330 | launcher_name = f"vnc-{sanitize_launcher_name(distro)}" |
| 1331 | launcher_path = Path(prefix) / "bin" / launcher_name |
| 1332 | |
| 1333 | display = int(sys_cfg["display"]) |
| 1334 | geometry = sys_cfg["geometry"] |
| 1335 | depth = int(sys_cfg["depth"]) |
| 1336 | allow_lan = bool(sys_cfg.get("allow_lan", False)) |
| 1337 | auto_kill = bool(sys_cfg.get("auto_kill_stale", True)) |
| 1338 | wake_lock = bool(sys_cfg.get("wake_lock", True)) |
| 1339 | localhost_flag = "" if allow_lan else "-localhost" |
| 1340 | port = 5900 + display |
| 1341 | desktop = sys_cfg.get("desktop", "xfce") |
| 1342 | x11_disp = sys_cfg.get("x11_display", ":0") |
| 1343 | |
| 1344 | shebang = "#!/data/data/com.termux/files/usr/bin/bash" |
| 1345 | wakelock_snippet = "termux-wake-lock >/dev/null 2>&1 || true" if wake_lock else "termux-wake-unlock >/dev/null 2>&1 || true" |
| 1346 | autokill_snippet = "VCMD=''; command -v vncserver >/dev/null 2>&1 && VCMD='vncserver'; command -v tigervncserver >/dev/null 2>&1 && VCMD='tigervncserver'; [ -n \"$VCMD\" ] && $VCMD -kill :$DISPLAY 2>/dev/null || true" if auto_kill else ":" |
| 1347 | x11_desktop_cmd = launcher_desktop_cmd(desktop) |
| 1348 | |
| 1349 | content = f"""{shebang} |
| 1350 | set -e |
| 1351 | |
| 1352 | SYSTEM={sh_quote(distro)} |
| 1353 | DISPLAY={display} |
| 1354 | GEOMETRY={sh_quote(geometry)} |
| 1355 | DEPTH={depth} |
| 1356 | LOCALHOST_FLAG={sh_quote(localhost_flag)} |
| 1357 | PORT={port} |
| 1358 | X11_DISPLAY={sh_quote(x11_disp)} |
| 1359 | DESKTOP_CMD={sh_quote(x11_desktop_cmd)} |
| 1360 | |
| 1361 | cmd="$1" |
| 1362 | if [ -z "$cmd" ]; then cmd="start"; fi |
| 1363 | |
| 1364 | case "$cmd" in |
| 1365 | start) |
| 1366 | {wakelock_snippet} |
| 1367 | proot-distro login "$SYSTEM" --shared-tmp -- /bin/sh -lc '{autokill_snippet}; VCMD=""; command -v vncserver >/dev/null 2>&1 && VCMD="vncserver"; command -v tigervncserver >/dev/null 2>&1 && VCMD="tigervncserver"; [ -z "$VCMD" ] && echo "No VNC server found." && exit 2; $VCMD :{display} -geometry {geometry} -depth {depth} {localhost_flag} || exit $?; $VCMD -list || true' |
| 1368 | echo |
| 1369 | echo "Connect: 127.0.0.1:$PORT" |
| 1370 | ;; |
| 1371 | stop) |
| 1372 | proot-distro login "$SYSTEM" --shared-tmp -- /bin/sh -lc 'VCMD=""; command -v vncserver >/dev/null 2>&1 && VCMD="vncserver"; command -v tigervncserver >/dev/null 2>&1 && VCMD="tigervncserver"; [ -n "$VCMD" ] && $VCMD -kill :{display} || true; [ -n "$VCMD" ] && $VCMD -list || true' |
| 1373 | ;; |
| 1374 | restart) |
| 1375 | {wakelock_snippet} |
| 1376 | proot-distro login "$SYSTEM" --shared-tmp -- /bin/sh -lc 'VCMD=""; command -v vncserver >/dev/null 2>&1 && VCMD="vncserver"; command -v tigervncserver >/dev/null 2>&1 && VCMD="tigervncserver"; [ -z "$VCMD" ] && echo "No VNC server found." && exit 2; $VCMD -kill :{display} || true; $VCMD :{display} -geometry {geometry} -depth {depth} {localhost_flag} || exit $?; $VCMD -list || true' |
| 1377 | echo |
| 1378 | echo "Connect: 127.0.0.1:$PORT" |
| 1379 | ;; |
| 1380 | status) |
no test coverage detected