From: Laurent Vivier <lvivier@redhat.com>
To: Gerd Hoffmann <kraxel@redhat.com>, qemu-devel@nongnu.org
Subject: Re: [Qemu-devel] [PATCH] vnc: add configurable keyboard delay
Date: Mon, 23 May 2016 17:00:30 +0200 [thread overview]
Message-ID: <3ea34048-6e30-95ef-3f18-3a2c42b237e6@redhat.com> (raw)
In-Reply-To: <1464009550-6713-1-git-send-email-kraxel@redhat.com>
On 23/05/2016 15:19, Gerd Hoffmann wrote:
> Limits the rate kbd events from the vnc server are forwarded to the
> guest, so input devices which are typically low-bandwidth can keep
> up even on bulky input.
>
> Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
This patch fixes also a problem with low-bandwith connection between VNC
client and server that can create (for instance) 400 ms delay between
down and up events and thus triggers key auto repeat (kernel autorepeat
delay is generally 250 ms)
With this patch and "-vnc ...,key-delay-ms=200", the problem goes away.
Thanks,
Laurent
> ---
> ui/vnc.c | 13 +++++++++++--
> ui/vnc.h | 1 +
> 2 files changed, 12 insertions(+), 2 deletions(-)
>
> diff --git a/ui/vnc.c b/ui/vnc.c
> index d2ebf1f..ea3b3d4 100644
> --- a/ui/vnc.c
> +++ b/ui/vnc.c
> @@ -1629,6 +1629,7 @@ static void reset_keys(VncState *vs)
> for(i = 0; i < 256; i++) {
> if (vs->modifiers_state[i]) {
> qemu_input_event_send_key_number(vs->vd->dcl.con, i, false);
> + qemu_input_event_send_key_delay(vs->vd->key_delay_ms);
> vs->modifiers_state[i] = 0;
> }
> }
> @@ -1638,9 +1639,9 @@ static void press_key(VncState *vs, int keysym)
> {
> int keycode = keysym2scancode(vs->vd->kbd_layout, keysym) & SCANCODE_KEYMASK;
> qemu_input_event_send_key_number(vs->vd->dcl.con, keycode, true);
> - qemu_input_event_send_key_delay(0);
> + qemu_input_event_send_key_delay(vs->vd->key_delay_ms);
> qemu_input_event_send_key_number(vs->vd->dcl.con, keycode, false);
> - qemu_input_event_send_key_delay(0);
> + qemu_input_event_send_key_delay(vs->vd->key_delay_ms);
> }
>
> static int current_led_state(VncState *vs)
> @@ -1792,6 +1793,7 @@ static void do_key_event(VncState *vs, int down, int keycode, int sym)
>
> if (qemu_console_is_graphic(NULL)) {
> qemu_input_event_send_key_number(vs->vd->dcl.con, keycode, down);
> + qemu_input_event_send_key_delay(vs->vd->key_delay_ms);
> } else {
> bool numlock = vs->modifiers_state[0x45];
> bool control = (vs->modifiers_state[0x1d] ||
> @@ -1913,6 +1915,7 @@ static void vnc_release_modifiers(VncState *vs)
> continue;
> }
> qemu_input_event_send_key_number(vs->vd->dcl.con, keycode, false);
> + qemu_input_event_send_key_delay(vs->vd->key_delay_ms);
> }
> }
>
> @@ -3249,6 +3252,9 @@ static QemuOptsList qemu_vnc_opts = {
> .name = "lock-key-sync",
> .type = QEMU_OPT_BOOL,
> },{
> + .name = "key-delay-ms",
> + .type = QEMU_OPT_NUMBER,
> + },{
> .name = "sasl",
> .type = QEMU_OPT_BOOL,
> },{
> @@ -3486,6 +3492,7 @@ void vnc_display_open(const char *id, Error **errp)
> #endif
> int acl = 0;
> int lock_key_sync = 1;
> + int key_delay_ms;
>
> if (!vs) {
> error_setg(errp, "VNC display not active");
> @@ -3604,6 +3611,7 @@ void vnc_display_open(const char *id, Error **errp)
>
> reverse = qemu_opt_get_bool(opts, "reverse", false);
> lock_key_sync = qemu_opt_get_bool(opts, "lock-key-sync", true);
> + key_delay_ms = qemu_opt_get_number(opts, "key-delay-ms", 1);
> sasl = qemu_opt_get_bool(opts, "sasl", false);
> #ifndef CONFIG_VNC_SASL
> if (sasl) {
> @@ -3735,6 +3743,7 @@ void vnc_display_open(const char *id, Error **errp)
> }
> #endif
> vs->lock_key_sync = lock_key_sync;
> + vs->key_delay_ms = key_delay_ms;
>
> device_id = qemu_opt_get(opts, "display");
> if (device_id) {
> diff --git a/ui/vnc.h b/ui/vnc.h
> index 81a3261..6568bca 100644
> --- a/ui/vnc.h
> +++ b/ui/vnc.h
> @@ -155,6 +155,7 @@ struct VncDisplay
> DisplayChangeListener dcl;
> kbd_layout_t *kbd_layout;
> int lock_key_sync;
> + int key_delay_ms;
> QemuMutex mutex;
>
> QEMUCursor *cursor;
>
next prev parent reply other threads:[~2016-05-23 15:00 UTC|newest]
Thread overview: 5+ messages / expand[flat|nested] mbox.gz Atom feed top
2016-05-23 13:19 [Qemu-devel] [PATCH] vnc: add configurable keyboard delay Gerd Hoffmann
2016-05-23 15:00 ` Laurent Vivier [this message]
2016-05-23 15:12 ` Laurent Vivier
2016-05-25 8:25 ` Gerd Hoffmann
2016-05-30 19:59 ` Alexander Graf
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=3ea34048-6e30-95ef-3f18-3a2c42b237e6@redhat.com \
--to=lvivier@redhat.com \
--cc=kraxel@redhat.com \
--cc=qemu-devel@nongnu.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).