Hello,

The KVM switch produces no output when switched away on the console.
Waving it around while focused produces the expected events, but it
stays silent while switched away. For what it's worth, the device is
this one:
http://www.newegg.com/Product/Product.aspx?Item=N82E16817182157&cm_re=rkv-2uc-_-17-182-157-_-Product

I'm going to try a longer capture while switched away to see if it's
time based.

Thanks,


On Mon, Feb 16, 2015, at 05:53 PM, Matthieu Herrb wrote:
> On Sun, Feb 15, 2015 at 06:28:01PM -0500, Aaron Fineman wrote:
> > >Synopsis: USB KVM switch under Xorg spams read IO errors on detach 
> > >(filling up /var)
> > >Category: user
> > >Environment:
> >         System      : OpenBSD 5.7
> >         Details     : OpenBSD 5.7-beta (GENERIC.MP) #854: Fri Feb 13
> >         12:19:00 MST 2015
> >                          
> > [email protected]:/usr/src/sys/arch/amd64/compile/GENERIC.MP
> > 
> >         Architecture: OpenBSD.amd64
> >         Machine     : amd64
> > >Description:
> > Works under 5.6. Can reproduce on snaps from 8-feb and 15-feb. When
> > using a USB KVM switch under Xorg, toggling the switch (detach) spams
> > read IO errors to /var/log/Xorg.0.log until /var is full. I only notice
> > these for the mouse device, not the keyboard.
> > 
> > [   327.467] (EE) ws: /dev/wsmouse1: read error Input/output error
> >
> 
> Hi,
> 
> I agree that filling /var with log spam is not nice. However the core
> of the problem is that when the KVM is switched to another input
> device it produces something that lead to I/O errors on the devices.
> There is no spam for the keyboard either because it's not generating
> those I/O errors or because they are not logged by the
> xf68-input-keyboard driver if they happend.
> 
> I could just patch xf86-input-ws to silently ignore I/O errors, but it
> would not be particularly nice.
> 
> Can you run the test program below in console mode, and do a KVM
> switch away and then back while the program is running. Capture its
> stdout (using '>' or tee(1)) and send us the result.
> 
> A good KVM should just generate no events while switched away.
> 
> /* wsmouse events dump */
> #include <sys/time.h>
> #include <dev/wscons/wsconsio.h>
> #include <errno.h>
> #include <fcntl.h>
> #include <stdio.h>
> #include <stdlib.h>
> #include <string.h>
> #include <unistd.h>
> 
> int
> main(int argc, char *argv[])
> {
>       int fd, n;
>       char     *dev;
>       struct wscons_event event;
>       
>       if (argc == 2) {
>               dev = argv[1];  
>       } else {
>               dev = "/dev/wsmouse";
>       }
>       
>       fd = open(dev, O_RDONLY);
>       if (fd < 0) {
>               perror("open");
>               exit(1);
>       } 
>       
>       while (1) {
>               n = read(fd, &event, sizeof(struct wscons_event));
>               if (n <= 0) {
>                       printf("read: %s\n", strerror(errno));
>               }
>               
>               switch (event.type) {
>               case WSCONS_EVENT_MOUSE_UP:
>                       printf("MOUSE_UP: 0x%x\n", event.value);
>                       break;
>               case WSCONS_EVENT_MOUSE_DOWN:
>                       printf("MOUSE_DOWN: 0x%x\n", event.value);
>                       break;
>               case WSCONS_EVENT_MOUSE_DELTA_X:
>                       printf("MOUSE_DELTA_X: %d\n", event.value);
>                       break;
>               case WSCONS_EVENT_MOUSE_DELTA_Y:
>                       printf("MOUSE_DELTA_Y: %d\n", event.value);
>                       break;
> #ifdef WSCONS_EVENT_MOUSE_DELTA_Z
>               case WSCONS_EVENT_MOUSE_DELTA_Z:
>                       printf("MOUSE_DELTA_Z: %d\n", event.value);
>                       break;
> #endif
> #ifdef WSCONS_EVENT_MOUSE_ABSOLUTE_Z
>               case WSCONS_EVENT_MOUSE_ABSOLUTE_Z:
>                       printf("MOUSE_ABSOLUTE_Z: %d\n", event.value);
>                       break;
> #endif
>               case WSCONS_EVENT_MOUSE_ABSOLUTE_X:
>                       printf("MOUSE_ABSOLUTE_X: %d\n", event.value);
>                       break;
>               case WSCONS_EVENT_MOUSE_ABSOLUTE_Y:
>                       printf("MOUSE_ABSOLUTE_Y: %d\n", event.value);
>                       break;
>               case WSCONS_EVENT_SYNC:
>                       printf("SYNC\n");
>                       break;
>               default:
>                       printf("unknown event type 0x%x, value 0x%x\n",
>                           event.type, event.value);
>               }
>       }
> }
> 
> -- 
> Matthieu Herrb

Reply via email to