mirror of
https://github.com/GNS3/gns3-server
synced 2024-11-24 17:28:08 +00:00
commit
aae7bf9865
@ -85,7 +85,6 @@ class DockerVM(BaseNode):
|
|||||||
self._ethernet_adapters = []
|
self._ethernet_adapters = []
|
||||||
self._temporary_directory = None
|
self._temporary_directory = None
|
||||||
self._telnet_servers = []
|
self._telnet_servers = []
|
||||||
self._xvfb_process = None
|
|
||||||
self._vnc_process = None
|
self._vnc_process = None
|
||||||
self._vncconfig_process = None
|
self._vncconfig_process = None
|
||||||
self._console_resolution = console_resolution
|
self._console_resolution = console_resolution
|
||||||
@ -585,8 +584,8 @@ class DockerVM(BaseNode):
|
|||||||
self._display = self._get_free_display_port()
|
self._display = self._get_free_display_port()
|
||||||
tigervnc_path = shutil.which("Xtigervnc") or shutil.which("Xvnc")
|
tigervnc_path = shutil.which("Xtigervnc") or shutil.which("Xvnc")
|
||||||
|
|
||||||
if not (tigervnc_path or shutil.which("Xvfb") and shutil.which("x11vnc")):
|
if not tigervnc_path:
|
||||||
raise DockerError("Please install TigerVNC (recommended) or Xvfb + x11vnc before using VNC support")
|
raise DockerError("Please install TigerVNC server before using VNC support")
|
||||||
|
|
||||||
if tigervnc_path:
|
if tigervnc_path:
|
||||||
with open(os.path.join(self.working_dir, "vnc.log"), "w") as fd:
|
with open(os.path.join(self.working_dir, "vnc.log"), "w") as fd:
|
||||||
@ -600,29 +599,6 @@ class DockerVM(BaseNode):
|
|||||||
"-SecurityTypes", "None",
|
"-SecurityTypes", "None",
|
||||||
":{}".format(self._display),
|
":{}".format(self._display),
|
||||||
stdout=fd, stderr=subprocess.STDOUT)
|
stdout=fd, stderr=subprocess.STDOUT)
|
||||||
else:
|
|
||||||
if restart is False:
|
|
||||||
self._xvfb_process = await asyncio.create_subprocess_exec("Xvfb",
|
|
||||||
"-nolisten", "tcp",
|
|
||||||
"-extension", "MIT-SHM",
|
|
||||||
":{}".format(self._display),
|
|
||||||
"-screen", "0",
|
|
||||||
self._console_resolution + "x16")
|
|
||||||
|
|
||||||
# We pass a port for TCPV6 due to a crash in X11VNC if not here: https://github.com/GNS3/gns3-server/issues/569
|
|
||||||
with open(os.path.join(self.working_dir, "vnc.log"), "w") as fd:
|
|
||||||
self._vnc_process = await asyncio.create_subprocess_exec("x11vnc",
|
|
||||||
"-forever",
|
|
||||||
"-nopw",
|
|
||||||
"-shared",
|
|
||||||
"-noshm",
|
|
||||||
"-geometry", self._console_resolution,
|
|
||||||
"-display", "WAIT:{}".format(self._display),
|
|
||||||
"-rfbport", str(self.console),
|
|
||||||
"-rfbportv6", str(self.console),
|
|
||||||
"-noncache",
|
|
||||||
"-listen", self._manager.port_manager.console_host,
|
|
||||||
stdout=fd, stderr=subprocess.STDOUT)
|
|
||||||
|
|
||||||
async def _start_vnc(self):
|
async def _start_vnc(self):
|
||||||
"""
|
"""
|
||||||
@ -631,8 +607,8 @@ class DockerVM(BaseNode):
|
|||||||
|
|
||||||
self._display = self._get_free_display_port()
|
self._display = self._get_free_display_port()
|
||||||
tigervnc_path = shutil.which("Xtigervnc") or shutil.which("Xvnc")
|
tigervnc_path = shutil.which("Xtigervnc") or shutil.which("Xvnc")
|
||||||
if not (tigervnc_path or shutil.which("Xvfb") and shutil.which("x11vnc")):
|
if not tigervnc_path:
|
||||||
raise DockerError("Please install TigerVNC server (recommended) or Xvfb + x11vnc before using VNC support")
|
raise DockerError("Please install TigerVNC server before using VNC support")
|
||||||
await self._start_vnc_process()
|
await self._start_vnc_process()
|
||||||
x11_socket = os.path.join("/tmp/.X11-unix/", "X{}".format(self._display))
|
x11_socket = os.path.join("/tmp/.X11-unix/", "X{}".format(self._display))
|
||||||
try:
|
try:
|
||||||
@ -875,12 +851,6 @@ class DockerVM(BaseNode):
|
|||||||
await self._vnc_process.wait()
|
await self._vnc_process.wait()
|
||||||
except ProcessLookupError:
|
except ProcessLookupError:
|
||||||
pass
|
pass
|
||||||
if self._xvfb_process:
|
|
||||||
try:
|
|
||||||
self._xvfb_process.terminate()
|
|
||||||
await self._xvfb_process.wait()
|
|
||||||
except ProcessLookupError:
|
|
||||||
pass
|
|
||||||
|
|
||||||
if self._display:
|
if self._display:
|
||||||
display = "/tmp/.X11-unix/X{}".format(self._display)
|
display = "/tmp/.X11-unix/X{}".format(self._display)
|
||||||
|
@ -1115,8 +1115,7 @@ async def test_close(vm, port_manager):
|
|||||||
async def test_close_vnc(vm):
|
async def test_close_vnc(vm):
|
||||||
|
|
||||||
vm._console_type = "vnc"
|
vm._console_type = "vnc"
|
||||||
vm._x11vnc_process = MagicMock()
|
vm._vnc_process = MagicMock()
|
||||||
vm._xvfb_process = MagicMock()
|
|
||||||
|
|
||||||
with asyncio_patch("gns3server.compute.docker.DockerVM._get_container_state", return_value="stopped"):
|
with asyncio_patch("gns3server.compute.docker.DockerVM._get_container_state", return_value="stopped"):
|
||||||
with asyncio_patch("gns3server.compute.docker.Docker.query") as mock_query:
|
with asyncio_patch("gns3server.compute.docker.Docker.query") as mock_query:
|
||||||
@ -1124,7 +1123,7 @@ async def test_close_vnc(vm):
|
|||||||
mock_query.assert_called_with("DELETE", "containers/e90e34656842", params={"force": 1, "v": 1})
|
mock_query.assert_called_with("DELETE", "containers/e90e34656842", params={"force": 1, "v": 1})
|
||||||
|
|
||||||
assert vm._closed is True
|
assert vm._closed is True
|
||||||
assert vm._xvfb_process.terminate.called
|
assert vm._vnc_process.terminate.called
|
||||||
|
|
||||||
|
|
||||||
async def test_get_namespace(vm):
|
async def test_get_namespace(vm):
|
||||||
|
Loading…
Reference in New Issue
Block a user