diff options
| author | Ivan Molodetskikh <yalterz@gmail.com> | 2023-08-27 07:37:36 +0400 |
|---|---|---|
| committer | Ivan Molodetskikh <yalterz@gmail.com> | 2023-08-27 07:37:36 +0400 |
| commit | d268cfcf9f2d86a58456f3f3b946a763d1cc6140 (patch) | |
| tree | 6b086ff15246e3a68c3e5a7052f8adcf50dfeb62 /src | |
| parent | 99484afe526dde4c04050f0ea7c98dc63f444fdf (diff) | |
| download | niri-d268cfcf9f2d86a58456f3f3b946a763d1cc6140.tar.gz niri-d268cfcf9f2d86a58456f3f3b946a763d1cc6140.tar.bz2 niri-d268cfcf9f2d86a58456f3f3b946a763d1cc6140.zip | |
Add initial session / systemd integration
Diffstat (limited to 'src')
| -rw-r--r-- | src/main.rs | 6 | ||||
| -rw-r--r-- | src/niri.rs | 23 |
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, |
