diff --git a/pkgs/by-name/sw/switch-to-configuration-ng/src/build.rs b/pkgs/by-name/sw/switch-to-configuration-ng/src/build.rs
index bc07ec47a661..41fed3086e69 100644
--- a/pkgs/by-name/sw/switch-to-configuration-ng/src/build.rs
+++ b/pkgs/by-name/sw/switch-to-configuration-ng/src/build.rs
@@ -18,10 +18,6 @@ fn main() {
let out_path = std::path::PathBuf::from(std::env::var("OUT_DIR").unwrap());
- let fdo_dbus_code = code_for_dbus_xml("org.freedesktop.DBus.xml");
- let mut file = std::fs::File::create(out_path.join("fdo_dbus.rs")).unwrap();
- file.write_all(fdo_dbus_code.as_bytes()).unwrap();
-
let systemd_manager_code =
code_for_dbus_xml(systemd_dbus_interface_dir.join("org.freedesktop.systemd1.Manager.xml"));
let mut file = std::fs::File::create(out_path.join("systemd_manager.rs")).unwrap();
diff --git a/pkgs/by-name/sw/switch-to-configuration-ng/src/org.freedesktop.DBus.xml b/pkgs/by-name/sw/switch-to-configuration-ng/src/org.freedesktop.DBus.xml
deleted file mode 100644
index 6ab33de9dc40..000000000000
--- a/pkgs/by-name/sw/switch-to-configuration-ng/src/org.freedesktop.DBus.xml
+++ /dev/null
@@ -1,12 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
diff --git a/pkgs/by-name/sw/switch-to-configuration-ng/src/src/main.rs b/pkgs/by-name/sw/switch-to-configuration-ng/src/src/main.rs
index 4e84e8d1ae09..705b9284f6a1 100644
--- a/pkgs/by-name/sw/switch-to-configuration-ng/src/src/main.rs
+++ b/pkgs/by-name/sw/switch-to-configuration-ng/src/src/main.rs
@@ -17,8 +17,6 @@ use std::{
use anyhow::{anyhow, bail, Context, Result};
use dbus::{
blocking::{stdintf::org_freedesktop_dbus::Properties, LocalConnection, Proxy},
- channel::Sender,
- strings::{BusName, Interface, Member},
Message,
};
use glob::glob;
@@ -34,15 +32,6 @@ use nix::{
use regex::Regex;
use syslog::Facility;
-mod fdo_dbus {
- #![allow(non_upper_case_globals)]
- #![allow(non_camel_case_types)]
- #![allow(non_snake_case)]
- #![allow(unused)]
- #![allow(clippy::all)]
- include!(concat!(env!("OUT_DIR"), "/fdo_dbus.rs"));
-}
-
mod systemd_manager {
#![allow(non_upper_case_globals)]
#![allow(non_camel_case_types)]
@@ -61,9 +50,7 @@ mod logind_manager {
include!(concat!(env!("OUT_DIR"), "/logind_manager.rs"));
}
-use crate::{
- fdo_dbus::OrgFreedesktopDBusNameOwnerChanged, systemd_manager::OrgFreedesktopSystemd1Manager,
-};
+use crate::systemd_manager::OrgFreedesktopSystemd1Manager;
use crate::{
logind_manager::OrgFreedesktopLogin1Manager,
systemd_manager::{
@@ -907,14 +894,6 @@ impl std::fmt::Display for Job {
}
}
-fn fdo_dbus_proxy(conn: &LocalConnection) -> Proxy<'_, &LocalConnection> {
- conn.with_proxy(
- "org.freedesktop.DBus",
- "/org/freedesktop/DBus",
- Duration::from_millis(500),
- )
-}
-
fn systemd1_proxy(conn: &LocalConnection) -> Proxy<'_, &LocalConnection> {
conn.with_proxy(
"org.freedesktop.systemd1",
@@ -951,54 +930,6 @@ fn remove_file_if_exists(p: impl AsRef) -> std::io::Result<()> {
}
}
-fn reexecute_systemd_manager(
- dbus_conn: &LocalConnection,
- fdo_dbus: &Proxy<'_, &LocalConnection>,
-) -> anyhow::Result<()> {
- let reexecute_done = Rc::new(RefCell::new(false));
- let _reexecute_done = reexecute_done.clone();
- let owner_changed_token = fdo_dbus
- .match_signal(
- move |signal: OrgFreedesktopDBusNameOwnerChanged, _: &LocalConnection, _: &Message| {
- if signal.name.as_str() == "org.freedesktop.systemd1" {
- *_reexecute_done.borrow_mut() = true;
- }
-
- true
- },
- )
- .context("Failed to add signal match for DBus name owner changes")?;
-
- let bus_name = BusName::from("org.freedesktop.systemd1");
- let object_path = dbus::Path::from("/org/freedesktop/systemd1");
- let interface = Interface::new("org.freedesktop.systemd1.Manager")
- .expect("the org.freedesktop.systemd1.Manager interface name should be valid");
- let method_name = Member::new("Reexecute").expect("the Reexecute method name should be valid");
-
- // Systemd does not reply to the Reexecute method.
- let _serial = dbus_conn
- .send(Message::method_call(
- &bus_name,
- &object_path,
- &interface,
- &method_name,
- ))
- .map_err(|_err| anyhow!("Failed to send org.freedesktop.systemd1.Manager.Reexecute"))?;
-
- log::debug!("waiting for systemd to finish reexecuting");
- while !*reexecute_done.borrow() {
- _ = dbus_conn
- .process(Duration::from_secs(500))
- .context("Failed to process dbus messages")?;
- }
-
- dbus_conn
- .remove_match(owner_changed_token)
- .context("Failed to remove jobs token")?;
-
- Ok(())
-}
-
/// Performs switch-to-configuration functionality for a single non-root user
fn do_user_switch(parent_exe: String) -> anyhow::Result<()> {
if Path::new(&parent_exe)
@@ -1014,11 +945,8 @@ fn do_user_switch(parent_exe: String) -> anyhow::Result<()> {
}
let dbus_conn = LocalConnection::new_session().context("Failed to open dbus connection")?;
- let fdo_dbus = fdo_dbus_proxy(&dbus_conn);
let systemd = systemd1_proxy(&dbus_conn);
- reexecute_systemd_manager(&dbus_conn, &fdo_dbus)?;
-
let nixos_activation_done = Rc::new(RefCell::new(false));
let _nixos_activation_done = nixos_activation_done.clone();
let jobs_token = systemd
@@ -1035,6 +963,10 @@ fn do_user_switch(parent_exe: String) -> anyhow::Result<()> {
)
.context("Failed to add signal match for systemd removed jobs")?;
+ // The systemd user session seems to not send a Reloaded signal, so we don't have anything to
+ // wait on here.
+ _ = systemd.reexecute();
+
systemd
.restart_unit("nixos-activation.service", "replace")
.context("Failed to restart nixos-activation.service")?;
@@ -1207,7 +1139,6 @@ won't take effect until you reboot the system.
let mut units_to_reload = map_from_list_file(RELOAD_LIST_FILE);
let dbus_conn = LocalConnection::new_system().context("Failed to open dbus connection")?;
- let fdo_dbus = fdo_dbus_proxy(&dbus_conn);
let systemd = systemd1_proxy(&dbus_conn);
let logind = login1_proxy(&dbus_conn);
@@ -1733,7 +1664,7 @@ won't take effect until you reboot the system.
// just in case the new one has trouble communicating with the running pid 1.
if restart_systemd {
eprintln!("restarting systemd...");
- reexecute_systemd_manager(&dbus_conn, &fdo_dbus)?;
+ _ = systemd.reexecute(); // we don't get a dbus reply here
log::debug!("waiting for systemd restart to finish");
while !*systemd_reload_status.borrow() {