Por que o X11 não está aceitando meu evento de mouse virtual?

1

Eu float meu mouse em xinput e segui as instruções aqui tentando injetar evento do mouse .

Estou tentando ler eventos do mouse, alterar o código de evento de REL_Y para REL_WHEEL e de REL_X para REL_HWHEEL e injetar o evento de volta para que eu possa usar o mouse como um 2d roda de rolagem.

Acho que a maioria funcionou porque, quando executo meu programa, vejo event13 ser adicionado a /dev/input . E em dmesg eu obtenho:

input: uinput-sample as /devices/virtual/input/input28

E se eu executar e vtest /dev/input/event13 , obtenho:

[linux-devkit]:/dev/input> sudo evtest event13

Input driver version is 1.0.1
Input device ID: bus 0x3 vendor 0x1234 product 0xfedc version 0x1
Input device name: "uinput-sample"
Supported events:
  Event type 0 (EV_SYN)
  Event type 2 (EV_REL)
    Event code 6 (REL_HWHEEL)
    Event code 8 (REL_WHEEL)
Testing ... (interrupt to exit)
Event: time 1457290441.973961, type 2 (EV_REL), code 6 (REL_HWHEEL), value 1
Event: time 1457290441.973961, -------------- SYN_REPORT ------------
Event: time 1457290441.981947, type 2 (EV_REL), code 6 (REL_HWHEEL), value 4
Event: time 1457290441.981947, -------------- SYN_REPORT ------------
Event: time 1457290441.989947, type 2 (EV_REL), code 6 (REL_HWHEEL), value 12
Event: time 1457290441.989947, type 2 (EV_REL), code 8 (REL_WHEEL), value 3
Event: time 1457290441.989947, -------------- SYN_REPORT ------------
Event: time 1457290441.997981, type 2 (EV_REL), code 6 (REL_HWHEEL), value 15
Event: time 1457290441.997981, type 2 (EV_REL), code 8 (REL_WHEEL), value 5
Event: time 1457290441.997981, -------------- SYN_REPORT ------------
Event: time 1457290442.005927, type 2 (EV_REL), code 6 (REL_HWHEEL), value 18
Event: time 1457290442.005927, type 2 (EV_REL), code 8 (REL_WHEEL), value 5
Event: time 1457290442.005927, -------------- SYN_REPORT ------------
Event: time 1457290442.013904, type 2 (EV_REL), code 6 (REL_HWHEEL), value 23
Event: time 1457290442.013904, type 2 (EV_REL), code 8 (REL_WHEEL), value 9
Event: time 1457290442.013904, -------------- SYN_REPORT ------------

Mas se eu executar xinput list , não vi o dispositivo de entrada virtual. E o Ubuntu também não está respondendo ao evento.

O que eu senti falta?

Preciso criar um dispositivo escravo para ele e anexá-lo em xinput ?

    
por user3528438 06.03.2016 / 20:06

1 resposta

1

De acordo com isso , BTN_LEFT e BTN_RIGHT devem ser definidos ou xinput não aceita dispositivo virtual de uinput como ponteiro escravo.

Depois de fazer:

ret = ioctl(uinputFD, UI_SET_KEYBIT, BTN_LEFT);
ret = ioctl(uinputFD, UI_SET_KEYBIT, BTN_RIGHT);

o dispositivo virtual aparece no xinput e funciona bem.

Portanto, mesmo que o dispositivo virtual implemente apenas um subconjunto da função de um mouse, como apenas duas rodas no meu caso, BTN_LEFT e BTN_RIGHT flags ainda precisam ser definidos.

    
por user3528438 07.03.2016 / 00:53