微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

使Xorg识别libevdev虚拟设备

如何解决使Xorg识别libevdev虚拟设备

我一直在尝试使用libevdev创建一个简单的程序来制作一个虚拟设备,该设备将简单地每秒将鼠标在X轴上移动50个点。该程序运行正常,但是Xorg无法识别新创建的虚拟设备。

我想这将是一件微不足道的事,但我不知道是什么。

Xorgs的日志说:

[  5860.310] (II) config/udev: Adding input device test device Mouse (/dev/input/event18)
[  5860.310] (II) No input driver specified,ignoring this device.
[  5860.310] (II) This device may have been added with another device file.

程序:

#include <libevdev/libevdev.h>
#include <libevdev/libevdev-uinput.h>
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <unistd.h>

static void check(int i) {
    if (i < 0) {        
        printf("%s\n",strerror(-i));
        exit(1);
    }
}

int main() {
    struct libevdev* evdev = libevdev_new();
    libevdev_set_name(evdev,"test device Mouse");
    libevdev_set_id_vendor(evdev,0x1);
    libevdev_set_id_product(evdev,0x1);
    libevdev_set_id_version(evdev,0x1);
    libevdev_set_id_bustype(evdev,BUS_USB);

    check(libevdev_enable_event_type(evdev,EV_REL));
    check(libevdev_enable_event_code(evdev,EV_REL,REL_X,NULL));
    check(libevdev_enable_event_code(evdev,REL_Y,EV_SYN,SYN_REPORT,NULL));

    struct libevdev_uinput* uinput;
    check(libevdev_uinput_create_from_device(evdev,LIBEVDEV_UINPUT_OPEN_MANAGED,&uinput));

    for (int i = 0; i < 1000; i++) {
        check(libevdev_uinput_write_event(uinput,50));
        check(libevdev_uinput_write_event(uinput,0));

        sleep(1);
    }
}

我在做什么错了?

解决方法

问题是必须启用鼠标按钮才能使鼠标移动。

添加以下行可解决此问题:

from tkinter import*
from math import *
import operator

root = Tk()
root.title("Window")
root.geometry("800x600")

labelframe1 = LabelFrame(root,text="Table for operations")
labelframe1.pack()
############################################################################
# ----------------  VARIABLE DECLARATION  ------------------------------
############################################################################
cantidad = []
valor_unitario = []
total_parcial = []
suministros = []
mano_obra = []

###################################################################################
# =============================   FUNCTION  ====================================
###################################################################################


def GuardarDatos():
    for key in entries_suministros:
        suministros.append(entries_suministros[key].get())
        print("suministros: ",suministros)

    print("=====================")

    for key in entries_mo:
        mano_obra.append(entries_mo[key].get())
        print("mano de obra: ",mano_obra)
    print("=====================")

    print("==== unitarios ========")
    valor_unitario = list(map(operator.add,suministros,mano_obra))

    print("valor unitario: ",valor_unitario)

    print("==== totales parciales ======")
    total_parcial = list(map(operator.mul,valor_unitario,cantidad))

    print("totales parciales:",total_parcial)


########################################################################################
# ANOTHER OPTION TO MAKE MATH OPERATION --- IT DOES NOT WORKED
#######################################################################################
    # def add(suministros,mano_obra):
    # for x in range(0,len(suministros)):
    #    loco = (suministros[x]) + (mano_obra[x])
    #   valor_unitario.append(loco)  # Suma Strings
    # Letrero_unit.config(text=valor_unitario)
    #   print(valor_unitario[x])
    #    return valor_unitario  # Con el returno me pone 1 en posicion "[0]"
####################################################################################
# ======================== TABLE STRUCTURE ===================================
####################################################################################
# COLUMN 1: CANTIDAD =======================
entries_cant = {}
for row0 in range(0,3):
    datosEntry0 = Label(labelframe1,text="cantidad")  # Label
    datosEntry0.grid(row=0,column=0,sticky="nsew")  # Label
    datosEntry0 = Entry(labelframe1)  # Entry
    datosEntry0.grid(row=row0,column=0)  # Entry
    entries_cant["Entrybox{0}".format(row0)] = datosEntry0  # Entry


# COLUMN 2: UNITARIOS =================
for row1 in range(3):
    datosEntry1 = Label(labelframe1,text="Unitario")
    datosEntry1.grid(row=0,column=1,sticky="nsew")
    datosEntry1 = Entry(labelframe1)
    datosEntry1.grid(row=row1,column=1)


# COLUMN 3: TOTALES ===================
for row2 in range(3):
    datosEntry2 = Label(labelframe1,text="Valor Total")
    datosEntry2.grid(row=0,column=2,sticky="nsew")
    datosEntry2 = Entry(labelframe1)
    datosEntry2.grid(row=row2,column=2)
    # total_parcial.append(datosEntry2)


# COLUMN 4: SUMINISTROS ===================
entries_suministros = {}
for row3 in range(3):
    datosEntry3 = Label(labelframe1,text="Suministros")
    datosEntry3.grid(row=0,column=3,sticky="nsew")
    datosEntry3 = Entry(labelframe1)
    datosEntry3.grid(row=row3,column=3)
    entries_suministros["Entrybox{0}".format(row3)] = datosEntry3  # Entry

# COLUMN 5: MANO DE OBRA ===================
entries_mo = {}
for row4 in range(3):
    datosEntry4 = Label(labelframe1,text="Mano de Obra")
    datosEntry4.grid(row=0,column=4,sticky="nsew")
    datosEntry4 = Entry(labelframe1)
    datosEntry4.grid(row=row4,column=4)
    entries_mo["Entrybox{0}".format(row4)] = datosEntry4  # Entry

###################################################################################
############ =============  BUTTON  ================== ##########################
# BUTTON 1:  =============================
calcular1 = Button(root,text="Send for Operations",command=GuardarDatos)
calcular1.pack()


root.mainloop()






版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。