如何解决使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 举报,一经查实,本站将立刻删除。