mirror of
https://github.com/mofeng-git/One-KVM.git
synced 2025-12-12 09:10:30 +08:00
vnc: force absolute usb mouse_output
This commit is contained in:
parent
82aedb9c4e
commit
66c1d321d2
@ -82,6 +82,7 @@ from ..validators.net import valid_mac
|
|||||||
from ..validators.net import valid_ssl_ciphers
|
from ..validators.net import valid_ssl_ciphers
|
||||||
|
|
||||||
from ..validators.hid import valid_hid_key
|
from ..validators.hid import valid_hid_key
|
||||||
|
from ..validators.hid import valid_hid_mouse_output
|
||||||
from ..validators.hid import valid_hid_mouse_move
|
from ..validators.hid import valid_hid_mouse_move
|
||||||
|
|
||||||
from ..validators.kvm import valid_stream_quality
|
from ..validators.kvm import valid_stream_quality
|
||||||
@ -662,8 +663,9 @@ def _get_config_scheme() -> dict:
|
|||||||
},
|
},
|
||||||
|
|
||||||
"vnc": {
|
"vnc": {
|
||||||
"desired_fps": Option(30, type=valid_stream_fps),
|
"desired_fps": Option(30, type=valid_stream_fps),
|
||||||
"keymap": Option("/usr/share/kvmd/keymaps/en-us", type=valid_abs_file),
|
"mouse_output": Option("usb", type=valid_hid_mouse_output),
|
||||||
|
"keymap": Option("/usr/share/kvmd/keymaps/en-us", type=valid_abs_file),
|
||||||
|
|
||||||
"server": {
|
"server": {
|
||||||
"host": Option("::", type=valid_ip_or_host),
|
"host": Option("::", type=valid_ip_or_host),
|
||||||
|
|||||||
@ -69,6 +69,7 @@ def main(argv: (list[str] | None)=None) -> None:
|
|||||||
x509_key_path=config.server.tls.x509.key,
|
x509_key_path=config.server.tls.x509.key,
|
||||||
|
|
||||||
desired_fps=config.desired_fps,
|
desired_fps=config.desired_fps,
|
||||||
|
mouse_output=config.mouse_output,
|
||||||
keymap_path=config.keymap,
|
keymap_path=config.keymap,
|
||||||
|
|
||||||
kvmd=KvmdClient(user_agent=user_agent, **config.kvmd._unpack()),
|
kvmd=KvmdClient(user_agent=user_agent, **config.kvmd._unpack()),
|
||||||
|
|||||||
@ -77,6 +77,7 @@ class _Client(RfbClient): # pylint: disable=too-many-instance-attributes
|
|||||||
x509_key_path: str,
|
x509_key_path: str,
|
||||||
|
|
||||||
desired_fps: int,
|
desired_fps: int,
|
||||||
|
mouse_output: str,
|
||||||
keymap_name: str,
|
keymap_name: str,
|
||||||
symmap: dict[int, dict[int, str]],
|
symmap: dict[int, dict[int, str]],
|
||||||
|
|
||||||
@ -105,6 +106,7 @@ class _Client(RfbClient): # pylint: disable=too-many-instance-attributes
|
|||||||
)
|
)
|
||||||
|
|
||||||
self.__desired_fps = desired_fps
|
self.__desired_fps = desired_fps
|
||||||
|
self.__mouse_output = mouse_output
|
||||||
self.__keymap_name = keymap_name
|
self.__keymap_name = keymap_name
|
||||||
self.__symmap = symmap
|
self.__symmap = symmap
|
||||||
|
|
||||||
@ -159,6 +161,9 @@ class _Client(RfbClient): # pylint: disable=too-many-instance-attributes
|
|||||||
|
|
||||||
assert self.__kvmd_session
|
assert self.__kvmd_session
|
||||||
try:
|
try:
|
||||||
|
logger.info("%s [kvmd]: Applying HID params: mouse_output=%s ...", self._remote, self.__mouse_output)
|
||||||
|
await self.__kvmd_session.hid.set_params(mouse_output=self.__mouse_output)
|
||||||
|
|
||||||
async with self.__kvmd_session.ws() as self.__kvmd_ws:
|
async with self.__kvmd_session.ws() as self.__kvmd_ws:
|
||||||
logger.info("%s [kvmd]: Connected to KVMD websocket", self._remote)
|
logger.info("%s [kvmd]: Connected to KVMD websocket", self._remote)
|
||||||
self.__stage3_ws_connected.set_passed()
|
self.__stage3_ws_connected.set_passed()
|
||||||
@ -429,6 +434,7 @@ class VncServer: # pylint: disable=too-many-instance-attributes
|
|||||||
vencrypt_enabled: bool,
|
vencrypt_enabled: bool,
|
||||||
|
|
||||||
desired_fps: int,
|
desired_fps: int,
|
||||||
|
mouse_output: str,
|
||||||
keymap_path: str,
|
keymap_path: str,
|
||||||
|
|
||||||
kvmd: KvmdClient,
|
kvmd: KvmdClient,
|
||||||
@ -484,6 +490,7 @@ class VncServer: # pylint: disable=too-many-instance-attributes
|
|||||||
x509_cert_path=x509_cert_path,
|
x509_cert_path=x509_cert_path,
|
||||||
x509_key_path=x509_key_path,
|
x509_key_path=x509_key_path,
|
||||||
desired_fps=desired_fps,
|
desired_fps=desired_fps,
|
||||||
|
mouse_output=mouse_output,
|
||||||
keymap_name=keymap_name,
|
keymap_name=keymap_name,
|
||||||
symmap=symmap,
|
symmap=symmap,
|
||||||
kvmd=kvmd,
|
kvmd=kvmd,
|
||||||
|
|||||||
@ -46,6 +46,18 @@ class _BaseApiPart:
|
|||||||
self._ensure_http_session = ensure_http_session
|
self._ensure_http_session = ensure_http_session
|
||||||
self._make_url = make_url
|
self._make_url = make_url
|
||||||
|
|
||||||
|
async def _set_params(self, handle: str, **params: (int | str | None)) -> None:
|
||||||
|
session = self._ensure_http_session()
|
||||||
|
async with session.post(
|
||||||
|
url=self._make_url(handle),
|
||||||
|
params={
|
||||||
|
key: value
|
||||||
|
for (key, value) in params.items()
|
||||||
|
if value is not None
|
||||||
|
},
|
||||||
|
) as response:
|
||||||
|
htclient.raise_not_200(response)
|
||||||
|
|
||||||
|
|
||||||
class _AuthApiPart(_BaseApiPart):
|
class _AuthApiPart(_BaseApiPart):
|
||||||
async def check(self) -> bool:
|
async def check(self) -> bool:
|
||||||
@ -68,19 +80,11 @@ class _StreamerApiPart(_BaseApiPart):
|
|||||||
return (await response.json())["result"]
|
return (await response.json())["result"]
|
||||||
|
|
||||||
async def set_params(self, quality: (int | None)=None, desired_fps: (int | None)=None) -> None:
|
async def set_params(self, quality: (int | None)=None, desired_fps: (int | None)=None) -> None:
|
||||||
session = self._ensure_http_session()
|
await self._set_params(
|
||||||
async with session.post(
|
"streamer/set_params",
|
||||||
url=self._make_url("streamer/set_params"),
|
quality=quality,
|
||||||
params={
|
desired_fps=desired_fps,
|
||||||
key: value
|
)
|
||||||
for (key, value) in [
|
|
||||||
("quality", quality),
|
|
||||||
("desired_fps", desired_fps),
|
|
||||||
]
|
|
||||||
if value is not None
|
|
||||||
},
|
|
||||||
) as response:
|
|
||||||
htclient.raise_not_200(response)
|
|
||||||
|
|
||||||
|
|
||||||
class _HidApiPart(_BaseApiPart):
|
class _HidApiPart(_BaseApiPart):
|
||||||
@ -100,6 +104,13 @@ class _HidApiPart(_BaseApiPart):
|
|||||||
) as response:
|
) as response:
|
||||||
htclient.raise_not_200(response)
|
htclient.raise_not_200(response)
|
||||||
|
|
||||||
|
async def set_params(self, keyboard_output: (str | None)=None, mouse_output: (str | None)=None) -> None:
|
||||||
|
await self._set_params(
|
||||||
|
"hid/set_params",
|
||||||
|
keyboard_output=keyboard_output,
|
||||||
|
mouse_output=mouse_output,
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
class _AtxApiPart(_BaseApiPart):
|
class _AtxApiPart(_BaseApiPart):
|
||||||
async def get_state(self) -> dict:
|
async def get_state(self) -> dict:
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user