+ int ret;
+ char *name;
+ int sudo = 0;
+
+ ret = check_requirements(&sudo);
+
+ name = random_session_name();
+ if (!name) {
+ ret = -1;
+ goto end;
+ }
+
+ ret = check_session_name(name, sudo);
+ if (ret < 0) {
+ goto end_free;
+ }
+
+ ret = live_local_session(name, sudo);
+ if (ret < 0) {
+ goto end_free;
+ }
+
+ ret = enable_events(name, sudo);
+ if (ret < 0) {
+ goto end_free;
+ }
+
+ ret = add_contexts(name, sudo);
+ if (ret < 0) {
+ goto end_free;
+ }
+
+ ret = start(name, sudo, 0);
+ if (ret < 0) {
+ goto end_free;
+ }
+
+end_free:
+ free(name);
+end:
+ return ret;