|
| 1 | +from src.manager.manager.launcher.launcher_interface import ILauncher |
| 2 | +from src.manager.manager.docker_thread.docker_thread import DockerThread |
| 3 | +from src.manager.manager.vnc.vnc_server import Vnc_server |
| 4 | +import time |
| 5 | +import os |
| 6 | +import stat |
| 7 | + |
| 8 | + |
| 9 | +class LauncherRobotDisplayView(ILauncher): |
| 10 | + display: str |
| 11 | + internal_port: str |
| 12 | + external_port: str |
| 13 | + height: int |
| 14 | + width: int |
| 15 | + running = False |
| 16 | + threads = [] |
| 17 | + |
| 18 | + def run(self, callback): |
| 19 | + DRI_PATH = os.path.join("/dev/dri", os.environ.get("DRI_NAME", "card0")) |
| 20 | + ACCELERATION_ENABLED = self.check_device(DRI_PATH) |
| 21 | + |
| 22 | + robot_display_vnc = Vnc_server() |
| 23 | + |
| 24 | + if (ACCELERATION_ENABLED): |
| 25 | + robot_display_vnc.start_vnc_gpu(self.display, self.internal_port, self.external_port,DRI_PATH) |
| 26 | + # Write display config and start the console |
| 27 | + console_cmd = f"export VGL_DISPLAY={DRI_PATH}; export DISPLAY={self.display}; /usr/bin/Xorg -noreset +extension GLX +extension RANDR +extension RENDER -logfile ./xdummy.log -config ./xorg.conf {self.display}" |
| 28 | + else: |
| 29 | + robot_display_vnc.start_vnc(self.display, self.internal_port, self.external_port) |
| 30 | + # Write display config and start the console |
| 31 | + console_cmd = f"export DISPLAY={self.display};/usr/bin/Xorg -noreset +extension GLX +extension RANDR +extension RENDER -logfile ./xdummy.log -config ./xorg.conf {self.display}" |
| 32 | + |
| 33 | + console_thread = DockerThread(console_cmd) |
| 34 | + console_thread.start() |
| 35 | + self.threads.append(console_thread) |
| 36 | + |
| 37 | + self.running = True |
| 38 | + |
| 39 | + def check_device(self, device_path): |
| 40 | + try: |
| 41 | + return stat.S_ISCHR(os.lstat(device_path)[stat.ST_MODE]) |
| 42 | + except: |
| 43 | + return False |
| 44 | + |
| 45 | + def is_running(self): |
| 46 | + return self.running |
| 47 | + |
| 48 | + def terminate(self): |
| 49 | + for thread in self.threads: |
| 50 | + thread.terminate() |
| 51 | + thread.join() |
| 52 | + self.running = False |
| 53 | + |
| 54 | + def died(self): |
| 55 | + pass |
0 commit comments