Пример #1
0
    def __init__(self, device=None):
        """
        device: /dev/input/eventX, default: all keyboard.
        """

        self._hotkey_list = []
        self._hotkey_seq_dict = {}

        self.devices = []

        mouses, kbms = libkbm.getkbm()

        if len(kbms) <= 0:
            raise HotKeyError("没有发现至少一个键盘。")

        if device is None:
            self.kbms = kbms
        else:
            if device not in kbms:
                raise ValueError(f"{device} 不是键盘设备。")
            else:
                self.kbms = device

        self.LISTEN = 1
        self.REPLACE = 2
        self._mode = self.LISTEN

        # 把device注册到selectors
        self._selector = DefaultSelector()
        self._fileobjs = []
        for device in self.kbms:
            fd = open(device, "rb")
            devfd = Device(fd)
            self._selector.register(devfd.fd, EVENT_READ, devfd)
            self._fileobjs.append(fd)
Пример #2
0
    def __init__(self):
        self.device = Device()
        self.device.name = "Virtual Keyboard Mouse"
        self.__add_mouse_keyboard_events()
        self.uinput = self.device.create_uinput_device()

        self._delay = 0.01
Пример #3
0
    def create_device(self):
        self.device = Device()
        self.device.name = "Virtual Keyboard Mouse"
        self.__add_mouse_keyboard_events()
        self.uinput = self.device.create_uinput_device()

        # 在创建虚拟输入设备后等一秒,马上使用设备,
        # 会导致事件不生效。
        sleep(1)
Пример #4
0
def get_device(device_path: str) -> Device:
    """Safely get an evdev device handle."""

    fd = open(device_path, 'rb')
    evdev = Device(fd)
    try:
        yield evdev
    finally:
        fd.close()
Пример #5
0
def registers(kbms):
    selector = selectors.DefaultSelector()

    for kbm in kbms:
        print("加入:", kbm)
        fd = os.open(kbm, os.O_NONBLOCK | os.O_RDONLY)
        fdobj = open(fd, "rb")
        #fcntl.fcntl(fd, fcntl.F_SETFL, os.O_NONBLOCK)
        device = Device(fdobj)

        selector.register(device.fd, selectors.EVENT_READ, data=device)

    return selector
Пример #6
0
def getkbm(baseinput="/dev/input"):
    mouses = []
    keyboards = []

    for dev in os.listdir(baseinput):

        devpath = path.join(baseinput, dev)
        if not path.isdir(devpath):
            devfd = open(devpath, 'rb')
        else:
            continue

        try:
            device = Device(devfd)
        except (OSError, Exception) as e:
            logger.info("打开 {} 异常:{}".format(dev, e))
            continue

        if device.name == "Virtual Keyboard Mouse":
            continue

        #if device.has(EV_REL.REL_X) device.has(EV_REL.REL_Y and device.has(EV_KEY.BTN_LEFT) and device.has(EV_KEY.BTN_RIGHT) and device.has(EV_KEY.BTN_MIDDLE) and device.has(EV_KEY.WHEEL):
        MOUSE = [
            EV_REL.REL_X, EV_REL.REL_Y, EV_REL.REL_WHEEL, EV_KEY.BTN_LEFT,
            EV_KEY.BTN_RIGHT, EV_KEY.BTN_MIDDLE
        ]

        KEYBOARD = [
            EV_KEY.KEY_ESC, EV_KEY.KEY_SPACE, EV_KEY.KEY_BACKSPACE,
            EV_KEY.KEY_0, EV_KEY.KEY_A, EV_KEY.KEY_Z, EV_KEY.KEY_9,
            EV_KEY.KEY_F2
        ]

        if all(map(device.has, MOUSE)):
            logger.info("应该是鼠标了: {} 路径:{}".format(device.name, device.fd))
            mouses.append(devpath)

        elif all(map(device.has, KEYBOARD)):
            logger.info("应该是键盘了: {} 路径:{}".format(device.name, device.fd))
            keyboards.append(devpath)

        else:
            logger.info("其他输入设备:", device.name, "路径:", device.fd)

        devfd.close()

    return (mouses, keyboards)
Пример #7
0
def registers(kbms):
    selector = selectors.DefaultSelector()

    for kbm in kbms:
        print("加入:", kbm)
        fd = os.open(kbm, os.O_NONBLOCK | os.O_RDONLY)
        #fd = os.open(kbm, os.O_NONBLOCK | os.O_RDWR)
        fdobj = open(fd, "rb")
        device = Device(fdobj)

        if MODE == REPLACE:
            #uinput.grab()
            pass
        elif MODE == LISTEN:
            pass

        selector.register(device.fd, selectors.EVENT_READ, data=device)

    return selector
Пример #8
0
            if keyboard_detected != 2:
                print("Can't find keyboard, code " + str(keyboard_detected))
            if touchpad_detected != 2:
                print("Can't find touchpad, code " + str(touchpad_detected))
            if touchpad_detected == 2 and not device_id.isnumeric():
                print("Can't find device id")
            sys.exit(1)
    else:
        break

    sleep(0.1)

# Start monitoring the touchpad #
fd_t = open('/dev/input/event' + str(touchpad), 'rb')
fcntl(fd_t, F_SETFL, O_NONBLOCK)
d_t = Device(fd_t)
# Retrieve touchpad dimensions #
ai = d_t.absinfo[EV_ABS.ABS_X]
(minx, maxx) = (ai.minimum, ai.maximum)
ai = d_t.absinfo[EV_ABS.ABS_Y]
(miny, maxy) = (ai.minimum, ai.maximum)

# Start monitoring the keyboard (numlock) #
fd_k = open('/dev/input/event' + str(keyboard), 'rb')
fcntl(fd_k, F_SETFL, O_NONBLOCK)
d_k = Device(fd_k)

# Create a new keyboard device to send numpad events #
dev = Device()
dev.name = "Asus Touchpad/Numpad"
dev.enable(EV_KEY.KEY_KP1)