diff --git a/sway/main.c b/sway/main.c
index a3198af1..b3ffdd83 100644
--- a/sway/main.c
+++ b/sway/main.c
@@ -312,6 +312,18 @@ int main(int argc, char **argv) {
 		wlr_log_init(WLR_ERROR, NULL);
 	}
 
+	log_kernel();
+	log_distro();
+	log_env();
+	detect_proprietary(allow_unsupported_gpu);
+	detect_raspi();
+
+	if (validate) {
+		bool valid = load_main_config(config_path, false, true);
+		free(config_path);
+		return valid ? 0 : 1;
+	}
+
 	if (optind < argc) { // Behave as IPC client
 		if (optind != 1) {
 			sway_log(SWAY_ERROR, "Don't use options with the IPC client");
@@ -334,11 +346,6 @@ int main(int argc, char **argv) {
 		return 1;
 	}
 
-	log_kernel();
-	log_distro();
-	detect_proprietary(allow_unsupported_gpu);
-	detect_raspi();
-
 	if (!drop_permissions()) {
 		server_fini(&server);
 		exit(EXIT_FAILURE);
@@ -359,12 +366,6 @@ int main(int argc, char **argv) {
 	}
 
 	ipc_init(&server);
-	log_env();
-
-	if (validate) {
-		bool valid = load_main_config(config_path, false, true);
-		return valid ? 0 : 1;
-	}
 
 	setenv("WAYLAND_DISPLAY", server.socket, true);
 	if (!load_main_config(config_path, false, false)) {