summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--PKGBUILD1
-rw-r--r--kvmd/apps/vnc/rfb.py6
-rw-r--r--kvmd/apps/vnc/server.py47
3 files changed, 28 insertions, 26 deletions
diff --git a/PKGBUILD b/PKGBUILD
index 24a9500d..cd3a41d1 100644
--- a/PKGBUILD
+++ b/PKGBUILD
@@ -41,6 +41,7 @@ depends=(
python-pam
python-pillow
python-xlib
+ freetype2
v4l-utils
nginx-mainline
openssl
diff --git a/kvmd/apps/vnc/rfb.py b/kvmd/apps/vnc/rfb.py
index 450024c4..08c68a4c 100644
--- a/kvmd/apps/vnc/rfb.py
+++ b/kvmd/apps/vnc/rfb.py
@@ -352,12 +352,12 @@ class RfbClient: # pylint: disable=too-many-instance-attributes
"middle": bool(buttons & 0x2),
},
wheel={
- "x": (32 if buttons & 0x40 else (-32 if buttons & 0x20 else 0)),
- "y": (32 if buttons & 0x10 else (-32 if buttons & 0x8 else 0)),
+ "x": (-4 if buttons & 0x40 else (4 if buttons & 0x20 else 0)),
+ "y": (-4 if buttons & 0x10 else (4 if buttons & 0x8 else 0)),
},
move={
"x": round(to_x / self._width * 65535 + -32768),
- "y": round(to_y / self._width * 65535 + -32768),
+ "y": round(to_y / self._height * 65535 + -32768),
},
)
diff --git a/kvmd/apps/vnc/server.py b/kvmd/apps/vnc/server.py
index d9225f3b..adf6f32d 100644
--- a/kvmd/apps/vnc/server.py
+++ b/kvmd/apps/vnc/server.py
@@ -24,6 +24,7 @@ import asyncio
import asyncio.queues
import socket
import dataclasses
+import contextlib
import json
from typing import Dict
@@ -281,31 +282,31 @@ class VncServer:
logger = get_logger(0)
logger.info("Listening VNC on TCP [%s]:%d ...", self.__host, self.__port)
- sock = socket.socket(socket.AF_INET6, socket.SOCK_STREAM)
- sock.setsockopt(socket.IPPROTO_IPV6, socket.IPV6_V6ONLY, False)
- sock.bind((self.__host, self.__port))
+ with contextlib.closing(socket.socket(socket.AF_INET6, socket.SOCK_STREAM)) as sock:
+ sock.setsockopt(socket.IPPROTO_IPV6, socket.IPV6_V6ONLY, False)
+ sock.bind((self.__host, self.__port))
- loop = asyncio.get_event_loop()
- server = loop.run_until_complete(asyncio.start_server(
- client_connected_cb=self.__handle_client,
- sock=sock,
- backlog=self.__max_clients,
- loop=loop,
- ))
+ loop = asyncio.get_event_loop()
+ server = loop.run_until_complete(asyncio.start_server(
+ client_connected_cb=self.__handle_client,
+ sock=sock,
+ backlog=self.__max_clients,
+ loop=loop,
+ ))
- try:
- loop.run_forever()
- except (SystemExit, KeyboardInterrupt):
- pass
- finally:
- server.close()
- loop.run_until_complete(server.wait_closed())
- tasks = asyncio.Task.all_tasks()
- for task in tasks:
- task.cancel()
- loop.run_until_complete(asyncio.gather(*tasks, return_exceptions=True))
- loop.close()
- logger.info("Bye-bye")
+ try:
+ loop.run_forever()
+ except (SystemExit, KeyboardInterrupt):
+ pass
+ finally:
+ server.close()
+ loop.run_until_complete(server.wait_closed())
+ tasks = asyncio.Task.all_tasks()
+ for task in tasks:
+ task.cancel()
+ loop.run_until_complete(asyncio.gather(*tasks, return_exceptions=True))
+ loop.close()
+ logger.info("Bye-bye")
async def __handle_client(self, reader: asyncio.StreamReader, writer: asyncio.StreamWriter) -> None:
await _Client(reader, writer, self.__kvmd, self.__streamer, self.__symmap, self.__shared_params).run()