selkies-project / selkies-gstreamer

Open-Source Low-Latency Accelerated Linux WebRTC HTML5 Remote Desktop Streaming Platform for Self-Hosting, Containers, Kubernetes, or Cloud/HPC
Mozilla Public License 2.0
334 stars 48 forks source link

Support for International (AZERTY, etc.) keyboard layouts #9

Open danisla opened 2 years ago

danisla commented 2 years ago

Add support for AZERTY (French) keyboard layout.

ehfd commented 2 years ago

See: https://github.com/novnc/noVNC/issues/1578

May be useful: https://github.com/Xpra-org/xpra-html5/issues/48 https://github.com/Xpra-org/xpra-html5/issues/15

Relevant code: https://github.com/selkies-project/selkies-gstreamer/blob/master/src/selkies_gstreamer/webrtc_input.py

Would be relatively trivial if code is borrowed over from noVNC or Guacamole.

andymaier commented 1 year ago

Is there a chance to have also support for QWERTZ Layout?

I getting this when try to use an "@" on QWERTZ Layout:

(xfce4-terminal:323): dbind-WARNING **: 00:57:13.907: AT-SPI: Error retrieving accessibility bus address: org.freedesktop.DBus.Error.ServiceUnknown: The name org.a11y.Bus was not provided by any .service files Traceback (most recent call last): File "/usr/local/lib/python3.10/dist-packages/selkies_gstreamer/gstwebrtc_app.py", line 1007, in <lambda> 'on-message-string', lambda _, msg: self.on_data_message(msg)) File "/usr/local/lib/python3.10/dist-packages/selkies_gstreamer/webrtc_input.py", line 533, in on_message self.send_x11_keypress(int(toks[1]), down=True) File "/usr/local/lib/python3.10/dist-packages/selkies_gstreamer/webrtc_input.py", line 321, in send_x11_keypress self.keyboard.press(keycode) File "/usr/local/lib/python3.10/dist-packages/pynput/keyboard/_base.py", line 392, in press self._handle(resolved, True) File "/usr/local/lib/python3.10/dist-packages/pynput/keyboard/_xorg.py", line 242, in _handle with display_manager(self._display) as dm: File "/usr/lib/python3.10/contextlib.py", line 142, in __exit__ next(self.gen) File "/usr/local/lib/python3.10/dist-packages/pynput/_util/xorg.py", line 78, in display_manager display.sync() File "/usr/local/lib/python3.10/dist-packages/Xlib/display.py", line 182, in sync self.get_pointer_control() File "/usr/local/lib/python3.10/dist-packages/Xlib/display.py", line 833, in get_pointer_control return request.GetPointerControl(display = self.display) File "/usr/local/lib/python3.10/dist-packages/Xlib/protocol/rq.py", line 1368, in __init__ self.reply() File "/usr/local/lib/python3.10/dist-packages/Xlib/protocol/rq.py", line 1380, in reply self._display.send_and_recv(request = self._serial) File "/usr/local/lib/python3.10/dist-packages/Xlib/protocol/display.py", line 612, in send_and_recv gotreq = self.parse_response(request) File "/usr/local/lib/python3.10/dist-packages/Xlib/protocol/display.py", line 719, in parse_response gotreq = self.parse_error_response(request) or gotreq File "/usr/local/lib/python3.10/dist-packages/Xlib/protocol/display.py", line 745, in parse_error_response req = self.get_waiting_request(e.sequence_number) AttributeError: 'BadRRModeError' object has no attribute 'sequence_number'

ehfd commented 12 months ago

Revamping of the Javascript libraries are necessary, especially vuetify and guacamole-keyboard.

andymaier commented 11 months ago

hello guys, is there any news on that topic? I am looking forward for this. I am able to help? regards

danisla commented 11 months ago

I have no near term plans to work on this feature. It sounds like there may be some blocking browser related issues.

If you have time and would like to work on it then I would be happy to review a PR and test.

ehfd commented 5 months ago

Connected to #84

ehfd commented 3 months ago

AttributeError: 'BadRRModeError' object has no attribute 'sequence_number'

This error itself should be fixed in v1.6.0 with #84. AZERTY and QWERTZ might even work.

About supporting arbitrary keyboard symbols, this will take some more time.

ehfd commented 3 months ago

image

@cruizba We're still in progress of porting the .so to ctypes, and we've stumbled on this error where the keycode is mapped outside of accepted bounds. It happens with the .so file method. Do you have any thoughts about this?

From @m1k1o: that could happen if you map too many keysyms that are not mapped to any keycode, and we don't have any more keycodes left. obvious solution is to get number of free keycodes at the beginning and create circular linked list, so that they are overwritten as needed.