From c3375a654120af406bc679c45005e4480ba10efa Mon Sep 17 00:00:00 2001 From: Brad Stein Date: Sun, 8 Jun 2025 14:24:15 -0500 Subject: [PATCH] adding client suicide & dev mode --- client/src/app.rs | 12 ++++++------ scripts/install-client.sh | 9 ++++++--- 2 files changed, 12 insertions(+), 9 deletions(-) diff --git a/client/src/app.rs b/client/src/app.rs index a845969..84b25d8 100644 --- a/client/src/app.rs +++ b/client/src/app.rs @@ -41,14 +41,14 @@ impl NavkaClientApp { // 3) Start reading from all keyboards in a background task let mut aggregator = KeyboardAggregator::new(tx.clone()); aggregator.init_devices()?; // discover & grab - let kb_handle = tokio::spawn(async move { + let mut kb_handle = tokio::spawn(async move { if let Err(e) = aggregator.run().await { tracing::error!("KeyboardAggregator failed: {e}"); } }); // 4) Add 30 second suicide for dev mode - let suicide_fut = async { + let mut suicide_fut = async { if std::env::var_os("NAVKA_DEV_MODE").is_some() { tracing::info!("DEV-mode: will exit in 30 s"); tokio::time::sleep(Duration::from_secs(30)).await; @@ -59,7 +59,7 @@ impl NavkaClientApp { }; // 5) Inbound loop: we do something with reports from the server, e.g. logging: - let inbound_fut = async { + let mut inbound_fut = async { while let Some(report) = inbound.message().await? { tracing::debug!(?report.data, "msg from server"); } @@ -68,13 +68,13 @@ impl NavkaClientApp { // 6) Race the futures tokio::select! { - res = inbound_fut => { + res = &mut inbound_fut => { tracing::warn!("Inbound stream ended: {res:?}"); }, - res = kb_handle => { + res = &mut kb_handle => { tracing::warn!("Keyboard task finished: {res:?}"); }, - res = suicide_fut => { + res = &mut suicide_fut => { tracing::warn!("Dev-mode shutdown: {res:?}"); }, } diff --git a/scripts/install-client.sh b/scripts/install-client.sh index 59323c7..aa57d93 100755 --- a/scripts/install-client.sh +++ b/scripts/install-client.sh @@ -28,12 +28,14 @@ install -Dm755 "$SRC/client/target/release/navka-client" "$HOME/.local/bin/navka mkdir -p "$HOME/.config/systemd/user" cat >"$HOME/.config/systemd/user/navka-client.service" <<'EOF' [Unit] -Description=Navka Client (keyboard/mouse -> navka-server) +Description=Navka Client After=network-online.target Wants=network-online.target [Service] Type=simple +User=root +Group=root ExecStart=/usr/local/bin/navka-client Environment=RUST_LOG=debug Environment=NAVKA_DEV_MODE=1 @@ -49,5 +51,6 @@ EOF loginctl enable-linger "$ORIG_USER" # 8) Call the *user* instance inside the caller’s session -sudo -iu "$ORIG_USER" systemctl --user daemon-reload -sudo -iu "$ORIG_USER" systemctl --user enable --now navka-client.service +sudo -iu "$ORIG_USER" systemctl daemon-reload +sudo -iu "$ORIG_USER" systemctl enable --now navka-client.service +sudo systemctl restart navka-server