diff --git a/core/controllers/ApplicationController.py b/core/controllers/ApplicationController.py index 35c085a..d72dbc4 100644 --- a/core/controllers/ApplicationController.py +++ b/core/controllers/ApplicationController.py @@ -111,9 +111,27 @@ class ApplicationController: @staticmethod def __run_process(initialization_file_path, profile, display, session_state): - process = subprocess.Popen(('xinit', initialization_file_path, '--', '/usr/bin/Xephyr', '-ac', '-title', f'Simplified Privacy - {profile.name or "Unnamed Profile"}', '-screen', profile.resolution, '-no-host-grab', display), stdout=subprocess.DEVNULL, stderr=subprocess.STDOUT) + virtual_display_process = subprocess.Popen(('/usr/bin/Xephyr', '-ac', '-br', '-title', f'Simplified Privacy - {profile.name or "Unnamed Profile"}', '-screen', profile.resolution, '-no-host-grab', display), stdout=subprocess.DEVNULL, stderr=subprocess.STDOUT) - session_state = SessionState(session_state.id, session_state.network_port_numbers, [process.pid]) + start_time = time.time() + timeout = float(10) + + while not os.path.exists(f'/tmp/.X11-unix/X{display[1:]}'): + + if time.time() - start_time < timeout: + time.sleep(0.1) + + else: + + virtual_display_process.kill() + return + + environment = os.environ.copy() + environment.update({'DISPLAY': display}) + + process = subprocess.Popen(initialization_file_path, env=environment) + + session_state = SessionState(session_state.id, session_state.network_port_numbers, [virtual_display_process.pid, process.pid]) SessionStateController.update_or_create(session_state) process.wait()