aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorIvan Molodetskikh <yalterz@gmail.com>2023-08-27 07:37:36 +0400
committerIvan Molodetskikh <yalterz@gmail.com>2023-08-27 07:37:36 +0400
commitd268cfcf9f2d86a58456f3f3b946a763d1cc6140 (patch)
tree6b086ff15246e3a68c3e5a7052f8adcf50dfeb62 /src
parent99484afe526dde4c04050f0ea7c98dc63f444fdf (diff)
downloadniri-d268cfcf9f2d86a58456f3f3b946a763d1cc6140.tar.gz
niri-d268cfcf9f2d86a58456f3f3b946a763d1cc6140.tar.bz2
niri-d268cfcf9f2d86a58456f3f3b946a763d1cc6140.zip
Add initial session / systemd integration
Diffstat (limited to 'src')
-rw-r--r--src/main.rs6
-rw-r--r--src/niri.rs23
2 files changed, 29 insertions, 0 deletions
diff --git a/src/main.rs b/src/main.rs
index 40953348..2b5715fd 100644
--- a/src/main.rs
+++ b/src/main.rs
@@ -19,6 +19,7 @@ use std::ffi::OsString;
use backend::Backend;
use clap::Parser;
use niri::Niri;
+use sd_notify::NotifyState;
use smithay::reexports::calloop::EventLoop;
use smithay::reexports::wayland_server::{Display, DisplayHandle};
use tracing_subscriber::EnvFilter;
@@ -121,4 +122,9 @@ fn main() {
}
})
.unwrap();
+
+ // Tell systemd we're stopping.
+ if let Err(err) = sd_notify::notify(false, &[NotifyState::Stopping]) {
+ warn!("error notifying systemd: {err:?}");
+ }
}
diff --git a/src/niri.rs b/src/niri.rs
index 05a2b3a4..b428345a 100644
--- a/src/niri.rs
+++ b/src/niri.rs
@@ -1,8 +1,10 @@
use std::collections::HashMap;
use std::os::unix::io::AsRawFd;
+use std::process::Command;
use std::sync::{Arc, Mutex};
use std::time::Duration;
+use sd_notify::NotifyState;
use smithay::backend::renderer::element::surface::{
render_elements_from_surface_tree, WaylandSurfaceRenderElement,
};
@@ -149,6 +151,27 @@ impl Niri {
socket_name.to_string_lossy()
);
+ if std::env::var_os("NOTIFY_SOCKET").is_some() {
+ // We're starting as a systemd service. Export our variables and tell systemd we're
+ // ready.
+ let rv = Command::new("/bin/sh")
+ .args([
+ "-c",
+ "systemctl --user import-environment WAYLAND_DISPLAY && \
+ hash dbus-update-activation-environment 2>/dev/null && \
+ dbus-update-activation-environment WAYLAND_DISPLAY",
+ ])
+ .spawn();
+ if let Err(err) = rv {
+ warn!("error spawning shell to import environment into systemd: {err:?}");
+ }
+
+ // Notify systemd we're ready.
+ if let Err(err) = sd_notify::notify(false, &[NotifyState::Ready]) {
+ warn!("error notifying systemd: {err:?}");
+ };
+ }
+
let display_source = Generic::new(
display.backend().poll_fd().as_raw_fd(),
Interest::READ,