diff --git a/credentialsd-ui/src/main.rs b/credentialsd-ui/src/main.rs index 9e8b927a..701e0ba3 100644 --- a/credentialsd-ui/src/main.rs +++ b/credentialsd-ui/src/main.rs @@ -19,11 +19,8 @@ async fn run() -> Result<(), Box> { let (request_tx, request_rx) = async_std::channel::bounded(2); // this allows the D-Bus service to signal to the GUI to draw a window for // executing the credential flow. - let conn = zbus::connection::Builder::session()? - .name("xyz.iinuwa.credentialsd.UiControl")? - .build() - .await?; - let cred_client = DbusCredentialClient::new(conn); + let client_conn = zbus::connection::Builder::session()?.build().await?; + let cred_client = DbusCredentialClient::new(client_conn); let _handle = gui::start_gui_thread(request_rx, cred_client)?; println!(" ✅"); diff --git a/credentialsd/src/main.rs b/credentialsd/src/main.rs index 5b700613..e80915a6 100644 --- a/credentialsd/src/main.rs +++ b/credentialsd/src/main.rs @@ -28,10 +28,7 @@ async fn main() { async fn run() -> Result<(), Box> { print!("Connecting to D-Bus as client...\t"); - let dbus_client_conn = zbus::connection::Builder::session()? - .name("xyz.iinuwa.credentialsd.Credentialsd")? - .build() - .await?; + let dbus_client_conn = zbus::connection::Builder::session()?.build().await?; println!(" ✅"); print!("Starting D-Bus UI -> Credential control service..."); diff --git a/credentialsd/tests/meson.build b/credentialsd/tests/meson.build index 46bb365f..b5cb181a 100644 --- a/credentialsd/tests/meson.build +++ b/credentialsd/tests/meson.build @@ -40,4 +40,4 @@ test( ], protocol: 'exitcode', verbose: true, -) +) \ No newline at end of file diff --git a/dbus/meson.build b/dbus/meson.build new file mode 100644 index 00000000..e1e22aba --- /dev/null +++ b/dbus/meson.build @@ -0,0 +1,25 @@ +dbus_config = configuration_data() +dbus_service_dir = datadir / 'dbus-1' / 'services' +dbus_config.set('DAEMON_EXECUTABLE', bindir / backend_executable_name) +dbus_config.set( + 'UI_EXECUTABLE', + bindir / gui_executable_name, +) +configure_file( + input: 'xyz.iinuwa.credentialsd.Credentials.service.in', + install_dir: dbus_service_dir, + output: 'xyz.iinuwa.credentialsd.Credentials.service', + configuration: dbus_config, +) +configure_file( + input: 'xyz.iinuwa.credentialsd.FlowControl.service.in', + install_dir: dbus_service_dir, + output: 'xyz.iinuwa.credentialsd.FlowControl.service', + configuration: dbus_config, +) +configure_file( + input: 'xyz.iinuwa.credentialsd.UiControl.service.in', + install_dir: dbus_service_dir, + output: 'xyz.iinuwa.credentialsd.UiControl.service', + configuration: dbus_config, +) \ No newline at end of file diff --git a/dbus/xyz.iinuwa.credentialsd.Credentials.service.in b/dbus/xyz.iinuwa.credentialsd.Credentials.service.in new file mode 100644 index 00000000..c6d2e8ee --- /dev/null +++ b/dbus/xyz.iinuwa.credentialsd.Credentials.service.in @@ -0,0 +1,4 @@ +[D-BUS Service] +Name=xyz.iinuwa.credentialsd.Credentials +Exec=@DAEMON_EXECUTABLE@ +SystemdService=xyz.iinuwa.credentialsd.Credentials.service diff --git a/dbus/xyz.iinuwa.credentialsd.FlowControl.service.in b/dbus/xyz.iinuwa.credentialsd.FlowControl.service.in new file mode 100644 index 00000000..f1e858fe --- /dev/null +++ b/dbus/xyz.iinuwa.credentialsd.FlowControl.service.in @@ -0,0 +1,4 @@ +[D-BUS Service] +Name=xyz.iinuwa.credentialsd.FlowControl +Exec=@DAEMON_EXECUTABLE@ +SystemdService=xyz.iinuwa.credentialsd.FlowControl.service diff --git a/dbus/xyz.iinuwa.credentialsd.UiControl.service.in b/dbus/xyz.iinuwa.credentialsd.UiControl.service.in new file mode 100644 index 00000000..1071d910 --- /dev/null +++ b/dbus/xyz.iinuwa.credentialsd.UiControl.service.in @@ -0,0 +1,4 @@ +[D-BUS Service] +Name=xyz.iinuwa.credentialsd.UiControl +Exec=@UI_EXECUTABLE@ +SystemdService=xyz.iinuwa.credentialsd.UiControl.service diff --git a/meson.build b/meson.build index a33b7ccf..0210f0e3 100644 --- a/meson.build +++ b/meson.build @@ -22,4 +22,6 @@ meson.add_dist_script( subdir('credentialsd-common') subdir('credentialsd') -subdir('credentialsd-ui') \ No newline at end of file +subdir('credentialsd-ui') +subdir('dbus') +subdir('systemd') \ No newline at end of file diff --git a/systemd/meson.build b/systemd/meson.build new file mode 100644 index 00000000..f38275c4 --- /dev/null +++ b/systemd/meson.build @@ -0,0 +1,27 @@ +systemd_config = configuration_data() +# HACK: Not using libdir option, since on some distros (Fedora), libdir is `lib64`, but systemd is always in `lib` +# If you know of a better way to do this, let me know +systemd_user_service_dir = prefix / 'lib' / 'systemd' / 'user' +systemd_config.set('DAEMON_EXECUTABLE', bindir / backend_executable_name) +systemd_config.set( + 'UI_EXECUTABLE', + bindir / gui_executable_name, +) +configure_file( + input: 'xyz.iinuwa.credentialsd.Credentials.service.in', + install_dir: systemd_user_service_dir, + output: 'xyz.iinuwa.credentialsd.Credentials.service', + configuration: systemd_config, +) +configure_file( + input: 'xyz.iinuwa.credentialsd.FlowControl.service.in', + install_dir: systemd_user_service_dir, + output: 'xyz.iinuwa.credentialsd.FlowControl.service', + configuration: systemd_config, +) +configure_file( + input: 'xyz.iinuwa.credentialsd.UiControl.service.in', + install_dir: systemd_user_service_dir, + output: 'xyz.iinuwa.credentialsd.UiControl.service', + configuration: systemd_config, +) \ No newline at end of file diff --git a/systemd/xyz.iinuwa.credentialsd.Credentials.service.in b/systemd/xyz.iinuwa.credentialsd.Credentials.service.in new file mode 100644 index 00000000..3c17b221 --- /dev/null +++ b/systemd/xyz.iinuwa.credentialsd.Credentials.service.in @@ -0,0 +1,7 @@ +[Unit] +Description=Service for creating and storing user credentials + +[Service] +Type=dbus +BusName=xyz.iinuwa.credentialsd.Credentials +ExecStart=@DAEMON_EXECUTABLE@ diff --git a/systemd/xyz.iinuwa.credentialsd.FlowControl.service.in b/systemd/xyz.iinuwa.credentialsd.FlowControl.service.in new file mode 100644 index 00000000..fbe18e8f --- /dev/null +++ b/systemd/xyz.iinuwa.credentialsd.FlowControl.service.in @@ -0,0 +1,7 @@ +[Unit] +Description=Internal helper service for credentialsd + +[Service] +Type=dbus +BusName=xyz.iinuwa.credentialsd.FlowControl +ExecStart=@DAEMON_EXECUTABLE@ diff --git a/systemd/xyz.iinuwa.credentialsd.UiControl.service.in b/systemd/xyz.iinuwa.credentialsd.UiControl.service.in new file mode 100644 index 00000000..813d61aa --- /dev/null +++ b/systemd/xyz.iinuwa.credentialsd.UiControl.service.in @@ -0,0 +1,7 @@ +[Unit] +Description=Internal helper service for credentialsd + +[Service] +Type=dbus +BusName=xyz.iinuwa.credentialsd.UiControl +ExecStart=@UI_EXECUTABLE@